Bismillah,

Mungkin banyak yang terheran mengapa masih saja ada tulisan tentang Bahasa Pascal, bahkan bisa jadi berpikir, kok Pascal sih? he…he… Iya, betul, Bahasa Pascal, Bahasa Pemprograman ini banyak digunakan sebagai bahasa pengantar untuk mata kuliah algoritma.

Jangan takut belajar bahasa ini, karena seorang software developer memerlukan skill algoritma yang baik, maka pemahaman akan bahasa Pascal di masa awal tumbuh kembang sebagai software developer akan terasa manfaat nya di masa yang akan datang, InsyaAllah.

Dibawah ini adalah program untuk melakukan operasi pada matriks. Sengaja tidak saya jelaskan secara rinci per baris source code nya, agar pembaca bisa menelaah sendiri ke buku-buku yang memang mengajarkan Bahasa Pascal.

Saat saya kuliah dulu, di ajarkan mata kuliah Matematika Teknik dan Pemprograman I, nah, ketika belajar matriks di Matematika Teknik, saya coba terapkan ilmu yang saya dapat dari maka kuliah Pemprograman I, sehingga, saat ada tugas Matematika Teknik, langsung dapat jawaban seketika, he…he…

Kepada para adik-adik mahasiswa jurusan IT, tetap jawab soal matriks secara manual ya, jangan pakai program ini, karena itu melatih kejujuran kalian, he…he…

Perkalian 2 buah matriks menggunakan bahasa Pascal

program perkalian_matriks;
uses crt;
var
	M1	: array[1..20, 1..20] of longint;
	M2	: array[1..20, 1..20] of longint;
	M3	: array[1..20, 1..20] of longint;
	n	: array[1..2] of integer;
	m	: array[1..2] of integer;

	i, j, x, y, k, l	: integer;

begin
	clrscr;
	for k := 1 to 2 do begin
		write('Banyak baris matriks ke-', k, ' : ');
		readln(m[k]);
		write('Banyak kolom matriks ke-', k, ' : ');
		readln(n[k]);
	end;
	if (n[1] <> m[2]) then
		writeln('Tidak bisa dikalikan!')
	else begin
		writeln('Matriks pertama : ');
		y := 6;
		for i := 1 to m[1] do begin
			x := 8;
			for j := 1 to n[1] do begin
				gotoxy(x,y);
				readln(M1[i,j]);
				x := x + 8;
			end;
			y := y + 1;
		end;

		writeln('Matriks kedua : ');
		y := y + 1;
		for i := 1 to m[2] do begin
			x := 8;
			for j := 1 to n[2] do begin
				gotoxy(x,y);
				readln(M2[i,j]);
				x := x + 8;
			end;
			y := y + 1;
		end;

		writeln('Proses perkalian');
		y := y + 1;
		for i := 1 to m[1] do begin
			x := 2;
			for j := 1 to n[2] do begin
				M3[i,j] := 0;
				for l := 1 to n[1] do begin;
					M3[i,j] := M3[i,j] + (M1[i,l] * M2[l,j]);
					gotoxy(x,y);
					write(M1[i,l], ' . ',  M2[l,j]);
					if l < n[1] then begin
						write(' + ');
					end;
					x := x + 12;
				end;
				x := x + 15;
			end;
			y := y + 1;
		end;


		y := y + 1;
		for i := 1 to m[1] do begin
			x := 2;
			for j := 1 to n[2] do begin
				for l := 1 to n[1] do begin;
					gotoxy(x,y);
					write(M1[i,l] * M2[l,j]);
					if l < n[1] then begin
						write(' + ');
					end;
					x := x + 12;
				end;
				x := x + 15;
			end;
			y := y + 1;
		end;

		writeln;
		writeln('Perkalian Matriks : ');
		for i := 1 to m[1] do begin
			for j := 1 to n[2] do
				write(M3[i,j]:8);
			writeln;
		end;
	end;
readln;
end.

perkalian matriks dengan skalar menggunakan bahasa pascal

program perkalian_matriks_dg_skalar;
uses crt;
var
	M1	: array[1..20, 1..20] of integer;
	M2	: array[1..20, 1..20] of integer;

	i, j, m, n, x, y, s	: integer;

begin
	clrscr;
	write('Banyak baris : ');
	readln(m);
	write('Banyak kolom : ');
	readln(n);

	writeln('Matriks : ');
	y := 4;
	for i := 1 to m do begin
		x := 8;
		for j := 1 to n do begin
			gotoxy(x,y);
			readln(M1[i,j]);
			x := x + 8;
		end;
		y := y + 1;
	end;

	write('Skalar : ');
	readln(s);

	writeln('Proses perkalian dengan skalar');
	y := 6 + m;
	for i := 1 to m do begin
		x := 8;
		for j := 1 to n do begin
			M2[i,j] := s * M1[i,j];
			gotoxy(x,y);
			write(s, ' . ',  M1[i,j]);
			x := x + 15;
		end;
		y := y + 1;
	end;

	writeln;
	writeln('Penjumlahan Matriks : ');
	for i := 1 to m do begin
		for j := 1 to n do
			write(M2[i,j]:8);
		writeln;
	end;
readln;
end.

Penjumlahan 2 buah matriks dengan bahasa pascal

program penjumlahan_matriks2;
uses crt;
var
	M1	: array[1..20, 1..20] of integer;
	M2	: array[1..20, 1..20] of integer;
	M3	: array[1..20, 1..20] of integer;

	i, j, m, n, x, y	: integer;

begin
	clrscr;
	write('Banyak baris : ');
	readln(m);
	write('Banyak kolom : ');
	readln(n);

	writeln('Matriks pertama : ');
	y := 4;
	for i := 1 to m do begin
		x := 8;
		for j := 1 to n do begin
			gotoxy(x,y);
			readln(M1[i,j]);
			x := x + 8;
		end;
		y := y + 1;
	end;

	writeln('Matriks kedua : ');
	y := 5 + m;
	for i := 1 to m do begin
		x := 8;
		for j := 1 to n do begin
			gotoxy(x,y);
			readln(M2[i,j]);
			x := x + 8;
		end;
		y := y + 1;
	end;

	writeln('Proses penjumlahan');
	y := 6 + (2 * m);
	for i := 1 to m do begin
		x := 8;
		for j := 1 to n do begin
			M3[i,j] := M1[i,j] + M2[i,j];
			gotoxy(x,y);
			write(M1[i,j], ' + ',  M2[i,j]);
			x := x + 15;
		end;
		y := y + 1;
	end;

	writeln;
	writeln('Penjumlahan Matriks : ');
	for i := 1 to m do begin
		for j := 1 to n do
			write(M3[i,j]:8);
		writeln;
	end;
readln;
end.

Pengurangan 2 buah matriks dengan bahasa pascal

program pengurangan_matriks2;
uses crt;
var
	M1	: array[1..20, 1..20] of integer;
	M2	: array[1..20, 1..20] of integer;
	M3	: array[1..20, 1..20] of integer;

	i, j, m, n, x, y	: integer;

begin
	clrscr;
	write('Banyak baris : ');
	readln(m);
	write('Banyak kolom : ');
	readln(n);

	writeln('Matriks pertama : ');
	y := 4;
	for i := 1 to m do begin
		x := 8;
		for j := 1 to n do begin
			gotoxy(x,y);
			readln(M1[i,j]);
			x := x + 8;
		end;
		y := y + 1;
	end;

	writeln('Matriks kedua : ');
	y := 5 + m;
	for i := 1 to m do begin
		x := 8;
		for j := 1 to n do begin
			gotoxy(x,y);
			readln(M2[i,j]);
			x := x + 8;
		end;
		y := y + 1;
	end;

	writeln('Proses pengurangan');
	y := 6 + (2 * m);
	for i := 1 to m do begin
		x := 8;
		for j := 1 to n do begin
			M3[i,j] := M1[i,j] - M2[i,j];
			gotoxy(x,y);
			write(M1[i,j], ' - ',  M2[i,j]);
			x := x + 15;
		end;
		y := y + 1;
	end;

	writeln;
	writeln('Pengurangan Matriks : ');
	for i := 1 to m do begin
		for j := 1 to n do
			write(M3[i,j]:8);
		writeln;
	end;
