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