Professional Documents
Culture Documents
DEFINISI ALGORITMA:
1. Secara tulisan
- Struktur bahasa /diskripsi
- Pseducode
2. Teknik gambar(Flowchart)
Input/output
Proses
Titik keputusan
Arah arus
Contoh:
1
Algoritmanya:
Secara Struktur bahasa:
1.Tetapkan nilai pi = 3.14
2.Bacalah nilai R (jari-jari)
3.Hitung luas(L)
4.Hitung keliling(K)
5.Tulis L dan K
Secara Pseudocode:
1. pi 3.14
2. input R
3. L pi* r2
4. K 2 * pi * r
5. Output L dan K
2
Algoritma Psedocode:
Mulai :
1. Input( jam1, menit1,detik1)
2. Input( jam2, menit2,detik2)
3. Delta I jam1*3600 + menit1*60 + detik1
4. Delta II jam2*3600 + menit2*60 + detik2
5. Delta Delta II – Delta I
6. Selisih jam Delta div 3600
7. Menit Delta mod 3600
8. Selisih menit menit div 60
• Selish detik menit mod 60
9. Output(Selisih jam, Selisih menit,Selisih detik)
PEMROGRAMAN PASCAL
STRUKTUR PROGRAM
1. Judul program (opsional)
Format : { judul program } atau program_nama program;
2. Deklarasi program:
Var {Variabel program}
Const {Constanta program}
Label {Label}
Funct {Function}
Procedure {Prosedur program}
Catatan :
Deklarasi program bersifat opsional khusus, artinya jika diperlukan
maka harus ada dalam program dan apabila tidak diperlukan maka boleh tidak
dicantumkan. Deklarasi program termasuk identifier (pengenal), yaitu kata-
kata yang diciptakan oleh pemrogram untuk mengidentifikasi sesuatu.
Syarat identifier:
a) Harus diawali oleh alphabet
b) Huruf besar/ kecil yang digunakan dianggap sama
c) Penyusun dari sebuah identifier tidak boleh berupa: tanda baca, tanda
relasi, symbol arithmatik, karakter khusus atau reserved word
d) Tidak boleh dipisahkan dengan spasi, apabila hendak dipisahkan maka
menggunakan tanda ( _ )
e) Panjang identifier tidak dibatasi tetapi sebaiknya gunakan se-efektif
mungkin.
3. Program Utama
Diawali dengan Begin dan diakhiri dengan End.
3
b) Tipe data Terstruktur
c) Tipe data Pointer
a) Tipe Integer
Operator-operator yang berlaku pada tipe data integer, yaitu :
- Operator arithmatik : +, - , *, /, div, mod
- Operator logic : <, = , > , <= , >= , <>
Tipe data integer masih dibagi menjadi 5 tipe:
Shortint (1 byte bertanda) Byte (1 byte tak bertanda)
Integer (2 byte bertanda) Word (2 byte tak bertanda)
Longint (4 bytebertanda)
Catatan : Semua tipe integer adalah tipe Ordinal.
b) Tipe Real
Dibagi menjadi 5 macam, yaitu :
Real (6 byte) Extended (10 byte)
Single (4 byte) Comp (8 byte)
Double (8 byte)
d) Tipe Boolean
Mempunyai nilai benar /salah. Operator yang penghubung untuk tipe Boolean
adalah : = , <> , > , < , >= , <= , IN
Boolean akan menghasilkan False jika nilai = 0 dan akan menghasilkan True
jika nilai = 1.
4
Ord(Tegal) =1
Dan seterusnya…………………..
f) Tipe Subrange
Bentuk umum :
Constanta1..Constanta2
Contoh :
0..99 ;
-128..127 ;
II. Real
Ada beberapa macam tipe real
1. Single
2. Real
3. Double
4. Extended
Program_Selisih_Jam;
Uses crt;
var j1,j2,m1,m2,d1,d2,B1,B2,J,M,S,Delta,sisa: integer;
begin
clrscr;
write('Baca jam mulai =');readln(j1,m1,d1);
writeln;
write('Baca jam selesai =');readln(j2,m2,d2);
B1:= 3600 * j1 + 60 * m1 + d1;
B2:= 3600 * j2 + 60 * m2 + d2;
Delta:= B2 - B1;
J:= Delta div 3600;
sisa:= Delta mod 3600;
M:= sisa div 60;
S:= sisa mod 60;
write('Selisih jam =',J);
writeln;
write('Selisih menit =',M);
writeln;
5
write('Selisih detik =',S);readln;
end.
2. SELECTION/ CONDITION
6
if A=0 then writeln('Bukan persamaan kwadrat') else
begin
D:=(B*B) - (4*A*C);
writeln('Determinannya :',D:2:2);readln;
if D>0 then
begin
writeln('Persamaan kwadrat mempunyai 2 akar yang berbeda');
1x*x + (-4) x +4
Determinannya :0.00
-Baca koofisien: 1 -5 6
1x*x + (-5) x +6
Determinannya :1.00
-Baca koofisien: 1 3 4
1x*x + (3) x +4
Determinannya :-7.00
Program_Konversi_nilai:
7
Uses Crt;
var Nilai : Byte;
begin
clrscr;
write('Baca nilai :');readln(Nilai);
if nilai>=80 then write('Nilai = A') else
if nilai>=65 then write('Nilai = B') else
if nilai>=41 then write('Nilai = C') else
if nilai>=26 then write('Nilai = D') else
write('Nilai = E');
readln;
end.
8
end;readln;
end.
Catatan : Program ini akan memberikan nilai yang sama persis dengan yang
menggunakan struktur IF.
Contoh program :
begin begin
clrscr; clrscr;
write('Baca nilai : ');readln(N); write(‘Baca nilai:’);
for i:= 1 to N do readln(N);Data:=N;
begin for i:=1 to N do
for j:=1 to i do begin
write(i:3); for j:=1 to N do
writeln; write(data:3);
end; writeln;
readln; data := data -1;
9
end. end;
End.
Contoh program :
uses crt;
var i:integer;
begin
clrscr;
write('Masukkan angka :');readln(i);
while i<5 do
begin
write('Matematika UGM');
i:=i+1;
end;
readln;
end.
Keterangan :
Program di atas akan dilaksanakan jika angka yang kita masukkan
kurang dari atau sama dengan lima. Dan dalam program di atas yang bertugas
menghentikan perulangan adalah proses i:= i+1; sebab jika tidak ada statement
itu, apabila angka yang kita masukkan benar <= 5 maka program akan berulang
sampai tak hingga banyak.
Catatan :
10
Struktur perulangan while..do dapat digunakan untuk melakukan
perulangan baik yang diketahui maupun yang tidak diketahui jumlah
perulangannya.
Contoh program :
PROGRAM CONTOH_REPEAT;
Uses crt;
var
n,tot,x: integer;
Mean: real;
begin
clrscr;
tot:=0;
n:=0;
write ('Baca data :');readln(x);
repeat
tot:= tot + x;
n:= n + 1;
write('Data lagi :');readln(x);
until x=0;
end.
Array atau larik terdiri atas bagian-bagian komponen yang memiliki tipe data
sama. Dalam penyimpanannya array selalu mempunyai jumlah komponen yang tetap
yang ditunjukkan oleh indeksnya. Dimana indeks ini harus merupada data dengan tipe
ordinal artinya mempunyai urutan tertentu.
11
1. Sebagai tipe data baru
Type
Larik=Array[1..n] of datatype ;
Var x : larik ;
Keuntungan :
Menggunakan data larik adalah bahwa kita tidak akan kehilangan nilai dari
suatu data.
Kelemahan :
Saat ditentukan suatu variable bertipe data array maka ia akan langsung
mengambil tempat pada memory penyimpanannya sesuai dengan tipe data yang
digunakan pada array, baik nantinya semua komponen pada array itu digunakan
ataupun tidak.
Type
Nama_Array = Array[tipe-indeks1,tipe-indeks2] of tipe data ;
Contoh :
Type
Matriks = Array[1..10, 1..10] of integer ;
Berarti matriks itu akan mempunyai dimensi (10x10), namun itu hanya batas
atas dari indeks yang dipesan dalam memori penyimpanan (di atas itu tidak akan
disimpan), sedangkan apabila nantinya kita hanya memasukkan jumlah baris missal 2
dan jumlah kolom 2 itu boleh saja selama tidak lebih dari 10.
Entry-entry dari matriks tersebut dapat kita panggil dengan mengetikkan
Nama_Array[indeks] ; dari contoh diatas berarti Matriks[2,3] yaitu entry dari
matriks pada baris kedua kolom ketiga.
Contoh program :
Program Rata_rata;
Uses crt;
type
larik = array[1..10] of integer;
var
12
x : larik;
Tot, i, n : integer;
mean : real;
Begin
clrscr;
write('Masukkan jumlah data : '); readln(n);
writeln;
Tot := 0;
for i:= 1 to n do
begin
write('Masukkan Data ke-',i,' ', 'Anda : '); readln(x[i]);
Tot:= Tot + x[i];
end;
writeln;
mean:= Tot/n;
write('Dan hasil perhitungan meannya : ');
writeln(mean:8:2);
readln;
end.
Hasil Run Program :
Masukkan jumlah data : 5
Masukkan Data ke-1 Anda : 1
Masukkan Data ke-2 Anda : 2
Masukkan Data ke-3 Anda : 3
Masukkan Data ke-4 Anda : 4
Masukkan Data ke-5 Anda : 5
Dan hasil perhitungan meannya : 3.00
Program Matriks :
Program Baca_tulis_matriks ;
uses crt;
Var m,n,i,j : integer;
x: Array[1..100,1..100] of integer;
begin
clrscr;
write('Baca ukuran baris Matriks :',' ');readln(m);
write('Baca ukuran kolom matriks :',' ');readln(n);
writeln('Matriks anda berukuran',' ',m,'x',n,' ');
for i:=1 to m do
for j:=1 to n do
begin
write('Baca nilai :',' ');readln(x[i,j]);
end;
writeln;
writeln('Matriksnya :',' ');
for i:=1 to m do
begin
for j:=1 to n do
write(x[i,j]:3); writeln;
13
end;
writeln;writeln('Matriks tranposenya :',' ');
for j:= 1 to n do
begin
for i:=1 to m do
write(x[i,j]:3);writeln;
end;writeln;
writeln('Matriks anda berukuran',' ',n,'x',m,' ');
readln;
end.
PEMROGRAMAN MODULAR
PROCEDURE
Deklarasi :
Procedure NamaProcedure(DaftarParameter) ;
{Deklarasi}
Begin
14
.............
.............
End ;
Pemanggilan Procedure :
Suatu procedure bukan merupakan program yang berdiri sendiri
sehingga tidak dapat dielsekusi secara langsung. Untuk itu suatu procedure
memerlukan sebuah akses pada program utama / modul lain yang befungsi sebagai
pemanggil. Sedangkan cara pemanggilannya adalah dengan : menuliskan nama
procedurenya berikut parameternya (jika ada).
2. Parameter
Ada 2 paramete yang berlaku dalam sebuah procedure, yaitu :
a. Parameter Formal
Yaitu parameter yang dideklarsikan mengikuti pendeklarasian program utama
b. Paramete Aktual
Yaitu parameter yang dituliskan mengikuti pemanggilan procedure
Pengiriman parameter :
a. Pengiriman parameter secara nilai (by Value)
- Tiap-tiap parameter dalam prosecure utama akan beisi nilai yang dikirim
oleh parameter aktual dan bersifat lokal diprocedure
- Pengiriman nilai parameter secara by value merupakan pengiriman
searah, artinya hanya dari parameter aktual ke parameter formal
- Perubahan parameter formal tifak mempengaruhi terhadap nilai
parameter aktual
Contoh :
Procedure Hitung(A,B,C : integer) ;
Begin
B: = A;
15
C: = A + B ;
Writeln(A,B,C) ;
Var X,Y,Z : integer ;
Begin
Readln(X) ; Readln(X) ; Readln(X) ;
Hitung(X,Y) ; Writeln(X,Y,Z) ;
Readln ;
End.
Ket :
Misalkan dimasukkan nilai dari X=5, Y=7 dan Z=15 maka nilai
ini akan dikirim ke parameter formal pada procedure yaitu A,B,C sehingga
nilai awal A=5, B=7 dan Z=15. Setelah melalui proses maka hasil outputnya
adalah bahwa nilai X=5 , Y=7 dan Z=15. Sebab apapun yang diproses pada
procedure tidak akan mempengaruhi nilai dari parameter aktual X,Y,Z.
Contoh :
Procedure Hitung(Var A,B,C : integer) ;
Begin
B: = A;
C: = A + B ;
Writeln(A,B,C) ;
End;
Var X,Y,Z : integer ;
Begin
Readln(X) ; Readln(X) ; Readln(X) ;
Hitung(X,Y) ; Writeln(X,Y,Z) ;
Readln ;
End.
Ket :
Misalkan dimasukkan nilai dari X=5, Y=8 dan Z=15 maka nilai
ini akan dikirim ke parameter formal pada procedure yaitu A,B,C sehingga
nilai awal A=5, B=8 dan C=15. Setelah melalui proses maka hasil outputnya
adalah bahwa nilai X=A=5 , Y=B=A=5 dan Z=C=10. Sebab apapun yang
diproses pada procedure akan mempengaruhi nilai dari parameter aktual
X,Y,Z.
16
uses crt;
var f1,f2,f3:longint;
n,r,delta:integer;
c: real;
{======================PROGRAM UTAMA=======================}
Begin
clrscr;
gotoxy(12,3);
write('Kita akan menghitung nilai kombinasi dari suatu angka');
gotoxy(19,4);
writeln('Yang mempunyai rumus : rCn = n!/(r!(n-r)!)'); gotoxy(20,5);
writeln('Nilai r harus lebih kecil/sama dengan n');
writeln;gotoxy(28,6);
write('Masukkan nilai n :',' ');readln(n);
writeln;gotoxy(28,8);
write('Masukkan nilai r :',' ');readln(r);
facto(n,f1);
facto(r,f2);
delta:=(n-r);
facto(delta,f3);
c:= f1/(f2*f3);gotoxy(30,10);
write('Hasilnya :',' ',c:2:0);
readln;
end.
Hasil Run Program :
Hasilnya : 15
FUNCTION
Deklarasi :
Function NamaFungsi(NamaParameter) : TipeData ;
{Deklarasi}
17
Begin
...........
...........
End ;
Struktur dari fungsi ini hampir sama dengan procedur hanya saja function harus
dideklarasikan beserta tipe datanya dan fungsi ini adalah mengembalikan nilai sehingga
Tipe data dalam sebuah function menunjukkan tipe dari data akhir dari deklarasi sebuah
fungsi.
Suatu fungsi dapat dipanggil dengan menggunakan beberapa cara, misalkan :
Nama Fungsinya adalah Rata, maka ia akan dapat dipanggil dengan menggunakan
Rata2 : = Rata(vector,Ukuran) ;
X : = Y + Rata(vector,Ukuran) ;
Write(‘Nilai rata-ratanya = ‘, rata(vector,ukuran));
Catatan :
Untuk keterangan yang lain yang meliputi macam variabel, parameter, aturan
antar parameter dan cara pengiriman parameter sama dengan yang ada pada procedure,
sehingga tidak perlu dituliskan lagi.
Function Fakto(N:integer):integer;
Var Fak: integer;
Begin
Fak:= 1;
for i:=1 to N do
Fak := Fak * i;
Fakto:= Fak;
end;
Begin
clrscr;
write('Faktorial berapa yang anda ingin hitung : ');
readln(N);
writeln('Hasil perhitungan : ',Fakto(N));
readln;
end.
18
Dalam turbo Pascal telah dikenal ada beberapa tipe data yang kemudian dapat
digolongkan menjadi 2 kelompok besar tipe data yaitu tipe data standard dan tipe data
terstruktur. Pada laporan ini akan dibahas mengenai tipe-tipe data terstruktur yang
meliputi tipe data array, tipe data record dan tipe data set.
REKURSI
Salah satu keistimewaan yang dimiliki oleh Turbo Pascal adalah bahwa pascal
dapat melakukan suatu proses yang dinamakan sebagai proses Rekursi, yaitu proses
untuk memanggil dirinya sendiri. Dalam procedure dan function proses ini bisa berarti
proses berulang yang tidak diketahui kapan akan berakhirnya. Contoh paling sederhana
dari proses rekursi adalah Proses mencari faktorial dari suatu.
Contoh program :
PROGRAM FAKTORIAL;
Uses crt ;
Var i , N , Hsl : integer
Function Fakto(N:integer):integer ;
Var Fak: integer ;
Begin
if (N=0) or (N=1) then
Fakto:= 1
else
Fakto:= N*Fakto(N-1) ;
end;
Begin
clrscr;
write('Faktorial berapa yang anda ingin hitung : ') ;
readln(N) ;
writeln('Hasil perhitungan : ',Fakto(N)) ;
readln ;
end .
19
Dari program diatas maka notasi Fakto(N-1) yang digunakan untuk memanggil
program sebelumnya dinamakan sebagai Pemanggil atau rekursi.
Tipe data ini merupakan perluasan dari tipe data Array, yaitu karena pada array
masing-masing komponennya harus menggunakan tipe data yang sama, maka pada
record hal itu tidak berlaku lagi. Artinya diperbolehkan untuk menggunakan tipedata
yang berbeda pada masing-masing komponen (field) dari record tersebut.
Pendeklarasian record :
Type
Nama_record = record
Field1: tipe data1 ;
Field2: tipe data2 ;
…………………
…………………
Fieldn: tipe datan ;
End ;
Contoh :
Type Barang = record
Nama : string[20] ;
Jenis : string [20]
Jumlah : integer ;
End ;
Contoh program :
PROGRAM DATABASE;
Uses crt;
TYPE mahasiswa=record
20
nama: array[1..20] of string;
nim: array[1..20] of string;
alamat: array[1..20] of string;
ipk: array[1..20] of real;
end;
21
writeln('=========================================================');
writeln('|','Nama':20,'NIM':10,'Alamat':20,'IPK':10,'|':2);
writeln('=========================================================');
for i:=1 to n do
if (mhs1.nama) = (mhs.nama[i]) then
begin writeln('|',mhs1.nama:20,mhs.nim[i]:10,mhs.alamat[i]:20,mhs.ipk[i]:10:2,
'|':2);
end;
writeln('=========================================================');
writeln;
end;
2: begin
write('Masukan No. Mahasiswa : ');readln(mhs1.nim);
writeln;
writeln('=========================================================');
writeln('|','Nama':20,'NIM':10,'Alamat':20,'IPK':10,'|':2);
writeln('=========================================================');
for i:=1 to n do
if (mhs1.nim) = (mhs.nim[i]) then
begin
writeln('|',mhs.nama[i]:20,mhs1.nim:10,mhs.alamat[i]:20,mhs.ipk[i]:10 :2,'|':2);
end;
writeln('==========================================================');
writeln;
end;
3: begin
write('Masukan Alamat Mahasiswa : ');readln(mhs1.alamat);
writeln;
writeln('=========================================================');
writeln('|','Nama':20,'NIM':10,'Alamat':20,'IPK':10,'|':2);
writeln('=========================================================');
for i:=1 to n do
if (mhs1.alamat) = (mhs.alamat[i]) then
begin
writeln('|',mhs.nama[i]:20,mhs.nim[i]:10,mhs1.alamat:20,mhs.ipk[i]:10 :2,'|':2);
end;
writeln('=========================================================');
writeln;
end;
4: begin
write('Masukan IPK : ');readln(mhs1.ipk);
writeln;
writeln('=======================================================');
writeln('|','Nama':20,'NIM':10,'Alamat':20,'IPK':10,'|':2);
writeln('=======================================================');
for i:=1 to n do
if (mhs1.ipk) = (mhs.ipk[i]) then
begin
writeln('|',mhs.nama[i]:20,mhs.nim[i]:10,mhs.alamat[i]:20,mhs1.ipk: 10:2,'|':2);
end;
writeln('=======================================================');
writeln;
end;
end;
write('Ingin mencari data lagi (y/n) ? ');readln(tekan);
22
writeln;
end;end;end;end;
{====================PROGRAM UTAMA========================}
BEGIN
clrscr;
data(data1,data2);
readln;
end.
MENU PILIHAN
[1] NAMA
[2] NIM
[3] ALAMAT
[4] IPK
Pilihan anda : 1
Masukan Nama Mahasiswa : Tumpal PS
==========================================
| Nama NIM Alamat IPK |
23
==========================================
| Tumpal PS 8051 KalBar 3.50 |
==========================================
Ingin mencari data lagi (y/n) ? y
MENU PILIHAN
[1] NAMA
[2] NIM
[3] ALAMAT
[4] IPK
Pilihan anda : 2
Masukan No. Mahasiswa : 8299
=========================================
| Nama NIM Alamat IPK |
=========================================
| Timotius N 8299 Tegal 3.50 |
=========================================
Ingin mencari data lagi (y/n) ? y
MENU PILIHAN
[1] NAMA
[2] NIM
[3] ALAMAT
[4] IPK
Pilihan anda : 3
Masukan Alamat Mahasiswa : Bali
=========================================
| Nama NIM Alamat IPK |
=========================================
| Putu Eka A 8239 Bali 3.30 |
=========================================
Ingin mencari data lagi (y/n) ? y
MENU PILIHAN
[1] NAMA
[2] NIM
[3] ALAMAT
[4] IPK
Pilihan anda : 4
Masukan IPK : 3.4
=========================================
| Nama NIM Alamat IPK |
=========================================
| Sri Sunarwati 8244 Klaten 3.40 |
=========================================
PENGURUTAN (SORTING)
24
1. METODE SELEKSI (SELECTION SORT)
Masukkan dinyatakan sebagai vector misal vector A (belum terurut), dan N (missal
banyak elemen yang akan diurutkan). Keluaran adalah vector A yang telah terurut.
Contoh Program :
PROGRAM contoh;
USES CRT;
TYPE ArrInt = array [1..100] of real ;
VAR
Data : ArrInt;
i,j,n : integer;
BEGIN
clrscr;
Writeln('Masukkan data anda !');writeln;
Write('Berapakah frekuensi data anda ? ');readln(n);
writeln('Silakan masukkan data yang Anda punya !');
for i:=1 to n do
begin
Write('Data ke-',i,' = ');readln(data[i]);
end;
SelectionSort(data,n);
25
for i:=1 to n do
write('(',data[i]:4:2,'),');
readln;
end.
Hasil Run Progam :
Masukkan data anda !
Contoh Program :
PROGRAM STATISTIK;
Uses Crt;
TYPE ArrInt = array [1..100] of integer;
PROCEDURE Tukar(var a,b : integer);
var Bantu : integer;
begin
Bantu := a;
a := b;
b := Bantu;
end;
Var
26
Data: ArrInt ;
i, j, n: integer ;
Begin
clrscr;
writeln('Masukkan data anda !');writeln;
write('Berapakah frekuensi data anda ? ');readln(n);
writeln('Silakan masukkan data Anda !');
for i:=1 to n do
begin
Write('Data ke-',i,' = ');readln(data[i]);
end;
BubleSort(data,n);
write('Hasil Pengurutan data dengan BubleSort : ');
for i:=1 to n do
write(data[i]:3);
readln;
end.
Hasil Run Program :
Masukkan data anda !
27
Pemakaian array tidak selalu tepat untuk program-program terapan yang
kebutuhan pengingatnya selalu bertambah selama eksekusi program tersebut. Untuk itu
diperlukan satu tipe data yang dapat digunakan untuk mengalokasikan (membentuk)
dan mendealokasikan (menghapus) pengingat secara dinamis, yaitu sesuai dengan
kebutuhan pada saat suatu program dieksekusi. Oleh karena itu akan dijelaskan suatu
tipe data yang dinamakan sebagai tipe Data Pointer.
Nama peubah yang kita gunakan untuk mewakili suatu nilai data sebenarnya
merupakan / menunjukkan suatu lokasi tertentu dalam pengingat computer di mana
data yang diwakili oleh tipe data tersebut disimpan. Pada saat sebuah program
dikompilasi maka compiler akan melihat pada bagian deklarasi peubah (Var) untuk
mengetahui nama-nama peubah apa saja yang digunakan, sekaligus mengalokasikan
atau menyediakan tempat dalam memory untuk menyimpan nilai data tersebut. Dari
sini kita bisa melihat bahwa sebelum program dieksekusi, maka lokasi-lokasi data
dalam memory sudah ditentukan dan tidak dapat diubah selama program tersebut
dieksekusi. Peubah-peubah yang demikian itu dinamakan sebagai Peubah Statis (Static
Variable).
Dari pengertian diatas kita perhatikan bahwa sesudah suatu lokasi pengingat
ditentukan untuk suatu nama peubah maka dalam program tersebut peubah yang
dimaksud akan tetap menempati lokasi yang telah ditentukan dan tidak mungkin
diubah. Dengan melihat pada sifat-sifat peubah statis maka bisa dikatakan bahwa
banyaknya data yang bisa diolah adalah sangat terbatas. Misalnya peubah dalam bentuk
Array yang dideklarasika sbb : Var matriks: array[1..100,1..100] of integer; maka
peubah tersebut hanya mampu menyimpan data sebanyak 100x100=10000 buah data.
Jika kita tetap nekat memasukkan data pada peubah tersebut setelah semua ruangnya
penuh maka eksekusi program akan terhenti dan muncul error. Memang kita
dapat mengubah deklarasi program diatas dengan memperbesar ukurannya. Tetapi jika
setiap kali kita harus mengubah deklarasi dari tipe daa tersebut sementara, banyaknya
data tidak dapat ditentukan lebih dahulu, maka hal ini tentu merupakan pekerjaan yang
membosankan.
Sekarang bagaimana jika kita ingin mengolah data yang banyaknya kita tidak
yakin sebelumnya bahwa larik yang telah kita deklarasikan sebelumnya mampu
menampung data yang kita miliki ?
Untuk menjawab pertanyaan di atas maka pascal menyediakan satu fasilitas
yang memungkinkan kita untuk menggunakan suatu peubah yang disebut dengan
Peubah Dinamis (Dynamic Variable). Peubah dinamis adalah peubah yang
dialokasikan hanya pada saat diperlukan, yaitu setelah program dieksekusi. Dengan
kata lain, pada saat program dikompilasi, lokasi untuk peubah belum ditentukan
sebagai peubah dinamis. Hal ini membawa keuntungan pula, bahwa peubah-peubah
dinamis tersebut dapat dihapus pada saat program dieksekusi sehingga ukuran memory
selalu berubah. Hal inilah yang menyebabkan peubah tersebut dinamakan sebagai
peubah dinamis.
Pada peubah statis, isi dari peubah adalah data sesungguhnya yang akan diolah.
Pada peubah dinamis nilai peubah adalah alamat lokasi lain yang menyimpan data
sesungguhnya. Dengan demikian data yang sesungguhnya tidak dapat dimasup secara
langsung. Oleh karena itu, peubah dinamis dikenal dengan sebutan POINTER yang
artinya menunjuk ke sesuatu. Dalam peubah dinamis, nilai dari data yang ditunjuk oleh
suatu pointer biasanya disebut Simpul / node.
28
Bentuk umum deklarasi pointer :
Tanda ^ di depan simpul harus ditulis apa adanya karena itu menunjukkan
bahwa pengenal bertipe pointer. Tipe data dari simpul dapat berupa tipe data sebarang,
misalnya char, integer, atau real.
Contoh :
Type Str30 = string[30] ;
Point = ^Data ;
Data = record
Nama_Peg : Str30 ;
Alamat : Str30 ;
Pekerjaan : Str30 ;
End ;
Var
P1, P2 : Point ;
A, B, C : Str30 ;
29
karena itu, apabila kita hendak mempunyai sebuah peubah yang benar-benar dinamis
maka peubah itu harus mampu memasup sejumlah lokasi tertentu.
Untuk itu akan diperkenalkan apa yang dinamakan sebagai Senarai Berantai
(Linked List).
Secara umum ada 2 operasi yang dapat dilakukan dengan tipe data pointer, yaitu :
1. Mengkopy pointer, sehingga sebuah simpul akan ditunjuk oleh lebih dari
sebuah pointer
2. Mengkopy isi dari simpul, sehingga dua atau lebih simpul yang ditunjuk oleh
pointer yang berbeda mempunyai isi yang sama
Catatan :
Syarat yang harus dipenuhi oleh kedua operasi tersebut adalah bahwa pointer-pointer
yang akan dioperasikan harus mempunyai deklarasi yang sama.
• Jika dalam statemen pemberian tanda ^ tidak diberikan maka operasinya
dinamakan sebagai mengkopi pointer, dengan konsekuensi simpul yang
ditunjuk oleh suatu pointer akan bisa terlepas dan tidak dapat dimasup lagi.
Contoh : P1 := P2 ;
30
Type Point = ^Data ;
Data = record
Info : char ;
Berikut : Simpul
End;
Var Elemen : char ;
Awal, Akhir, Baru : Simpul ;
Untuk menyambung simpul yang ditunjuk oleh Akhir dan Baru maka pointer
pada simpul yang ditunjuk oleh Akhir dibuat sama dengan Baru , kemudian diubah
pointer Akhir sama dengan Baru.
31
Bantu:= Awal;
While (Elemen > Bantu^.Berikut^.Info) and (Bantu <> NIL) then
Bantu:= Bantu^.Berikut;
Baru^.Berikut:= Bantu^.Berikut;
Bantu^.Berikut:= Baru;
End;
End;
Simpul yang dapat dihapus oleh operasi penghapusan simpul adalah simpul
yang berada sesudah simpul yang ditunjuk oleh suatu pointer, kecuali untuk simpul
pertama.
Untuk menghapus simpul pertama, maka pointer Bantu kita buat sama dengan
pointer Awal. Kemudian pointer Awal kita pindah dari simpul yang ditunjuk oleh
pointer Bantu. Selanjutnya, simpul yang ditunjuk oleh pointer Bantu kita Dispose.
Pertama kita letakkan pointer Bantu pada simpul di sebelah kiri simpul yang
akan dihapus. Simpul yang akan dihapus kita tunjuk dengan pointer lain, misalnya
Hapus. Kemudian pointer pada simpul yang ditunjuk oleh Bantu kita tunjukkan pada
simpul yang ditunjuk oleh pointer pada simpul yang akan dihapus. Selanjutnya simpul
yang ditunjuk oleh pointer Hapus kita Dispose.
32
End;
End;
Pertama kali kita atur supaya pointer Bantu menunjuk ke simpul yang ditunjuk
oleh pointer Awal. Setelah isi simpul itu dibaca, maka pointer Bantu kita gerakkan ke
kanan untuk membaca simpul berikutnya. Proses ini kita ulang sampai pointer Bantu
sama dengan pointer Akhir.
Ada 2 cara membaca mundur isi dari Senarai Berantai, yaitu dengan cara biasa
seperti diatas atau dengan memanfaatkan proses rekursi. Cara pertama yaitu kita atur
pointer Bantu sama dengan pointer Awal. Berikutnya, pointer awal kita arahkan ke
simpul Akhir dan kita pakai pointer lain misalkan Bantu1 untuk bergerak dari simpul
pertama sampai simpul sebelum simpul terakhir. Langkah selanjutnya adalah
mengarahkan medan pointer dari simpul terakhir ke simpul Bantu1. Langkah ini
diulang sampai pointer Akhir Berimpit dengan pointer Bantu. Cara kedua dengan
rekursi. Caranya hampir sama dengan cara membaca senarai berantai secara maju
hanya saja pencetakan isi simpul ditunda sampai pointer Bantu sama dengan pointer
akhir.
33
Begin
TERBALIK(Bantu^.Berikut);
Write(Bantu^.Info:2);
End;
End;
Misalkan data yang dicari disimpan dalam peubah Elemen. Pertama kali, pointer
Bantu dibuat sama dengan pointer Awal. Kemudan isi simpul yang ditunjuk oleh
pointer Bantu dibandingkan dengan Elemen. Jika belum sama, maka pointer Bantu
dipindah ke simpul disebelah kanannya dan proses perbandingan diulang lagi sampai
bisa ditentukan apakah Elemen ada dalam senarai berantai yang dimaksud atau tidak.
34