Нахождение определителя матрицы - 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));
}

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

  1. Включаются необходимые заголовочные файлы
  2. Объявляются необходимые переменные:
    • s - размерность матрицы
    • n - количество строк матрицы, для которой необходимо вычислить определитель
    • a - матрица, для которой необходимо вычислить определитель
  3. Выделяется память под матрицу a
  4. С помощью функции scanf вводятся размеры матрицы и её значения
  5. Вычисляется определитель матрицы с помощью функции det
  6. Выводится результат вычисления определителя
  7. Функция 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
  8. Функция matr создаёт новую матрицу размером n-1 на основе исходной матрицы a с помощью двух вложенных циклов:
    • во внутреннем цикле выделяется память под строку новой матрицы
    • во внешнем цикле происходит обход строк исходной матрицы с помощью двух вложенных циклов:
      • если элемент находится на позиции x, то индекс k уменьшается на единицу и продолжается обход следующего элемента
      • иначе, элемент копируется в новую матрицу с учётом индекса k
  9. В конце функции возвращается адрес новой матрицы

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


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

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

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