Посчитать определитель заданной матрицы, 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); } }
Объяснение кода листинга программы
- Объявлены массив a[20][20] для хранения входных данных и переменная m для хранения количества строк матрицы.
- В функции main() происходит запрос на ввод количества строк матрицы и заполнение матрицы a[20][20] с помощью функции scanf().
- Далее с помощью цикла for производится вычисление определителя матрицы a[20][20] с помощью функции determinant() и вывод результата на экран.
- В функции determinant() происходит вычисление определителя для матрицы размером от x до 2.
- Для вычисления определителя используется рекурсивный подход, при котором для каждого элемента матрицы вычисляется определитель для меньшей матрицы размером x-1.
- Для хранения результата вычисления определителя для меньших матриц используется массив c[j].
- В конце функции determinant() происходит возврат значения определителя d.
- В функции main() результат вычисления определителя выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д