Procedure Prosedur adalah suatu program yang terpisah dalam blok tersendiri yang berfungsi sebagai subprogram. Penggunaan prosedur diawali dengan kata cadangan procedure di dalam bagian deklarasi prosedur. Pemanggilan prosedur dapat dilakukan dengan menggunakan judul prosedur. Pada program terstruktur banyak menggunakan prosedur karena : • Sebagai penerapan program yang modular yaitu memecah program yang rumit menjadi program-program bagian yang lebih sederhana dalam bentuk prosedur. • Untuk beberapa perintah yang sering digunakan berulang, cukup dituliskan sekali dalam prosedur dan dapat dipanggil sewaktuwaktu. Bentuk Umum: Procedure nama_procedure(parameter); Deklarasi variabel,label,..dll; Begin Statemen prosedur; ……… ……... End;
Contoh Prosedur tanpa parameter: uses crt; var i:byte; procedure garis; var counter : integer; begin textcolor(green); for counter:=1 to 10 do begin write(chr(196)); end; end; begin clrscr; for i:=1 to 5 do begin garis; writeln('pascal'); end; readln; end.
Algoritma Pemrograman 2
1
Output: ──────────pascal ──────────pascal ──────────pascal ──────────pascal ──────────pascal
Parameter dalam prosedur Nilai di dalam suatu prosedur sifatnya adalah lokal, berarti hanya dapat digunakan oleh prosedur tersebut saja dan tidak dapat digunakan oleh prosedur yang lain. Deklarasi secara global dapat menyebabkan semua prosedur dibawah deklarasi global dapat menggunakannya. Contoh penggunaan deklarasi global dan lokal: uses crt; Procedure Hitung_Luas(p,l:integer);{Prosedur dengan parameter} var ls:integer; {variabel lokal} begin ls:=p*l; writeln('Luas :',ls); end; Procedure Hit_Keliling(p,l:integer); {Prosedur dengan parameter} var kel:integer; {variabel lokal} begin kel:=(2*p)+(2*l); writeln('Keliling :',kel); end; {===program utama===} var pj,lbr:integer; begin clrscr; writeln('Program Untuk Menghitung luas dan keliling persegipanjang'); writeln; write('Masukan panjang : ');readln(pj); write('Masukan lebar : ');readln(lbr); writeln; Hitung_Luas(pj,lbr); {Memanggil prosedur Hitung_Luas} Hit_Keliling(pj,lbr); {Memanggil prosedur Hit_Keliling} readln; end.
Algoritma Pemrograman 2
2
Output: Program Untuk Menghitung luas dan keliling persegipanjang Masukan panjang : 10 Masukan lebar : 6 Luas :60 Keliling :32
Pengiriman parameter secara Nilai Pada pengiriman parameter secara nilai (by value), parameter formal akan berisi nilai yang dikirimkan dari parameter nyata dan nilai parameter tersebut akan lokal di prosedur yang dikirim, sifat dari pengiriman nilai ini adalah satu arah, sehingga perubahan nilai dari parameter formal tidak akan mempengaruhi nilai parameter nyata. Contoh : uses crt; procedure kali(a,b :integer); var hasil : integer; begin hasil := a*b; writeln('hasil=',hasil:6); end; var bil1,bil2 : integer; begin clrscr; write('bilangan 1 = ');readln(bil1); write('bilangan 2 = ');readln(bil2); kali(bil1,bil2); readln; end. Output : bilangan 1 = 5 bilangan 2 = 3 hasil= 15
Algoritma Pemrograman 2
3
Di bawah ini merupakan contoh bahwa perubahan pada parameter formal tidak akan mempengaruhi nilai parameter nyata, karena sifatnya adalah satu arah. Program parameter_nilai_tdk_mempengaruhi_parameter_nyata; uses crt; procedure testhitung(a,b,hasil : integer); begin hasil := a*b; writeln('A=',a:4,' B=',b:4,' Hasil=',hasil:6); end; var bil1,bil2,bil3: integer; begin clrscr; bil1:=3;bil2:=4;bil3:=0; testhitung(bil1,bil2,bil3); writeln('bil1=',bil1:4,'
bil2 =',bil2:4,'
bil3=',bil3);
readln; end. Output: A=
3 B=
bil1=3
4 Hasil=
bil2 =4
12
bil3=0
Pengiriman parameter secara acuan (by reference) Sifat dari pengiriman parameter secara acuan adalah dua arah artinya perubahan dari parameter formal akan mempengaruhi nilai dari parameter nyata. Cara deklarasi diprocedure dengan kata cadangan Var seperti berikut : Procedure kali(Var a,b,c : integer); -> parameter formal kali(x,y,z); -> parameter nyata
Contoh : Program pengiriman_parameter_secara acuan; Uses crt; Procedure kali(var a,b,c : integer); {parameter formal acuan} Algoritma Pemrograman 2
4
Begin c:=a*b; End; {modul utama} Var x,y,z : integer; Begin Write('nilai x='); Readln(x); Write('nilai y='); Readln(y); kali(x,y,z); {mengirimkan parameter secara acuan} Writeln('Nilai z =',z:5); End.
Di dalam pascal diperkenankan prosedur memanggil prosedur yang lain seperti contoh berikut : Program procedure_memanggil_procedure_yang_lain; Uses crt; Procedure satu(a1: integer); Begin Writeln(' nilai a =',a1:2,' ada diprocedure End; Procedure dua(a2: integer); Begin Writeln(' nilai a =',a2:2,' ada diprocedure satu(a2); End; Procedure tiga(a3: integer); Begin Writeln(' nilai a =',a3:2,' ada diprocedure dua(a3); End; Procedure empat(a4: integer); Begin Writeln(' nilai a =',a4:2,' ada diprocedure tiga(a4) End; {modul Utama} Var a : integer; Begin Clrscr; Write('nilai a=');readln(a); empat(a); Readln; End.
Algoritma Pemrograman 2
satu');
dua');
tiga');
empat');
5
Prosedur Tersarang Prosedur tersarang adalah prosedur yang terdapat di dalam prosedur yang lain dan dipanggil oleh prosedur diluarnya. Program contoh_procedure_tersarang; Uses crt; Procedure satu; {deklarasi procedure satu} Procedure dua; Begin {awal procedure dua} Writeln('procedure dua ada di procedure satu'); End; {akhir procedure dua} Procedure tiga; Begin {awal procedure tiga} Writeln('procedure tiga ada di procedure satu'); End; {akhir procedure tiga} Begin {awal procedure satu} Writeln(' procedure satu'); dua; {memanggil procedure dua} tiga; {memanggil procedure tiga} End; {akhir procedure satu} {modul utama} Begin Clrscr; Writeln(' modul utama'); satu; {memanggil procedure satu} Readln; End.
Prosedur memanggil dirinya sendiri (rekursi) Di dalam pascal diperkenankan memanggil prosedurnya sendiri. istilah ini disebut sebagai recursion. Dalam penggunaanya membutuhkan memory yang besar. Karena pada setiap pemanggilan sejumlah memory tambahan dibutuhkan. Contoh : Program procedure_memanggil_dirinya_sendiri; Uses crt; Var i : integer; Procedure rekursi; Begin Writeln('pemangilan procedure ke-',i:5); i:=i+1; If i < 5 then rekursi; End; {modul utama} Begin Clrscr; i:=1; rekursi;Readln; End. Algoritma Pemrograman 2
6