Нахождение определителя матрицы - C (СИ)
Формулировка задачи:
Ребят помогите с программой
Надо написать программу для нахождения определителя матрицы матрица
Решение задачи: «Нахождение определителя матрицы»
textual
Листинг программы
#include <stdio.h> #include <malloc.h> const int s = 10; int ** matr(int ** a, int n, int x){ int ** res = (int **)malloc((n - 1) * sizeof(int *)); for (int i = 0; i < n - 1; ++i) res[i] = (int *)malloc((n - 1) * sizeof(int)); for (int i = 1; i < n; ++i) for (int j = 0, k = 0; j < n; ++j, ++k){ if (j == x){ --k; continue; } res[i - 1][k] = a[i][j]; } return res; } int det(int ** a, int n){ if (n == 1) return a[0][0]; if (n == 2) return (a[1][1] * a[0][0]) - (a[0][1] * a[1][0]); int ans = 0, sig = 1; for (int i = 0; i < n; ++i){ ans += (sig * a[0][i] * det(matr(a, n, i),n - 1)); sig *= -1; } return ans; } int main(){ int ** a = (int **)malloc(s * sizeof(int *)); for (int i = 0; i < s; ++i) a[i] = (int *)malloc(s * sizeof(int)); int n; scanf("%d",&n); for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) scanf("%d",&a[i][j]); printf("%d\n",det(a, n)); }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Объявляются необходимые переменные:
s
- размерность матрицыn
- количество строк матрицы, для которой необходимо вычислить определительa
- матрица, для которой необходимо вычислить определитель
- Выделяется память под матрицу
a
- С помощью функции
scanf
вводятся размеры матрицы и её значения - Вычисляется определитель матрицы с помощью функции
det
- Выводится результат вычисления определителя
- Функция
det
вычисляет определитель матрицы размеромn
по формуле:- если
n
равно 1, то возвращается значение элемента главной диагоналиa[0][0]
- если
n
равно 2, то возвращается значение элемента под углом главной диагоналиa[1][1] * a[0][0] - a[0][1] * a[1][0]
- иначе, переменная
ans
инициализируется нулём, а переменнаяsig
инициализируется единицей - затем происходит обход матрицы с помощью двух вложенных циклов:
- во внутреннем цикле вычисляется определитель матрицы размером
n-1
с помощью рекурсивного вызова функцииdet
и вычитается изans
с учётом знакаsig
- во внешнем цикле изменяется знак
sig
на противоположный
- во внутреннем цикле вычисляется определитель матрицы размером
- в конце функции возвращается значение переменной
ans
- если
- Функция
matr
создаёт новую матрицу размеромn-1
на основе исходной матрицыa
с помощью двух вложенных циклов:- во внутреннем цикле выделяется память под строку новой матрицы
- во внешнем цикле происходит обход строк исходной матрицы с помощью двух вложенных циклов:
- если элемент находится на позиции
x
, то индексk
уменьшается на единицу и продолжается обход следующего элемента - иначе, элемент копируется в новую матрицу с учётом индекса
k
- если элемент находится на позиции
- В конце функции возвращается адрес новой матрицы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д