//Librería que contiene las funciones scanf y printf
#include <stdio.h>
//librería que contiene malloc
#include <stdlib.h>
//Declaración de prototipos
int *leematriz(int dim);
int *producto(int *a, int *b, int dim);
void imprimematriz(int *m, int dim);
//Función principal del programa
int main ()
{
// Este programa calcula el producto de 2 matrices 3x3
// Declaro las variables de mi función
int *m1,*m2, *msol,dim;
printf("Introduce la dimensión de las matrices:");
scanf("%d", &dim);
printf("Introduce los elementos de la primera matriz: \n");
m1=leematriz(dim);
printf("Introduce los elementos de la segunda matriz: \n");
m2=leematriz(dim);
msol=producto(m1,m2,dim);
printf("La matriz resultado es: \n");
imprimematriz(msol, dim);
free(m1);
free(m2);
free(msol);
//Fin del programa
return 0;
}
//Función leematriz
//Dada una dimensión, lee los elementos de una matriz y la devuelve
int *leematriz(int dim)
{
int i,j,*m;
m=(int*)malloc(sizeof(int)*dim*dim);
for (i=0;i<dim;i++)
{
for (j=0;j<dim;j++)
{
scanf("%d", (m+i*dim+j));
}
}
return m;
}
//Función producto
//Imprime dos matrices y devuelve la matriz resultado
int *producto(int *a, int *b, int dim)
{
int *res, i,j,t;
//Reservo espacio para la matriz resultado
res=(int*)malloc(sizeof(int)*dim*dim);
//En C las matrices de n filas tienen filas de la 0 a la n-1
for (i=0;i<dim;i++)
{
//En C las matrices de n columnas tienen cols. de la 0 a la n-1
for (j=0;j<dim;j++)
{
//Inicializo el elemento de la matriz producto
*(res+i*dim+j)=0;
for (t=0;t<dim;t++)
{
*(res+i*dim+j)=*(res+i*dim+j)+*(a+i*dim+j)* *(b+i*dim+j);
}
}
}
return(res);
}
//Función imprimematriz
//Dada una matriz, la imprime por pantalla
void imprimematriz(int *m, int dim)
{
int i,j;
for (i=0;i<dim;i++)
{
//En C las matrices de n columnas tienen cols. de la 0 a la n-1
for (j=0;j<dim;j++)
{
printf("%d\t", *(m+i*dim+j));
}
printf("\n");
}
return;
}