Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DaniloTec

Erro desconhecido. WIN32 EXCEPTION...

Recommended Posts

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.