readln;
end.

Dibawah ini adalah contoh penyelesaain persamaan menggunakan metode crammer, saya tulis dalam pascal, walaupun saya dalam hati lebih cinta Bahasa C, he.. hee Semoga bermanfaat bagi para pemula yang belajar programming.

Di sini pascal memang sudah tidak umum lagi di dunia industri, tapi masih di ajarkan di kampus-kampus sebagai pengantar pelajaran algoritma. Jadi, yang penting paham algoritma dulu, apapun bahasa pengantar untuk itu.

jarak spasi dalam program ini 8 karakter? kenapa begitu? hee…he…, karena saya mengkompile nya di terminal di linux dengan FPC (Free Pascal Compiler), jadi masih tampil dengan indah di terminal saya. Adapun kalau di compile dengan turbo pascal atau compiler lain, maka tampilan hasilnya akan berantakan, he.. hee.. akhirnya, saran saya, gunakan fpc under linux!

Walhamdulillah

{
program penyelesaian persamaan linear dengan metode crammer
algoritma:
1. Masukkan matrik persamaan
2. Hitung Determinan D
3. Xn = Dn / D

ditulis oleh: Muhamamd Muntaza
email : m.muntaza@gmail.com
lisensi : GPL v3
}

program crammer_3var;
uses crt;
var
	M	: array[1..20, 1..20] of longint;
	D	: array[0..4] of integer;
	soal	: array[1..3] of real;

	i, j, x, y : integer;

