Algoritma Pemrograman
Pertemuan Ke-8
(Prosedur)
:: Noor Ifada ::
Sub Pokok Bahasan
Pendahuluan
Modularisasi Program Pendefinisian Prosedur
Nama Global dan Nama Lokal
Parameter
Pendahuluan
• Seringkali dalam membuat pembuatan program yang berukuran besar, program tersebut
dipecah menjadi beberapa subprogram yang lebih kecil. Tiap subprogram, yang disebut
modul,dapat dipasangkan ke program lain yang membutuhkannya.
• Teknik pemrograman seperti ini dinamakan
teknik pemrograman modular. Beberapa bahasa pemrograman menamakan modul dengan
sebutan rutin (routine), prosedur, atau fungsi.
Modularisasi Program
Keuntungan:
1. Menghindari penulisan teks program yang sama secara berulang kali untuk aktivitas yang harus dilakukan lebih dari satu kali
2. Memberikan kemudahan menulis dan menemukan kesalahan (debug)
program
Jenis Modul Program
1. prosedur (procedure), dan 2. fungsi (function)
Struktur setiap modul tersebut pada
hakikatnya sama dengan struktur algoritma
biasa, yaitu ada bagian Judul (header) yang
berisi nama modul, bagian Deklarasi, dan
badan (body) program yang berisi instruksi
yang akan dilaksanakan.
Pendefinisian Prosedur
• Prosedur adalah modul program yang
mengerjakan tugas/aktivitas yang spesifik dan hasilnya diperoleh dengan
membandingkan keadaan awal dan
keadaan akhir pada pelaksanaan sebuah prosedur
• Oleh karena itu, pada setiap prosedur, keadaan awal (K.awal) harus
didefinisikan sebelum rangkaian instruksi di dalam prosedur dilaksanakan dan
keadaan akhir (K.akhir) yang diharapkan
Struktur Prosedur
• bagian Judul (header)
terdiri atas nama prosedur dan komentar yang menjelaskan spesifikasi prosedur
tersebut,
• bagian Deklarasi
• badan (body) prosedur
Notasi algoritma untuk
mendefinisikan struktur prosedur
(tanpa parameter)
• Contoh: Prosedur dan contoh
program utama untuk menghitung nilai rata-rata N buah bilangan
bulat yang dibaca dari piranti
masukan. Nilai rata-rata seluruh bilangan dicetak ke piranti
keluaran.
Algoritma RATA_RATA_BILANGAN_BULAT
{ Program utama untuk menghitung nilai rata-rata N buah bilangan bulat. }
DEKLARASI (* Program Utama *) { tidak ada }
procedure HitungRataRata
{Menghitung nilai rata-rata N buah bilangan bulat. N>0}
DEKLARASI (* Prosedur *)
x : integer { data bilangan bulat }
N : integer { banyaknya data bilangan bulat, N > 0 } k : integer { pencacah banyak bilangan }
jumlah : integer { jumlah seluruh bilangan } rata : real { nilai rata-rata seluruh bilangan } DESKRIPSI : (* Prosedur *)
read(N)
jumlah
←
0 { inisialisasi penjumlah } for k←
1 to N doread(x)
jumlah
←
jumlah + xendfor
rata
←
jumlah/Nwrite(‘Nilai rata-rata = ‘,rata) DESKRIPSI : (Program Utama *)
write(‘Menghitung rata-rata N buah bilangan bulat’) HitungRataRata
• Prosedur diakses dengan cara memangil namanya dari program pemanggil
(program utama atau modul program lain): Namaprosedur
• Ketika NamaProsedur dipanggil, kendali program berpindah secara otomatis ke prosedur tersebut. Instruksi di dalam badan prosedur dilaksanakan. Setelah semua instruksi selesai dilaksanakan, kendali program berpindah secara
otomatis ke instruksi sesudah
pemanggilan prosedur
Program RATA_RATA_BILANGAN_BULAT;
procedure HitungRataRata;
var
x, N, k, jumlah : integer;
rata : real;
begin
write(‘Masukkan banyaknya data ? ’); readln(N);
jumlah:=0;
for k:= 1 to N do begin
write(‘Nilai x : ? ’);
readln(x);
jumlah:=jumlah+x;
end;
rata:= jumlah/N;
writeln(‘Nilai rata-rata = ‘,rata);
end;
begin
writeln(‘Menghitung rata-rata N buah bilangan bulat’);
HitungRataRata;
end.
Nama Global & Nama Lokal
• Nama-nama (konstanta, peubah, tipe, dan lain-lain) yang dideklarasikan di dalam
bagian Deklarasi prosedur bersifat “lokal”
dan hanya dapat digunakan di dalam prosedur yang melingkupinya saja
• Sedangkan nama-nama yang
dideklarasikan di dalam program utama
bersifat “global” dan dapat digunakan di
bagian manapun di dalam program, baik di
dalam program utama maupun di dalam
• Contoh: prosedur HitungRataRata dan program
utama
RATA_RATA_BIL ANGAN_BULAT yang sudah
dimodifikasi dengan
menempatkan N dan rata sebagai nama peubah di dalam bagian deklarasi nama program utama.
Algoritma RATA_RATA_BILANGAN_BULAT
{ Program utama untuk menghitung nilai rata-rata } DEKLARASI (* Program utama *)
N : integer { banyaknya data bilangan bulat, N > 0 } rata : real { nilai rata-rata seluruh bilangan }
procedure HitungRataRata
{Menghitung nilai rata-rata N buah bilangan bulat. N>0}
DEKLARASI (* Prosedur *) x : integer
k : integer
jumlah : integer
DESKRIPSI : (* Prosedur *) jumlah
←
0 { inisialisasi } for k←
1 to N doread(x)
jumlah
←
jumlah + xendfor
rata
←
jumlah/NDESKRIPSI : (* Program Utama *) read(N)
write(‘Menghitung rata-rata N buah bilangan bulat’) HitungRataRata
write(‘Nilai rata-rata = ‘,rata)
Program RATA_RATA_BILANGAN_BULAT;
var
N : integer;
rata : real;
procedure HitungRataRata;
var
x, k, jumlah : integer;
begin
jumlah:=0;
for k:= 1 to N do begin
write(‘Nilai x : ? ’);
readln(x);
jumlah:=jumlah + x;
end;
rata:= jumlah/N;
end;
begin
write(‘Masukkan banyaknya data ? ’); readln(N);
writeln(‘Menghitung rata-rata N buah bilangan bulat’);
HitungRataRata;
• Peubah N dan rata bersifat global dan dapat digunakan di dalam
prosedur HitungRataRata karena dideklarasikan dalam bagian
Deklarasi program utama.
• Sedangkan peubah x, k, dan jumlah bersifat lokal dan hanya dikenal dan digunakan di dalam lingkup prosedur saja karena dideklarasikan dalam
prosedur HitungRataRata
Parameter
• Kebanyakan program memerlukan pertukaran informasi antara prosedur (atau fungsi) dan titik dimana ia dipanggil. Penggunaan
parameter menawarkan mekanisme
penukaran informasi tersebut. Tiap item data ditransfer antara parameter aktual dan
parameter formal yang bersesuaian
• Parameter aktual adalah parameter yang
disertakan ketika pemanggilan, sedangkan
paramater formal adalah parameter yang
dideklarasikan di bagian header prosedur itu
sendiri
Notasi algoritma untuk
mendefinisikan struktur prosedur
dengan parameter
• Prosedur dengan parameter diakses dengan cara memanggil namanya dari program
pemanggil (program utama atau modul program lain) dengan disertai parameter aktualnya:
Namaprosedur(daftar parameter aktual)
• Berdasarkan maksud penggunaannya,
terdapat tiga jenis parameter formal yang disertakan dalam prosedur:
1.Parameter Masukan (input parameter)
2.Parameter Keluaran (output parameter)
Parameter Masukan (input parameter)
• Parameter masukan adalah parameter yang nilainya berlaku sebagai masukan untuk prosedur
• Pada bahasa pemrograman, istilah parameter masukan ini sering dinamakan parameter nilai (value parameter atau parameter by value)
• Pada parameter masukan, nilai (value) parameter aktual diisikan (assign) ke dalam parameter formal yang
bersesuaian. Nilai ini digunakan di dalam badan
prosedur yang bersangkutan. Nilai yang dinyatakan oleh parameter masukan tidak dapat dikirim dalam arah
sebaliknya. Itulah alasan mengapa parameter jenis ini diacu sebagai parameter masukan
• Perubahan nilai parameter di dalam badan prosedur
tidak mengubah nilai parameter aktual. Karena yang
dipentingkan adalah nilainya, maka nama parameter
aktual boleh berbeda dengan nama parameter formal
yang bersesuaian.
• Contoh:
Prosedur dan program utama untuk
menghitung nilai rata-rata N buah bilangan bulat ditulis kembali prosedur dengan menggunakan
parameter masukan.
Algoritma RATA_RATA_BILANGAN_BULAT
{ Program utama untuk menghitung nilai rata-rata } DEKLARASI (* Program utama *)
Ndata : integer { banyaknya data bilangan bulat } procedure HitungRataRata(input N : integer)
{Menghitung nilai rata-rata N buah bilangan bulat}
{K.awal: N berisi banyaknya bilangan bulat, N > 0}
{K.akhir: rata-rata seluruh bilangan dicetak}
DEKLARASI (* Prosedur *) x, k, jumlah : integer
rata : real { nilai rata-rata seluruh bilangan } DESKRIPSI : (* Prosedur *)
jumlah
←
0 { inisialisasi penjumlah } for k←
1 to N doread(x)
jumlah
←
jumlah + xendfor
rata
←
jumlah/Nwrite(rata)
Program RATA_RATA_BILANGAN_BULAT;
var
Ndata : integer;
procedure HitungRataRata(N : integer);
var
x, k, jumlah : integer;
rata : real;
begin
jumlah:=0;
for k:= 1 to N do begin
write(‘Nilai x : ? ’);readln(x);
jumlah:=jumlah+x;
end;
rata:= jumlah/N;
writeln(‘Nilai rata-rata = ‘,rata);
end;
begin
write(‘Masukkan banyaknya data ? ’); readln(Ndata);
writeln(‘Menghitung rata-rata N buah bilangan bulat’);
HitungRataRata(Ndata);
end.
Parameter Keluaran (output parameter)
• Parameter keluaran adalah parameter yang menampung keluaran yang dihasilkan oleh prosedur
• Pada bahasa pemrograman, istilah parameter keluaran sering dinamakan parameter acuan (reference parameter atau parameter by reference)
• Bila prosedur yang mengandung parameter keluaran dipanggil, nama parameter aktual di dalam program pemanggil menggantikan nama parameter formal yang bersesuaian di dalam prosedur. Jadi, nama parameter aktual akan digunakan selama pelaksanaan prosedur
• Karena nama parameter merupakan suatu lokasi di
memori, maka bila di dalam prosedur parameter aktual diisi suatu nilai, nilai ini akan tetap berada di dalam
parameter aktual meskipun prosedur selesai
• Contoh:
Prosedur dan program utama untuk
menghitung nilai rata-rata N buah bilangan bulat ditulis kembali prosedur dengan nilai rata-rata
merupakan keluaran prosedur
Algoritma RATA_RATA_BILANGAN_BULAT
{ Program utama untuk menghitung nilai rata-rata } DEKLARASI (* Program Utama *)
Ndata : integer rerata : real
procedure HitungRataRata(input N:integer, output rata:real)
{ Menghitung nilai rata-rata N buah bilangan bulat } { K.awal: N berisi banyaknya bilangan bulat, N > 0 } { K.akhir: rata berisi rata-rata seluruh bilangan } DEKLARASI (* Prosedur *)
x, k, jumlah : integer DESKRIPSI : (* Prosedur *)
jumlah ← 0 { inisialisasi penjumlah } for k ← 1 to N do
read(x)
jumlah ← jumlah + x endfor
rata ← jumlah/N
DESKRIPSI : (* Program utama *)
write(‘Menghitung rata-rata N buah bilangan bulat’) read(Ndata)
HitungRataRata(Ndata,rerata) write(rerata)
Program RATA_RATA_BILANGAN_BULAT;
var
Ndata : integer;
rerata : real;
procedure HitungRataRata(N : integer; var rata : real);
var
x, k, jumlah : integer;
begin
jumlah:=0;
for k:= 1 to N do begin
write(‘Nilai x : ? ’);readln(x);
jumlah := jumlah + x;
end;
rata:= jumlah/N;
end;
begin
write(‘Masukkan banyaknya data ? ’); readln(Ndata);
writeln(‘Menghitung rata-rata N buah bilangan bulat’);
HitungRataRata(Ndata,rerata);
writeln(‘Nilai rata-rata = ‘,rerata);
Parameter masukan/keluaran (input/output parameter)
• Parameter masukan/keluaran adalah parameter yang berfungsi sebagai masukan sekaligus keluaran bagi
prosedur tersebut. Pada bahasa pemrograman, seperti
halnya parameter keluaran, parameter masukan/keluaran juga sering dinamakan parameter acuan (reference
parameter atau parameter by reference).
• Parameter 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, jadi
prosedur juga harus dapat mengakomodasi baik masukan dari dan keluaran ke blok program pemanggil (parameter masukan/keluaran umumnya digunakan pada situasi
seperti ini)
• Seperti halnya pada parameter keluaran, bila 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 nilai parameter aktual juga ikut disalin ke dalam parameter formal. Jadi, nama dan nilai parameter aktual digunakan di seluruh bagian prosedur.
Akibat penggunaan parameter masukan/keluaran, bila
parameter aktual diubah nilainya di dalam badan 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, sebagaimana parameter masukan. Tetapi,
parameter keluaran harus dideklarasikan dengan kata kunci
input/output
• Contoh: Prosedur dan program utama yang
memperlihatkan efek penggunaan parameter masukan dan
perbandingannya dengan parameter masukan/keluaran:
Algoritma MENAMBAH_DUA
{Program yang memperlihatkan efek penggunaan parameter masukan}
DEKLARASI (* Program Utama *) a,b : integer
procedure TambahDua(input x,y : integer)
{ Menambahkan nilai x dan y masing-masing dengan 2 } { K.awal: x dan y sudah berisi }
{ K.akhir: nilai x dan y masing-masing bertambah 2 } DEKLARASI (* Prosedur *)
{ tidak ada }
DESKRIPSI : (* Prosedur *) x ← x + 2
y ← y + 2
write(‘Nilai x dan y di akhir prosedur : ’) write(‘ x = ‘, x)
write(‘ y = ‘, y)
DESKRIPSI : (* Program Utama *) a ← 15
b ← 10
write(‘Nilai a dan b sebelum pemanggilan : ’) write(‘ a = ‘, a)
write(‘ b = ‘, b) TambahDua(a,b)
write(‘Nilai a dan b sesudah pemanggilan : ’) write(‘ a = ‘, a)
write(‘ b = ‘, b)
Program MENAMBAH_DUA;
var
a,b: integer;
procedure TambahDua(x,y : integer);
begin
x := x + 2;
y := y + 2;
writeln(‘Nilai x dan y di akhir prosedur : ’);
writeln(‘ x = ‘, x);
writeln(‘ y = ‘, y);
end;
begin
a:=15;
b:=10;
writeln(‘Nilai a dan b sebelum pemanggilan : ’);
writeln(‘ a = ‘, a);
writeln(‘ b = ‘, b);
TambahDua(a,b);
writeln(‘Nilai a dan b sesudah pemanggilan : ’);
writeln(‘ a = ‘, a);
• Hasil algoritma MENAMBAH_DUA dengan penggunaan parameter
masukan adalah:
– Nilai a dan b sebelum pemanggilan :
a = 15 b = 10
– Nilai x dan y di akhir prosedur :
a = 17 b = 12
– Nilai a dan b sesudah pemanggilan :
a = 15 b = 10
• Jadi, setelah pemanggilan prosedur,
nilai a dan b tidak berubah
• Contoh: Prosedur dan program
utama dengan
parameter berjenis masukan/keluaran:
Algoritma MENAMBAH_DUA
{ Program yang memperlihatkan efek penggunaan parameter masukan/keluaran }
DEKLARASI a,b : integer
procedure TambahDua(input/output x,y : integer)
{ Menambahkan nilai x dan y masing-masing dengan 2 } { K.awal: x dan y sudah berisi }
{ K.akhir: nilai x dan y masing-masing bertambah 2 } DEKLARASI
{ tidak ada } DESKRIPSI : x ← x + 2 y ← y + 2
write(‘Nilai x dan y di akhir prosedur : ’) write(‘ x = ‘, x)
write(‘ y = ‘, y) DESKRIPSI :
a ← 15 b ← 10
write(‘Nilai a dan b sebelum pemanggilan : ’) write(‘ a = ‘, a)
Program MENAMBAH_DUA;
var
a,b: integer;
procedure TambahDua(var x,y : integer);
begin
x := x + 2;
y := y + 2;
writeln(‘Nilai x dan y di akhir prosedur : ’);
writeln(‘ x = ‘, x);
writeln(‘ y = ‘, y);
end;
begin
a:=15;
b:=10;
writeln(‘Nilai a dan b sebelum pemanggilan : ’);
writeln(‘ a = ‘, a);
writeln(‘ b = ‘, b);
TambahDua(a,b);
writeln(‘Nilai a dan b sesudah pemanggilan : ’);
writeln(‘ a = ‘, a);
writeln(‘ b = ‘, b);
end.