#include <iostream>
#include <conio.h>

using std::cout;
using std::cin;
using std::endl;

void main(void)
{
	int a[10][10],b[10][10],r[10][10]; 
	int row1,row2,col1,col2,darab;

	int i,j,k;
	char c;
	c ='y';

	while (c =='y'|| c=='Y')
	{
		
		cout << "\n----------------------------------------\n";
		cout << "           Perkalian Matrik .\n";
		cout << "   Syarat: Row Matrik B = Col Matrik A";
		cout << "\n----------------------------------------\n";
		/* Masukan Besaran Matrix */
		cout << "Masukkan Row Matrix A [0-10] :\t";
		cin  >> row1;
		cout << "Masukkan Col Matrix A [0-10] :\t";
		cin  >> col1;
		row2 = col1;
		cout << "Masukkan Row Matrik B [0-10] :\t" << row2 <<"\n";
		cout << "Masukkan Col Matrix B [0-10] :\t";
		cin  >> col2;
		/* Penerangan Konsep Perkalian Matrix */
		cout << "\n----------------------------------------\n";
		cout << " A[" << row1 << "x" << col1 << "] x B[" << row2 << "x" << col2 << "]";
		cout << " = Result[" << row1 << "x" << col2 << "]\n\n";
		cout << " Perkalian Matrix :\n";
		cout << " [" << row1 << "x" << col1 << "] x ["<< row2 << "x" << col2 << "]";
		cout << " = ["<< row1 << "x" << col2 << "]";
		cout << "\n----------------------------------------\n";

		/* Element A */
		
		cout << "\n\n";
		for (i = 0;i<row1;i++)
			for (j = 0;j<col1;j++)
			{
				cout << "Element A["<<i<<"]["<<j<<"] :\t";
				cin >> a[i][j];
			}
	
		/* Element B */
	
		cout << "\n";
		for (i = 0;i<row2;i++)
			for (j = 0;j<col2;j++)
			{
				cout << "Element B["<<i<<"]["<<j<<"] :\t";
				cin >> b[i][j];
			}
		
		/* Matrik A */
	
		cout << "\n----------------------------------------\n";
		cout << "   Matrik A[" << row1 << "x" << col1 << "] ";
		cout << "\n----------------------------------------\n";
		for (i = 0;i<row1;i++)
		{
			for (j = 0;j<col1;j++)
				cout << a[i][j] << "\t";
			cout << ("\n\n");
		}

		/* Matrik B */
	
		cout << "\n----------------------------------------\n";
		cout << "   Matrik B[" << row2 << "x" << col2 << "] ";
		cout << "\n----------------------------------------\n";
		for (i = 0;i<row2;i++)
		{
			for (j = 0;j<col2;j++)
				cout << b[i][j] << "\t";
			cout << ("\n\n");
		}
	
		/* Matrik Multiplication */
		/* note : darab = col matrik A = Row matrik B */

		darab = row2;
		for (i=0 ; i < row1 ;i++)
			for (j=0;j<col2;j++)
			{
				r[i][j] = 0;
				for (k=0;k<darab;k++)
					r[i][j]= r[i][j]+(a[i][k]*b[k][j]);
			}
	
		/* Matrik R */
		
		cout << "\n----------------------------------------\n";
		cout << "  Matrik Result[" << row1 << "x" << col2 << "] ";
		cout << "\n----------------------------------------\n";
		for (i = 0;i<row1;i++)
		{
			for (j = 0;j<col2;j++)
				cout << r[i][j] << "\t";
			cout << ("\n\n");
		}

		cout << "\n----------------------------------------\n";
		/* Looping Re Run Program */		
		cout << "Run Program Again? [y/n] :";
		c=_getch();
		
	} 
}