DaniloTec 0 Denunciar post Postado Abril 17, 2007 Bom Dia a Todos. Tenho que fazer um programa que leia e multiplica 2 matrizes. O programa compila, porém, na execução aparece um erro que nunca vi. Algo deste tipo: "an unhandled win32 exception occurred in matriz_internet.exe..." Se vcs copiarem o código abaixo e mandar compilar, vão ver que compila normalmente, mas não roda. Alguém sabe me dizer onde está o erro? Grato. Segue o código: #include <stdio.h> #include <stdlib.h> /* ALOCAÇÃO DE MATRIZES */ float **AlocMtr(int Linha, int Coluna) { float **aponta; int cont; /* PONTEIRO QUE ALOCA AS LINHAS DAS MATRIZES */ aponta=calloc(Linha,sizeof(float *)); /* PONTEIRO QUE ALOCA AS COLUNAS DAS MATRIZES */ for(cont=0;cont<Linha;cont++) aponta[cont]=calloc(Coluna,sizeof(float)); return(aponta); } /* Libera memoria ocupada pelas matrizes */ float **Liberar_matriz_real (int m, int n, float **v) { int i; /* variavel auxiliar */ if (v == NULL) return (NULL); if (m < 1 || n < 1) { /* verifica parametros recebidos */ printf ("** Erro: Parametro invalido **\n"); return (v); } for (i = 0; i < m; i++) free (v); /* libera as linhas da matriz */ free (v); /* libera a matriz (vetor de ponteiros) */ return (NULL); /* retorna um ponteiro nulo */ } /* Essa funcao faz a multiplicacao entre as matrize. * Retorna um matriz com resultado da multplicao * */ float **mult(int ma, int mb , int na, int nb, float **a, float **b, float **mr) { int i, j , v; for (i = 0 ; i < ma; i++ ) for (j = 0; j < nb; j++) for (v = 0; v < na; v++) mr[j] = mr[j] + a[v] * b[v][j]; return(mr); } /* funcao pra imprimir na tela as matrizes */ void imprime(int ma, int mb , int na, int nb , float **a, float **b, float **mr) { int i, j; /* Impressao das Matrizes */ printf("MATRIX A:\n"); for (i = 0; i < ma; i++) { for ( j = 0; j < na; j++) printf("%.f ", a[j]); printf("\n"); } printf("MATRIX B:\n"); for (i = 0; i < mb; i++) { for ( j = 0; j < nb; j++) printf("%.f ", b[j]); printf("\n"); } printf("MATRIX C:\n"); for (i = 0; i < ma ; i++) { for ( j = 0; j < nb ; j++) printf("%4.f", mr[j]); printf("\n"); } system("PAUSE"); } /* funcao pra validar se e possivel fazer a multiplicao entre * as matrizes dadas */ int invalido(int na, int mb) { if (na != mb) return -1; return 0; } /* FUNÇÃO PRINCIPAL */ int main() { float **MtrA; float **MtrB; float **MtrC; int Mtr,LinMtrA,ColMtrA,LinMtrB,ColMtrB,i,j; do{ system("cls"); printf("Digite o valor ORDEM das Matrizes: "); scanf("%d",&Mtr); LinMtrA=Mtr,ColMtrA=Mtr,LinMtrB=Mtr,ColMtrB=Mtr; if(Mtr<=0 || Mtr>10){ printf("Digite um numero maior que ZERO ou menor que ONZE\n\n\n"); system("PAUSE"); } }while(Mtr<=0 || Mtr>10); /* float **ler_mat(int m, int n, float **v) */ /* PREENCHIMANTO DA MATRIZ A */ printf("Digite os valores da matriz A.\n"); for(i=1;i<=LinMtrA;i++){ for(j=0;j<ColMtrA;j++){ scanf("%f",&MtrA[j]); } } printf("Digite os numeros da matriz B:\n"); /* PREENCHIMANTO DA MATRIZ B */ for(i=1;i<=LinMtrB;i++){ for(j=0;j<ColMtrB;j++){ scanf("%d",&MtrB[j]); } } /* FUNÇÃO PARA ALOCAR AS MATRIZES */ MtrA=AlocMtr(LinMtrA,ColMtrA); MtrB=AlocMtr(LinMtrB,ColMtrB); MtrC=AlocMtr(LinMtrA,ColMtrB); /* chama a funcao pra fazer muultiplicacao das matrizes */ MtrC = mult(LinMtrA,LinMtrB,ColMtrA,ColMtrB,MtrA,MtrB,MtrC); /* chama a funcao pra mostrar na tela o resultado da multiplicacao */ imprime(LinMtrA,LinMtrB,ColMtrA,ColMtrB,MtrA,MtrB, MtrC); /* desaloca a memoria, nao mais nescessaria */ MtrA = Liberar_matriz_real (LinMtrA,ColMtrA,MtrA); MtrB = Liberar_matriz_real (LinMtrB,ColMtrB,MtrB); MtrC = Liberar_matriz_real (LinMtrA,ColMtrB,MtrC); system("PAUSE"); } Compartilhar este post Link para o post Compartilhar em outros sites
DaniloTec 0 Denunciar post Postado Abril 19, 2007 Já descobri.Abraz! Compartilhar este post Link para o post Compartilhar em outros sites