Вычисление матричного выражения с использованием подпрограмм - 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;
}

Объяснение кода листинга программы

  1. В функции определены три переменные типа int: i, h, x, y. Значения этих переменных будут использоваться в цикле.
  2. Если размер матрицы равен 1, то функция возвращает значение диагональной ячейки.
  3. Задается переменная d типа float и инициализируется нулем. Она будет использоваться для хранения значения определителя.
  4. В цикле перебираются все строки матрицы от 0 до n-1.
  5. Для каждой строки создается новый массив add типа float*[n-1].
  6. Внутренний цикл перебирает все столбцы матрицы от 1 до n-1.
  7. Если значение x равно i, то внутренний цикл пропускает итерацию.
  8. Если значение x меньше i, то элементы массива add заполняются значениями соответствующих элементов матрицы p.
  9. Если значение x больше или равно i, то элементы массива add заполняются значениями элементов матрицы p, смещенных на единицу влево и вниз относительно текущего элемента.
  10. Если значение i является четным числом, то значение p[i][0] умножается на -1.
  11. Значение d увеличивается на произведение значения p[i][0] и определителя матрицы add, полученного на предыдущем шаге.
  12. После завершения внутреннего цикла для текущей строки, выделенная память удаляется.
  13. По завершении внешнего цикла, функция возвращает значение d.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы