"ende#$n$s$kan %rosedur $enuliskan nama prosedur $endeklarasikan nama-nama konstanta peubah dan tipe ) %ika ada *. $en%abarkan rangkaian yang dilakukan.
Struktur Prosedur ! +. Bagian ,udul ) header *. !erdiri atas Na&a %rosedur dan deklaras$ %ara&eter ' ($ka ada ). -. Bagian deklarasi. .ntuk mengumumkan nama-nama. /. Bagian deskripsi. 0isebut %uga *adan %rosedur. FAKULTAS TEKNIK UMSIDA 66
'etiap prosedur mempunyai nama yang unik. 1ama prosedur sebaiknya dia(ali dengan kata ker%a karena prosedur berisi suatu aktivitas misalnya 2itung3uas !ukar "ari$aks Inisialisasi 4ktifkan$enu dan lain sebagainya.
Para&eter adala ! 1ama- nama peubah yang dideklarasikan pada bagian header prosedur. Penggunaan parameter mena(arkan mekanisme pertukaran informasi antar prosedur ) atau fungsi *. !iap item data ditransfer antara Para&eter a+tual dan Para&eter #or&al yang bersesuaian. Para&eter a+tual ' ar,u&ent ) adala ! Parameter yang disertakan pada (aktu pemanggilan prosedur. Para&eter #or&al adala ! Parameter yang dideklarasikan di dalam bagian header prosedur itu sendiri. Ketika prosedur dipanggil parameter actual menggantikan parameter formal. !iap-tiap parameter actual berpasangan dengan parameter formal yang bersesuaian. -ara %e&an,,$lan %rosedur den,an %ara&eter adala ! 1amaProsedur)parameter aktual*
pendeklarasian parameter di dalam prosedur bukanlah keharusan. 0engan kata lain %ara&eter *ole ada atau t$dak ada.
67
Prosedur yang baik adalah Prosedur yang independent dari program pemanggilannya. Prosedur yang tidak menggunakan peubah-peubah global didalam badan prosedurnya. ,ika program utama perlu mengkomunikasikan nilai peubah global ke dalam prosedur maka ada satu cara untuk melakukannya yaitu dengan menggunakan parameter. Aturan .an, arus d$%er at$kan dala& kores%ondens$ satu/satu antara
%ara&eter a+tual dan %ara&eter #or&al adala ! +. ,umlah parameter actual pada pemanggilan prosedur harus sama dengan %umlah parameter formal pada deklarasi prosedurnya. -. !iap parameter actual harus bertipe sama dengan tipe parameter formal yang bersesuaian. /. !iap parameter actual harus diekspresikan dalam cara yang taat-asas dengan parameter formal yang bersesuaian parameter formal. Berdasarkan &aksud %en,,unaann.a0 ada 1 (en$s %ara&eter #or&al .an, d$sertakan ke dala& %rosedur ! +. Parameter masukan ) Input parameter *. Parameter yang nilainya berlaku sebagai masukan untuk prosedur. 0alam bahasa pemrograman istilah parameter masukan ini sering dinamakan %ara&eter n$la$ )value parameter atau parameter by value*. -. Parameter keluaran ) 5utput parameter*. Parameter yang menampung keluaran yang dihasilkan oleh prosedur. /. Parameter masukan & keluaran ) Input&5utput parameter *. Parameter yang berfungsi sebagai masukan sekaligus keluaran bagi prosedur tersebut. bergantung pada %enis
68
Pro,ra& den,an Prosedur atau 2an%a Prosedur3 'angat dian%urkan menulis program yang modular. Program yang dipecah men%adi beberapa prosedur ) fungsi * menun%ukan teknik pemrograman yang baik dan terstruktur.
Prosedur den,an Para&eter atau 2an%a Para&eter3 'angat dian%urkan menuliskan %rosedur den,an %ara&eter. Parameter berfungsi sebagai media komunikasi antara modul dengan program pemanggil. 'elain itu parameter dapat mengurangi kebutuhan penggunaan peubah global.
Para&eter "asukan atau Para&eter 4eluaran3 !ergantung pada kasus yang ada. Bila prosedur menghasilkan keluaran yang digunakan oleh program pemanggil gunakan %ara&eter keluaran untuk menampung keluaran tersebut. Bila prosedur tidak menghasilkan keluaran ataupun %ika ada dan keluaran tersebut hanya digunakan didalam prosedur itu sa%a maka gunakan %ara&eter &asukan. Bila prosedur menerima masukan sekaligus pengeluaran pada parameter yang sama gunakan %ara&eter &asukan 5 keluaran. 2.2. Pro+edure %ada Al,or$t&a
+. Prosedur !anpa Parameter -. Prosedur 0engan Parameter $asukan /. Prosedur 0engan Parameter Keluaran 6. Prosedur 0engan Parameter $asukan&Keluaran Prosedur 2an%a Para&eter %ada Al,or$t&a 1. -ara &e&an,,$l 'dar$ al,or$t&a5%ro,ra& uta&a) DEKLARASI Procedure namaprosedur DESKRIPSI namaprosedur FAKULTAS TEKNIK UMSIDA 69
2. -ara &end$#$n$s$kan! Procedure namaprosedur { kondisi awal : } { kondisi akhir : } DEKLARASI LOKAL DESKRIPSI
Prosedur Den,an Para&eter "asukan Pada Al,or$t&a 1. -ara &e&an,,$l! DEKLARASI Procedure namaprosedur(input namaparameter : type) DESKRIPSI namaprosedur(namaparameter) 2. -ara &ende#$n$s$kan! Procedure namaprosedur(input namaparameter : type) { kondisi awal : } { kondisi akhir : } DEKLARASI LOKAL DESKRIPSI
Prosedur Den,an Para&eter 4eluaran Pada Al,or$t&a 1. -ara &e&an,,$l! DEKLARASI Procedure namaprosedur(output namaparameter : type) DESKRIPSI namaprosedur(namaparameter) FAKULTAS TEKNIK UMSIDA 70
2. -ara &ende#$n$s$kan! Procedure namaprosedur(output namaparameter : type) { kondisi awal : } { kondisi akhir : } DEKLARASI LOKAL DESKRIPSI
Prosedur Den,an Para&eter "asukan54eluaran Pada Al,or$t&a 1. -ara &e&an,,$l! DEKLARASI Procedure namaprosedur(input/output namaparameter:type) DESKRIPSI namaprosedur(namaparameter) 2. -ara &ende#$n$s$kan! Procedure namaprosedur(input/output type) { kondisi awal : } { kondisi akhir : } DEKLARASI LOKAL DESKRIPSI namaparameter :
71
Be*era%a aturan 2ranslas$ Notas$ al,or$t&a %rosedur ke dala& Notas$ *a asa -66 ! +. Pendefinisian prosedur ditulis di luar *lok %ro,ra& uta&a 'main). Kecuali %ika direalisasikan sebagai file include. Prosedur sesuda u&u&n.a d$letakkan *lok &a$n'). 'edangkan deklaras$ %rosedur d$tul$s se*elu&
*lok &a$n') sebagai pur(arupa sa%a ) pur(arupa prosedur hanya berupa header dari prosedur tersebut * maka pendeklarasian pur(arupa prosedur tidak diperlukan lagi. -. 0alam bahasa " tidak dikenal istilah prosedur. 'emua modul program adalah fungsi. Prosedur adalah fungsi yang tidak mengembalikan nilai apapun. Karena itu return value untuk prosedur adalah void )yang artinya 7kosong8*. /. 0alam bahasa " bila prosedur tidak mempunyai parameter maka tanda kurung 7)7 dan 7*8 tetap ditulis setelah setelah nama prosedur tersebut. 6. 'emua parameter dalam bahasa " adalah parameter masukan. 5leh karena itu semua argument parameter actual dile(atkan sebagai 9 by value:. Ini artinya nilai parameter actual disalin ke parameter formal yang bersesuaian. 'uatu cara untuk memperoleh efek parameter keluaran maupun efek parameter masukan & keluaran adalah mele(atkan pointer terhadap parameter actual dengan menambahkan karakter 9;: di a(al nama parameter actual yang ber%enis parameter keluaran atau masukan & keluaran. !anda 9;: menyatakan alamat dari peubah. 'edangkan parameter formal yang ber%enis keluaran atau masukan & keluaran ditambahkan dengan karakter 9<: didepannya. !anda 9<: menyatakan operator indirect.
72
AL7ORI2"A
procedure NamaProsedur(deklarasi parameter,jika ada) {spesifikasi prosedur,berisi penjelasan tentang dilakukan oleh prosedur ini ! "wal : keadaan sebelum prosedur dilaksanakan ! "khir : kedaan setelah prosedur dilaksanakan } apa yang
DEKLARASI { semua nama yang dipakai didalam prosedur dan hanya berlaku lo#al didalam prosedur didefinisikan disini } DESKRIPSI : { badan prosedur, barisi urutan instruksi} "ara memanggil prosedur = NamaProsedur ,ika prosedur tidak mempunyai parameter atau NamaProsedur(parameter actual) ,ika prosedur mengandung parameter.
BAHASA -66
void NamaProsedur(deklarasi parameter,jika ada) $% &pesifikasi prosedur, berisi penjelasan tentang apa yang dila kukan oleh prosedur ini %$ $% ! "wal : keadaan sebelum prosedur dilaksanakan %$ $% ! "khir : keadaan setelah prosedur dilaksanakan %$ { $% '(!)"*"&+ %$ $% semua nama yang dipakai dalam prosedur dan hanya berlaku lok al di dalam prosedur didefinisikan di sini %$ $% '(&!*+P&+ %$ $% badan prosedur, berisi kumpulan instruksi %$ }
73
Program utama =
Algoritma Se!iti!a { ,enghitung luas N buah segitiga }
DEKLARASI i# ' : inte!er procedure itun!LuasSe!iti!a { ,enghitung luas segitiga dengan rumus ) -(alas . tinggi)$/ } DESKRIPSI: read(') { tentukan banyaknya segitiga } (or i ) to ' do itun!LuasSe!iti!a end(or
74
75
%$
$% 'eklarasi purwarupa prosedur yang digunakan %$ void itun!LuasSe!iti!a()+ void main() { $% '(!)"*"&+ %$ int i# '+ $% P*01*", 23"," %$ cout 33 ,-anya.nya se!iti!a/ ,+ cin == '+ (or(i2)+i32'+i44) itun!LuasSe!iti!a()+ $%endfor%$ } void itun!LuasSe!iti!a() $% ,enghitung luas segitiga dengan rumus )-(alas . tinggi)$/ %$ $% ! "wal : sembarang %$ $% ! "khir : luas segitiga ter#etak %$ { $%'(!)"*"&+%$ float a"as+ $% panjang alas segitiga, dalam #m %$ float tin!!i+ $% tinggi segitiga, dalam #m %$ float "uas+ $% luas segitiga, dalam #m/ %$ $%'(&!*+P&+%$ cout 33 ,6nPan7an! a"as se!iti!a/ ,+ cin == a"as + cout 33 ,8in!!i se!iti!a/ ,+ cin == tin!!i+ "uas 2 (a"as $ tin!!i)/%+ cout 33 ,Luas 2 , 33 "uas 33 end"+ }
76
Program utama =
Algoritma Se!iti!a { ,enghitung luas N buah segitiga
DEKLARASI i# ' : inte!er a# t : rii" procedure itun!LuasSe!iti!a(input a"as# tin!!i : rii") { ,enghitung luas segitiga dengan rumus ) -(alas . tinggi)$/ } DESKRIPSI: read(') { tentukan banyaknya segitiga } (or i ) to ' do read(a#t) itun!LuasSe!iti!a(a#t) end(or
77
78
%$
$% 'eklarasi purwarupa prosedur yang digunakan %$ void itun!LuasSe!iti!a(float a# float t)+ void main() { $% '(!)"*"&+ %$ int i# '+ float a# t+ $% P*01*", 23"," %$ cout 33 ,-anya.nya se!iti!a/ ,+ cin == '+ (or(i2)+i32'+i44) { cout 33 ,6nPan7an! a"as se!iti!a/ ,+ cin == a+ cout 33 ,8in!!i se!iti!a/ ,+ cin == t+ itun!LuasSe!iti!a(a#t)+ } } void itun!LuasSe!iti!a(float a"as# float tin!!i) $% ,enghitung luas segitiga dengan rumus )-(alas . tinggi)$/ %$ $% ! "wal : alas dan tinggi sedah terdefinisi nilainya %$ $% ! "khir : luas segitiga ter#etak %$ { $%'(!)"*"&+%$ float "uas+ $% luas segitiga, dalam #m/ %$ $%'(&!*+P&+%$ "uas 2 ( a"as $ tin!!i )/%+ cout 33 ,Luas2, 33 "uas 33 end"+ }
AL7ORI2"A ! Prosedur =
procedure itun!LuasSe!iti!a(input a"as# tin!!i : rii"# output "uas : rii") { ,enghitung luas segitiga dengan rumus ) - (alas . tinggi)$/ } { ! "wal : alas dan tinggi sudah terdefinisi nilainya } { ! "khir : luas berisi luas segitiga } DEKLARASI { tidak ada } DESKRIPSI "uas (a"as $ tin!!i)/%
Program utama =
Algoritma Se!iti!a { ,enghitung luas N buah segitiga } DEKLARASI i# ' : inte!er a# t : rii" L : rii" { luas segitiga } procedure itun!LuasSe!iti!a(input a"as# tin!!i : rii") { ,enghitung luas segitiga dengan rumus ) - (alas tinggi)$/ } DESKRIPSI: read(') { tentukan banyaknya segitiga } (or i ) to ' do read(a#t) itun!LuasSe!iti!a(a#t#L) >rite(L) end(or
80
;inc"ude 3stdio:<= $% 'eklarasi purwarupa prosedur yang digunakan %$ void itun!LuasSe!iti!a(float a# float t# float $L)+ main() { $% '(!)"*"&+ %$ int i# '+ float a# t+ float L+ $% luas segitiga, dalam #m/ %$ $% P*01*", 23"," %$ print((,-anya.nya se!iti!a/ ,)+ scan((,0d,#1')+ (or(i2)+i32'+i44) { print((,6nPan7an! a"as se!iti!a/ ,)+ scan((,0(,#1a)+ print((,8in!!i se!iti!a/ ,)+ scan((,0(,#1t)+ itun!LuasSe!iti!a(a#t# 1L)+ print((,Luas se!iti!a 2 09:%(6n ,#L)+ } } void itun!LuasSe!iti!a(float a"as# float tin!!i# float $"uas) $% ,enghitung luas segitiga dengan rumus ) -(alas . tinggi)$/ %$ $% ! "wal : alas dan tinggi sedah terdefinisi nilainya %$ $% ! "khir : luas segitiga ter#etak %$ { $%'(!)"*"&+%$ $%'(&!*+P&+%$ $"uas 2 ( a"as $ tin!!i )/%+ }
81
%$
void itun!LuasSe!iti!a(float a"as# float tin!!i# float *luas) $% ,enghitung luas segitiga dengan rumus )-(alas . tinggi)$/ %$ $% ! "wal : alas dan tinggi sedah terdefinisi nilainya %$ $% ! "khir : luas segitiga ter#etak %$ { $%'(!)"*"&+%$ $%'(&!*+P&+%$ *luas 2 ( a"as $ tin!!i )/%+ >
82
DESKRIPSI temp A { simpan nilai " ke dalam temp } A ? { isikan nilai 4 ke dalam " } ? temp { isikan nilai temp ke dalam 4 }
Program utama =
Algoritma Se"isi<@A {Prog untuk menghitung selisih nilai 5 dan 6,dengan syarat 5 7 6 jika 5 8 6,ma ka 5 dan 6 dipertukarkan dengan memanggil prosedur 3ukar } DEKLARASI @# A# B : inte!er procedure 8u.ar(input/output A#? : inte!er) { mempertukarkan nilai " dan 4 } DESKRIPSI: read(@#A) { ba#a nilai 5 dan 6 terlebih dahulu } {9ika 5 8 6, pertukaran nilai 5 dan 6 dengan memanggil prosedur 3ukar } I( @ 3 A t<en 8u.ar(@#A) endi( B @ C A { hitung selisih . dan 6 } &rite(B)
83
%$
84
$% P*01*", &elisih56 %$ $% {Prog utama untuk menghitung selisih nilai 5 dan 6,dengan syarat 5 7 6 jika 5 8 6,maka 5 dan 6 dipertukarkan dengan memanggil prosedur 3ukar } %$ ;inc"ude 3iostream:<= void 8u.ar(int $@# int $A)+ $% ,empertukarkan nilai 5 dan 6 %$ void main() { $% '(!)"*"&+ %$ int @# A# B+ $% P*01*", 23"," %$ cout 33 E@ 2 /E+ cin == @+ cout 33 EA 2 /E+ cin == A+ $% jika 5 8 6,pertukaran nilai 5 dan 6 dengan memanggil prosedur 3ukar %$ i((@ 3 A) 8u.ar(1@#1A)+ $%endif%$ B 2 @ C A+ $% hitung selisih 5 dan 6 %$ cout 33 B + } void 8u.ar(int $A# int $?) $% ,empertukarkan nilai 4 dan 4 %$ $% ! "wal : nilai " dan 4 sudah terdefinisi %$ $% ! "khir : " berisi nilai 4, 4 berisi nilai " semula { $%'(!)"*"&+%$ int temp+ $% peubah 4antu %$ $%'(&!*+P&+%$ temp 2 $A+ $% simpan nilai " didalam temp %$ $A 2 $?+ $% isi " dengan nilai 4 %$ $? 2 temp+ $% isi 4 dengan nilai temp %$ }
%$
1. PENU2UP 3atihan Buatlah program dengan menggunakan procedure untuk menghitung volume silinder )dengan berbagai bentuk parameter*.
85