#include <iostream> #include <windows.h> using namespace std; void print_array_using_pointers(int r, int c, int* ptr) { int i, j; for (i = 0; i < r; i++) { cout << "["; for (j = 0; j < c; j++) { cout << " " << *ptr; ptr = ptr + 1; } cout << " ]" << endl; } return; } double determinant(int m, int* p) { double ans = 0, inner_sol, inner_determinant; int a, b, c, d; if ((m == 1) || (m == 2)) { if (m == 1) ans = *p; else { a = *p; b = *(p + 1); c = *(p + 2); d = *(p + 3); ans = (a * d) - (b * c); } } else { int i, j, k, l, n, sign, basic, element; n = 0; sign = +1; int* q; q = new int[(m - 1) * (m - 1)]; for (i = 0; i < m; i++) { l = 0; n = 0; basic = *(p + i); for (j = 0; j < m; j++) { for (k = 0; k < m; k++) { element = *(p + l); cout << element << " "; if ((j == 0) || (i == k)); else { *(q + n) = element; n = n + 1; } l = l + 1; } } cout << endl << basic << " x " << endl; print_array_using_pointers((m - 1), (m - 1), q); inner_determinant = determinant(m - 1, q); inner_sol = sign * basic * inner_determinant; cout << "Знак:" << sign << "x Базис: " << basic << "x Определитель" << inner_determinant << " = " << inner_sol << endl; ans = ans + inner_sol; sign = sign * -1; } delete[] q; } return ans; } void initialize_array(int r, int c, int* ptr) { int i, j, k; cout << "Вводите числа в матрицу" << endl; cout << "После каждого числа нажимайте Enter" << endl; for (i = 0; i < r; i++) { for (j = 0; j < c; j++) { cin >> k; *(ptr + i * c + j) = k; } } } int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); int r, * p; cout << "Количество рядов: "; cin >> r; p = new int[r * r]; initialize_array(r, r, p); print_array_using_pointers(r, r, p); double ans = determinant(r, p); cout << "Определитель: " << ans << endl; delete[] p; return 0; }