Professional Documents
Culture Documents
SUB PROGRAM(PROSEDUR)
Salah satu metode perancangan program yang baik adalah menggunakan konsep modular atau sering disebut dengan pemrograman modular. Dengan metode ini suatu masalah dipecah menjadi beberapa masalah yang lebih kecil (ke dalam modul-modul). Dengan membagi masalah menjadi beberapa modul, maka masalah tersebut akan menjadi lebih sederhana, sehingga program dapat lebih mudah disusun dan dipahami. Dalam bahasa Pascal sub program terbagi dua jenis yaitu prosedur dan fungsi. Manfaat lain dari pemrograman modular adalah software reusabilty. Subprogram yang dibuat satu kali diharapkan dapat digunakan oleh program lain, sehingga penulisan program (proses pengkodean) lebih efektif.
Keuntungan menggunakan modul: 1. Rancangan top-down dengan pendekatan divide-and-conquer, program besar dapat dibagi menjadi modul-modul yang lebih kecil; 2. Dapat dikerjakan oleh beberapa orang dengan koordinasi yang lebih mudah; 3. Mencari kesalahan relatif lebih mudah karena alur logika lebih jelas, dan kesalahan dapat dilokalisasi dalam satu modul; 4. Modifikasi dapat dilakukan tanpa mengganggu program secara keseluruhan; 5. Mempermudah dokumentasi.
Sifat-sifat modul yang baik adalah: Fan-in yang tinggi: makin sering suatu modul dipanggil oleh pengguna makin tinggi nilai fanin. Fan-out yang rendah: makin sedikit (spesifik) tugas yang dilakukan oleh suatu modul, makin rendah nilai fen-out. Self-contained: kemampuan memenuhi kebutuhannya sendiri.
9.2. Prosedur
Prosedur adalah suatu program terpisah dalam blok sendiri yang berfungsi sebagai sub program. Prosedur diawali dengan kata Procedure didalam bagian deklarasi prosedur. Prosedur dipanggil dan digunakan didalam blok program yang lainnya dengan menyebutkan judul prosedurnya. Bentuk umum penulisan prosedur dalam sebuah program:
Program judul_program;
Begin
end.
Prosedur memiliki struktur yang sama dengan program, yaitu : procedure Name; const (* Constants *) var (* Variables *) begin (* Statements *) end;
Perhatikan pada bagian akhir prosedur, terlihat setelah END tidak menggunakan titik, tapi tanda titik koma. Ini menandakan bahwa bagian tersebut bukan akhir suatu program. Untuk memanggil program, dapat dilakukan dengan cara menuliskan nama porsedur : Nama_procedure;
Nilai didalam suatu program Pascal sifatnya lokal, artinya hanya dapat digunakan pada modul atau unit program yang bersangkutan saja, tidak dapat digunakan pada modul atau unit program yag lainnya. Perhatikan contoh dibawah ini :
Program 9.1
Procedure Tanya_hitung1; Var X, Y : Real; Begin Write (Nilai X ? ); Readln(X) Y := X * X; End; Begin Tanya_hitung1; Writeln (Nilai Y = , Y:6:2) End.
Program 9.2
Procedure Tanya_hitung2; Var X, Y : Real; Begin Write (Nilai X ? ); Readln(X) Y := X * X; Writeln (Nilai Y = , Y:6:2) End; Begin Tanya_hitung2; End.
Program 9.1 adalah salah, karena modul utama menggunakan variabel lokal suatu prosedur. Bandingkan dengan program 9.2. Jika program 9.2 dijalankan maka hasil program adalah sebagai berikut: Nilai x? 3.0 Nilai Y= 9.00
Supaya nilai-nilai variabel dapat digunakan di modul lainnya yang membutuhkannya, maka dapat dilakukan dengan beberapa cara, yaitu :
1. Dibuat bersifat global Supaya suatu nilai dapat bersifat global, maka harus dideklarasikan diatas modul yang menggunakannya Contoh :
Var A, B : Integer; Procedure Satu; Begin Readln(A); Readln(B); End; Procedure Dua; Begin B:= A+1 End Begin Satu; Writeln (A); Dua Writeln (B); End.
Pada contoh diatas, variabel A dan B bersifat global untuk semua modul yaitu untuk prosedur SATU dan DUA, sehingga dapat digunakan untuk semua modul itu.
2. Dikirimkan sebagai parameter ke modul yang membutuhkannya. Parameter yang dikirimkan dari modul utama ke modul prosedur disebut dengan parameter nyata (actual prameter) dan parameter yang ada dan dituliskan pada judul prosedur disebut dengan parameter formal (formal parameter). Proses pengiriman data lewat parameter nyata ke parameter formal disebut dengan passing parameter. Parameter nyata dan parameter formal harus dengan tipe yang sama. Pada bahasa Pascal pengiriman parameter dapat dikirimkan secara nilai (by Value) atau secara acuan (by Reference).
Parameter list terdiri dari sekumpulan parameter yang dipisahkan dengan tanda titik dua. param_group_1; param_group_2; ... ; param_group_n
Perhatikan contoh dibawah ini : procedure Name (a, b : integer; c, d : real); begin a := 10; b := 2; writeln (a, b, c, d) end;
Asumsikan prosedur diatas dipanggil di program utama alpha := 30; Name (alpha, 3, 4, 5);
Pada saat kembali ke program utama, berapakah nilai variabel alpha? Apakah bernilai 30 atau 10? Untuk menjawab pertanyaan diatas, maka perlu diketahui cara pengiriman parameternya apakah secara nilai (by value) atau secara acuan (by reference).
Bila parameter dikirim secara nilai , parameter formal di prosedur akan berisi nilai yang akan dikirimkan yang kemudian bersifat lokal di prosedur. Bila nilai parameter formal di prosedur tersebut berubah, tidak akan mempengaruhi nilai parameter nyata (nilai parameter nyata tetap, tidak berubah). Pengiriman secara nilai ini merupakan pengiriman searah, yaitu dari parameter nyata ke parameter formal, yang tidak dikirim balik dari parameter formal ke parameter nyata. Pengiriman parameter secara nilai ini juga dapat dikatakan dengan menyalin (copy) nilai variabel dan nilai itu diberikan ke variabel parameter. Prosedur bekerja pada salinan variabel, sehingga tidak mengubah parameter aktualnya.
Contoh:
Procedure tukar(A, B: integer); Var C: integer; Begin C:= A; A:= B; B:= C; Writeln (Nilai pertama = ,A); Writeln(Nilai Kedua = , B); End;
Var x,y : integer; Begin x:= 10; y:= 15; tukar(x,y); writeln(x = , x, y = ,y); end.
Berdasarkan program di atas nilai dari x diberikan kepada A dan nilai dari y diberikan kepada B. Nilai yang dipertukarkan adalah nilai A dan B yang terjadi di dalam prosedur tukar, sedangkan nilai x dan y yang berada di program utama tetap.
Identifier konstanta dan literal tidak dapat digunakan dalam parameter, karena kedua identifier tersebut tidak dapat berubah nilainya. Contoh: Procedure tukar_acuan(var A, B: integer); Var C: integer; Begin C:= A; A:= B; B:= C; Writeln (Nilai pertama = ,A); Writeln(Nilai Kedua = , B); End;
Var x,y : integer; Begin x:= 10; y:= 15; tukar_acuan(x,y); writeln(x = , x, y = ,y); end.
Berdasarkan program di atas terlihat bahwa pengiriman parameter secara acuan merupakan pengiriman dua arah, bolak-balik, sehingga perubahan nilai di parameter formal akan mempengaruhi nilai pada parameter nyata juga. Pada contoh di atas nilai dari variabel A dan B
yang telah dipertukarkan mempengaruhi nilai x dan y, sehingga nilai x dan y menjadi tertukar pula.
Untuk pengiriman parameter string secara nilai, panjang parameter formal dan parameter nyata boleh tidak sama. Akan tetapi untuk untuk pengiriman parameter secara acuan panjang panjang string harus sama.
Procedure Faktorial( n: Integer); Var i, Hasil: integer; Begin Hasil:=1; If( n<=0) then Exit; For i:= 2 to n do Hasil:= hasil * i; Writeln(n, Faktorial = , Hasil); End;
Procedure Pangkat_Tiga(A: integer); Var Hasil:integer; Begin Hasil:= A*A*A; Writeln(A, Pangkat Tiga = , Hasil); End;
Var X: integer; Begin Write(Masukkan Bilangan bulat : ); Readln(X); Faktorial(X); Pangkat_Tiga(X); End.
Tugas Mandiri:
Buatlah program Lingkaran, dimana program memiliki prosedur untuk mencari luas lingkaran, prosedur menghitung keliling lingkaran. Pada saat prosedur tersebut dipanggil akan langsung menampilkan nilai dari masing-masing prosedur.
===========
Referensi:
Thompson Susabda Ngoen, Pengantar Algoritma dengan Bahasa C, Salemba Teknika, Jakarta, 2004
10