fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void rec(double **A, double **p, int i, int j, int m) {
  5. int ki, kj, di, dj;
  6. di = 0;
  7. for (ki = 0; ki<m - 1; ki++)
  8. {
  9. if (ki == i)
  10. di = 1;
  11. dj = 0;
  12. for (kj = 0; kj<m - 1; kj++)
  13. {
  14. if (kj == j)
  15. dj = 1;
  16. p[ki][kj] = A[ki + di][kj + dj];
  17. }
  18. }
  19. for (ki = 0; ki < m - 1; ki++)
  20. {
  21. for (kj = 0; kj < m - 1; kj++)
  22. cout << p[ki][kj] << " ";
  23. cout << endl;
  24. }
  25. }
  26.  
  27. int det(double **A, int m) {
  28. int i, j, d, k, n;
  29. double **p = new double*[m];
  30. for (i = 0; i<m; i++)
  31. p[i] = new double[m];
  32. j = 0; d = 0;
  33. k = 1;
  34. n = m - 1;
  35. if (m<1) cout << "Определитель вычислить невозможно!";
  36. if (m == 1)
  37. {
  38. d = A[0][0];
  39. return(d);
  40. }
  41. if (m == 2)
  42. {
  43. d = A[0][0] * A[1][1] - (A[1][0] * A[0][1]);
  44. return(d);
  45. }
  46. if (m>2)
  47. {
  48. for (i = 0; i<m; i++)
  49. {
  50. rec(A, p, i, 0, m);
  51. d += k * A[i][0] * det(p, n);
  52. k = -k;
  53. }
  54. }
  55. return(d);
  56. }
  57.  
  58.  
  59.  
  60. int main()
  61. {
  62. setlocale(LC_ALL, "Russian");
  63. int m, i, j, d;
  64. cout << "Введите размерность квадратной матрицы: ";
  65. cin >> m;
  66. cout << "Введите матрицу размерностью " << m << "x" << m << endl;
  67. double **A = new double*[m];
  68. for (i = 0; i<m; i++)
  69. {
  70. A[i] = new double[m];
  71. for (j = 0; j<m; j++)
  72. cin >> A[i][j];
  73. }
  74. d = det(A, m);
  75. cout << "Определитель матрицы равен: " << d << endl;
  76. return 0;
  77. }
Success #stdin #stdout 0s 16888KB
stdin
2
1
6
3
2
stdout
Введите размерность квадратной матрицы: Введите матрицу размерностью 2x2
Определитель матрицы равен: -16