begin
	clrscr;

	writeln('Masukkan matrik nya: ');
	y := 2;
	for i := 1 to 3 do begin
		x := 8;
		for j := 1 to 4 do begin
			gotoxy(x,y);
			readln(M[i,j]);
			x := x + 8;
		end;
		y := y + 1;
	end;
	writeln;

	{Diterminan D}
	writeln('Determinan D ');
	for i := 1 to 3 do begin
		for j := 1 to 3 do begin
			write(M[i,j]:8);
		end;
		writeln;
	end;


 	writeln ('D = (', M[1,1], '.', M[2,2], '.', M[3,3], ' + ',
 	M[1,2], '.', M[2,3], '.', M[3,1], ' + ',
 	M[1,3], '.', M[2,1], '.', M[3,2], ')',

	' - ',

 	'(', M[1,3], '.', M[2,2], '.', M[3,1], ' + ',
 	M[1,1], '.', M[2,3], '.', M[3,2], ' + ',
 	M[1,2], '.', M[2,1], '.', M[3,3], ')');

 	writeln ('D = (', M[1,1] * M[2,2] * M[3,3], ' + ',
 	M[1,2] * M[2,3] * M[3,1], ' + ',
 	M[1,3] * M[2,1] * M[3,2], ')',

	' - ',

 	'(', M[1,3] * M[2,2] * M[3,1], ' + ',
 	M[1,1] * M[2,3] * M[3,2], ' + ',
 	M[1,2] * M[2,1] * M[3,3], ')');
	writeln;

 	writeln ('D = (', (M[1,1] * M[2,2] *  M[3,3])  +
 	(M[1,2] * M[2,3] * M[3,1])  +
 	(M[1,3] * M[2,1] * M[3,2]), ')',

	' - ',

 	'(', (M[1,3] * M[2,2] * M[3,1])  +
 	(M[1,1] * M[2,3] * M[3,2])  +
 	(M[1,2] * M[2,1] * M[3,3]), ')');


	D[0] :=  (((M[1,1] * M[2,2] *  M[3,3])  +
 	(M[1,2] * M[2,3] * M[3,1])  +
 	(M[1,3] * M[2,1] * M[3,2]))

	-

 	((M[1,3] * M[2,2] * M[3,1])  +
 	(M[1,1] * M[2,3] * M[3,2])  +
 	(M[1,2] * M[2,1] * M[3,3])));

	writeln ('D = ', D[0]);

	{D1}
	writeln;
	writeln('Determinan D1 ');
	for i := 1 to 3 do begin
		for j := 1 to 3 do begin
			if (j = 1) then
				write(M[i,j+3]:8)
			else
				write(M[i,j]:8);
		end;
		writeln;
	end;



 	writeln ('D1 = (', M[1,4], '.', M[2,2], '.', M[3,3], ' + ',
 	M[1,2], '.', M[2,3], '.', M[3,4], ' + ',
 	M[1,3], '.', M[2,4], '.', M[3,2], ')',

	' - ',

 	'(', M[1,3], '.', M[2,2], '.', M[3,4], ' + ',
 	M[1,4], '.', M[2,3], '.', M[3,2], ' + ',
 	M[1,2], '.', M[2,4], '.', M[3,3], ')');

 	writeln ('D1 = (', M[1,4] * M[2,2] * M[3,3], ' + ',
 	M[1,2] * M[2,3] * M[3,4], ' + ',
 	M[1,3] * M[2,4] * M[3,2], ')',

	' - ',

 	'(', M[1,3] * M[2,2] * M[3,4], ' + ',
 	M[1,4] * M[2,3] * M[3,2], ' + ',
 	M[1,2] * M[2,4] * M[3,3], ')');
	writeln;

 	writeln ('D1 = (', (M[1,4] * M[2,2] *  M[3,3])  +
 	(M[1,2] * M[2,3] * M[3,4])  +
 	(M[1,3] * M[2,4] * M[3,2]), ')',

	' - ',

 	'(', (M[1,3] * M[2,2] * M[3,4])  +
 	(M[1,4] * M[2,3] * M[3,2])  +
 	(M[1,2] * M[2,4] * M[3,3]), ')');


	D[1] :=  (((M[1,4] * M[2,2] *  M[3,3])  +
 	(M[1,2] * M[2,3] * M[3,4])  +
 	(M[1,3] * M[2,4] * M[3,2]))

	-

 	((M[1,3] * M[2,2] * M[3,4])  +
 	(M[1,4] * M[2,3] * M[3,2])  +
 	(M[1,2] * M[2,4] * M[3,3])));

	writeln ('D1 = ', D[1]);


	{D2}
	writeln;
	writeln('Determinan D2');
	for i := 1 to 3 do begin
		for j := 1 to 3 do begin
			if (j = 2) then
				write(M[i,j+2]:8)
			else
				write(M[i,j]:8);
		end;
		writeln;
	end;


 	writeln ('D2 = (', M[1,1], '.', M[2,4], '.', M[3,3], ' + ',
 	M[1,4], '.', M[2,3], '.', M[3,1], ' + ',
 	M[1,3], '.', M[2,1], '.', M[3,4], ')',

	' - ',

 	'(', M[1,3], '.', M[2,4], '.', M[3,1], ' + ',
 	M[1,1], '.', M[2,3], '.', M[3,4], ' + ',
 	M[1,4], '.', M[2,1], '.', M[3,3], ')');

 	writeln ('D2 = (', M[1,1] * M[2,4] * M[3,3], ' + ',
 	M[1,4] * M[2,3] * M[3,1], ' + ',
 	M[1,3] * M[2,1] * M[3,4], ')',

	' - ',

 	'(', M[1,3] * M[2,4] * M[3,1], ' + ',
 	M[1,1] * M[2,3] * M[3,4], ' + ',
 	M[1,4] * M[2,1] * M[3,3], ')');
	writeln;

 	writeln ('D2 = (', (M[1,1] * M[2,4] *  M[3,3])  +
 	(M[1,4] * M[2,3] * M[3,1])  +
 	(M[1,3] * M[2,1] * M[3,4]), ')',

	' - ',

 	'(', (M[1,3] * M[2,4] * M[3,1])  +
 	(M[1,1] * M[2,3] * M[3,4])  +
 	(M[1,4] * M[2,1] * M[3,3]), ')');


	D[2] :=  (((M[1,1] * M[2,4] *  M[3,3])  +
 	(M[1,4] * M[2,3] * M[3,1])  +
 	(M[1,3] * M[2,1] * M[3,4]))

	-

 	((M[1,3] * M[2,4] * M[3,1])  +
 	(M[1,1] * M[2,3] * M[3,4])  +
 	(M[1,4] * M[2,1] * M[3,3])));

	writeln ('D2 = ', D[2]);


	{Diterminan D3}
	writeln('Determinan D3 ');
	for i := 1 to 3 do begin
		for j := 1 to 3 do begin
			if (j = 3) then
				write(M[i,j+1]:8)
			else
				write(M[i,j]:8);
		end;
		writeln;
	end;

 	writeln ('D3 = (', M[1,1], '.', M[2,2], '.', M[3,4], ' + ',
 	M[1,2], '.', M[2,4], '.', M[3,1], ' + ',
 	M[1,4], '.', M[2,1], '.', M[3,2], ')',

	' - ',

 	'(', M[1,4], '.', M[2,2], '.', M[3,1], ' + ',
 	M[1,1], '.', M[2,4], '.', M[3,2], ' + ',
 	M[1,2], '.', M[2,1], '.', M[3,4], ')');

 	writeln ('D3 = (', M[1,1] * M[2,2] * M[3,4], ' + ',
 	M[1,2] * M[2,4] * M[3,1], ' + ',
 	M[1,4] * M[2,1] * M[3,2], ')',

	' - ',

 	'(', M[1,4] * M[2,2] * M[3,1], ' + ',
 	M[1,1] * M[2,4] * M[3,2], ' + ',
 	M[1,2] * M[2,1] * M[3,4], ')');
	writeln;

 	writeln ('D3 = (', (M[1,1] * M[2,2] *  M[3,4])  +
 	(M[1,2] * M[2,4] * M[3,1])  +
 	(M[1,4] * M[2,1] * M[3,2]), ')',

	' - ',

 	'(', (M[1,4] * M[2,2] * M[3,1])  +
 	(M[1,1] * M[2,4] * M[3,2])  +
 	(M[1,2] * M[2,1] * M[3,4]), ')');


	D[3] :=  (((M[1,1] * M[2,2] *  M[3,4])  +
 	(M[1,2] * M[2,4] * M[3,1])  +
 	(M[1,4] * M[2,1] * M[3,2]))

	-

 	((M[1,4] * M[2,2] * M[3,1])  +
 	(M[1,1] * M[2,4] * M[3,2])  +
 	(M[1,2] * M[2,1] * M[3,4])));

	writeln ('D3 = ', D[3]);


	writeln;
	writeln;

	writeln ('X = ', D[1], ' / ', D[0]);
	soal[1] := D[1] / D[0];
	writeln ('X = ', soal[1]:5:3);
	writeln;

	writeln ('Y = ', D[2], ' / ', D[0]);
	soal[2] := D[2] / D[0];
	writeln ('Y = ', soal[2]:5:3);
	writeln;

	writeln ('Z = ', D[3], ' / ', D[0]);
	soal[3] := D[3] / D[0];
	writeln ('Z = ', soal[3]:5:3);
	writeln;

readln;
end.

Alhamdulillah

Daftar Pustaka:

  • Utami, Ema, Dan kawan-kawan. 2007. Struktur Data Konsep & Implementasinya dalam Bahasa C & Free Pascal di GNU/LINUX. Jogjakarta: Graha Ilmu.
  • Salim, Yeffriansjah. 2011. Modul Praktek Pemprograman Pascal. Banjarmasin: STMIK Indonesia Banjarmasin