Посчитать определитель заданной матрицы, m ≤ 20 - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Определитель

Посчитать определитель заданной матрицы A. _________________________________________________________________________

На входе

В первой строке задано число m, количество строк и столбцов в матрице A, 0 < m ≤ 20. Следующие m строк содержат m целых чисел - элементов матрицы A.
_________________________________________________________________________

На выходе

Значение определителя
_________________________________________________________________________

Пример

На входе

2 1 2 3 4

На выходе

-2

Решение задачи: «Посчитать определитель заданной матрицы, m ≤ 20»

textual
Листинг программы
#include<conio.h>
#include<stdio.h>
 
int a[20][20],m;
int determinant(int f[20][20], int a);
int main(void)
{
int i,j;  
scanf("%i", &m);  
for (i = 1; i <= m; i++)
{
    for (j = 1; j <= m; j++)  
    {
        //printf("a[%d][%d] = ", i, j);  
        scanf("%d", &a[i][j]);
    }
}
for(i = m; i <= m; i++)
 
printf("%i ", determinant (a, m));
_getch();
}
 
int determinant(int f[20][20], int x) 
{
    int pr, c[20], d = 0, b[20][20], j, p, q, t;
    if (x == 2)  
    {
        d = 0;
        d = (f[1][1] * f[2][2]) - (f[1][2] * f[2][1]);
        return (d);
    }
    else
    {
        for (j = 1; j <= x; j++)
    { 
        int r = 1, s = 1;
        for (p = 1; p <= x; p++)
        {
            for (q = 1; q <= x; q++)
            {
                if (p != 1 && q != j)
                {          
                    b[r][s]=f[p][q];
                    s++;
                    if (s > x - 1)
                    {
                        r++;
                        s = 1;               
                    }
                }
            }
        }
        for (t = 1, pr = 1; t <= (1 + j); t++)
            pr = (-1) * pr;
        c[j] = pr * determinant(b, x - 1);
    }
        for (j = 1, d = 0; j <= x; j++)
        {
            d = d + (f[1][j] * c[j]);
        }
return (d);
   
}
}

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

  1. Объявлены массив a[20][20] для хранения входных данных и переменная m для хранения количества строк матрицы.
  2. В функции main() происходит запрос на ввод количества строк матрицы и заполнение матрицы a[20][20] с помощью функции scanf().
  3. Далее с помощью цикла for производится вычисление определителя матрицы a[20][20] с помощью функции determinant() и вывод результата на экран.
  4. В функции determinant() происходит вычисление определителя для матрицы размером от x до 2.
  5. Для вычисления определителя используется рекурсивный подход, при котором для каждого элемента матрицы вычисляется определитель для меньшей матрицы размером x-1.
  6. Для хранения результата вычисления определителя для меньших матриц используется массив c[j].
  7. В конце функции determinant() происходит возврат значения определителя d.
  8. В функции main() результат вычисления определителя выводится на экран.

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


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

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

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