/* Carles Panadés Guinart i Cerni Pol Rossa */
/* Practica 4								*/


#include <stdio.h>


main()
{


/*  definició/inicialització de variables:	*/

float *mat1, *mat2, *mat3, aux2;
int col1=0, col2=0, col3=0, fil1=0, fil2=0, fil3=0, aux1=0;
int l, m, n;

fil2 = 1;


/*------------------------------------inici funcio transfdata-----*/

while(col1!=fil2){
	if(aux1 == 1){printf("\nMida de matrius incorrecta.\n");}
	aux1 = 1;
	
	printf("\nEntreu el nombre de files de la primera matriu.\n");
	scanf("%d", &fil1);
	printf("\nEntreu el nombre de columnes de la primera matriu.\n");
	scanf("%d", &col1);
	printf("\nEntreu el nombre de files de la segona matriu.\n");
	scanf("%d", &fil2);
	printf("\nEntreu el nombre de columnes de la segona matriu.\n");
	scanf("%d", &col2);
}

fil3 = fil1;
col3 = col2;

mat1 = malloc(fil1*col1*sizeof(float));
mat2 = malloc(fil2*col2*sizeof(float));
mat3 = malloc(fil3*col3*sizeof(float));


/*Entrada de dades als punters (vectors).*/

printf("\nEntreu els valors per files i despres columnes de la primera matriu:\n");
for(n=0; n<fil1*col1; n++){
	scanf("%f", mat1);
	mat1++;
}

printf("\nEntreu els valors per files i despres columnes de la segona matriu:\n");
for(n=0; n<fil2*col2; n++){
	scanf("%f", mat2);
	mat2++;
}

mat1 = mat1-fil1*col1;
mat2 = mat2-fil2*col2; 


/*---------------------------------------fi funcio transfdata-----*/

/*------------------------------------inici funcio matrixmult-----*/

aux2 = 0;
for(l=0; l<fil1; l++){
	for(m=0; m<col2; m++){
		for(n=0; n<col1; n++){
			*mat3 = aux2 + *mat1 * *mat2;
			aux2 = *mat1 * *mat2 + aux2;
			mat1++;
			mat2 = mat2 + col2;
		}
		
		aux2 =0;
		mat1 = mat1 - col1;
		mat2 = mat2 - fil2*col2 + 1;
		mat3++;
		
	}
	
	mat1 = mat1 + col1;
	mat2 = mat2 - col2;
}

mat3 = mat3 - fil3 * col3;

/*---------------------------------------fi funcio matrixmult-----*/

/*--------------------------------------inici funcio printsol-----*/

printf("\n\n\t\tI la matriu resultant es:\n\n\n");
for(m=0; m<col3; m++){
	for(n=0; n<fil3; n++){
		printf("\t%.2f", *mat3);
		mat3++;
	}
	printf("\n\n");
}
printf("\n\n\n");

/*-----------------------------------------fi funcio printsol-----*/

}
