Rabu, 11 Mei 2011

Tugas pascal tentang 1.Pencarian(searching), 2.Pengurutan(Sorting), 3.Penjumlahan Dua Buah Matriks, dan 4. Perkalian Dua Buah Matriks

1. PENCARIAN (Searching)

1. Pendahuluan
Pencarian (searching) merupakan proses fundamental dalam pengolahan data. Proses pencarian adalah menemukan nilai (data) tertentu di dalam sekumpulan data yang bertipe sama (baik bertupe dasar atau bertipe bentukan. Modul ini membicarakan algoritma pencarian datadi dalam larik. Algoritma pencarian yang akan dibicarakan dimulai dengan algoritma pencarian yang paling sederhana (yaitu pencarian beruntun atau sequential search) hingga algoritma pencarian yang lebih maju yaitu pencarian bagidua (binary search).

2. Kegiatan Praktikum
a). Kegiatan Praktikum 1
 Uraian dan contoh
4.1.1 Larik
Larik adalah struktur data yang menyimpan sekumpulan elemen yang bertipe dama, setiap elemen diakses langsung melalui indeksnya (harus bertipe data yang menyatakan keterurutan, misalnya integer atau karakter). Berikut contoh-contoh mendeklarasikan larik di dalam bagian deklarasi :
a. Sebagai peubah
DEKLARASI
A : array [1..100] of integer
NamaMHS : array [1..12] of string
NilUjian : array [0..74] of real
b. Sebagai tipe bentukan
DEKLARASI
Type LarikInt : array [1..100] of integer {nama tipe baru}
A : LarikInt {A adalah sebuah peubah larik integr dengan 100 elemen}

c. Mendefinisikan ukuran larik sebagai konstanta
DEKLARASI
Const Nmaks =100 {ukuran maksimum elemen larik}
Type LarikInt : array [1..Nmaks] of integer
A : LarikInt { A adalah sebuah peubah larik integr dengan 100 elemen }

Gambar larik :
a) D


b) Kar

c) Siswa






Ket : (a) larik bertipe integer,
(b) larik bertipe karakter,
(c) larik bertipe struktur.
Angka 1,2,3,.. menyatakan indeks larik

Contoh larik pada gambar, kita mendefinisikan nama dan tipenya dibagian algoritma sebagai berikut:
DEKLARASI
D : array [1..11] of integer {larik pada gambar (a)}
Kar : array [1..8] of character {larik pada gambar (b)}

Const n = 5 {jumlah data siswa}
Type Data = record

Contoh cara mengacu elemen larik pada gambar :
D [2]
D [k] {mengacu elemen ke-k, dengan syarat k sudah terdefinisi nilainya}
Kar [5]
Siswa [1].Nama
Siswa [1].Usia
Siswa [ j ]. Nama {mengacu elemen ke-j, dengan syarat j sudah terdefinisi nilainya}





4.1.2 Algoritma Pencarian Beruntun (sequential search)
Pencarian beruntun adalah proses membandingkan setiap elemen larik satu persatu secara beruntun, mulai dari elemen elemen pertama sampai elemen yang dicari ditemukan, atau seluruh elemen sudah diperiksa. Contoh : perhatikan larik L dibawah ini dengan n= 6 elemen :
13 16 14 21 76 15
1 2 3 4 5 6

Nilai yang dicari (x) Elemen yang dibandingkan (berturut-turut) Indeks larik yang dikembalikan
21 13, 16, 14, 21 (ditemukan!) 4
13 13 (ditemukan!) 1
12 13,16,14,21,76,15 (tidak ditemukan!) -1

Notasi algoritmik Notasi bahasa pascal
Procedure seq_search
DEKLARASI
L : array[1..20] of integer
x,i : integer

ALGORITMA:
Read (x)
L[1] 13
L[2] 16
L[3] 14
L[4] 21
L[5] 76
L[6] 15
i 1
while (i < 5) and (L[i] ≠ x) i i+1 if (L[i] = x) then writeln (‘ditemukan pada elemen larik ke- ’,i) else writeln (tidak ditemukan!) endif endwhile program pencarian; procedure seq_search; var L: array[1..20] of integer; x,i: integer; begin write('Angka yang dicari= '); readln(x); L[1]:=13; L[2]:=16; L[3]:=14; L[4]:=21; L[5]:= 76; L[6]:=15; i:=1; while (i<5) and (L[i] <> x) do
begin
i:=i+1;
end;
if (L[i]=x) then
writeln('Ditemukan pada elemen larik ke-',i)
else
writeln('Tidak ditemukan!');
end;
begin

seq_search;

end.

Program pencarian
DEKLARASI
Procedure seq_search
ALGORITMA:
Seq_search









b). Kegiatan Praktikum 2
Uraian dan contoh

Algoritma pencarian bagidua
Algoritma pencarian bagidua atau pencarian biner (binary search) digunakan untuk kebutuhan pencarian dengan waktu yang cepat. Prinsip dengan membagi uda data atas dua bagian mengilhami algoritma pencarian bagidua. Data yang disimpan di dalam larik harus sudah terurut. Misalkan dalam larik sudah terurut menurun. Dalam proses pencarian, kita memerlukan dua buah indeks larik, yaitu indeks terkecil dan indeks terbesar. Indeks terkecil sebagai indeks ujung kiri larik dan indeks terbesar sebagai ujung kanan larik. Istilah “kiri” dan “kanan” dinyatakan dengan membayangkan elemen larik tentang horizontal. Misalkan indeks kiri adalah i dan indeks kanan adalah j . pada mulanya kita inisialisasikan i dengan 1 dan j dengan n.
Langkah 1 : Bagidua elemen larik pada elemen tengah. Elemen tengah adalah elem indeks k=(i+j) div 2.
(elemen tengah, L[k], membagi larik menjadi dua bagian, yaitu bagian kiri L [i..j] dan bagian kanan L[k+1..j])
Langkah 2 : Periksa apakah L[k] = x. Jika L [k], pencarian selesai sebab x sudah ditemukan. Tetapi, jika L [k] ≠ x, harus ditentukan apakah pencarian akan dilakukan di larik bagian kiri atau di kanan. Jika L [k] < x. Maka pencarian dilakukan lagi pada larik bagian kanan Langkah 3 : Ulangi langkah 1 hingga x ditemukan atau i > j (yaitu, ukuran larik sudah nol!)
Contoh : ilustrasi pencarian bagidua: misalkan diberikan larik L dengan 8 buah elemen ynag sudah terurut menurun seperti di bawah ini:
81 76 21 18 16 13 10 7
1 2 3 4 5 6 7 8

 Misalkan elemen yang dicari adalah x = 18
Langkah 1 : i =1 dan j=8
Indeks elemen tengah k = (1+8) div 2 = 4 (elemen yang diarsir)

81 76 21 18 16 13 10 7
1 2 3 4 5 6 7 8



Langkah 2:
Pembandingan : L [4] = 18? Ya! (x ditemukan, proses pencarian selesai)
 Misalkan elemen yang dicari adalah x = 100
Langkah 1 : i =1 dan j=8
Indeks elemen tengah k = (1+8) div 2 = 4 (elemen yang diarsir)

81 76 21 18 16 13 10 7
1 2 3 4 5 6 7 8


Langkah 2:
Pembandingan: L [4] = 100? Tidak! Harus diputuskan apakah pencarian akan dilakukan di bagian kiri atau bagian kanan dengan pemeriksaan sebagai berikut :
Pembandingan: L [4] > 100? Tidak! Lakukan pencarian pada larik bagian kiri dengan i =1 (tetap) dan j =k-1=3

81 76 21
i=1 2 3=j

Langkah 1’ : i =1 dan j=3
Indeks elemen tengah k = (1+3) div 2 = 2 (elemen yang diarsir)

81 76 21
1 2 3



Langkah 2’ :
Pembandingan: L [2] = 100? Tidak! Harus diputuskan apakah pencarian akan dilakukan di bagian kiri atau bagian kanan dengan pemeriksaan sebagai berikut :
Pembandingan: L [2] > 100? Tidak! Lakukan pencarian pada larik bagian kiri dengan i =1 (tetap) dan j =k-1=1

81
1

Langkah 1”: i =1 dan j=1
Indeks elemen tengah k = (1+1) div 2 = 1 (elemen yang diarsir)

81
1

Langkah 2” :
Pembandingan: L [1] = 100? Tidak! Harus diputuskan apakah pencarian akan dilakukan di bagian kiri atau bagian kanan dengan pemeriksaan sebagai berikut :
Pembandingan: L [1] > 100? Tidak! Lakukan pencarian pada larik bagian kiri dengan i =1 (tetap) dan j =k-1=0
Karena i >j, maka tidak ada lagi bagian larik yang tersisa. Dengan demikian, x tidak ditemukan di dalam larik. Proses pencarian dihentikan.

Contoh algoritma pencarian bagidua : misalkan diberikan larik L dengan 8 buah elemen ynag sudah terurut menurun seperti di bawah ini:
81 76 21 18 16 13 10 7
1 2 3 4 5 6 7 8

Notasi Algoritmik Notasi bahasa pascal
Procedure binary_search
DEKLARASI
L: array[1..10] of integer
x,i,j,k: integer
ketemu: boolean
ALGORITMA:
readln(x)
L[1] 81
L[2] 76
L[3] 21
L[4] 18
L[5] 16
L[6] 13
L[7] 10
L[8] 7
Ketemu FALSE;
i 1
j 10
while (i<=j) and (not ketemu) do begin k (i+j) div 2 if (L[k]=x) then ketemu TRUE else if (L[k]>x) then
j k-1
else
i k+1
endif
endif
endwhile
if ketemu then
writeln('Ditemukan!')
else
writeln('Tidak ditemukan!');
endif
program pencarian;

procedure binary_search;
var
L: array[1..10] of integer;
x,i,j,k: integer;
ketemu: boolean;

begin
write('Angka yang dicari= '); readln(x);
L[1]:=81; L[2]:=76; L[3]:=21; L[4]:=18; L[5]:= 16;
L[6]:=13; L[7]:=10; L[8]:=7;
ketemu:=FALSE;
i:=1;
j:=10;
while (i<=j) and (not ketemu) do begin k:=(i+j) div 2; if (L[k]=x) then ketemu:=TRUE else if (L[k]>x) then
j:=k-1
else
i:=k+1;
end;
if ketemu then
writeln('Ditemukan!')
else
writeln('Tidak ditemukan!');
end;

begin

binary_search;

end.
Program pencarian

DEKLARASI
Procedure seq_search
ALGORITMA:
binary_search






2. PENGURUTAN (Shorting)

1. Pendahuluan
Pengurutan (sorting) adalah proses mengatur sekumpulan objek menurut urutan dan susunan tertentu. Masalah pengurutan dapat ditulis sebagai berikut:
Diberikan larik L dengan n elemen yang sudah terdefinisi elemen-elemennya. Urutan larik tersebut sehingga tersusun secara menaik (ascending):
L[1] ≤ L[2] ≤ L[3] ≤....≤ L[n]

Atau secara menurun (descending):
L[1] ≥ L[2] ≥ L[3] ≥ ....≥ L[n]

Data yang diurut dapat berupa data bertipe dasar atau tipe terstruktur (record). Jika data bertipe terstruktur, maka harus dispesifikasikan berdasarkan field apa data tersebut diurutkan. Field yang dijadikan dasar pengurutan dikenal sebagai field kunci.
Algoritma yang sering ditemukan dalam literatur-literatur komputer antara lain: Bubble Sort, Selection Sort (Maximum Sort dan Minimum Sort), Insertion Sort, Heap Sort, Shell Sort, Quick Sort, Merge Shorte, Radix Sort, tree sort. Dalam modul ini tidak akan membahas semua algoritma pengurutan tersebut, tetapi hanya tiga buah algoritma pengurutan yang sederhana saja, yaitu:
 Metode Pengurutan Apung (Bubble Sort),
 Metode Pengurutan Seleksi (Selection Sort),
 Metode Pengurutan Sisip (Shell Sort)

2. Kegiatan Praktikum
.4.1. Kegiatan Praktikum 1
i. Uraian dan contoh

4.1.1 Algoritma Pengurutan Apung (Bubble Sort)
Prinsip pengapungan digunakan pada pengurutan apung. Apabila kita menginginkan larik terurut menaik, maka elemen larik yang berharga paling kecil ” diapungkan”, artinya diangkat ke ”atas” (atau ke ujung kiri larik) melalui proses pertukaran. Pengapungan ini dilakukan sebanyak n-1 langkah (satu langkah tersebut juga satu kali pass) dengan n adalah ukuran larik. Pada akhir setiap langkah ke-i, larik [1..n] akan terdiri atas dua bagian yaitu bagian yang sudah terurut, yaitu L[1..i], dan bagian yang belum terurut, L[i+1..n]. Setelah langkah terakhir, diperoleh larik L[1..n] yang terurut menaik. Lihat gambar.1:
1 i i+1 n
Sudah terurut Belum terurut
Gambar.1 Bagian larik yang terurut pada metode pengurutan apung

Prosedur pengurutan apung (Bubble Sort) agar larik L terurut menaik adalah sebagai berikut:
Procedure bubblesort(var L:larikint; n:integer);

Var
i : integer ;
k : integer ;
temp : integer ;

begin
for i := 1 to n-1 do
for k := n downto i+1 do
if L[ k ] < L [ k-1 ] then temp := L[ k ]; L[ k ]:= L[ k-1]; L[ k-1]:= temp; End; Prosedur pengurutan apung (Bubble Sort) dengan memanfaatkan prosedur Tukar, sebagai berikut : Procedure bubblesort_naik(var L : larikint ; n : integer); Var i : integer ; k : integer ; procedure tukar (var a : integer ; b : integer); var temp : integer ; begin temp := a ; a := b ; b := temp ; end ; begin for i := 1 to n-1 do for k := n downto i+1 do if L[ k ] < L [ k-1 ] then Tukar (L [k], L[k-1]); End; Prosedur pengurutan apung (Bubble Sort) agar larik L terurut menurun adalah sebagai berikut: Procedure bubblesort_turun(var L : larikint ; n : integer); Var i : integer ; k : integer ; procedure tukar (var a : integer ; b : integer); var temp : integer ; begin temp := a ; a := b ; b := temp ; end ; begin for i := 1 to n-1 do for k := n downto 1 do if L[ k ] < L [ k-1 ] then Tukar (L [k], L[k-1]); End; Contoh 4.1: program pengurutan bublesort dengan larik terurut menaik! program urut; uses wincrt; var L: array [1..100] of integer; i,k,n,temp : integer; procedure input; begin writeln ('Data sebelum diurutkan'); write('masukkan data= '); readln(n); for i:=1 to N do begin write('L[' ,i, ']= ');readln (L[i]) ; end; end; procedure bublesort; begin for i:=1 to N-1 do begin for k :=N downto i+1 do begin if L[k] < L[k-1] then begin temp :=L[k]; L[k] := L[k-1]; L[k-1] :=temp; end; end; end; end; begin input; writeln; bublesort; writeln ('Data setelah diurutkan '); for i:=1 to N do begin writeln ('L[' ,i, '] = ',L[i]); end; writeln; end. .4.2. Kegiatan Praktikum  Uraian dan contoh Algoritma Pengurutan Seleksi (Selection Sort) Pengurutan Seleksi (Selection Sort) adalah memilih elemen maksimum/minimum dari larik, lalu menempatkan elemen maksimum/minimum itu pada awal atau akhir larik (elemen terujung) (Lihat gambar 2). Selanjutkan elemen terujung tersebut “diisolasi” dan tidak disertakan pada proses selanjutnya. Proses yang sama diulang untuk elemen larik yang tersisa, yaitu memilih elemen maksimum/minimum berikutnya dan mempertukarkannya dengan elemen terujung larik sisa. Proses memilih nilai maksimum/minimum dilakukan pada setiap pass. Jika larik berukuran n, maka jumlah pass adalah n-1. Sebelum : 1 n Belum terurut Sesudah : 1 N Belum terurut terurut Ada dua varian algoritma pengurutan seleksi ditinjau dari pemilihan elemen maksimum/minimum, yaitu : 1) Algoritma pengurutan seleksi-maksimum, yaitu memilih elemen maksimum sebagai basis pengurutan. Prosedur pengurutan seleksi – maksimum untuk pengurutan menaik, sebagai berikut: Procedure selectionsortmax_naik(var L : larikint ; n : integer ); Var i : integer ; j : integer ; imaks: integer ; maks : integer ; temp : integer ; begin for i := n downto 2 do imaks := 1; maks := L[1]; for j := 2 to i do if L[ j ] > maks then
imaks := j ;
maks := L[ j ] ;
begin
temp := L[ i ] ;
L[ i ] := maks ;
L[imaks] := temp ;
End;
End;

Prosedur pengurutan seleksi – maksimum untuk pengurutan menaik tanpa peubah maks, sebagai berikut:

Procedure selectionsortmax_naik(var L : larikint ; n : integer );
Var
i : integer ;
j : integer ;
imaks: integer ;
temp : integer ;
begin
for i := n down to 2 do
imaks := 1;
for j := 2 to i do
if L[ j ] > L[imaks] then
imaks := j ;
begin
temp := L[ i ] ;
L[ i ] := L[imaks] ;
L[imaks] := temp ;
End;
End;

Prosedur pengurutan seleksi – maksimum dengan memanfaatkan prosedur Tukar, sebagai berikut :
Procedure selectionsortmax_naik(var L : larikint ; n : integer );
Var
i : integer ;
j : integer ;
imaks: integer ;
procedure tukar (var a : integer ; b : integer);
var
temp : integer ;
begin
temp := a ;
a := b ;
b := temp ;
end ;
begin
for i := n down to 2 do
imaks := 1;
for j := 2 to i do
if L[ j ] > L[imaks] then
imaks := j ;
tukar (L[imaks], L[i]);
End;

Prosedur pengurutan seleksi – maksimum agar larik L terurut menurun adalah sebagai berikut:
Procedure selectionsortmax_turun(var L : larikint ; n : integer );
Var
i : integer ;
j : integer ;
imaks: integer ;

procedure tukar (var a : integer ; b : integer);
var
temp : integer ;
begin
temp := a ;
a := b ;
b := temp ;
end ;

begin
for i := 1 to n-1 do
imaks := i;
for j := i+1 to n do
if L[ j ] > L[imaks] then
imaks := j ;
tukar (L[imaks], L[i]);
End;


Contoh 4.2 program pengurutan seleksi maksimum dengan terurut menaik;
program urut;
uses wincrt;
var
L: array [1..100] of integer;
i,j,imaks,n,temp : integer;

procedure input;
begin
writeln ('Data sebelum diurutkan');
write('masukkan banyaknya data= '); readln(n);
for i:=1 to N do
begin
write('L[' ,i, ']= ');readln (L[i]) ;
end;
end;

Procedure selectionsortmax_naik;

begin
for i := n downto 2 do
begin
imaks := 1;
for j := 2 to i do
begin
if L[ j ] > L[imaks] then
imaks := j ;
begin
temp := L[ i ] ;
L[ i ] := L[imaks] ;
L[imaks] := temp ;
end;
end;
end;
end;

begin
input;
writeln;
selectionsortmax_naik;
writeln ('Data setelah diurutkan ');
for i:=1 to N do
begin
writeln ('L[' ,i, '] = ',L[i]);
end;
writeln;
end.


2) Algoritma pengurutan seleksi-minimum, yaitu memilih elemen minimum sebagai basis pengurutan.

Prosedur pengurutan seleksi – minimum dengan agar larik Lterurut menaik, sebagai berikut :
Procedure selectionsortmin_naik(var L : larikint ; n : integer );
Var
i : integer ;
j : integer ;
imin integer ;

procedure tukar (var a : integer ; b : integer);
var
temp : integer ;
begin
temp := a ;
a := b ;
b := temp ;
end ;

begin
for i := 1 to n-1 do
imin := i;
for j := i + 1 to n do
if L[ j ] < L[imin] then imin := j ; tukar (L[imin], L[i]); End; Prosedur pengurutan seleksi – minimum agar larik L terurut menurun adalah sebagai berikut: Procedure selectionsortmin_turun(var L : larikint ; n : integer ); Var i : integer ; j : integer ; imin: integer ; procedure tukar (var a : integer ; b : integer); var temp : integer ; begin temp := a ; a := b ; b := temp ; end ; begin for i := n downto 2 do imin := 1; for j := 2 to i do if L[ j ] < L[imin] then imin := j ; tukar (L[imaks], L[i]); End; Contoh 4.3 : program pengurutan seleksi-minimum dengan terurut menurun! program urut; uses wincrt; var L: array [1..100] of integer; i,j,imin,n,temp : integer; procedure input; begin writeln ('Data sebelum diurutkan'); write('masukkan banyaknya data= '); readln(n); for i:=1 to N do begin write('L[' ,i, ']= ');readln (L[i]) ; end; end; Procedure selectionsortmin_turun; begin for i := n downto 2 do begin imin := 1; for j := 2 to i do begin if L[ j ] < L[imin] then imin := j ; begin temp := L[ i ] ; L[ i ] := L[imin] ; L[imin] := temp ; end; end; end; end; begin input; writeln; selectionsortmin_turun; writeln ('Data setelah diurutkan '); for i:=1 to N do begin writeln ('L[' ,i, '] = ',L[i]); end; writeln; end. .4.3. Kegiatan Praktikum 3  Uraian dan contoh Algoritma Pengurutan Sisipan (Insertion Sort) Pengurutan sisip (insertion Sort) adalah metode pengurutan dengan cara menyisipkan elemen larik pada posisi yang tepat. Pencarian posisi yang tepat dilakukan dengan menyisir larik. Selama penyisiran dilakukan pergeseran elemen larik. Metode pengurutan sisip cocok untuk persoalan menyisipkan elemen baru kepada sekumpulan elemen yang sudah terurut. Prosedur Pengurutan Sisip Untuk Pengurutan Menaik : Procedure insertionsort_naik (var L: larikint; n:integer); Var i : integer ; j : integer ; y : integer ; ketemu : boolean ; begin for i := 2 to n do y := L[ i ] ; j := i – 1 ; ketemu := false ; while (j >= 1) and (not ketemu) do
if y < L [ j ] L [ j+1] := L [ j ] ; j := j-1; else ketemu := true ; L [ j+1] := y; End; Prosedur Pengurutan Sisip Untuk Pengurutan Menurun : Procedure insertionsort_turun (var L: larikint; n:integer); Var i : integer ; j : integer ; y : integer ; ketemu : boolean ; begin for i := 2 to n do y := L[ i ] ; j := i – 1 ; ketemu := false ; while (j >= 1) and (not ketemu) do
if y > L [ j ]
L [ j+1] := L [ j ] ;
j := j-1;
else
ketemu := true ;
L [ j+1] := y;
End;





3. PENJUMLAHAN DUA BUAH MATRIKS
Penjumlahan dua buah matriks A dan B menghasilkan matriks C, atau A+B = C. Penjumlahan dua buah matriks dapat dilakukan bila ukuran matriks A dan ukuran matriks B sama dan kedua matriks sudah terdefinisi nilainya. Matriks C akan berukuran sama dengan matriks A dan B.
Penjumlahan matriks A dan B didefinisikan sebagai berikut :
C [i,j] = A [i,j] + B [i,j] untuk semua i dan j.
Contoh prosedur penjumlahan dua buah matriks :
Procedure jumlahduaMatriks (var M: Matrix ; Nbar, Nkol :integer) ;
Var
i : integer ; {indeks baris}
j : integer ; {indeks kolom}

begin
for i := 1 to Nbar do
begin
for j := 1 to Nkol do
begin
c [i,j] := A [i,j] + B [i,j];
write (c[i,j]);
end;
writeln;
end;
end;



4. PERKALIAN DUA BUAH MATRIKS
Perkalian dua buah matriks A dan B menghasilkan matriks C, yaitu C = A x B. mengalikan dua buah matriks lebih rumit daripada menjumlahkan keduanya. Syarat perkalian matriks A dan matriks B, jumlah kolom matriks A harus sama dengan jumlah baris matriks B.

Misalkan A [1..m,1..n] dan B [1..n,1..p], yang dalam hal ini,
m adalah jumlah baris matriks A,
n adalah jumlah kolom matriks A dan jumlah baris matriks B,
p adalah jumlah kolom matriks B.
hasil perkalian A dan B menghasilkan matriks c[1..m,1..p]

algoritma perkalian matriks:
1. inisialisasi C [i,j] dengan 0, untuk i = 1,2,...,m dan j = 1,2,...,p.
2. untuk setiap baris i = 1,2,...,m pada matriks A lakukan:
untuk setiap baris j = 1,2,...,p pada matriks B lakukan:
untuk setiap baris k = 1,2,...,n pada matriks B lakukan:
C [i,j] = C [i,j] + A [i,k] * B [k,j]

Contoh prosedur perkalian dua buah matriks untuk A dan B yang memiliki jumlah baris yang berbeda :
Procedure perkalianMatriks (var A,B: matrix ; C: matrix ; m,n :integer; p:integer ) ;
Var
NbarC, NkolC :integer;
i, j, k : integer ;

begin
NbarC := m { jumlah baris matriks hasil perkalian }
NkolC := p { jumlah kolom matriks hasil perkalian }

Begin
For i := 1 to m do
Begin
For j := 1 to p do
Begin
c[i,j]:=0;
For k := 1 to n do
C [i,j] = C [i,j] + A [i,k] * B [k,j] ;
Write ( C [i,j] : 4);
End;
Writeln;
End;
End;
End;

Jika A dan B keduanya memiliki jumlah baris dan kolom yang sama (berukuran bujur sangkar (n x n)), hasil perkalian adalah matriks C yang juga berukuran n x n. Contoh procedure perkalian dua buah matriks :
procedure perkalian(var a,b:matrix ; n:integer);
var c : matrix;
i,j,k : integer;
begin
writeln;
writeln('Hasil Perkalian Matriks');
for i:=1 to 3 do
begin
for j:=1 to 3 do
begin
c[i,j]:=0; { inisialisasi C[i,j] dengan 0 }
for k:=1 to 3 do
c[i,j] :=c[i,j]+ a[i,k] * b[k,j];
write(c[i,j]:4);
end;
writeln;
end;
end;
end;