kemari kemari hey ;D

ALGORITMA .

MODUL X
PROSEDUR

Di dalam dunia pemrograman, prosedur adalah modul program
yang mengerjakan tugas/aktivitas yang  spesifik dan menghasilkan suatu efek
netto [LIE96]. Suatu efek netto diketahui dengan membandingkan keadaan awal
dan keadaan akhir pada pelaksanaan sebuah prosedur. Oleh karena itu, pada
setiap prosedur kita perlu mendefinisikan keadaan awal (K. Awal) sebelum
rangkaian instruksi di dalam prosedur dilaksanakan dan keadaan akhir (K. Akhir)
yang diharapkan setelah rangkaian instruksi di dalam prosedur dilaksanakan.

10.1 Pendefinisian Prosedur
Pendefinisian prosedur artinya menuliskan nama prosedur,
mendeklarasikan nama-nama konstanta, peubah dan tipe (jika ada), dan
menjabarkan rangkaian aksi yang dilakukan. Pada dasarnya, struktur
prosedur sama dengan struktur algoritma yang sudah anda kenal yaitu :
ada bagian judul (header) yang terdiri  atas nama prosedur dan deklarasi
parameter (jika ada), bagian deklarasi untuk mengumumkan nama-nama,
dan bagian algoritma yang disebut  badan prosedur. Setiap prosedur
mempunyai nama unik. Nama prosedur sebaiknya diawali dengan kata
kerja karena prosedur suatu aktivitas, misalnya HitungLuas, Tukar,
CariMaks, Inisialisasi, AktifkanMenu, dan lain sebagainya.
Parameter adalah nama-nama peubah yang dideklarasikan pada
bagian header prosedur. Kebanyakan  program memerlukan pertukaran
data/informasi antara prosedur (atau fungsi) dana titik di mana ia dipanggil.
Penggunaan parameter menawarkan mekanisme pertukaran informasi
tersebut. Tiap item  data ditransfer antara parameter aktual dan parameter
formal yang bersesuaian. Parameter aktual (kadang-kadang disebut juga
argumen) adalah parameter yang disertakan pada waktu pemanggilan
prosedur, sedangkan parameter formal adalah parameter yang
dideklarasikan di dalam bagian header prosedur itu sendiri. Ketika prosedur dipanggil, parameter aktual menggunakan parameter formal. Tiap-tiap
paramater aktual berpasangan  dengan parameter formal yang
bersesuaian.
Notasi algoritmik untuk mendefinisikan prosedur (tanpa parameter)
adalah :
Procedure NamaProsedur(deklarasi parameter, jika ada)
(spesifikasi prosedur, berisi penjelasan tentang apa
yang dilakukan oleh prosedur ini.
K.Awal : keadaan sebelum prosedur dilaksanakan.
K.Akhir : keadaan setelah prosedur dilaksanakan.

DEKLARASI
( semua nama yang dipakai di dalam prosedur dan hanya
berlaku lokasi di dalam prosedur didefinisikan di sini)

ALGORITMA
( badan prosedur, berisi urutan instruksi)



10.2 Pemanggilan Prosedur
Prosedur bukan program yang berdiri sendiri, jadi ia dapat
dieksekusi secara langsung. Ini berarti, instruksi-instruksi di dalam prosedur
baru dapat dilaksanakan hanya bila prosedur tersebut diakses. Prosedur
diakses dengan cara memanggil namanya dari program pemanggil
(misalnya dari program  utama atau dari modul program lainnya). Jika
prosedur tanpa parameter, maka  pemanggilnya cukup dengan namanya
saja.
Contoh menghitung luas N buah segitiga
Misalkan kita mempunyai N buah segitiga dan kita ingin menghitung luas
semua segitiga. Prosedur untuk menghitung luas segitiga.

PROGRAM Segitiga
( menghitung luas N buah segitiga )

DEKLARASI
 i, N : integer  procedure HitungLuasSegitiga
 ( menghitung luas segitiga dengan rumus D = (alas x
tinggi)/2 )

ALGORITMA
 read(N) (tentukan banyaknya segitiga)
 for i←1 to N do
  HitungLuasSegitiga
 endfor


10.3 Nama Global, Nama Lokal, dan Lingkup
Nama-nama (konstanta, peubah, tipe,  dll) yang dideklarasikan di
dalam prosedur (termasuk parameter, jika ada) hanya “dikenal” di dalam
badan prosedur yang bersangkutan. Nama-nama yang dideklrasikan di
dalam prosedur tersebut dikatakan lingkupnya (scope) “lokal”. Nama-nama
lokal hanya berlaku di dalam prosedur yang melingkupinya saja. Setelah
prosedur selesai dieksekusi, nama-nama  tersebut tidak dikenal lagi di luar
prosedur. Tinjau prosedur HitungLuasSegitiga diatas, peubah alas, tinggi
dan luas hanya dapat digunakan di dalam prosedur yang bersangkutan.
Sebaliknya, nama-nama (konstanta, peubah, tipe, dll) yang
dideklarasikan di dalam program utama dikatakan lingkupnya “global”.
Nama-nama global dapat digunakan di bagian maupun di dalam program,
baik di dalam program utama maupun di dalam prosedur yang dipanggil.
Tinjau program Segitiga pada contoh tersebut diatas i dan N dapat
digunakan di dalam  program utama maupun  di dalam prosedur
HitungLuasSegitiga (kalau diperlukan).
Sekarang, mari kita modifikasi prosedur HitungLuasSegitiga
dengan meniadakan peubah alas, dan tinggi di dalam bagian deklarasinya,
dan menghilangkan pernyataan pembacaan data di dalam prosedur.
procedure HitungLuasSegitiga
( Menghitung luas segitiga dengan rumus Luas = (alas x
tinggi)/2 )
( K.Awal : sembarang )
( K.Akhir : luas segitiga tercetak )

DEKLARASI  Luas : real

ALGORITMA
 Luas ← (alas * tinggi)/2
 Write(luas)


10.4 Parameter
Aturan yang harus diperlukan dalam korespondensi satu-satu
antara parameter aktual dan parameter formal adalah :
1. Jumlah parameter aktual pada pemanggilan prosedur harus sama
dengan jumlah parameter formal pada deklarasi prosedurnya.
2. Tiap parameter aktual harus bertipe sama dengan tipe parameter formal
yang bersesuaian.
3. Tiap prosedur aktual harus diekspersikan dalam cara yang taat asas
dengan parameter formal yang bersesuaian, bergantung pada jenis
parameter formal (dijelaskan di bawah ini).
Berdasarkan maksud penggunaannya, terdapat tiga jenis
parameter formal yang disertakan di dalam prosedur :
1. parameter masukan (input parameter)
2. parameter keluaran (output parameter)
3. parameter masukan/keluaran (input/output parameter)
Parameter masukan adalah parameter yang nilainya berlalu
sebagai masukan untuk prosedur.  Pada bahasa pemrograman, istilah
parameter masukan ini sering dinamakan parameter nilai  (value parameter
atau parameter by value).
Parameter keluaran adalah parameter yang menampung keluaran
yang dihasilkan oleh prosedur. Sedangkan parameter masukan/keluaran
adalah parameter yang berfungsi sebagai masukan sekaligus keluaran bagi
prosedur tersebut.


10.4.1 Parameter Masukan Contoh prosedur hitung luas segitiga dengan parameter masukan.
Tinjau kembali prosedur menghitung luas segitiga di dalam Algoritma 10.3.
Jika program utama ingin mengkomunikasikan panjang alas dan tinggi
segitiga ke prosedur HitungLuasSegitiga, maka peubah alas dan tinggi
dideklarasikan sebagai parameter formal di bagian header prosedur.
procedure HitungLuasSegitiga
( Menghitung luas segitiga dengan rumus Luas = (alas x
tinggi)/2 )
( K.Awal : sembarang )
( K.Akhir : luas segitiga tercetak )

DEKLARASI
 Luas : integer

ALGORITMA
 Luas ← (alas * tinggi)/2
 Write(luas)

Contoh prosedur untuk mengaktifkan menu
Buatlah prosedur yang menerima nomor menu program dan menuliskan
pesan nomor menu yang dipilih. Misalnya, jika pengguna menu nomor 3,
maka tuliskan pesan “Anda memilih menu nomor 3”. Jumlah menu
seluruhnya ada 5.
Penyelesaian :
procedure HitungLuasSegitiga
( Menghitung luas segitiga dengan rumus Luas = (alas x
tinggi)/2 )
( K.Awal : sembarang )
( K.Akhir : luas segitiga tercetak )

DEKLARASI
 Luas : real

ALGORITMA
 case NomorMenu
 1 : write(‘Anda memilih menu nomor 1’)
 2 : write(‘Anda memilih menu nomor 2’)
 3 : write(‘Anda memilih menu nomor 3’)
 4 : write(‘Anda memilih menu nomor 4’)
 5 : write(‘Anda memilih menu nomor 5’)
endcase
10.4.2 Parameter Keluaran
Contoh menghitung nilai rata-rata
Buatlah prosedur untuk menghitung nilai rata-rata N buah data bilangan
bulat. Data bilangan bulat dibaca dari piranti masukan. Masukan prosedur
adalah N dan keluarannya adalah nilai rata-rata.
Penyelesaian
Prosedur menghitung nilai rata-rata
procedure HitungRataRata(input N : integer, output u :
real)
( Menghitung rata-rata N buah bilangan bulat yang
dibaca dari piranti masukan )
( K.Awal : N sudah berisi banyaknya bil.bulat N >0 )
( K.Akhir : u berisi rata-rata seluruh bilangan )

DEKLARASI
 N : integer (data bilangan bulat yang dibaca dari
papan kunci)
 k : integer (pencacah banyak bilangan)
 jumlah : integer (jumlah seluruh bilangan)

ALGORITMA
 jumlah ← 0 (inisialisasi)
 for k←1 to N do
 read(x)
 jumlah ← jumlah + x
endwhile

 u←jumlah/N
 

10.4.3 Paramter Masukan/Keluaran
Paramater masukan digunakan pada situasi di mana informasi
dikirim hanya dari titik pemanggilan  prosedur ke prosedur itu sendiri.
Sedangkan parameter keluaran hanya mengirim informasi dari prosedur ke
titik pemanggilan prosedur. Pada kebanyakan aplikasi, informasi juga harus
dikirim dalam kedua arah. Ketika prosedur yang mengandung parameter keluaran dipanggil,
nama parameter aktual di dalam program  pemanggil menggantikan
(substitute) nama parameter formal  yang bersesuaian di dalam prosedur.
Selain itu, isi atau parameter aktual juga ikut disalin ke dalam parameter
formal. Jadi, nama dan nilai parameter aktual digunakan di seluruh bagian
prosedur. Akibat penggunaaan parameter masukan/keluaran, bila
parameter aktual diubah  nilainya di dalam prosedur, maka sesudah
pemanggilan prosedur nilai parameter  aktual di titik pemanggilan juga
berubah. Ini berbeda dengan parameter masukan yang dalam hal ini
meskipun nilai parameter aktual di dalam badan prosedur diubah, nilai
parameter aktual tersebut tidak berubah di titik pemanggilan.
Parameter masukan/keluaran dideklarasikan di dalam header
prosedur dengan kata kunci input/output. Hal lain yang harus diperhatikan
pada jenis parameter masukan/keluaran ini adalah parameter aktual harus
berupa peubah, tidak boleh berupa konstanta atas ekspresi.
Contoh perbedaan antara parameter masukan dan masukan keluarga
Untuk memperlihatkan efek penggunaan parameter masukan dan
perbandingannya dengan parameter masukan/keluaran.
Prosedur dengan parameter masukan
procedure TambahEmpat(input x,y : integer)
( Menambah nilai x dan ya masing dengan 4. )
( K.Awal : x dan y sudah berisi nilai )
( K.Akhir : nilai x dan y masing-masing bertambah 4,
lalu dicetak )

DEKLARASI
 (tidak ada)

ALGORITMA
 x←x+4
 y←y+4;
 output’nilai x dan y di akhir prosedur Empat:’)
 write(‘x = ‘,x)
 write(‘y = ‘,y)

10.4.4 Program dengan Prosedur atau Tanpa Prosedur? Sangat dianjurkan menulis program yang modular. Program yang dipecah
menjadi beberapa prosedur (atau  fungsi)  menunjukkan teknik
pemrograman yang baik dan terstruktur.

10.4.5 Prosedur dengan Parameter atau Tanpa Parameter?
Sangat dianjurkan menulis prosedur dengan parameter. Parameter
berfungsi sebagai media komunikasi, antara modul dengan program
pemanggil. Selain itu, parameter dapat mengurangi kebutuhan
penggunaan peubah global.

10.4.6 Parameter Masukan atau Parameter Keluaran?
Bergantung pada masalanya, apakah  prosedur tersebut menghasilkan
keluaran yang digunakan oleh program pemanggil atau tidak. Bila
prosedur menghasilkan keluaran  yang digunakan oleh program
pemanggil, gunakan parameter keluaran untuk menampung keluaran
tersebut. Sebaliknya, bila prosedur  tidak menghasilkan keluaran, atau
kalaupun menghasilkan keluaran dan  ternyata keluaran tersebut hanya
digunakan di dalam prosedur itu saja, gunakan parameter masukan. Bila
prosedur menerima masukan sekaligus keluaran pada parameter yang
sama, gunakan parameter masukan/keluaran.

10.5 Translasi Notasi Algoritmik Prosedur ke dalam Notasi Bahasa Pascal
dan C
Beberapa aturan yang harus diketahui dalam proses translasi :
1. Dalam Bahasa Pascal, pendefinisian prosedur ditulis bersatu di dalam
program utama, kecuali jika direalisasikan sebagai unit. Prosedur
diletakkan di bawah kata var.
2. Dalam bahasa C pendefinisian prosedur ditulis di luar blok, program
utama (main), kecuali jika direalisasikan sebagai file  include. Prosedur
umumnya diletakkan sesudah blok main( ), sedangkan deklarasi
prosedur hanya berupa header dari prosedur ditulis sebelum blok main( ) sebagai purwarupa saja (purwarupa prosedur hanya berupa header
dari prosedur tersebut). Jika pendefinisian prosedur ditulis sebelum blok
main( ), maka pendeklarasian purwarupa prosedur tidak diperlukan lagi.
3. Dalam bahasa C, tidak dikenal istilah prosedur. Semua modul program
adalah fungis. Prosedur adalah fungsi yang tidak mengembalikan nilai
apapun. Karena itu, return value  untuk prosedur adalah void (yang
artinya “kosong”)
4. Dalam bahasa C, bila prosedur tidak mempunyai parameter, maka
tanda kurung “(“ dan “)” tetap ditulis setelah nama prosedur tersebut.
5. Semua parameter dalam bahasa C  adalah parameter masukan. Oleh
karena itu, semua argumen parameter aktual dilewatkan sebagai “by
value”. Ini artinya nilai parameter  aktual disalin ke parameter formal
yang bersesuaian. Suatu cara untuk memperoleh efek parameter
keluaran maupun efek parameter masukans/keluaran adalah
melewatkan pointer terhadap aktual yang berjenis parameter masukan
atau masukan/keluaran. Tanda “&” menyatakan alamat dari peubah.
Sedangkan parameter formal  yang berjenis masukan atau
masukan/keluaran ditambahkan karakter “*” di depannya. Karakter “*”
menyatakan operator indirect, yang berarti sebuah peubah yang diawali
dengan operator ini diakses secara  tidak langsung melalui alamatnya
yang disimpan di dalam peubah lain  (pada contoh prosedur, alamat
disimpan oleh parameter aktual diawali oleh karakter “&”).
6. Bahasa pascal yang memungkinkan prosedur mempunyai parameter
masukan, parameter keluaran,  dan parameter masukan/keluaran.
Parameter keluaran atau masukan/keluaran harus diawali dengan kata
kunci var, sedangkan parameter formal yang bertipe masukan tidak
diawali dengan kata kunci var.  Argumen parameter aktual dilewatkan
ke parameter formal yang bertipe masukan sebagai “by value”,
sedangkan bila parameter formalnya bertipe masukan atau
masukan/keluaran, maka argumen parameter aktual dilewatkan sebagai
“by reference”. 1. Contoh translasi prosedur tanpa paramter
ALGORITMIK
Prosedur :
procedure HitungLuasSegitiga
( Menghitung luas segitiga dengan rumus Luas = (alas
x tinggi)/2 )
( K.Awal   : sembarang )
( K.Akhir : luas segitiga tercetak )

DEKLARASI
 alas : real (panjang alas segitiga, dalam cm)
 tinggi : real (tinggi segitiga, dalam cm)
 luas : real (luas segitiga, dalam cm2
)

ALGORITMA
 read(alas, tinggi)
 Luas ← (alas * tinggi)/2
 Write(luas)

Program utama :
PROGRAM Segitiga
( menghitung luas N buah segitiga )

DEKLARASI
 i, N : integer
 procedure HitungLuasSegitiga
 ( menghitung luas segitiga dengan rumus D = (alas x
tinggi)/2 )

ALGORITMA
 read(N) (tentukan banyaknya segitiga)
 for i←1 to N do
  HitungLuasSegitiga
 endfor

2. Contoh translasi prosedur dengan parameter masukan
ALGORITMIK
Prosedur :
procedure HitungLuasSegitiga(input alas, tinggi :
real)
( Menghitung luas segitiga dengan rumus Luas = (alas
x tinggi)/2 )
( K.Awal   : sembarang ) ( K.Akhir : luas segitiga tercetak )

DEKLARASI
 luas : real (luas segitiga, dalam cm2
)

ALGORITMA
 Luas ← (alas * tinggi)/2
 Write(luas)

Program utama :
PROGRAM Segitiga
( menghitung luas N buah segitiga )

