#include <stdio.h>
#include <stdlib.h>
dig_matA (int x, int y, int *mat1){
int i, j;
for (i = 0; i < x; i++){
for (j = 0; j < y; j++){
printf("Digite o valor da Matiz A na posicao [%d][%d]: ", i, j);
scanf("%d", &mat1[i*y+j]);;
}
}
}
dig_matB (int x, int y, int *mat2){
int i, j;
for (i = 0; i < x; i++){
for (j = 0; j < y; j++){
printf("Digite o valor da Matriz B na posicao [%d][%d]: ", i, j);
scanf("%d", &mat2[i*y+j]);
}
}
}
ler_matA (int x, int y, int *mat1){
int i, j;
printf("Matriz A:\n");
for (i = 0; i < x; i++){
for (j = 0; j < y; j++){
printf("%6d", mat1[i*y+j]);
}
printf("\n");
}
}
ler_matB (int x, int y, int *mat2){
int i, j;
printf("Matriz B:\n");
for (i = 0; i < x; i++){
for (j = 0; j < y; j++){
printf("%6d", mat2[i*y+j]);
}
printf("\n");
}
}
int *mult (int x, int y, int z, int *mat1, int *mat2){
int i, j, k, *M;
M = (int*) malloc(x*y*sizeof(int));
for (i = 0; i < x; i++){
for (j = 0; j < y; j++){
M[i*y+j] = 0;
for (k = 0; k < z; k++)
M[i*y+j] += mat1[i*z+k]*mat2[k*y+j];
}
}
return M;
}
ler_mult (int x, int y, int *Res){
int i, j;
printf("A x B = \n");
for (i = 0; i < x; i++){
for (j = 0; j < y; j++){
printf("%6d", Res[i*y+j]);
}
printf("\n");
}
}
int main(){
int i, j, m, n, p, *matA, *matB, *Res;
printf("Digite o numero de linhas da Matriz A: ");
scanf("%d", &m);
printf("Digite o numero de colunas da Matriz A: ");
scanf("%d", &p);
printf("O numero de linhas da Matriz B eh %d.", p);
printf(" Digite o numero de colunas da Matriz B: ");
scanf("%d", &n);
matA = (int*) malloc(m*p*sizeof(int));
matB = (int*) malloc(p*n*sizeof(int));
dig_matA(m, p, matA);
dig_matB(p, n, matB);
ler_matA(m, p, matA);
ler_matB(p, n, matB);
Res = mult(m, n, p, matA, matB);
ler_mult(m, n, Res);
free(matA);
free(matB);
return 0;
}