Вычисление детерминанта матрицы, ошибка в коде - 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){ //бесполезная функция,которая не вызывается ... }
Объяснение кода листинга программы
- #include
Включает в программу файл стандартного ввода/вывода, что позволяет использовать функции для работы с консолью. - #include
Включает в программу файл математических функций, что позволяет использовать функции для работы с числами. - #include
Включает в программу файл стандартных функций, что позволяет использовать функции для работы с памятью. - int determinant(int m, int n);** Определяет функцию для вычисления определителя матрицы.
- int main() Определяет основную функцию программы, где происходит ввод и вывод данных.
- int n, i, j, j1, j2; Объявляет переменные для цикла и временных расчетов.
- int det = 0; Инициализирует переменную для хранения определителя.
- int m[1000][1000]; Объявляет массив для хранения матрицы.
- *printf(`Введите размерность матрицы nn\n`);** Выводит сообщение для ввода размера матрицы.
- scanf(
%d
, &n); Считывает с клавиатуры размер матрицы. - printf(
Введите матрицу, для вычисления детерминанта:\n
); Выводит сообщение для ввода матрицы. - for(i = 0; i < n; i++){ Организует цикл для прохода по строкам матрицы.
- for(j = 0; j < n; j++){ Организует цикл для прохода по столбцам матрицы.
- scanf(
%d \n
, &m[i][j]); Считывает с клавиатуры значение элемента матрицы. - determinant(m, n); Вызывает функцию для вычисления определителя.
- printf(
Детерминант матрицы: %d\n
, det); Выводит результат вычисления определителя. - ... Код функции для вычисления определителя матрицы.
- ... Код функции для ввода и вывода данных.
- ... Код функций для работы с памятью.
- ... Код функций для работы с числами.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д