Bab 4 Procedure Anda sudah menggunakan procedure dan function dalam topik-topik yang lalu mungkin tanpa Anda sadari. Write, Writeln, Read, dan Readln adalah contoh procedure yang digunakan untuk menulis atau membaca data. Sedang abs, sqrt, sqr, sin, dan cos adalah contoh fucntion yang memang sudah disediakan oleh sistem Pascal. Ternyata kita juga dapat membuat procedure atau function buatan kita sendiri dan diperlakukan seperti procedure atau function yang disediakan oleh sistem. Procedure dan function ini termasuk dalam subprogram. Kegunaan subprogram adalah untuk mempermudah pengelolaan dan penyederhanaan program. 4.1 Struktur Rancangan Puncak-Turun dengan Procedure Program tersusun atas beberapa modul. Modul kemudian dapat diimplementasikan dengan subprogram (procedure atau function). Kapan procedure digunakan? Pada umumnya setiap modul dapat diimplemtasikan dalam bentuk procedure atau function. Namun untuk modul yang sangat sederhana bentuk procedure atau function tidak diperlukan. Keputusan penggunaan modul atau tidak dapat didasarkan pada bagaimana secara keseluruhan program menjadi lebih mudah dipahami. Jika modul hanya terdiri atas 1 baris saja, lebih baik tidak usah dijadikan procedure. Jika modul terdiri atas banyak baris, lebih baik dijadikan procedure saja. Inin untuk mempermudah pemahaman program secara keseluruhan. Perlu dicatat di sini bahwa keputusan untuk menjadikan modul menjadi procedure atau tidak, hanya menyebabkan pada perbedaan keterbacaan program, bukan pada hasil program.
56 4. Procedure 4.2 Perancangan Procedure 4.2.1 Pengertian Subprogram Subprogram adalah bagian dari program yang dirancang untuk melaksanakan suatu tugas tertentu. Idenya adalah konsep tentang modularitas : program dipecah atas subprogram-subprogram yang lebih kecil. Dengan cara ini, program akan lebih mudah dimengerti, dan jika ada kesalahan di dalam proses pengolahan data akan lebih mudah untuk melokalisirnya. Di dalam Pascal subprogram bisa berwujud prosedur atau fungsi. Secara garis besar, konstruksi keduanya mirip dengan program. Prosedur dan fungsi bisa dikatakan sebagai program kecil. Keduanya bisa memiliki deklarasi-deklarasi, bagian badan, bahkan prosedur atau fungsi yang lain. Aturan umum yang dapat digunakan untuk menentukan perlunya dibuat suatu prosedur atau fungsi : bagilah suatu penyelesaian persoalan (solusi) menjadi subsolusi-subsolusi yang lebih kecil. Masing-masing subsolusi diwujudkan dalam bentuk prosedur atau fungsi. Contoh : masalah pengelolaan data karyawan dapat dibagi menjadi bagian pemasukan data, pengubahan data, penampilan data, dan penghapusan data. Wujudkan masing-masing bagian tersebut dalam sebuah procedure atau function. 4.2.2 Procedure Prosedur adalah bentuk subprogram yang semata-mata bertugas mengerjakan suatu aktivitas. Struktur pendefinisian prosedur adalah sebagai berikut. procedure nama prosedur [( deretan parameter) ]; [ bagian deklarasi konstanta, tipe, variabel, dan prosedur/fungsi ] begin [ statemen statemen dalam badan prosedur ] end ; Gambar?? menggambarkan diagram sintaksis procedure dalam Pascal. Terlihat bahwa struktur prosedur mirip dengan struktur program Pascal. Perbedaannya adalah pada kata procedure dan adanya deretan parameter yang menyertainya. Tentang parameter akan dibicarakan kemudian. Prosedur digunakan dengan cara memanggil namanya. Sebagai contoh, pada program pengelolaan data karyawan, jika diinginkan untuk mengubah data karyawan, maka prosedur ubah data dipanggil untuk melaksanakan hal tersebut. Begitu nama sebuah prosedur dipanggil di suatu bagian program, maka eksekusi program akan berpindah ke prosedur tersebut. Program akan mengerjakan apa yang diminta di dalam prosedur tersebut. Setelah selesai, eksekusi akan kembali kepada bagian pemanggil.
4.2. Perancangan Procedure 57 procedure procedure identifier ; parameter deklarasikonstanta deklarasitipe deklarasivariabel deklarasiprosedur deklarasifungsi begin statemen end ; Gambar 4.1: Sintaksis Procedure 1 program Contoh prosedur; 2 var a,b : integer ; 3 4 procedure Print Bilangan ; // deklarasi prosedur 5 begin // untuk menampilkan dua bilangan 6 writeln ( Hasil pertama =,a) ; 7 writeln ( Hasil kedua =,b) ; 8 end ; 9 10 begin 11 write( Masukkan bilangan pertama : ); readln(a); 12 write( Masukkan bilangan kedua : ) ; readln(b); 13 Print Bilangan; // panggil prosedur perhatikan hasilnya 14 a := a + 10; 15 b := b + 5; 16 Print Bilangan; // panggil sekali lagi, perhatikan hasilnya 17 end. Contoh 4.1:
58 4. Procedure parameter ( identifier : tipedata var, ; Gambar 4.2: Sintaksis parameter dalam Procedure ) Buatlah procedure untuk menampilkan pola kotak dari huruf * dengan tinggi m dan lebar n. Nilai m dan n merupakan parameter masukan procedure. Contoh untuk m = 4dann = 5, hasilnya berbentuk : Jawab: Terlihat bahwa untuk persoalan tersebut lebih mudah diselesaikan dengan iterasi. Setiap baris diulang sebanyak n dan jumlah baris adalah m. Dengan demikian bentuk programnya menjadi: 1 procedure Kotak(m, n : integer); 2 var i, j : integer ; 3 begin 4 for i:=1 to m do begin 5 for j:=1 to n do 6 write( ); 7 writeln ; 8 end ; 9 end ; Contoh 4.2: Buatlah procedure untuk menampilkan pola segitiga dari huruf * dengan tinggi dan lebar n. Nilai n merupakan parameter masukan procedure. Contoh untuk n = 5, hasilnya berbentuk: * ** *** ****
4.2. Perancangan Procedure 59 Jawab: Terlihat bahwa untuk persoalan tersebut juga lebih cocok diselesaikan dengan iterasi. Setiap baris diulang sebanyak nilai i, i bergerak dari 1 sampai dengan n, dan jumlah baris adalah n. Dengan demikian bentuk programnya menjadi: 1 procedure SegiTiga(n : integer); 2 var i, j : integer ; 3 begin 4 for i:=1 to n do begin 5 for j:=1 to i do 6 write( ); 7 writeln ; 8 end ; 9 end ; Contoh 4.3: Buatlah procedure untuk menampilkan pola kotak dari karakter * seperti Contoh 4.??, tetapi bagian tengah berisi spasi. Contoh untuk m =4dann = 5, hasilnya berbentuk : Jawab: Untuk menyelesaikan persoalan ini perlu dicari pola, kapan harus dicetak spasi dan kapan ahrus dicetak *. Untuk ini, kipa perhatikan kapan harus mencetak *, yaitu baris pertama, baris terkahir, kolom pertama, dan kolom terakhir. Baris pertama tercetak saatnilai i =1, sedang baris terakhir tercetak saat nilai i = m. Kolom pertama berarti nilai j = 1 dan kolom terakhir berarti j = n. Dengan demikian bentuk programnya menjadi: 1 procedure Kotak2(m, n : integer); 2 var i, j : integer ; 3 begin 4 for i:=1 to m do begin 5 for j:=1 to n do 6 if (i=1) or (i=m)or (j=1) or (j=m) 7 then write ( ) 8 else write( ); 9 writeln ; 10 end ; 11 end ;
60 4. Procedure Contoh 4.4: Buatlah procedure untuk menampilkan pola segi tiga dari huruf * seperti Contoh 4.??, tetapi bagian tengah berisi spasi. Contoh untuk n = 5, hasilnya berbentuk : * ** Jawab: Untuk menyelesaikan persoalan ini juga perlu dicari pola, kapan harus dicetak spasi dan kapan harus dicetak *. Perhatikan kapan harus mencetak *, yaitu kolom pertama, baris terkahir, dan diagonal. Kolom pertama tercetak saatnilai j = 1, sedang kolom terakhir berarti j = n. Kolom diagonal terjadi saat nilai i = j. Dengan demikian bentuk programnya menjadi: 1 procedure SegiTiga2(n : integer); 2 var i, j : integer ; 3 begin 4 for i:=1 to n do begin 5 for j:=1 to i do 6 if (j=1) or (i=n) or (i=j) 7 then write ( ) 8 else write( ); 9 writeln ; 10 end ; 11 end ; Contoh 4.5: Bagaimana bentuk aplikasi lengkap dalam GUI untuk menampilkan pola kotak dan segitiga seperti contoh sebelumnya? Jawab: Desain from untuk persoalan ini terlihat seperti Gambar??. Program 4.1: Program menampilkan Kotak dan Segitiga dalam GUI 1 unit prog6 2; 2 3 interface 4 5 uses 6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
4.2. Perancangan Procedure 61 Gambar 4.3: Desain Form Program Pola Kotak dan Segitiga 7 Dialogs, StdCtrls, ExtCtrls ; 8 9 type 10 TForm1 = c l a s s (TForm) 11 Memo1 : TMemo; 12 RadioGroup1 : TRadioGroup; 13 Label1 : TLabel ; 14 Label2 : TLabel ; 15 Edit1 : TEdit ; 16 Edit2 : TEdit ; 17 Button1 : TButton ; 18 procedure Button1Click (Sender : TObject) ; 19 private 20 { Private declarations } 21 procedure Kotak(m,n : Integer); 22 procedure Kotak2(m,n : Integer); 23 procedure Segitiga(n : Integer); 24 procedure Segitiga2(n : Integer); 25 public 26 { Public declarations } 27 end ; 28 29 var 30 Form1 : TForm1; 31 32 implementation 33 34 {$R.dfm}
62 4. Procedure 35 procedure TForm1. Kotak(m, n : integer); 36 var i, j : integer ; 37 st : String ; 38 begin 39 Memo1. Clear ; 40 for i:=1 to m do begin 41 st:= ; 42 for j:=1 to n do 43 st:=st+ ; 44 Memo1. Lines.Add(st); 45 end ; 46 end ; 47 48 procedure TForm1. SegiTiga(n : integer); 49 var i, j : integer ; 50 st : String ; 51 begin 52 Memo1. Clear ; 53 for i:=1 to n do begin 54 st:= ; 55 for j:=1 to i do 56 st:=st+ ; 57 Memo1. Lines.Add(st); 58 end ; 59 end ; 60 61 procedure TForm1. Kotak2(m, n : integer); 62 var i, j : integer ; 63 st : String ; 64 begin 65 Memo1. Clear ; 66 for i:=1 to m do begin 67 st:= ; 68 for j:=1 to n do 69 if (i=1) or (i=m)or (j=1) or (j=m) 70 then st:=st+ 71 else st:=st+ ; 72 Memo1. Lines.Add(st); 73 end ; 74 end ; 75 76 procedure TForm1. SegiTiga2 (n : integer); 77 var i, j : integer ; 78 st : String ; 79 begin 80 Memo1. Clear ; 81 for i:=1 to n do begin 82 st:= ; 83 for j:=1 to i do 84 if (j=1) or (i=n) or (i=j) 85 then st:=st+ 86 else st:=st+ ; 87 Memo1. Lines.Add(st); 88 end ; 89 end ; 90
4.3. Soal Latihan 63 91 procedure TForm1. Button1Click( Sender : TObject) ; 92 var 93 Tinggi, Lebar : integer ; 94 begin 95 Tinggi := StrToInt(Edit1.Text) ; 96 Lebar := StrToInt(Edit1.Text) ; 97 case RadioGroup1. ItemIndex of 98 0 : Kotak(Tinggi, Lebar) ; 99 1 : Kotak2(Tinggi, Lebar) ; 100 2 : Segitiga(Tinggi); 101 3 : Segitiga2(Tinggi); 102 end ; 103 end ; 104 105 end. 4.3 Soal Latihan 1. Buatlah procedure untuk menampilkan pola segi tiga dari karakter * seperti Contoh 4.??, tetapi sisi tegak ada di bagian kanan. Contoh untuk n = 5, hasilnya berbentuk : * ** 2. Ingin dibuat procedure untuk menampilkan pola bilangan dalam segi tiga seperti contoh berikut (untuk n = 5). Bagaimana isi procedurenya? 1 121 12321 1234321 123454321 3. Ingin dibuat procedure untuk menampilkan pola bilangan dalam segi tiga seperti contoh berikut (untuk n = 5). Bagaimana isi procedurenya? 1 121 12321 1234321 123454321
64 4. Procedure 12344444321 1233333333321 122222222222221 11111111111111111 4. Ingin dibuat procedure untuk menampilkan pola bilangan dalam kotak seperti contoh berikut (untuk n = 4). Bagaimana isi procedurenya? 1111111 1222221 1233321 1234321 1233321 1222221 1111111