#include <stdio.h> #include <stdlib.h> #include <time.h> const int n = 4; void print(int**, int); void clear(int**, int**, int, int, int); long Determinant(int**, int); void main() { time_t t; srand(time(&t)); int** a = new int*[n]; for (int i = 0; i < n; i++) a[i] = new int[n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j ++) { a[i][j] = rand() % 10; } } print(a, n); long dt = Determinant(a, n); printf("\nDeterminant = %d\n", dt); for (int i = 0; i < n; i++) delete[] a[i]; delete[] a; } void print(int** a, int n) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { printf("%d\t", a[i][j]); } printf("\n"); } } void clear(int** a, int** b, int m, int i, int j) { int di = 0; int dj; for (int ki = 0; ki < m - 1; ki++) { if (ki == i) di = 1; dj = 0; for (int kj = 0; kj < m - 1; kj++) { if (kj == j) dj = 1; b[ki][kj] = a[ki + di][kj + dj]; } } } long Determinant(int** a, int n) { if (n == 1) return a[0][0]; if (n == 2) return a[0][0] * a[1][1] - a[0][1] * a[1][0]; int** b = new int*[n]; for (int i = 0; i < n; i++) b[i] = new int[n]; int d = 0; int k = 1; for (int i = 0; i < n; i++) { clear(a, b, n, i, 0); d += k * a[i][0] * Determinant(b, n - 1); k--; } for (int i = 0; i < n; i++) delete[] b[i]; delete[] b; return d; }
вторник, 27 апреля 2010 г.
определитель матрицы
и снова определитель матрицы
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий