You are on page 1of 39

BAB I

TUJUAN DAN LANDASAN TEORI

1.1. Tujuan

Mahasiswa mengenali dan memahami struktur Larik/Array dalam pemrograman.

Mahasiswa dapat menyelesaikan masalah dengan menggunakan struktur Array


sebagai solusi program.

Mahasiswa lebih mahir menggunakan perintah dasar bahasa pemrograman


Delphi.

1.2. Landasan Teori


Larik / array adalah tipe terstruktur yang terdiri dari sejumlah komponenkomponen yang mempunyai tipe yang sama.
1.2.1. Deklarasi Array
Array yang akan dipergunakan harus di deklarasikan terlebih dahulu. Deklarasi
dari Array diawali dengan kata cadangan Array diikuti oleh tipe index yang diletakkan
diantara tanda [ ] diikuti lagi oleh kata cadangan of dan tipe arraynya. Array dapat
bertipe sederhana byte, word, integer, real, boolean, char, string dan tipe scalar atau
subrange. Contoh:
Var
X : array [ 1..100 ] of integer ;

Larik X dideklarasikan sebagai larik tipe integer dengan jumlah elemen


maksimum 100 elemen, dimana nilai elemen larik ini harus berisi nilai integer.

1.2.2. Deklarasi Tipe Index Subrange Integer


Tipe index subrange integer sebagai berikut :
Var NilaiHuruf : array [1..5] of char ;

Nilai [1..5] inilah yang dimaksud dengan index subrange integer. Index dari
larik diatas dapat dideklarasikan terlebih dahulu di bagian deklarasi tipe :

Type
Jangkauan = 1..5 ; {tipe subrange integer}
Var
NilaiHuruf : array [Jangkauan] of char ;
Begin

end.

1.2.3. Deklarasi Tipe Index Subrange Byte


Kalau index dari larik tidak sampai dengan 255, maka index dari larik ini dapat
dideklarasikan dengan tipe byte.
Var
X : array [0..255] of real ;

Karena nilai 0 sampai 255 merupakan nilai subrange byte, maka deklarasi ini
dapat ditulis :
Var
X : array [byte] of real ;

1.2.4. Deklarasi Tipe Index Subrange Word


Jika jangkauan index dari 0 sampai 65525, maka index dari larik dapat
dideklarasikan dengan tipe word.
Var
X : array [byte] of word ;

1.2.5. Deklarasi Tipe Index Subrange Boolean


Index larik yang bertipe Boolean, hanya mempunyai maksimum 2 buah elemen
saja.
Type
Keterangan = string [11] ;
Var
X : array [Boolean] of keterangan ;

1.2.6. Deklarasi Tipe Index Subrange Char


Tipe char adalah tipe subrange yang mempunyai nilai sebanyak 256 buah (0
255 ) sesuai dengan urutan kode ASCII.
Var
X : array [char] of integer ;

1.2.7. Deklarasi Tipe Index Skalar


Index dari larik dapat berupa tipe scalar atau enumerated. Contoh program:

Var
Jumlah : array [(Jan, Peb, Mar)] of integer ;
Begin
Jumlah[Jan] : = 125 ;
Jumlah{Peb] : = 75 ;
Jumlah[Mar] : = 18 ;
Writeln ( Jumlah untuk bulan maret = , Jumlah{Mar});
End.

1.2.8. Deklarasi Konstanta Lirik


Larik tidak hanya dapat berupa suatu variable yang dideklarasikan di
bagian deklarasi variable, tetapi juga dapat berupa suatu konstanta yang
dideklarasikan dibagian deklarasi konstanta. Contoh program :
Const
X : array [1..5] of integer = (6, 25, 375, 5, 2) ;
Var
I : word ;
Begin
For I : = 1 to 5 do
Writeln ( Nilai konstanta larik ke , I, =, X[I] ) ;
End.

1.2.9. String Sebagai Larik Tipe Char


String dapat dianggap sebagai suatu larik tipe char dengan index dari 0
sampai dengan panjang dari string yang di definisikan. Contoh program :
Var
I : word ;
Nama : string [255] ;
Begin
Write ( Nama Anda ? ) ; readln ( Nama ) ;
Writeln ;
Writeln ( Nama Anda kalau dibaca terbalik adalah : ) ;
For I : = ord (Nama [0] ) down to 1 do
Write (Nama [I] ) ;
End.

1.2.10. Larik Dimensi Banyak


Larik dapat juga berdimensi lebih dari satu yang disebut dengan larik
dimensi banyak, yang dapat berdimensi dua, dimensi tiga dan seterusnya. Larik
dimensi 2 mewakili suatu bentuk table atau matrik, yaitu index yang pertama
dapat menunjukkan baris dan index kedua dapat menunjukkan kolom dari table
atau metric. Bentuk Umum :
Nama_larik = array [tipe index1] of array [tipe index2] of tipe
larik
Atau
Nama_larik = array [tipe index1, tipe index2] of tipe larik

1.2.11. Parameter Larik


Larik dapat digunakan sebagai parameter yang dikirimkan baik secara nilai
atau secara acuan ke prosedur atau ke fungsi. Prosedur yang menggunakan
parameter berupa larik harus dideklarasikan didalam judul prosedur yang
menyebutkan parameternya bertipe larik. Contoh program :
Type
Larik = array [1..50, 1..50] of real ;
Var
I, J, K : byte ;
Procedure inverse (Var X : Larik ; N : byte ) ;
.
.
Begin
.

end.

BAB II
LANGKAH KERJA

2.1. Alat dan Bahan

Personal Computer (PC)


Perangkat lunak Delphi Borland

2.2. Prosedur Percobaan


String Grid digunakan untuk menampilkan data array satu dimensi atau
multi dimensi.
Langkah-langkah :
1. Pilih menu file dan klik new form
2. Pada form 2 tanamkan kontrol GroupBox (2 buah), Label (6 buah), Edit
(3 buah), Button (3 buah) dan StringGrid (3 buah) pada jendela tool
Additional.
3. Aturlah properti-properti dari masing-masing kontrol sesuai dengan table
sebagai berikut :
Komponen
Form2

GroupBox1

GroupBox2

StringGrid1

StringGrid2

Properti

Nilai

Name

FrmArray_Matrik

Caption

Menjumlahkan Matriks

Name

GroupBox1

Caption

Input Jumlah Baris dan Kolom Matriks

Name

GroupBox2

Caption

Input Elemen Matriks

Name

StringGrid1

FixedRow

FixedColl

Name

StringGrid2

StringGrid3

Label1
Label2
Label3
Label4
Label5
Label6
Edit1
Edit2
Edit3
Button1
Button2
Button3

FixedRow

FixedColl

Name
FixedRow
FixedColl
Name
Caption
Name
Caption
Name
Caption
Name
Caption
Name
Caption
Name
Caption
Name
Name
Name
Name
Caption
Name
Caption
Name
Caption

StringGrid3
0
0
Label1
Jumlah Baris
Label2
Jumlah Kolom
LblInput
Elemen
Label4
MATRIK A
Label5
MATRIK B
Label6
MATRIK C
EdBaris
EdKolom
EdMat
BtJumlah
OK
BTJumlah
Matrik A+B
BTBtInput
OK

4. Membuat desain seperti gambar di bawah ini.

5. Lakukan deklerasi variabel dan array pada Var:


i,j,k,l:integer;
Status:Boolean;

6. Lakukan kode program untuk event OnCreate pada form.


Procedure TfrmArray_Matrik.FormCreate(Sender:Tobject);
begin
GroupBox2.Enabled:=false;
end;

7. Lakukan kode program untuk event OnClick pada BTJumlah.


procedure TFrmArray_Matrik.BtJumlahClick(Sender:Tobject);
begin
Status:=True;
StringGrid1.RowCount:=strtoint(EdBaris.Text);
StringGrid1.ColCount:=strtoin(EdKolom.Text);
StringGrid2.RowCount:=strtoint(EdBaris.Text);
StringGrid2.ColCount:=strtoint(EdKolom.Text);
StringGrid3.RowCount:=strtoint(EdBaris.Text);
StringGrid3.ColCount:=strtoint(EdKolom.Text);
EdBaris.Enabled:=false;
EdKolom.Enabled:=false;
GroupBox2.Enabled:=true;
end;

8. Lakukan kode program untuk event OnChange pada EdMat.


procedure TFrmArray_Matrik.EdMatChange(Sender:Tobject);
begin
Lblinput.Caption:=[++inttostr(i)+,+inttostr(j)+];
end;

9. Lakukan kode program untuk event OnClick pada BtnInput.


procedure TFrmArray_Matrik.BtInputClick(Sender:Tobject);
begin

if status=True then
begin
StringGrid1.Cells[i,j]:=EdMat.Text;
groupbox2.Caption:=Input Elemen Matriks A
end
else if status=false then
begin
StringGrid2.Cells[i,j]:=EdMat.Text;
groupbox2.Caption:=Input Elemen Matriks B;
end;
If(i<>strtoint(Edkolom.text)-1)

or

(j<>strtoint(Edbaris.Text)-

1)then
begin
if i<strtoint(Edkolom.Text)-1 then
i:=i+1
else if j<strtoint(Edbaris.Text)-1 then
begin
i:=0;
j:=j+1;
end;
end
else
begin
if

status=true then
ShowMessage(Elemen sudah habis isi Matrik berikutnya)

else
begin
ShowMessage(Elemen sudah habis isi jumlahkan Matriks A dan
B);
GroupBox2.enabled:=false;
end;
i:=0;
j:=0;
Status:=false;
end;

10. Setelah melakukan koding di atas, kini kita lakukan kode program untuk
event OnClick pada BTTambah.
procedure TFrmArray_Matrik.BtTambahclick(Sender:Tobject);
var EmaA, EmatB:integer;
begin
for i:=0 to strtoint(Edbaris.Text)-1 do
for j:=0 to strtoint(Edkolom.text)-1 do

begin
EMaA:=StrToint(StringGrid1.Cells[i,j]);
EMatB:=Strtoint(StringGrid2.Cells[i,j]);
StringGrid3.Celss[i,j]:=IntTostr(EMaA+EMatB);
end;
end;

TUGAS PRAKTIKUM

1. Buatlah program untuk melakukan perkalian dua buah matrik.

2. Buatlah program untuk mengurutkan N buah bilangan (ascending dan


descending)

Tombol input digunakan untuk memasukan isi textbox bilangan I ke


dalam list box.

Tombol Urutkan akan mengurutkan angka yang ada di dalam list box
sesuai dengan opsi urut yang dipilih.

BAB III
PEMBAHASAN

3.1. Program Pertama (Penjumahan Matrik)


Program

pertama

adalah

sebuah

program

yang

bertujuan

untuk

menjumlahkan dua buah matrik, dimana jumlah elemen-elemen beserta ordo-nya


dapat ditentukan oleh user.
Adapun program ini memerlukan sebuah groupBox yang menggolongkan
komponen label, button, dan kontrol edit inputan untuk menentukan jumlah ordo
(baris dan kolom matrik) serta GroupBox lainnya untuk menggolongkan label,
kontrol edit dan button untuk menentukan nilai elemen dalam matrik. Selain itu
program ini sangat memerlukan komponen StringGrid. StringGrid merupakan
komponen visual Delphi yang digunakan menyajikan data dalam bentuk lajur atau
Grid sehingga penggunaannya tepat untuk menyajikan elemen matrik.
Output yang diharapkan adalah, ketika user menginputkan jumlah baris dan
kolom yang diinginkan lalu meng-klik button OK, StringGrid akan menampilkan
jumlah baris dan kolom yang sama dengan inputan user. Kemudian user akan
menginputkan satu-persatu elemen matrik A dan B pada kolom edit elemen. Jika
seluruh elemen telah dimasukkan dan user meng-klik button hitung, maka hasil
penjumlahan matrik akan ditampilkan pada StringGrid ketiga sebagai matrik C.
Untuk mendapatkan output yang sesuai, maka input yang digunakan adalah :

INPUT PROGRAM PERTAMA (Penjumlahan Matrik)


unit Unit1;
interface
uses
Windows,

Messages,

SysUtils,

Variants,

Classes,

Graphics,

Controls,

10

Forms,
Dialogs, Grids, StdCtrls;
type
TFrnArray_Matrik = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Label1: TLabel;
Label2: TLabel;
EdBaris: TEdit;
EdKolom: TEdit;
lBINPUT: TLabel;
EdMat: TEdit;
BTInput: TButton;
BtJumlah: TButton;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
BtTambah: TButton;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure BtTAMBAHClick(Sender: TObject);
procedure EdMatChange(Sender: TObject);
procedure BTInputClick(Sender: TObject);
procedure BtJumlahClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
i,j,k,l:integer;
status:boolean;
FrnArray_Matrik: TFrnArray_Matrik;
implementation
{$R *.dfm}
procedure TFrnArray_Matrik.FormCreate(Sender: TObject);
begin
GroupBox2.Enabled:=false;
end;
procedure TFrnArray_Matrik.BtJumlahClick(Sender: TObject);
begin
Status:=true;
StringGrid1.RowCount:=strtoint(EdBaris.Text);
StringGrid1.ColCount:=strtoint(EdKolom.Text);
StringGrid2.RowCount:=strtoint(EdBaris.Text);
StringGrid2.ColCount:=strtoint(EdKolom.Text);
StringGrid3.RowCount:=strtoint(EdBaris.Text);
StringGrid3.ColCount:=strtoint(EdKolom.Text);
EdBaris.Enabled:=false;
EdKolom.Enabled:=false;
GroupBox2.Enabled:=true;
end;
procedure TFrnArray_Matrik.BtTAMBAHClick(Sender: TObject);
Var EMaA,EMab:integer;

11

begin
for i:=0 to strtoint(EdBaris.text)-1 do
for j:=0 to strtoint(EdKolom.text)-1 do
begin
EMaA:=Strtoint(StringGrid1.cells[i,j]);
EMaB:=Strtoint(StringGrid2.cells[i,j]);
StringGrid3.cells[i,j]:=Inttostr(EMaA+EMAB);
end
end;

procedure TFrnArray_Matrik.EdMatChange(Sender: TObject);


begin
LbInput.Caption:='['+''+inttostr(i)+','+inttostr(j)+']';
end;
procedure TFrnArray_Matrik.BTInputClick(Sender: TObject);
begin
if status=True then
begin
StringGrid1.Cells[i,j]:=EdMat.Text;
groupbox2.Caption:='Input Elemen Matriks A'
end
else if status=false then
begin
StringGrid2.Cells[i,j]:=EdMat.Text;
groupbox2.Caption:='Input Elemen Matriks B'
end;
if(i<>strtoint(EdKolom.Text)-1) or (j<>strtoint(EdBaris.Text)-1) then
begin
if i< strtoint(EdKolom.Text)-1 then
i:=i+1
else if j< strtoint(EdBaris.Text)-1 then
begin
i:=0;
j:=j+1 ;
end;
end
else
begin
if status = true then
ShowMessage('Elemen sudah habis, isi matrik berikutnya!')
else
begin
ShowMessage('Elemen sudah habis! jumlahkan Matriks A dan B');
GroupBox2.Enabled:=false;
end;
i:=0;
j:=0;
status:=false;
end;
end;
procedure TFrnArray_Matrik.Button1Click(Sender: TObject);
begin
application.Terminate;
close;
end;
end.

12

Penjelasan Koding :
var
i,j:integer;
status:boolean;
FrnArray_Matrik: TFrnArray_Matrik;

Blok statement di atas merupakan blok deklarasi variabel beserta tipe data
yang digunakan. i dan j adalah variabel yang akan digunakan sebagai statement
perulangan. Sedangkan boolean merupakan tipe data logika,yang berisi dua
kemungkinan nilai:TRUE(benar) atau FALSE(salah).
procedure TFrnArray_Matrik.FormCreate
procedure TFrnArray_Matrik.FormCreate(Sender: TObject);
begin
GroupBox2.Enabled:=false;
end;

Prosedur ini difungsikan pada event FormCreate, dimana ketika prosedur ini
berjalan maka komponen dalam GroupBox2 (group elemen matrik) dinonaktifkan dan tidak dapat diberikan inputan.
procedure TFrnArray_Matrik.BtJumlahClick
procedure TFrnArray_Matrik.BtJumlahClick(Sender: TObject);
begin
Status:=true;
StringGrid1.RowCount:=strtoint(EdBaris.Text);
StringGrid1.ColCount:=strtoint(EdKolom.Text);
StringGrid2.RowCount:=strtoint(EdBaris.Text);
StringGrid2.ColCount:=strtoint(EdKolom.Text);
StringGrid3.RowCount:=strtoint(EdBaris.Text);
StringGrid3.ColCount:=strtoint(EdKolom.Text);
EdBaris.Enabled:=false;
EdKolom.Enabled:=false;
GroupBox2.Enabled:=true;
end;

Blok procedure TFrnArray_Matrik.BtJumlahClick merupakan blok


statement yang difungsikan terhadap button OK (button pada GroupBox1) yang
berfungsi untuk memroses lebih lanjut inputan user yang berupa jumlah dan
kolom baris matrik.

13

Blok ini berisi baris statement yang memiliki tujuan yang sama yaitu
membaca inputan dari EdBaris (jumlah baris matrik) dan EdKolom (jumlah
kolom matrik).

StringGrid1.RowCount:=strtoint(EdBaris.Text);

program akan membaca inputan user pada EdBaris. RowCount digunakan


untuk menentukan jumlah baris pada StringGrid. Sehingga tujuan statement di
atas adalah, untuk menentukan jumlah baris dan menerapkannya pada StringGrid
ke-1 (Matrik A) sesuai dengan inputan dari user. statement ini berlaku pula pada
statement lainnya dengan StringGrid2 (Matrik B) dan StringGrid3 (Matrik C)
StringGrid1.ColCount:=strtoint(EdKolom.Text);

ColCount digunakan untuk menentukan jumlah kolom pada StringGrid.


Sehingga tujuan statement ini yaitu, untuk menentukan jumlah kolom dan
menerapkannya pada StringGrid ke-1 (Matrik A) sesuai dengan inputan dari user.
statement ini berlaku pula pada statement lainnya dengan StringGrid2 (Matrik B)
dan StringGrid3 (Matrik C).
procedure TFrnArray_Matrik.EdMatChange
procedure TFrnArray_Matrik.EdMatChange(Sender: TObject);
begin
LbInput.Caption:='['+''+inttostr(i)+','+inttostr(j)+']';
end;

Prosedur ini difungsikan terhadap kontrol EdMat pada event OnChange.


Prosedur ini berjalan dan memberikan perubahan pada Label elemen (LblInput)
yang diinisialisasikan dengan perulangan i dan j. Sehingga label Elemen akan
menampilkan status kolom, baris penempatan elemen.
procedure TFrnArray_Matrik.BTInputClick
procedure TFrnArray_Matrik.BTInputClick(Sender: TObject);
begin
if status=True then
begin

14

StringGrid1.Cells[i,j]:=EdMat.Text;
groupbox2.Caption:='Input Elemen Matriks A'
end
else if status=false then
begin
StringGrid2.Cells[i,j]:=EdMat.Text;
groupbox2.Caption:='Input Elemen Matriks B'
end;
if(i<>strtoint(EdKolom.Text)-1) or (j<>strtoint(EdBaris.Text)-1) then
begin
if i< strtoint(EdKolom.Text)-1 then
i:=i+1
else if j< strtoint(EdBaris.Text)-1 then
begin
i:=0;
j:=j+1 ;
end;
end
else
begin
if status = true then
ShowMessage('Elemen sudah habis, isi matrik berikutnya!')
else
begin
ShowMessage('Elemen sudah habis! jumlahkan Matriks A dan B');
GroupBox2.Enabled:=false;
end;
i:=0;
j:=0;
status:=false;
end;
end;

Blok

procedure TFrnArray_Matrik.BTInputClick difungsikan terhadap

button OK pada GroupBox2. Prosedur ini bertujuan untuk membaca inputan


untuk mengisi nilai Baris dan kolom.
if status=True then
begin
StringGrid1.Cells[i,j]:=EdMat.Text;
groupbox2.Caption:='Input Elemen Matriks A'
end
else if status=false then
begin
StringGrid2.Cells[i,j]:=EdMat.Text;
groupbox2.Caption:='Input Elemen Matriks B'
end;

Jika groupBox2 dapat diakses, maka caption pada GroupBox2 akan muncul
pesan Input Elemen Matriks A. Setelah seluruh elemen matriks A selesai
diinputkan, status akan bernilai false dan caption GroupBox2 akan memunculkan
pesan Input Elemen Matriks B.

StringGrid1.Cells[i,j]:=EdMat.Text;

15

Properti Cells [kolom,baris] menyatakan konten sel pada alamat [kolom,


baris]. Melalui properti Cell dapat diakses data-data pada masing-masing cell.
Tipe datanya berupa string sehingga data-data non string harus dikonversi dulu
sebelum dimasukkan ke dalam properti ini.
if status = true then
ShowMessage('Elemen sudah habis, isi matrik berikutnya!')
else
begin
ShowMessage('Elemen sudah habis! jumlahkan Matriks A dan B');
GroupBox2.Enabled:=false;
end;

Jika elemen matriks A selesai diinputkan, akan muncul jendela pesan


Elemen sudah berakhir, isi matrik berikutnya! dan jika kondisi sebelumnya
tidak berlaku maka jendela akan memunculkan pesan untuk menjumlahkan
matriks A dan B.
procedure TFrnArray_Matrik.BtTAMBAHClick
procedure TFrnArray_Matrik.BtTAMBAHClick(Sender: TObject);
Var EMaA,EMab:integer;
begin
for i:=0 to strtoint(EdBaris.text)-1 do
for j:=0 to strtoint(EdKolom.text)-1 do
begin
EMaA:=Strtoint(StringGrid1.cells[i,j]);
EMaB:=Strtoint(StringGrid2.cells[i,j]);
StringGrid3.cells[i,j]:=Inttostr(EMaA+EMAB);
end
end;

Blok prosedur ini difungsikan terhadap button Matrik A+B (BtTAMBAH)


pada event OnCLick.
Perlu diketahui bahwa rumus penjumlahan matrik adalah :

Sehingga sintak yang digunakan untuk penjumlahan matrik adalah dengan


menjumlahkan elemen pada baris dan kolom yang sama.

16

EMaA:=Strtoint(StringGrid1.cells[i,j]);
EMaB:=Strtoint(StringGrid2.cells[i,j]);
StringGrid3.cells[i,j]:=Inttostr(EMaA+EMAB);

EmaA diinisialisasikan dengan cells i dan j (baris i, kolom j) pada Matrik A,


sementara EmaB diinisialisasikan sebagai cells pada Matrik B. Dan Untuk
menampilkan hasil penjumlahan, maka Cells pada StringGrid3 (Matrik C)
diinisialisasikan dengan hasil penjumlahan EmaA dan EmaB.

OUTPUT :
Adapun Output yang dihasilkan setelah mengikuti langkah kerja pada Bab 2,
adalah sebagai berikut :

17

3.2. Program Kedua (Perkalian Matrik)


Program kedua merupakan program yang bertujuan untuk mengalikan dua
buah matrik, dimana jumlah elemen-elemen beserta ordo-nya dapat ditentukan
oleh user.
Adapun program ini memerlukan sebuah groupBox yang menggolongkan
komponen label, button, dan kontrol edit inputan untuk menentukan jumlah ordo
(baris dan kolom matrik) serta GroupBox lainnya untuk menggolongkan label,
kontrol edit dan button untuk menentukan nilai elemen dalam matrik. Selain itu
program ini sangat memerlukan komponen StringGrid.
Output yang diharapkan adalah, ketika user menginputkan jumlah baris dan
kolom yang diinginkan lalu meng-klik button OK, StringGrid akan menampilkan
jumlah baris dan kolom yang sama dengan inputan user. Kemudian user akan
menginputkan satu-persatu elemen matrik A dan B pada kolom edit elemen. Jika
seluruh elemen telah dimasukkan dan user meng-klik button hitung, maka hasil
perkalian matrik akan ditampilkan pada StringGrid ketiga sebagai matrik C.
Untuk mendapatkan output yang sesuai, maka input yang digunakan adalah :
PROGRAM KEDUA (PERKALIAN MATRIK) :
unit matrik;
interface
uses
Windows, Messages, SysUtils, Variants,
Forms,
Dialogs, StdCtrls, Buttons, Grids;

Classes,

Graphics,

Controls,

type

18

TForm1 = class(TForm)
Btnkel: TButton;
matrix1: TStringGrid;
matrix2: TStringGrid;
matrix3: TStringGrid;
LbmatA: TLabel;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
EdBaris: TEdit;
Edkolom: TEdit;
Btnok: TButton;
Btnpro: TButton;
GroupBox2: TGroupBox;
LblInput: TLabel;
EdMat: TEdit;
BTInput: TButton;
Label4: TLabel;
Label3: TLabel;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BtnkelClick(Sender: TObject);
procedure BtnokClick(Sender: TObject);
procedure BtnproClick(Sender: TObject);
procedure EdMatChange(Sender: TObject);
procedure BTInputClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
mtr1,mtr2,mtr3:array [0..100,0..100] of integer;
d,e,i,j,k :integer;
Status: Boolean;
implementation
{$R *.dfm}
{ mat1:array[1..10,1..10]of integer;
mat2:array[1..10,1..10]of integer;
}
procedure TForm1.BtnokClick(Sender: TObject);
begin
Status:=True;
matrix1.RowCount:=strtoint(EdBaris.Text);
matrix1.ColCount:=strtoint(EdKolom.Text);
matrix2.RowCount:=strtoint(EdBaris.Text);
matrix2.ColCount:=strtoint(EdKolom.Text);
matrix3.RowCount:=strtoint(EdBaris.Text);
matrix3.ColCount:=strtoint(EdKolom.Text);
EdBaris.Enabled:=false;
EdKolom.Enabled:=false;
GroupBox1.Enabled:=true;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
for d:=0 to matrix1.rowCount-1 do
begin
for e:=0 to matrix1.ColCount-1 do
begin

19

try
mtr1[d,e]:=strtoint(matrix1.Cells[e,d]);
except on econverterror do
begin
messagedlg('masukkan angka dengan benar',mtError,[mbok],0);
bersih;
exit;
end;
end;
end;
end;
for d:=0 to matrix2.rowCount-1 do
begin
for e:=0 to matrix2.ColCount-1 do
begin
try
mtr2[d,e]:=strtoint(matrix2.Cells[e,d]);
except on econverterror do
begin
messagedlg('masukkan angka dengan benar',mtError,[mbok],0);
bersih;
exit;
end;
end;
end;
end;
for i:=0 to matrix1.RowCount-1 do
begin
for j:=0 to matrix2.ColCount-1 do
begin
for k:=0 to matrix1.ColCount-1 do
begin
mtr3[i,j]:=mtr3[i,j]+mtr1[i,k]*mtr2[k,j];
end;
end;
end;
for d:=0 to matrix1.rowCount-1 do
begin
for e:=0 to matrix2.ColCount-1 do
begin
form1.matrix3.Cells[e,d]:=inttostr(mtr3[d,e]);
end;
end;
end;
procedure hitung;
var br1,kl1,br2,kl2:integer;
begin
if (form1.Edbaris.Text='') or (form1.Edkolom.Text='') then
messagedlg('Inputan
Tidak
Lengkap
/
Kosong',mtError,[mbok],0)
else
begin
try
br1:=strtoint(form1.Edbaris.Text);
kl1:=strtoint(form1.Edkolom.Text);

Masih

except on econverterror do
begin
messagedlg('masukkan angka dengan benar',mtError,[mbok],0);

20

end;
end;
begin
form1.matrix1.RowCount:=br1;
form1.matrix1.ColCount:=kl1;
form1.matrix2.RowCount:=br2;
form1.matrix2.ColCount:=kl2;
form1.matrix3.RowCount:=br1;
form1.matrix3.ColCount:=kl2;
end;
end;
end;
procedure TForm1.BtnproClick(Sender: TObject);
begin
for d:=0 to matrix1.rowCount-1 do
begin
for e:=0 to matrix1.ColCount-1 do
begin
try
mtr1[d,e]:=strtoint(matrix1.Cells[e,d]);
except on econverterror do
begin
messagedlg('Masukkan ANGKA ',mtError,[mbok],0);
bersih;
exit;
end;
end;
end;
end;
for d:=0 to matrix2.rowCount-1 do
begin
for e:=0 to matrix2.ColCount-1 do
begin
try
mtr2[d,e]:=strtoint(matrix2.Cells[e,d]);
except on econverterror do
begin
messagedlg('Masukan ANGKA',mtError,[mbok],0);
bersih;
exit;
end;
end;
end;
end;
for i:=0 to matrix1.RowCount-1 do
begin
for j:=0 to matrix2.ColCount-1 do
begin
for k:=0 to matrix1.ColCount-1 do
begin
mtr3[i,j]:=mtr3[i,j]+mtr1[i,k]*mtr2[k,j];
end;
end;
end;
for d:=0 to matrix1.rowCount-1 do
begin
for e:=0 to matrix2.ColCount-1 do
begin
form1.matrix3.Cells[e,d]:=inttostr(mtr3[d,e]);
end;
end;
end;

21

procedure TForm1.EdMatChange(Sender: TObject);


begin
LblInput.Caption:='['+''+inttostr(i)+','+inttostr(j)+']';
end;
procedure TForm1.BTInputClick(Sender: TObject);
begin
if status=True then
begin
matrix1.Cells[i,j]:=EdMat.Text;
GroupBox2.Caption:='Input Elemen Matriks A';
end
else if status=false then
begin
matrix2.Cells[i,j]:=edMat.Text;
GroupBox1.Caption:='Input Elemen Matriks B';
end;
if (i<>strtoint(Edkolom.Text)-1) or (j<>strtoint(EdBaris.Text)-1) then
begin
if i<strtoint(EdKolom.Text)-1 then
i:=i+1
else if j<strtoint(Edbaris.Text)-1 then
begin
i:=0;
j:=j+1;
end;
end
else
begin
if status=true then
ShowMessage('Elemen sudah habis, isi Matrik berikutnya!')
else
begin
ShowMessage ('Elemen sudah habis, kalikan Matrik A dan B!');
GroupBox2.Enabled:=false;
end;
i:=0;
j:=0;
Status:=false;
end;
end;
end.

Penjelasan Koding :
Var
mtr1,mtr2,mtr3:array [0..100,0..100] of integer;
d,e,i,j,k :integer;
Status: Boolean;

Blok statement di atas merupakan blok deklarasi variabel beserta tipe data
yang digunakan. d, e, i, j, k adalah variabel yang akan digunakan dalam beberapa
prosedur di dalam program. mtr1, mtr2, mtr3 memiliki tipe data berupa tabel
larik bernilai [i,j] yaitu 1 hingga 100. Sedangkan boolean merupakan tipe data
logika,yang berisi dua kemungkinan nilai:TRUE(benar) atau FALSE(salah).

22

procedure TFrnArray_Matrik.FormCreate
procedure TFrnArray_Matrik.FormCreate(Sender: TObject);
begin
GroupBox2.Enabled:=false;
end;

Prosedur ini difungsikan pada event FormCreate, dimana ketika prosedur ini
berjalan maka komponen dalam GroupBox2 (group elemen matrik) dinonaktifkan dan tidak dapat diberikan inputan.
procedure TForm1.BtnokClick
procedure TForm1.BtnokClick(Sender: TObject);
begin
Status:=True;
matrix1.RowCount:=strtoint(EdBaris.Text);
matrix1.ColCount:=strtoint(EdKolom.Text);
matrix2.RowCount:=strtoint(EdBaris.Text);
matrix2.ColCount:=strtoint(EdKolom.Text);
matrix3.RowCount:=strtoint(EdBaris.Text);
matrix3.ColCount:=strtoint(EdKolom.Text);
EdBaris.Enabled:=false;
EdKolom.Enabled:=false;
GroupBox1.Enabled:=true;
end;

Blok procedure procedure TForm1.BtnokClick merupakan blok statement


yang difungsikan terhadap button OK (button pada GroupBox1) yang
berfungsi untuk memroses lebih lanjut inputan user yang berupa jumlah dan
kolom baris matrik.
Blok ini berisi baris statement yang memiliki tujuan yang sama yaitu
membaca inputan dari EdBaris (jumlah baris matrik) dan EdKolom (jumlah
kolom matrik).
Matrix1.RowCount:=strtoint(EdBaris.Text);

program akan membaca inputan user pada EdBaris. RowCount digunakan


untuk menentukan jumlah baris pada StringGrid. Sehingga tujuan statement di
atas adalah, untuk menentukan jumlah baris dan menerapkannya pada StringGrid
ke-1 (Matrik A) sesuai dengan inputan dari user. statement ini berlaku pula pada
statement lainnya dengan StringGrid2 (Matrik B) dan StringGrid3 (Matrik C)
Matrix1.ColCount:=strtoint(EdKolom.Text);

23

ColCount digunakan untuk menentukan jumlah kolom pada StringGrid.


Sehingga tujuan statement ini yaitu, untuk menentukan jumlah kolom dan
menerapkannya pada StringGrid ke-1 (Matrik A) sesuai dengan inputan dari user.
statement ini berlaku pula pada statement lainnya dengan StringGrid2 (Matrik B)
dan StringGrid3 (Matrik C).
procedure TFrnArray_Matrik.EdMatChange
procedure TFrnArray_Matrik.EdMatChange(Sender: TObject);
begin
LbInput.Caption:='['+''+inttostr(i)+','+inttostr(j)+']';
end;

Prosedur ini difungsikan terhadap kontrol EdMat pada event OnChange.


Prosedur ini berjalan dan memberikan perubahan pada Label elemen (LblInput)
yang diinisialisasikan dengan perulangan i dan j. Sehingga label Elemen akan
menampilkan status kolom, baris penempatan elemen.
procedure TFrnArray_Matrik.BTInputClick
begin
if status=True then
begin
matrix1.Cells[i,j]:=EdMat.Text;
GroupBox2.Caption:='Input Elemen Matriks A';
end
else if status=false then
begin
matrix2.Cells[i,j]:=edMat.Text;
GroupBox1.Caption:='Input Elemen Matriks B';
end;
if (i<>strtoint(Edkolom.Text)-1) or (j<>strtoint(EdBaris.Text)-1) then
begin
if i<strtoint(EdKolom.Text)-1 then
i:=i+1
else if j<strtoint(Edbaris.Text)-1 then
begin
i:=0;
j:=j+1;
end;
end
else
begin
if status=true then
ShowMessage('Elemen sudah habis, isi Matrik berikutnya!')
else
begin
ShowMessage ('Elemen sudah habis, kalikan Matrik A dan B!');
GroupBox2.Enabled:=false;
end;
i:=0;
j:=0;
Status:=false;
end;

24

Blok

procedure TFrnArray_Matrik.BTInputClick difungsikan terhadap

button OK pada GroupBox2. Prosedur ini bertujuan untuk membaca inputan


untuk mengisi nilai Baris dan kolom.
if status=True then
begin
StringGrid1.Cells[i,j]:=EdMat.Text;
groupbox2.Caption:='Input Elemen Matriks A'
end
else if status=false then
begin
StringGrid2.Cells[i,j]:=EdMat.Text;
groupbox2.Caption:='Input Elemen Matriks B'
end;

Jika groupBox2 dapat diakses, maka caption pada GroupBox2 akan muncul
pesan Input Elemen Matriks A. Setelah seluruh elemen matriks A selesai
diinputkan, status akan bernilai false dan caption GroupBox2 akan memunculkan
pesan Input Elemen Matriks B.

StringGrid1.Cells[i,j]:=EdMat.Text;

Properti Cells [kolom,baris] menyatakan konten sel pada alamat [kolom,


baris]. Melalui properti Cell dapat diakses data-data pada masing-masing cell.
Tipe datanya berupa string sehingga data-data non string harus dikonversi dulu
sebelum dimasukkan ke dalam properti ini.
if status = true then
ShowMessage('Elemen sudah habis, isi matrik berikutnya!')
else
begin
ShowMessage('Elemen sudah habis! jumlahkan Matriks A dan B');
GroupBox2.Enabled:=false;
end;

Jika elemen matriks A selesai diinputkan, akan muncul jendela pesan


Elemen sudah berakhir, isi matrik berikutnya! dan jika kondisi sebelumnya
tidak berlaku maka jendela akan memunculkan pesan untuk menjumlahkan
matriks A dan B.
procedure TForm1.BtnproClick
procedure TForm1.BtnproClick(Sender: TObject);
begin

25

for d:=0 to matrix1.rowCount-1 do


begin
for e:=0 to matrix1.ColCount-1 do
begin
try
mtr1[d,e]:=strtoint(matrix1.Cells[e,d]);
except on econverterror do
begin
messagedlg('Masukkan ANGKA ',mtError,[mbok],0);
end;
end;
end;

Blok prosedur ini difungsikan terhadap button Matrik A x B (BtnPro) pada


event OnCLick. Perlu diketahui bahwa rumus penjumlahan matrik adalah :

Sehingga sintak yang digunakan untuk penjumlahan matrik adalah dengan


menjumlahkan elemen baris, kolom Matriks A dan B dengan struktur tertentu.
OUTPUT
Adapun Output yang dihasilkan setelah mengikuti langkah kerja pada Bab 2,
adalah sebagai berikut :

26

3.3. Program Ketiga (Ascending-Descending)


Program Ketiga adalah sebuah program yang bertujuan untuk mengurutkan
beberapa bilangan secara Ascending (berurutan dari nilai kecil ke yang terbesar)
maupun Descending (berurutan dari nilai terbesar ke yang terkecil) dengan jumlah
bilangan yang dapat ditentukan oleh user.
Adapun komponen yang diperlukan dalam program ini adalah 3 buah
listbox, 3 kontrol button, 2 kontrol edit, dan 2 radioButton.
Output yang diharapkan adalah ketika user memasukkan jumlah bilangan
yang akan diurutkan, maka selanjutnya user akan memasukkan nilai-nilai
bilangannya, dan Nilai-nilai tersebut akan tampil pada ListBox. dan ketika user
mencentang radioButton Ascending dan mengklik button Hitung, yang muncul
pada ListBox adalah bilangan yang telah diirutkan dari nilai terkecil ke terbesar,
27

sebaliknya jika user mencentang radioButton Descending, yang muncul pada


ListBox adalah bilangan yang telah diirutkan dari nilai terbesar ke terkecil. Untuk
mendapatkan output yang sesuai, maka input yang digunakan adalah :

INPUTAN PROGRAM KETIGA (Ascending , Descending) :


nit Unit1;
interface
uses
Windows, Messages,
Forms,
Dialogs, StdCtrls;

SysUtils,

Variants,

Classes,

Graphics,

Controls,

type
TForm1 = class(TForm)
EdBanyak: TEdit;
EdInput: TEdit;
lbbanyak: TLabel;
LblInput: TLabel;
BtnInput: TButton;
GroupBox1: TGroupBox;
RBAscending: TRadioButton;
RBDescending: TRadioButton;
LBLoop1: TListBox;
LBLoop2: TListBox;
BtnUrut: TButton;
LBloop3: TListBox;
btexit: TButton;
Lbascending: TLabel;
Label3Lbdecending: TLabel;
procedure BtnInputClick(Sender: TObject);
procedure BtnUrutClick(Sender: TObject);
procedure btexitClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Data : array of integer;
end;
var
Form1: TForm1;
i, j, k, l, n, nilai : integer;
implementation
{$R *.dfm}
procedure QuickSortAsc(var A: array of Integer; iLo, iHi: Integer) ;
var
Lo, Hi, Pivot, T: Integer;
begin
Lo := iLo;
Hi := iHi;
Pivot := A[(Lo + Hi) div 2];
repeat
while A[Lo] < Pivot do Inc(Lo) ;

28

while A[Hi] > Pivot do Dec(Hi) ;


if Lo <= Hi then
begin
T := A[Lo];
A[Lo] := A[Hi];
A[Hi] := T;
Inc(Lo) ;
Dec(Hi) ;
end;
until Lo > Hi;
if Hi > iLo then QuickSortAsc(A, iLo, Hi) ;
if Lo < iHi then QuickSortAsc(A, Lo, iHi) ;
end;
procedure QuickSortDesc(var A: array of Integer; iLo, iHi: Integer) ;
var
Lo, Hi, Pivot, T: Integer;
begin
Lo := iLo;
Hi := iHi;
Pivot := A[(Lo + Hi) div 2];
repeat
while A[Lo] > Pivot do Inc(Lo) ;
while A[Hi] < Pivot do Dec(Hi) ;
if Lo <= Hi then
begin
T := A[Lo];
A[Lo] := A[Hi];
A[Hi] := T;
Inc(Lo) ;
Dec(Hi) ;
end;
until Lo > Hi;
if Hi > iLo then QuickSortDesc(A, iLo, Hi) ;
if Lo < iHi then QuickSortDesc(A, Lo, iHi) ;
end;
procedure TForm1.BtnInputClick(Sender: TObject);
var nilai : Integer;
begin
n
:= StrToInt(EdBanyak.Text);
nilai :=StrToInt(EdInput.Text);
repeat
i:=i+1;
LblInput.Caption :='Bilangan ke '+IntToStr(i+1);
LBLoop1.Items.Add(IntToStr(nilai));
EdInput.Clear;
EdInput.SetFocus;
until i<=n;
if TryStrToInt(EdInput.Text,Nilai) then
Lbloop1.Items.Add(IntToStr(nilai));
if Lbloop1.Items.Count = N then
begin
Btninput.Enabled := True;
BtnInput.Enabled := False;
end else
begin
Btnurut.Enabled := true;
end;

29

end;

procedure TForm1.BtnUrutClick(Sender: TObject);


var
indek : Word;
begin
if RBAscending.Checked then
begin
SetLength(Data,LBLoop1.Items.Count) ;
for indek := 0 to LBLoop1.Items.Count - 1 do
Data[indek] := StrToInt(LBLoop1.Items[indek]);
QuickSortAsc(Data,Low(Data),High(Data));
LBLoop2.Items.Clear;
for indek := 0 to LBLoop1.Items.Count - 1 do
LBLoop2.Items.Add(IntToStr(data[indek]))
end
else
begin
if RBDescending.Checked then
SetLength(Data,LBLoop1.Items.Count) ;
for indek := 0 to LBLoop1.Items.Count - 1 do
Data[indek] := StrToInt(LBLoop1.Items[indek]);
QuickSortDesc(Data,Low(Data),High(Data));
LBLoop3.Items.Clear;
for indek := 0 to LBLoop1.Items.Count - 1 do
LBLoop3.Items.Add(IntToStr(data[indek]))
end;
end;
end.

OUTPUT :
Adapun Output yang dihasilkan setelah mengikuti langkah kerja pada Bab 2,
adalah sebagai berikut :

30

BAB III
KESIMPULAN

31

Array adalah kumpulan data yang bertipe sama. Elemen array dapat diakses
dengan menggunakan indeks yang berada pada kurung kotak ([]). Delphi
menyediakan beberapa tipe array, yaitu static array, dynamic array serta open
array.
Bentuk umum definisi array adalah :
<NamaArray>=array [Tipe Indeks] of <Tipe Dasar>
<NamaArray>=array [Tipe Indeks,] of <Tipe Dasar>
<NamaArray>=array of <Tipe Dasar>

Array dinamik adalah array yang tipe indeksnya integer dan ukurannya
dapat berubah selama program berjalan. Batas minimum array dinamik adalah 0.
Batas maksimum array dinamik dapat diatur dengan SetLength. Contoh :
Type
TArrayDinamik = array of integer;
Var
D1 : TArrayDinamik
Begin
SetLength(D1,6);
End;

Ascending adalah pengurutan yang dilakukan dari nilai terkecil hingga nilai
terbesar, sebaliknya Descending adalah pengurutan dari nilai terbesar ke nilai
terkecil

32

BAB V
DAFTAR PUSTAKA

Modul pratikum Algoritama dan Pemrograman III. Universitas Palangka Raya. Fakultas
Teknik. 2013. Jurusan Teknik Informatika.

http://pemrogramanmudah.blogspot.com/p/pascal-Array.html (Diakses pada :


Senin, 01 Desember 2014 pukul 21:02 WIB)

http://1nuy4s4.wordpress.com/Array-pada-bahasa-pascal/ (Diakses pada : Senin,


01 Desember 2014 pukul 21:05 WIB)

http://hadisuwarsono.blogspot.com/2010/07/Larik-pascal-15.html (Diakses pada :


01 Desember 2014 pukul 21:10 WIB)

http://efriharefa.blogspot.com/2012/09/Struktur-Array-Pascal.html (Diakses pada


: 01 Desember 2014 pukul 21:13 WIB)

33

BAB VI
LAMPIRAN
Input Program Pertama

34

35

Input Program Kedua

36

37

Input Program Ketiga

38

39

You might also like