[Pascal] Source Code Perkalian Matriks dengan Pascal


Seorang teman meminta untuk dibuatkan source code perkalian dua matriks dengan pascal. Berikut hasil yang di dapat. (Mungkin masih agak kurang optimal.)

Program PerkalianMatriks;
Uses crt;
Var
	MatA, MatB, MatAns : array [1..100, 1..100] of longint;
	mA, nA, mB, nB : integer; //baris dan kolom
	i, j, k : integer; //indeks pengulangan
	
Begin
	write('Masukkan jumlah baris untuk matriks A = '); readln(mA);
	write('Masukkan jumlah kolom untuk matriks A = '); readln(nA);
	write('Masukkan jumlah baris untuk matriks B = '); readln(mB);
	write('Masukkan jumlah kolom untuk matriks B = '); readln(nB);
	writeln;
	
	if (nA = mB) then
	begin
		//Input data matriks A
		writeln('Input data matriks A');
		for i := 1 to mA do
			for j := 1 to nA do
			begin
				write('MatA [', i:2, ',', j:2, '] = '); readln(MatA[i,j]);
			end;
		writeln;
		
		//Input data matriks B
		writeln('Input data matriks B');
		for i := 1 to mB do
			for j := 1 to nB do
			begin
				write('MatB [', i:2, ',', j:2, '] = '); readln(MatB[i,j]);
			end;		
		writeln;
		
		//View data matriks A
		writeln('Matriks A =');
		for i := 1 to mA do
		begin
			for j := 1 to nA do
			begin
				write(MatA[i,j]:4);
			end;
			writeln;
		end;
		
		//View data matriks B
		writeln('Matriks B =');
		for i := 1 to mB do
		begin
			for j := 1 to nB do
			begin
				write(MatB[i,j]:4);
			end;
			writeln;
		end;
		writeln;
		write('Tekan [Enter] untuk memulai perhitungan...');
		readln;
		
		//Perkalian Matriks
		for i := 1 to mA do
		begin
			for j := 1 to nB do
			begin
				MatAns[i, j] := 0; //inisialisasi (pengosongan matriks jawaban)
				for k := 1 to nA do
				begin
					MatAns[i, j] := MatAns[i, j] + (MatA[i, k] * MatB[k, j]);
				end;
			end;
		end;
		
		//View data matriks answer
		writeln('Matriks Ans = MatA x MatB = ');
		for i := 1 to mA do
		begin
			for j := 1 to nB do
			begin
				write(MatAns[i,j]:4);
			end;
			writeln;
		end;
		readln;
	end else
	begin
		writeln('Perkalian matriks gagal: Kolom MatA harus sama dengan Baris MatB');
	end;
End.