Antoniosp 2 Denunciar post Postado Outubro 25, 2008 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"); } } Esse foi meu primeiro experimento com alocação de memória. Queria aproveitar para que vocês avaliassem isso, se está certo mesmo e tal. Mas que funciona, funciona :P Abraço Compartilhar este post Link para o post Compartilhar em outros sites