Code:
#include <stdio.h>
#define MAX_R 4
#define MAX_C 4
typedef int coord[2];
int OrdEnt (int, int*, int*);
void MatCalc (int [][MAX_R], int [][MAX_C], int[][MAX_C], int, int, int, int);
int OrdEnt (int a, int *r, int *c)
{
do {
printf("Enter the order of Matrix %d in the format NxN:\n",a);
scanf ("%dx%d",r,c);
if (*r>4 || *c>4)
{
printf("Order too great\n");
}
} while (*r>4 || *c>4);
return (0);
}
void MatCalc (int Matrix_1[][MAX_R], int Matrix_2[][MAX_C], int Matrix_3[][MAX_C],
int r, int c, int r2, int c2)
{
int j,l,h, m = 0, sum = 0;
for (j=0; j<r; j++){
for (l=0; l<c; l++){
for (m=0; m<r2; m++){
for (h=0; h<c2; h++){
sum += Matrix_1[j][l] * Matrix_2[m][h];
printf("[ %d * %d += %d ]", Matrix_1[j][l], Matrix_2[m][h], sum);
Matrix_3[j][h] += Matrix_1[j][l] * Matrix_2[m][h];
};
printf("\n");
};
};
};
printf("\n\n");
for (j = 0; j<r; j++){
for (l=0; l<c2; l++){
printf("[%d]", (Matrix_3[j][l])/r2) ;
};
printf("\n");
};
}
int main(void)
{
int R = 0,R2 = 0, C = 0, C2 = 0;
int Matrix_1 [MAX_R] [MAX_C];
int Matrix_2 [MAX_R] [MAX_C];
int Matrix_3 [MAX_R] [MAX_C] = {0};
int a = 1, b = 2, c = 3, r_i, c_i;
char in_c;
printf("This program will multiply 2 matrices (up to the order of 4x4),"
" and display the result\n");
do{
OrdEnt(a,&R,&C);
printf("Is this correct,y/n?:");
scanf(" %c",&in_c);
} while(in_c == 'n' || in_c == 'N');
do{
OrdEnt(b,&R2,&C2);
printf("Is this correct,y/n?:");
scanf(" %c",&in_c);
} while(in_c == 'n' || in_c == 'N');
for(r_i=0; r_i<R; r_i++){
printf("\nfor row %d of Matrix_1\n",r_i +1);
for(c_i=0; c_i<C; c_i++){
printf("\tEnter element value for column %d:",c_i +1);
scanf("%d",&Matrix_1 [r_i] [c_i]);
}
}
printf("\n\n");
for (r_i=0; r_i<R; r_i++){
for (c_i=0; c_i<C; c_i++){
printf("[%d]", Matrix_1[r_i][c_i]);
printf("\n");
}
}
for(r_i=0; r_i<R2; r_i++){
printf("\nfor row %d of Matrix_2\n",r_i +1);
for(c_i=0; c_i<C2; c_i++){
printf("\tEnter element value for column %d:",c_i +1);
scanf("%d",&Matrix_2 [r_i] [c_i]);
}
}
printf("\n\n");
for (r_i=0; r_i<R2; r_i++){
for (c_i=0; c_i<C2; c_i++){
printf("[%d]", Matrix_2[r_i][c_i]);
printf("\n");
}
}
MatCalc(Matrix_1,Matrix_2,Matrix_3, R, C, R2, C2);
return (0);
}