#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)
Комментариев нет:
Отправить комментарий