segunda-feira, 30 de maio de 2011

Multiplicação de matrizes alocadas dinamicamente em C

#include<stdio.h>
#include<stdlib.h>
int** aloca (int linha,int coluna)
{
int **matriz,i;
if((matriz=(int **)malloc(coluna*sizeof(int*)))==NULL)
{
printf("Mem%cria n%co dispon%cvel!",162,198,161);
exit(1);
}
else
{
for(i=0;i<linha;i++)
{
if((matriz[i]=(int *)malloc(coluna*sizeof(int)))==NULL)
{
printf("Mem%cria n%co dispon%cvel!",162,198,161);
exit(1);
}
}
}
return matriz;
}
void le_matriz (int **matriz,int linha,int coluna)
{
int i,j;
for(i=0;i<linha;i++)
{
for(j=0;j<coluna;j++)
{
printf("\nPosi%c%co %d%d: ",135,198,i+1,j+1);
scanf("%d",&matriz[i][j]);
}
}
return;
}
void multiplica (int **matriz_final,int **matriz1,int **matriz2,int l1,int c2,int l2)
{
int i,j,k;
for(i=0;i<l1;i++)
{
for(j=0;j<c2;j++)
{
matriz_final[i][j]=0;

for(k=0;k<l2;k++)
{
matriz_final[i][j]=matriz_final[i][j]+(matriz1[i][k]*matriz2[k][j]);
}
}
}
}
void imprime (int **matriz,int linha,int coluna)
{
int i,j;
for(i=0;i<linha;i++)
{
printf("%c",186);
for(j=0;j<coluna;j++)
{
printf("\t%d",matriz[i][j]);
}
printf("\t%c\n",186);
}
return;
}
int main()
{
    int **matriz1,**matriz2,**matriz_final,l1,c1,l2,c2;
printf("Informe o n%cmero de linhas e colunas da primeira matriz respectivamente: ",163);
scanf("%d%d",&l1,&c1);
printf("Informe o n%cmero de linhas e colunas da segunda matriz respectivamente: ",163);
    scanf("%d%d",&l2,&c2);
if(l2!=c1){printf("N%co %c poss%cvel realizar a multiplica%c%co com os dados informados!\n\n",198,130,161,135,198);exit(1);}
matriz1=aloca(l1,c1);
matriz2=aloca(l2,c2);
printf("\nMatriz 1:");
le_matriz(matriz1,l1,c1);
imprime(matriz1,l1,c1);
printf("\nMatriz 2:\n");
le_matriz(matriz2,l2,c2);
imprime(matriz2,l2,c2);
matriz_final=aloca(l1,c2);
multiplica(matriz_final,matriz1,matriz2,l1,c2,l2);
printf("\n\nMatriz resultante da multiplica%c%co das matrizes 1 e 2:\n",135,198);
imprime(matriz_final,l1,c2);
return 0;
 }

2 comentários:

  1. Mais uma vez obrigado, muito bom, Evandro IST RJ

    ResponderExcluir
  2. Um dos melhores códigos que já peguei para entender, muito bom :D

    ResponderExcluir