Вычисление детерминанта матрицы, ошибка в коде - C (СИ)

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

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

Всем привет. Цель ясна из шапки темы. Программа вроде бы работает верно, но почему-то не выводит искомое значение. Собственно вот код:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int determinant(int **m, int n);
 
int main()
    {
        int n, i, j, j1, j2;
        int det = 0;
        int m[1000][1000]; 
        printf("Введите размерность матрицы n*n\n");
        scanf("%d", &n);
        printf("Введите матрицу, для вычисления детерминанта:\n");
        for(i = 0; i < n; i++){
            for(j = 0; j < n; j++){
        scanf("%d \n", &m[i][j]);
    }
}
int determinant(int **m, int n){
    int **a = NULL;
    if(n == 1)
    det = m[0][0];
    else if(n == 2){
        det = m[0][0]*m[1][1] - m[1][0]*m[0][1];
    }
    else if(n == 3){
        det = m[0][0]*m[1][1]*m[2][2]+m[1][0]*m[0][2]*m[2][1]+m[2][0]*m[0][1]*m[1][2] - m[0][2]*m[1][1]*m[2][0]-m[0][0]*m[1][2]*m[2][1]-m[2][2]*m[0][1]*m[1][0];
    }
    else {
        for(j1 = 0; j1 < n; j1++){
            a = malloc((n - 1)*sizeof(int *));
            for(i = 0; i < n; i++)
                a[i] = malloc((n - 1)*sizeof(int));
            for(i = 1; i < n; i++) {
                j2 = 0;
                for(j = 0; j < n; j++){
                    if(j == j1)
                        continue;
                    a[i-1][j2] = m[i][j];
                    j2++;
                }
            }
            det += pow(-1, j1+2)*a[0][j1]*determinant(a,n-1);
            for(i = 0;i < n-1; i++)
            free(a[i]);
            free(a);
         }  
    }
    printf("Детерминант = %d", det);
    return (det);
 }
 return 0;
}

Решение задачи: «Вычисление детерминанта матрицы, ошибка в коде»

textual
Листинг программы
#include <stdio.h>
#include <math.h>
#include <stdlib.h>                                  //ля-ля библиотеки..
int determinant(int **m, int n);                 //прототип ф-ции determinant
 
int main()
    {
        int n, i, j, j1, j2;                //определение переменных
        int det = 0;                      //инициализация переменной
        int m[1000][1000];            //псевдодинамический массив 1000х1000
        printf("Введите размерность матрицы n*n\n");//задание размера массива
        scanf("%d", &n);               //считывание с клавы,запись в n
        printf("Введите матрицу, для вычисления детерминанта:\n");//ла-ла
        for(i = 0; i < n; i++){         //прокрутка строк
            for(j = 0; j < n; j++){//прокрутка столбцов
        scanf("%d \n", &m[i][j]);     //считывание с клавы,запись в соотв элемент массива
    }                                               //конец программы
}
int determinant(int **m, int n){                 //бесполезная функция,которая не вызывается
... }

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

  1. #include Включает в программу файл стандартного ввода/вывода, что позволяет использовать функции для работы с консолью.
  2. #include Включает в программу файл математических функций, что позволяет использовать функции для работы с числами.
  3. #include Включает в программу файл стандартных функций, что позволяет использовать функции для работы с памятью.
  4. int determinant(int m, int n);** Определяет функцию для вычисления определителя матрицы.
  5. int main() Определяет основную функцию программы, где происходит ввод и вывод данных.
  6. int n, i, j, j1, j2; Объявляет переменные для цикла и временных расчетов.
  7. int det = 0; Инициализирует переменную для хранения определителя.
  8. int m[1000][1000]; Объявляет массив для хранения матрицы.
  9. *printf(`Введите размерность матрицы nn\n`);** Выводит сообщение для ввода размера матрицы.
  10. scanf(%d, &n); Считывает с клавиатуры размер матрицы.
  11. printf(Введите матрицу, для вычисления детерминанта:\n); Выводит сообщение для ввода матрицы.
  12. for(i = 0; i < n; i++){ Организует цикл для прохода по строкам матрицы.
  13. for(j = 0; j < n; j++){ Организует цикл для прохода по столбцам матрицы.
  14. scanf(%d \n, &m[i][j]); Считывает с клавиатуры значение элемента матрицы.
  15. determinant(m, n); Вызывает функцию для вычисления определителя.
  16. printf(Детерминант матрицы: %d\n, det); Выводит результат вычисления определителя.
  17. ... Код функции для вычисления определителя матрицы.
  18. ... Код функции для ввода и вывода данных.
  19. ... Код функций для работы с памятью.
  20. ... Код функций для работы с числами.

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


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

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

13   голосов , оценка 3.923 из 5