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 4.2.1
Perancangan Procedure 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. p r o c ed u r e nama−p r o s e d u r [ ( d e r e t a n −p a r a m e t e r ) ] ; [ b a g i a n d e k l a r a s i k o n s t a n t a , t i p e , v a r i a b e l , dan p r o s e d u r / f u n g s i ] b eg in [ statemen −s t a t e m e n dalam badan p r o s e d u r ] 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. Yohanes Suyanto
4.2. Perancangan Procedure
57
procedure
procedure
identifier
;
parameter
deklarasikonstanta
deklarasitipe
deklarasivariabel
deklarasiprosedur
deklarasifungsi
begin
end ;
statemen
Gambar 4.1: Sintaksis Procedure
1 2
program C o n t o h p r o s e d u r ; var a , b : in t eg er ;
3 4 5 6 7 8
p r o c ed u r e P r i n t B i l a n g a n ; // d e k l a r a s i p r o s e d u r b eg in // untuk menampilkan dua b i l a n g a n w r i t e l n ( ’ H a s i l pertama = ’ , a ) ; w r i t e l n ( ’ H a s i l k edua = ’ ,b) ; end ;
9 10 11 12 13 14 15 16 17
b eg in w r i t e ( ’ Masukkan b i l a n g a n pertama : ’ ) ; r e a d l n ( a ) ; w r i t e ( ’ Masukkan b i l a n g a n kedua : ’ ) ; r e a d l n ( b ) ; Print Bilangan ; // p a n g g i l p r o s e d u r − p e r h a t i k a n h a s i l n y a a := a + 1 0 ; b := b + 5 ; Print Bilangan ; // p a n g g i l s e k a l i l a g i , p e r h a t i k a n h a s i l n y a end .
Contoh 4.1: Yohanes Suyanto
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 = 4 dan n = 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 2 3 4 5 6 7 8 9
p r o c ed u r e Kotak (m, n : i n t e g e r ) ; var i , j : in t eg er ; b eg in f o r i :=1 to m do b eg in f o r j :=1 to n do write ( ’∗ ’ ) ; writeln ; end ; 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: * ** *** **** ***** Yohanes Suyanto
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 2 3 4 5 6 7 8 9
p r o c ed u r e S e g i T i g a ( n : i n t e g e r ) ; var i , j : in t eg er ; b eg in f o r i :=1 to n do b eg in f o r j :=1 to i do write ( ’∗ ’ ) ; writeln ; end ; end ;
Contoh 4.3: Buatlah procedure untuk menampilkan pola kotak dari karakter ’*’ seperti Contoh 4.??, tetapi bagian tengah berisi spasi. Contoh untuk m = 4 dan n = 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 2 3 4 5 6 7 8 9 10 11
p r o c ed u r e Kotak2 (m, n : i n t e g e r ) ; var i , j : in t eg er ; b eg in f o r i :=1 to m do b eg in f o r j :=1 to n do i f ( i =1) o r ( i=m) o r ( j =1) o r ( j=m) then w r i t e ( ’ ∗ ’ ) else write ( ’ ’ ) ; writeln ; end ; end ;
Yohanes Suyanto
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 2 3 4 5 6 7 8 9 10 11
p r o c ed u r e S e g i T i g a 2 ( n : i n t e g e r ) ; var i , j : in t eg er ; b eg in f o r i :=1 to n do b eg in f o r j :=1 to i do i f ( j =1) o r ( i=n ) o r ( i=j ) then w r i t e ( ’ ∗ ’ ) else write ( ’ ’ ) ; writeln ; end ; 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
u n i t prog6 2 ;
2 3
interface
4 5 6
uses Windows , M essag es , S y s U t i l s , V a r i a n t s , C l a s s e s , G r a p h i c s , C o n t r o l s , Forms ,
Yohanes Suyanto
4.2. Perancangan Procedure
61
Gambar 4.3: Desain Form Program Pola Kotak dan Segitiga
7
Dialogs , StdCtrls , ExtCtrls ;
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
type TForm1 = c l a s s ( TForm ) Memo1 : TMemo; RadioGro up1 : TRadioGroup ; L a b e l 1 : T Label ; L a b e l 2 : T Label ; E d i t 1 : T E dit ; E d i t 2 : T E dit ; Butto n1 : TButton ; p r o c ed u r e B u t t o n 1 C l i c k ( S e n d e r : TObject ) ; private { Private declarations } p r o c ed u r e Kotak (m , n : I n t e g e r ) ; p r o c ed u r e Kotak2 (m , n : I n t e g e r ) ; p r o c ed u r e S e g i t i g a ( n : I n t e g e r ) ; p r o c ed u r e S e g i t i g a 2 ( n : I n t e g e r ) ; public { Public declarations } end ;
28 29 30
var Form1 : TForm1 ;
31 32 33 34
implementation {$R ∗ . dfm}
Yohanes Suyanto
62
4. Procedure 35 36 37 38 39 40 41 42 43 44 45 46
p r o c ed u r e TForm1 . Kotak (m, n : i n t e g e r ) ; var i , j : in t eg er ; st : String ; b eg in Memo1 . C l e a r ; f o r i :=1 to m do b eg in s t := ’ ’ ; f o r j :=1 to n do s t := s t+ ’ ∗ ’ ; Memo1 . L i n e s . Add ( s t ) ; end ; end ;
47 48 49 50 51 52 53 54 55 56 57 58 59
p r o c ed u r e TForm1 . S e g i T i g a ( n : i n t e g e r ) ; var i , j : in t eg er ; st : String ; b eg in Memo1 . C l e a r ; f o r i :=1 to n do b eg in s t := ’ ’ ; f o r j :=1 to i do s t := s t+ ’ ∗ ’ ; Memo1 . L i n e s . Add ( s t ) ; end ; end ;
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
p r o c ed u r e TForm1 . Kotak2 (m, n : i n t e g e r ) ; var i , j : in t eg er ; st : String ; b eg in Memo1 . C l e a r ; f o r i :=1 to m do b eg in s t := ’ ’ ; f o r j :=1 to n do i f ( i =1) o r ( i=m) o r ( j =1) o r ( j=m) then s t := s t+ ’ ∗ ’ e l s e s t := s t+ ’ ’ ; Memo1 . L i n e s . Add ( s t ) ; end ; end ;
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
p r o c ed u r e TForm1 . S e g i T i g a 2 ( n : i n t e g e r ) ; var i , j : in t eg er ; st : String ; b eg in Memo1 . C l e a r ; f o r i :=1 to n do b eg in s t := ’ ’ ; f o r j :=1 to i do i f ( j =1) o r ( i=n ) o r ( i=j ) then s t := s t+ ’ ∗ ’ e l s e s t := s t+ ’ ’ ; Memo1 . L i n e s . Add ( s t ) ; end ; end ;
90
Yohanes Suyanto
4.3. Soal Latihan 91 92 93 94 95 96 97 98 99 100 101 102 103
63
p r o c ed u r e TForm1 . B u t t o n 1 C l i c k ( S e n d e r : TObject ) ; var Tinggi , Lebar : integer ; b eg in T i n g g i := S t r T o I n t ( E d i t 1 . Text ) ; L e b a r := S t r T o I n t ( E d i t 1 . Text ) ; case RadioGro up1 . I t e m I n d e x o f 0 : Kotak ( T i n g g i , L e b a r ) ; 1 : Kotak2 ( T i n g g i , L e b a r ) ; 2 : Segitiga ( Tinggi ) ; 3 : Segitiga2 ( Tinggi ) ; end ; end ;
104 105
4.3
end .
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 Yohanes Suyanto
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
Yohanes Suyanto