#include <stdio.h>

#define	MIDA	5

typedef struct {
	int m[MIDA][MIDA];
	int nf, nc;
} t_matriu;

void imprimir_matriu(t_matriu m, int it_f, int it_c, char car_f, char car_c) {
	int f, c;

	printf("    ");
	for(c = 0; c < it_c; c++) {
		printf("   ");
	}
	printf("%cV\n", car_c);
	for(f = 0; f < m.nf; f++) {
		if (f == it_f) {
			printf("%c> ", car_f);
		} else {
			printf("   ");
		}
		printf("(");
		for(c = 0; c < m.nc; c++) {
			printf("%2d ", m.m[f][c]);
		}
		printf(")\n");
	}
}

void imprimir_matrius(t_matriu m1, t_matriu m2, t_matriu m3,
		int f, int c, int i) {
	printf("f = %d, c = %d, i = %d\n", f, c, i);
	imprimir_matriu(m1, f, i, 'f', 'i');
	printf("\n X\n");
	imprimir_matriu(m2, i, c, 'i', 'c');
	printf("\n =\n");
	imprimir_matriu(m3, f, c, 'f', 'c');
	printf("\n");
}

int main() {
	t_matriu m1 = {{{2,1,7},{0,3,4},{1,0,2},{3,4,0}}, 4, 3};
	t_matriu m2 = {{{1,0,0,4,2},{2,0,2,4,2},{2,0,2,0,1}}, 3, 5};
	t_matriu m3 = {{{}},m1.nf,m2.nc};
	int f, c, i;

	if (m1.nc == m2.nf) {
		for(f=0; f<m3.nf; f++) {
			for(c=0; c<m3.nc; c++) {
				for(i=0; i<m1.nc; i++) {
					m3.m[f][c] += m1.m[f][i] *
						      m2.m[i][c];
					imprimir_matrius(m1, m2, m3,
							f, c, i);
					printf("Prem Enter per continuar.\n");
					scanf("%*c");
				}
			}
		}
	} else {
		printf("ERROR!\n");
	}
}

