SStive39

OOP_k2l1v16

Nov 10th, 2021 (edited)
1,261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.46 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. template <typename T>
  6. T** reduce_matr(T** old_matrix, int n, int row, int column) {
  7.     T** matrix = new T*[n-1];
  8.    
  9.     for (int i = 0, oi = 0; i < n-1; i++, oi++) {
  10.         matrix[i] = new T[n-1];
  11.         if (oi == row) oi++;
  12.         for (int j = 0, oj = 0; j < n-1; j++, oj++) {
  13.             if (oj == column) oj++;
  14.             matrix[i][j] = old_matrix[oi][oj];
  15.         }
  16.     }
  17.     return matrix;
  18. }
  19.  
  20. template <typename T>
  21. T determinant(T** matrix, unsigned int n) {
  22.     if (n <= 1)
  23.         return matrix[0][0];
  24.    
  25.     T det = 0;
  26.     for (int i = 0; i < n; i++)
  27.         det += (i % 2 ? 1 : -1) * matrix[0][i] * determinant(reduce_matr(matrix, n, 0, i), n-1);
  28.  
  29.     return det;
  30. }
  31.  
  32. template <typename T>
  33. T **generate_matrix(int size)
  34. {
  35.     T **matr = new T *[size];
  36.     for (int i = 0; i < size; i++)
  37.     {
  38.         matr[i] = new T[size];
  39.         for (int j = 0; j < size; j++)
  40.         {
  41.             matr[i][j] = rand() % 10 + 0;
  42.             cout << matr[i][j] << " ";
  43.         }
  44.         cout << endl;
  45.     }
  46.     return matr;
  47. };
  48.  
  49. int main()
  50. {
  51.     cout << "Matrix A type int, size 3x3:" << endl;
  52.     int **A = generate_matrix<int>(3);
  53.     cout << "Determinant A = " << determinant(A, 3) << endl;
  54.  
  55.     cout << endl;
  56.  
  57.     cout << "Matrix B type double, size 5x5:" << endl;
  58.     double **B = generate_matrix<double>(5);
  59.     cout << "Determinant B = " << determinant(B, 5) << endl;
  60.  
  61.     return 0;
  62. }
Add Comment
Please, Sign In to add comment