Вычисление матричного выражения с использованием подпрограмм - C (СИ)
Формулировка задачи:
Нужно написать программу вычисления матричного выражения с использованием подпрограмм..
Суть такова.. Есть две матрицы, их вводим в программу, они должны посчитаться и данные соответственно, должны подставиться в формулу для вычисления(C=2*(A+0.5B)+4B^2).
"Изюминка" задания в том,что т.к вводиться сразу две матриц, то вычесление определителя нужно ввести в ПОДПРОГРАММУ.
Помогите написать данный код
Не могу додумать как его нормально сделать..
Есть повторяющиеся действия, которые целесообразно организовать в виде подпрограмм:
1. Ввода матрицы и ее размерности(входные параметры - имя матрицы, результат – матрица и размерности, в самом общем случае-две) – функция read_m;
Решение задачи: «Вычисление матричного выражения с использованием подпрограмм»
textual
Листинг программы
//determinant razlozheniem po 1-oj stroke
float det(float **p, int n)
{
int i,h,x,y;
if(n==1)
return **p;
float d=0;
for(i=0; i<n; ++i)
{
float **add = new float*[n-1];
for(h=0; h<n-1; ++h)
add[h] = new float[n-1];
for(y=1; y<n; y++)
for(x=0; x<n; x++)
{
if(x==i) continue;
if(x<i)
add[x][y-1] = p[x][y];
else
add[x-1][y-1] = p[x][y];
}
if(i%2) p[i][0] = -p[i][0];
d += p[i][0]*det(add, n-1);
for(h=0; h<n-1; ++h)
delete[] add[h];
delete[] add;
}
return d;
}
Объяснение кода листинга программы
- В функции определены три переменные типа int: i, h, x, y. Значения этих переменных будут использоваться в цикле.
- Если размер матрицы равен 1, то функция возвращает значение диагональной ячейки.
- Задается переменная d типа float и инициализируется нулем. Она будет использоваться для хранения значения определителя.
- В цикле перебираются все строки матрицы от 0 до n-1.
- Для каждой строки создается новый массив add типа float*[n-1].
- Внутренний цикл перебирает все столбцы матрицы от 1 до n-1.
- Если значение x равно i, то внутренний цикл пропускает итерацию.
- Если значение x меньше i, то элементы массива add заполняются значениями соответствующих элементов матрицы p.
- Если значение x больше или равно i, то элементы массива add заполняются значениями элементов матрицы p, смещенных на единицу влево и вниз относительно текущего элемента.
- Если значение i является четным числом, то значение p[i][0] умножается на -1.
- Значение d увеличивается на произведение значения p[i][0] и определителя матрицы add, полученного на предыдущем шаге.
- После завершения внутреннего цикла для текущей строки, выделенная память удаляется.
- По завершении внешнего цикла, функция возвращает значение d.