DEKLARASI
 i, N : integer
 a, t : real

 procedure HitungLuasSegitiga(input alas, tinggi :
real)
 ( menghitung luas segitiga dengan rumus D = (alas x
tinggi)/2 )

ALGORITMA
 read(N) (tentukan banyaknya segitiga)
 for i←1 to N do
 read(a,t)
  HitungLuasSegitiga
 endfor

3. Contoh translasi prosedur dengan parameter keluaran
ALGORITMIK
Prosedur :
procedure HitungLuasSegitiga(input alas, tinggi :
real, output luas : real)
( Menghitung luas segitiga dengan rumus Luas = (alas
x tinggi)/2 )
( K.Awal   : sembarang )
( K.Akhir : luas segitiga tercetak )

DEKLARASI
 ( tidak ada)

ALGORITMA
 Luas ← (alas * tinggi)/2
Program utama :
PROGRAM Segitiga
( menghitung luas N buah segitiga )

DEKLARASI
 i, N  : integer
 a, t : real
 L   : real (Luas Segitiga)

 procedure HitungLuasSegitiga(input alas, tinggi :
real)
 ( menghitung luas segitiga dengan rumus D = (alas x
tinggi)/2 )

ALGORITMA
 read(N) (tentukan banyaknya segitiga)
 for i←1 to N do
 read(a,t)
 HitungLuasSegitiga(a,t,L)
 Write(L)
 endfor

4. Contoh translasi prosedur dengan parameter masukan/keluaran
Prosedur :
procedure Tukar(input,output A,B : integer)
( mempertukarkan nilai A dan B)
( K.Awal   : nilai A dan B sudah terdefinisi)
( K.Akhir: A berisi nilai B, B berisi nilai A
semula.)

DEKLARASI
 temp : integer (peubah bantu)

ALGORITMIK
 temp←A (simpan nilai A ke dalam temp)
 A←B  (isikan nilai B ke dalam A)
 B←temp (isikan nilai temp ke dalam B)

Program Utama :
PROGRAM SelisihKY
( program untuk mengitung  selisih nilai K dan Y,
dengan syarat X > Y. jika X < Y, maka X dan Y
dipertukarkan dengan memanggil prosedur Tukar.)
DEKLARASI
 X,Y,Z : integer

 Procedure Tukar(input/output A, B : integer)
 (Mempertukarkan nilai A dan B)

ALGORITMA
 read(X,Y) (baca nilai X dan Y terlebih dahulu)
 (jika X < Y, pertukarkan nilai X dan Y dengan
memanggil prosedur Tukar)
 if X < Y then
 Tukar(X,Y)
endif

X ← X – Y (hitung selisih X dan Y)
write(Z)

2 komentar:

setiady xantong mengatakan...

terllubanyak put lieuur bacana.hahaha

puput dea oktasari mengatakan...

soaaak

Posting Komentar