Вычисление детерминанта матрицы, ошибка в коде - 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); Выводит результат вычисления определителя. - ... Код функции для вычисления определителя матрицы.
- ... Код функции для ввода и вывода данных.
- ... Код функций для работы с памятью.
- ... Код функций для работы с числами.