Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá Galera,
Eu costumo postar lá na área de flash mas estou estudando c também e resolvi postar aqui um programa que fiz:
#include <stdio.h>
//Prototypes
int det(int**,int);
int**matrizMenor(int**,int**,int,int);
int**alocarMQ(int);
int**freeMQ(int**,int);
void printMQ(int**,int);
int main(int argc, char *argv[]){
int ordem, **matriz, i, j;
//Recuperando a ordem da matriz
printf("** Calculando o determinante de matrizes reais. **\n\n");
printf("Digite a ordem desejada da matriz: ");
scanf("%d", &ordem);
//Alocando espaço da matriz quadrada
matriz = alocarMQ(ordem);
//Preenchendo a matriz
printf("\nDigite os valores da matriz (da direita para a esquerda,\
de cima para baixo):\n");
for(i=0; i<ordem; i++)
for(j=0; j<ordem; j++)
scanf("%d", &matriz[i][j]);
//Imprimindo a matriz e seu determinante
printf("\nA matriz eh:\n\n");
printMQ(matriz, ordem);
printf("\nO Determinante eh: %d\n", det(matriz, ordem));
getchar();
getchar();
return 0;
}
//Retorna o determinante da matriz m de ordem n por Laplace
int det(int **m, int n){
//Caso fundamental
if(n == 1)
return **m;
//Criando a matriz do cofator
int c, cof, d=0, **m2 = alocarMQ(n-1);
//Para cada coluna
for(c=0; c<n; c++){
//Calculando o cofator
cof = (c%2?-1:1) * det(matrizMenor(m, m2, c, n), n-1);
//Somando a parcela ao determinante final
d += m[0][c]*cof;
}
//Liberando o espaço alocado da matriz do cofator
freeMQ(m2, n-1);
//Retornando o determinante
return d;
}
//Retira a primeira linha a coluna c de m e armazena em m2. n é a ordem de m
int matrizMenor(int m, int **m2, int c, int n){
int i, j, **p=m2, *p2;
for(i = 1; i < n; i++){
p2 = *p++;
for(j = 0; j < n; j++)
if(j==c) continue;
else *p2++ = m[i][j];
}
return m2;
}
//Aloca espaço para uma matriz quadrada
int **alocarMQ(int n){
int **m, i;
m = (int**)calloc(n, sizeof(int*));
if(m == NULL) exit(1);
for(i=0; i<n; i++){
*(m+i) = (int*)calloc(n, sizeof(int));
if(*(m+i) == NULL) exit(1);
}
return m;
}
//Desaloca espaço de uma matriz quadrada
int freeMQ(int m, int n){
int i;
if(m == NULL) return NULL;
for(i=0; i<n; i++) free(m[i]);
free(m);
return NULL;
}
//Imprime uma matriz quadrada
void printMQ(int **m, int n){
int i, j;
for(i = 0; i < n; i++){
printf("[");
for(j = 0; j < n; j++)
printf(" %2d", m[i][j]);
printf(" ]\n");
}
}Abraço
Carregando comentários...