ola pessoal, estou tentando fazer um programa que recebe duas matrizes e realiza sua multiplicação, porém para alguns teste aparece aquele erro chato do Windows "O programa tal.exe parou de funcionar, procurando solução e blá blá blá".
o programa pede de início as linhas e as colunas da matriz a e matriz b e depois faz a leitura de cada matriz, em seguida faz a multiplicação. um dos testes é esse e o programa é:
2 (linha matriz a)
2 (coluna matriz a)
2(linha matriz
1(coluna matriz )
valor da matriz a
1 2
3 1
valor da matriz b
1
0
programa:
#include<stdio.h>
#include<stdlib.h>
void imprimir_matriz(int** m, int l, int c)
{
int i, j;
for (i=0; i<l; i++)
{
for (j=0; j<c; j++)
{
printf("%d\t", m[j]);
}
printf("\n");
}
}
void main()
{
int ia,ja,ib,jb,ic,jc,d,i,j,k,x;
int **a,**b,**ab;
scanf("%d",&ia);
scanf("%d",&ja);
scanf("%d",&ib);
scanf("%d",&jb);
if(ja!=ib)
{
d=1;
}
else
{
d=0;
}
if(d==0)
{
ic=ia;
jc=jb;
printf("%d %d\n",ic,jc);
a =(int**) malloc(ia* sizeof(int*));
for(i=0;i<ja;i++)
{
a = (int*) calloc(ja,sizeof(int));
}
b = (int**) malloc(ib* sizeof(int*));
for(i=0;i<jb;i++)
{
b = (int*) calloc(jb,sizeof(int));
}
ab = (int**) malloc(ic*sizeof(int*));
for(i=0;i<jc;i++)
{
ab = (int*) calloc(jc,sizeof(int));
}
//prencher matriz//
for(i=0;i<ia;i++)
{
for(j=0;j<ja;j++)
{
scanf("%d",&a[j]);
}
}
for(i=0;i<ib;i++)
{
for(j=0;j<jb;j++)
{
scanf("%d",&b[j]);
}
}
for(i=0;i<ic;i++)
{
for(j=0;j<jc;j++)
{
ab[j]=0;
}
}
//multiplicar matriz//
x=0;
for(i=0;i<ia;i++)
{
for(j=0;j<jb;j++)
{
for(k=0;k<ib;k++)
{
x=x+(a[k]*b[k][j]);
}
ab[j]=x;
x=0;
}
}
imprimir_matriz(ab,ic,jc);
}
else
{
printf("Operacao invalida!\n");
}
}