Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- template <typename T>
- T** reduce_matr(T** old_matrix, int n, int row, int column) {
- T** matrix = new T*[n-1];
- for (int i = 0, oi = 0; i < n-1; i++, oi++) {
- matrix[i] = new T[n-1];
- if (oi == row) oi++;
- for (int j = 0, oj = 0; j < n-1; j++, oj++) {
- if (oj == column) oj++;
- matrix[i][j] = old_matrix[oi][oj];
- }
- }
- return matrix;
- }
- template <typename T>
- T determinant(T** matrix, unsigned int n) {
- if (n <= 1)
- return matrix[0][0];
- T det = 0;
- for (int i = 0; i < n; i++)
- det += (i % 2 ? 1 : -1) * matrix[0][i] * determinant(reduce_matr(matrix, n, 0, i), n-1);
- return det;
- }
- template <typename T>
- T **generate_matrix(int size)
- {
- T **matr = new T *[size];
- for (int i = 0; i < size; i++)
- {
- matr[i] = new T[size];
- for (int j = 0; j < size; j++)
- {
- matr[i][j] = rand() % 10 + 0;
- cout << matr[i][j] << " ";
- }
- cout << endl;
- }
- return matr;
- };
- int main()
- {
- cout << "Matrix A type int, size 3x3:" << endl;
- int **A = generate_matrix<int>(3);
- cout << "Determinant A = " << determinant(A, 3) << endl;
- cout << endl;
- cout << "Matrix B type double, size 5x5:" << endl;
- double **B = generate_matrix<double>(5);
- cout << "Determinant B = " << determinant(B, 5) << endl;
- return 0;
- }
Add Comment
Please, Sign In to add comment