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

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

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

Всем привет. Цель ясна из шапки темы. Программа вроде бы работает верно, но почему-то не выводит искомое значение. Собственно вот код:
Листинг программы
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4. int determinant(int **m, int n);
  5. int main()
  6. {
  7. int n, i, j, j1, j2;
  8. int det = 0;
  9. int m[1000][1000];
  10. printf("Введите размерность матрицы n*n\n");
  11. scanf("%d", &n);
  12. printf("Введите матрицу, для вычисления детерминанта:\n");
  13. for(i = 0; i < n; i++){
  14. for(j = 0; j < n; j++){
  15. scanf("%d \n", &m[i][j]);
  16. }
  17. }
  18. int determinant(int **m, int n){
  19. int **a = NULL;
  20. if(n == 1)
  21. det = m[0][0];
  22. else if(n == 2){
  23. det = m[0][0]*m[1][1] - m[1][0]*m[0][1];
  24. }
  25. else if(n == 3){
  26. 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];
  27. }
  28. else {
  29. for(j1 = 0; j1 < n; j1++){
  30. a = malloc((n - 1)*sizeof(int *));
  31. for(i = 0; i < n; i++)
  32. a[i] = malloc((n - 1)*sizeof(int));
  33. for(i = 1; i < n; i++) {
  34. j2 = 0;
  35. for(j = 0; j < n; j++){
  36. if(j == j1)
  37. continue;
  38. a[i-1][j2] = m[i][j];
  39. j2++;
  40. }
  41. }
  42. det += pow(-1, j1+2)*a[0][j1]*determinant(a,n-1);
  43. for(i = 0;i < n-1; i++)
  44. free(a[i]);
  45. free(a);
  46. }
  47. }
  48. printf("Детерминант = %d", det);
  49. return (det);
  50. }
  51. return 0;
  52. }

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

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

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут