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 iabel,label,..dll; Statemen prosedur;... Contoh Prosedur tanpa parameter: i:byte; procedure garis; counter : integer; textcolor(green); for counter:=1 to 10 do write(chr(196)); for i:=1 to 5 do garis; writeln('pascal'); Algoritma Pemrograman 2 1
Output: 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: Procedure Hitung_Luas(p,l:integer);{Prosedur dengan parameter} ls:integer; {iabel lokal} ls:=p*l; writeln('luas :',ls); Procedure Hit_Keliling(p,l:integer); {Prosedur dengan parameter} kel:integer; {iabel lokal} kel:=(2*p)+(2*l); writeln('keliling :',kel); {===program utama===} pj,lbr:integer; 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} 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 : procedure kali(a,b :integer); hasil : integer; hasil := a*b; writeln('hasil=',hasil:6); bil1,bil2 : integer; write('bilangan 1 = ');readln(bil1); write('bilangan 2 = ');readln(bil2); kali(bil1,bil2); 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; procedure testhitung(a,b,hasil : integer); hasil := a*b; writeln('a=',a:4,' B=',b:4,' Hasil=',hasil:6); bil1,bil2,bil3: integer; Output: bil1:=3;bil2:=4;bil3:=0; testhitung(bil1,bil2,bil3); writeln('bil1=',bil1:4,' bil2 =',bil2:4,' bil3=',bil3); A= 3 B= 4 Hasil= 12 bil1=3 bil2 =4 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; Procedure kali( a,b,c : integer); {parameter formal acuan} Algoritma Pemrograman 2 4
c:=a*b; {modul utama} Var x,y,z : integer; Write('nilai x='); Readln(x); Write('nilai y='); Readln(y); kali(x,y,z); {mengirimkan parameter secara acuan} Writeln('Nilai z =',z:5); Di dalam pascal diperkenankan prosedur memanggil prosedur yang lain seperti contoh berikut : Program procedure_memanggil_procedure_yang_lain; Procedure satu(a1: integer); Writeln(' nilai a =',a1:2,' ada diprocedure satu'); Procedure dua(a2: integer); Writeln(' nilai a =',a2:2,' ada diprocedure dua'); satu(a2); Procedure tiga(a3: integer); Writeln(' nilai a =',a3:2,' ada diprocedure tiga'); dua(a3); Procedure empat(a4: integer); Writeln(' nilai a =',a4:2,' ada diprocedure empat'); tiga(a4) {modul Utama} Var a : integer; Clrscr; Write('nilai a=');readln(a); empat(a); Readln; Algoritma Pemrograman 2 5
Prosedur Tersarang Prosedur tersarang adalah prosedur yang terdapat di dalam prosedur yang lain dan dipanggil oleh prosedur diluarnya. Program contoh_procedure_tersarang; Procedure satu; {deklarasi procedure satu} Procedure dua; {awal procedure dua} Writeln('procedure dua ada di procedure satu'); {akhir procedure dua} Procedure tiga; {awal procedure tiga} Writeln('procedure tiga ada di procedure satu'); {akhir procedure tiga} {awal procedure satu} Writeln(' procedure satu'); dua; {memanggil procedure dua} tiga; {memanggil procedure tiga} {akhir procedure satu} {modul utama} Clrscr; Writeln(' modul utama'); satu; {memanggil procedure satu} Readln; 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; Var i : integer; Procedure rekursi; Writeln('pemangilan procedure ke-',i:5); i:=i+1; If i < 5 then rekursi; {modul utama} Clrscr; i:=1; rekursi;readln; Algoritma Pemrograman 2 6