Sunteți pe pagina 1din 2

#include <stdio.

h>
#include <math.h>
#define MAX 5
// functie care afiseaza o matrice
void print_matrix(int m[][MAX], int n)
{
int i, j;
for (i = 0; i<n; i++) {
printf("\t");
for (j = 0; j<n; j++)
printf("%3d", m[i][j]);
printf("\n");
}
}
// functie care calculeaza determinantul unei matrici recursiv
int determinant(int m[][MAX], int n)
{
int det, p, i, j, h, k, t[MAX][MAX];
switch (n) {
case 0:
return 0;
// nu exista determinant
case 1:
return m[0][0];
// parametrul este un scalar
case 2:
return m[0][0] * m[1][1] - m[0][1] * m[1][0];
minantul pentru matrici de ordinul 2

// deter

default:
det = 0;
// determinantul se va calcula recursiv
// pentru fiecare element de pe fiecare linie se va construi o matrice t fara co
loana respectiva

//

//
//
//

for (p = 0; p<n; p++)


{
h = k = 0;
for (i = 1; i<n; i++)
omitem prima linie
{
for (j = 0; j<n; j++)
{
if (j == p) continue;
se va elimina coloana curenta (p) din matricea t
t[h][k] = m[i][j];
altfel se vor copia elementele din matricea initiala (m)
k++;
if (k == n - 1) { h++; k = 0; }
cand ajungem la capatul unei linii in matricea t se trece pe linia urmatoare

}
}
det +=
// valorii determinantului i se aduna
pow(-1, p) *
// -1 la puterea numarului coloanei curente
m[0][p] *
// inmultit cu valoarea elementului de pe prima linie si pozitia coloanei curent
e
determinant(t, n - 1);
// inmultit cu determinantul submatricii formata din matricea initiala fara
// prima linie si prima coloana
// pentru mai multe detalii despre calculul determinantului:
// http://paulbourke.net/miscellaneous/determinant/
}
return det;
}
}
// modulul principal
int main(int argc, char **argv)
{
int matrix[MAX][MAX] = {
{ 1, 0, 0, 0, 0 },
{ 0, 1, 0, 0, 0 },
{ 0, 0, 1, 0, 0 },
{ 0, 0, 0, 1, 0 },
{ 0, 0, 0, 0, 1 }
};
// int matrix[2][2] = {{3,4}, {2,1}};
int n = MAX;
printf("Se calculeaza determinantul pentru matricea:\n");
print_matrix(matrix, n);
printf("Valoarea determinantului este: %4i\n", determinant(matrix, n));
system("pause");
return 0;
}