PROSEDUR DAN FUNGSI
Merupakan penerapan konsep program modular,
yaitu memecah-mecah program yang rumit menjadi
program-program bagian yang lebih sederhana
dalam bentuk prosedur-prosedur.
untuk hal-hal yang sering dilakukan berulang-ulang,
cukup dituliskan sekali saja dalam prosedur dan
dapat dipanggil atau dipergunakan sewaktu-waktu
bila dipergunakan.
Pendefinisian Prosedur
Mendefinisikan prosedur, artinya :
menuliskan nama prosedur
mendeklarasikan nama-nama konstanta, variabel,
tipe, label, dll
menjabarkan rangkaian aksi yang dilakukan
Struktur prosedur sama dengan struktur
program
Judul/nama prosedur
Deklarasi parameter
Pendefinisian Prosedur
….
Nama prosedur
sebaiknya diawali dengan
kata kerja
, mis: hitung_luas, cari_maks
Parameter
: nama-nama variabel yang
dideklarasikan pada bagian
judul prosedur
Program memerlukan pertukaran
Tiap item data ditransfer antara
parameter aktual
(argumen)
dan
parameter formal
yang
bersesuaian.
Parameter aktual : parameter yang disertakan
pada waktu pemanggilan prosedur
Parameter formal : parameter yang dideklarasikan
di bagian judul program.
Notasi prosedur (
tanpa parameter
)
Pendefinisian Prosedur
….
procedure
NamaProsedur (deklarasi parameter, jika ada)
DEKLARASI
{
semua nama konst, var, dll yang dipakai dan hanya
bersifat lokal di dalam prosedur ini
}
ALGORITMA
Contoh : Prosedur membaca panjang alas & tinggi
segitiga, menghitung luas dan mencetak luas
segitiga.
Pendefinisian Prosedur
….
tinggi
Pendefinisian Prosedur
….
procedure
Hitung_Luas_Segitiga
DEKLARASI
alas,tinggi,luas : real
ALGORITMA
read(alas,tinggi)
Pemanggilan Prosedur
Prosedur bukan program yang berdiri sendiri
Tidak dapat dieksekusi secara langsung
Prosedur diakses/dipanggil dengan cara
memanggil namanya dari program pemanggil
(program utama atau modul program lain)
Prosedur tanpa parameter cukup dipanggil
Pemanggilan Prosedur
….
Contoh :
Jika terdapat N buah segitiga dan ingin
dihitung luasnya.
program segitiga;
uses crt;
var
i,n:integer;
procedure hitung_luas_segitiga;
var
alas,tinggi,luas:real;
begin
write('Panjang alas: ');readln(alas);
write('Tinggi: ');readln(tinggi);
luas:=alas*tinggi/2;
writeln('Luas segitiga ',i,' : ',luas:0:2);
end;
begin
clrscr;
write('Banyaknya segitiga: ');readln(n);
for i:=1 to n do
hitung_luas_segitiga;
readln;
end.
variabel global
Deklarasi global & lokal
Deklarasi : konstanta, variabel, tipe dll
Global :
dideklarasi di program utama
dapat digunakan pada seluruh bagian program,
termasuk prosedur yang ada
Lokal:
Dideklarasi di dalam prosedur
Deklarasi global & lokal
….
Perhatikan kasus hitung_luas_segitiga
Bagaimana jika varibel alas dan tinggi dijadikan
variabel global
Prosedur hitung_luas_segitiga hanya menghitung
luas, tidak membaca input alas dan tinggi
Deklarasi global & lokal
….
Dalam pemrograman dengan prosedur:
Usahakan menggunakan variabel global sesedikit
mungkin
Penggunaan variabel lokal meminimumkan usaha
pencarian kesalahan yg disebabkan variabel tsb
Prosedur yang baik adalah prosedur yang
independen dari program pemanggilnya (utama)
Jika program utama perlu mengkomunikasikan nilai
Parameter
Prosedur dengan parameter diakses dengan cara
memanggil namanya dari program utama/
pemanggil
Parameter yang disertakan pada waktu
pemanggilan disebut parameter aktual
Model :
Ketika prosedur dipanggil, parameter aktual
berkorespondensi dengan parameter formal
(global)
Parameter ….
Aturan korespondensi parameter aktual dan formal:
Jumlah parameter aktual =parameter formal
Bertipe sama (yang bersesuaian)
Ekspresi parameter bersesuaian bergantung pada
jenis parameter formal:
Input parameter
Output parameter
Input Parameter
Parameter input disebut juga
parameter nilai
Nilai ini digunakan dalam badan prosedur
Karena yang dipentingkan nilainya, maka
nama parameter aktual boleh berbeda dengan
nama parameter formal yang bersesuaian
Input Parameter ….
Perhatikan kasus hitung_luas_segitiga:
Misalkan variabel alas dan tinggi sebagai
parameter aktual (input parameter) pada
prosedur hitung_luas_segitiga
program segitiga_2; uses crt;
var
i,n:integer; a,t:real;
procedure hitung_luas_segitiga(alas,tinggi:real); var
luas:real; begin
luas:=alas*tinggi/2;
writeln('Luas segitiga ',i,' : ',luas:0:2); end;
begin
clrscr;
write('Banyaknya segitiga: ');readln(n); for i:=1 to n do
begin
write('Panjang alas: ');readln(a); write('Tinggi : ');readln(t); hitung_luas_segitiga(a,t);
Prosedur mungkin menghasilkan satu/lebih output
yg akan digunakan oleh program
utama/pemanggil
Nilai output tersebut ditampung dalam parameter
output
Output Parameter
procedure
Nama_prosedur
Misal : variabel
luas
pada prosedur
hitung_luas_segitiga dicetak pada program utama
(bukan dalam prosedur) maka luas dinyatakan
sebagai
varibel output
program segitiga_3; uses crt;
var
i,n:integer; a,t,L:real;
procedure hitung_luas_segitiga(alas,tinggi:real;var luas:real); begin
luas:=alas*tinggi/2; end;
begin
clrscr;
write('Banyaknya segitiga: ');readln(n); for i:=1 to n do
begin
write('Panjang alas: ');readln(a); write('Tinggi : ');readln(t); hitung_luas_segitiga(a,t,L);
writeln('Luas segitiga ',i,' : ',L:0:2); end;
Input parameter digunakan pada situasi dimana
informasi dikirim hanya dari titik pemanggilan
prosedur ke prosedur itu sendiri
Output parameter hanya mengirim informasi dari
prosedur ke titik pemanggilan prosedur
Ada parameter yang berfungsi keduanya
(terutama jika ada looping perhitungan)
program tambah_empat; uses crt;
var
a,b:integer;
procedure tambah_empat(x,y:integer); begin
x:=x+4; y:=y+4;
writeln('Nilai x dan y di akhir prosedur tambah_empat'); writeln(' x = ',x);
writeln(' y = ',y); end;
begin
clrscr;
a:=15; b:=10;
writeln('Nilai a dan b sebelum pemanggilan prosedur tambah_empat'); writeln(' a = ',a);
writeln(' b = ',b); tambah_empat(a,b);
writeln('Nilai a dan b setelah pemanggilan prosedur tambah_empat'); writeln(' a = ',a);
writeln(' b = ',b); readln;
end.
Parameter input
program tambah_empat1; uses crt;
var
a,b:integer;
procedure tambah_empat(var x,y:integer); begin
x:=x+4; y:=y+4;
writeln('Nilai x dan y di akhir prosedur tambah_empat'); writeln(' x = ',x);
writeln(' y = ',y); end;
begin
clrscr;
a:=15; b:=10;
writeln('Nilai a dan b sebelum pemanggilan prosedur tambah_empat'); writeln(' a = ',a);
writeln(' b = ',b); tambah_empat(a,b);
writeln('Nilai a dan b setelah pemanggilan prosedur tambah_empat'); writeln(' a = ',a);
writeln(' b = ',b); readln;
end.
Input/Output
Parameter ….
Program dengan Prosedur atau tidak?
Program dengan prosedur
Program yang dipecah menjadi beberapa prosedur
Prosedur dengan Parameter atau tidak?
Prosedur dengan parameter
Parameter berfungsi sebagai media komunikasi
antara prosedur dengan program
utama/pemanggil
Parameter mengurangi kebutuhan penggunaan
Parameter input atau output?
Bergantung pada masalah, apakah prosedur
menghasilkan output yang digunakan oleh program
utama/pemanggil atau tidak
Bila prosedur tidak menghasilkan output(atau
mengahilkan output tapi hanya digunakan prosedur itu
sendiri) gunakan parameter input
Bila prosedur menghasilkan output yang digunakan
program utama/pemanggil, gunakan parameter output
Bila prosedur menerima input sekaligus output pada
Pendahuluan
Merupakan bagian program yang mempunyai
tujuan spesifik
Seperti prosedur, fungsi mempunyai tujuan yang
ekivalen
Pada beberapa masalah akan lebih tepat
menggunakan fungsi atau sebaliknya
Fungsi memberikan/mengembalikan sebuah nilai
dari tipe tertentu
Definisi fungsi dalam program bersesuaian dengan
Fungsi diakses dengan memanggil namanya
Fungsi juga mempunyai parameter formal
Parameter pada fungsi selalu merupakan
parameter masukan (input parameter)
Parameter masukan ini berarti masukan yang
digunakan oleh fungsi tersebut untuk menghasilkan
nilai
Notasi Fungsi
function Nama_Fungsi (input deklarasi parameter) tipe
Deklarasi
{semua nama yang dipakai dalam fungsi dan hanya berlaku lokal di dalam fungsi yang didefinisikan disini}
Algoritma
{badan fungsi, berisikan instruksi-instruksi untuk
menghasilkan nilai yang akan dikembalikan oleh fungsi}
Contoh
Notasi Fungsi
function F (input x:real) real
{mengembalikan nilai f(x)=2x2+5x-8,x R}
Deklarasi {tidak ada}
Algoritma
Pemanggilan Fungsi
Fungsi diakses dengan cara memanggil namanya
dari program pemanggil/utama, diikuti dengan
daftar parameter aktual (jika ada).
Karena fungsi menghasilkan nilai, maka nilai
tersebut dapat diperlakukan dengan 2 cara :
Nilai yang dikembalikan oleh fungsi ditampung dalam
sebuah variabel yang bertipe sama dengan fungsi
program fungsi1; uses crt;
var
x,y:real;
function G (x:real):real; begin
G:=sqr(x)+4*x-5; end;
begin
clrscr;
write('Masukkan nilai x : ');readln(x); y:=G(x);
writeln('Nilai y : ',y:0:2);
writeln('Nilai y + 3 : ',(y+3):0:2); writeln('Nilai dari G : ',G(x):0:2);
writeln('Nilai dari G + 3 : ',(G(x)+3):0:2); readln;
program tabel_fungsi; uses crt;
var
x:real;
function F (x:real):real; begin F:=2*x*x+5*x-8; end; begin clrscr; writeln('---'); writeln(' x f(x) '); writeln('---'); x:=10.0;
while x<=15.0 do begin
writeln(x:4:2,' ',F(x):10:3); x:=x+0.3
end;
writeln('---'); readln;
program fungsi2; uses crt;
var
x:integer;
function Habis_Dibagi_3 (n:integer):boolean; begin
Habis_Dibagi_3 := (n mod 3 = 0); end;
begin
clrscr;
write('Masukkan sembarang integer : ');readln(x); if Habis_Dibagi_3(x) then
writeln ('Bilangan ',x,' habis dibagi tiga') else
writeln ('Bilangan ',x,' tidak habis dibagi tiga'); readln;
Prosedur atau Fungsi ?
Fungsi digunakan apabila modul program
mengembalikan sebuah nilai
Prosedur digunakan bila modul menghasilkan efek
netto dari satu atau sekumpulan aksi
Namun sering pemilihan modul sebagai fungsi atau
prosedur bergantung pada kebutuhan dari
pemrogram
Prosedur atau Fungsi
Mengubah fungsi menjadi prosedur :
Menyatakan nilai yang dikembalikan oleh fungsi
sebagai output parameter (parameter keluaran)
pada prosedur)
Mengubah parameter menjadi fungsi:
Prosedur yang mempunyai satu buah output
program fungsi3; uses crt;
var
x,y:integer;
function max (a,b:integer):integer; begin
if a>=b then
writeln ('Nilai maks : ',a) else
writeln ('Nilai maks : ',b); end;
begin
clrscr;
write('Masukkan sembarang integer x : ');readln(x); write('Masukkan sembarang integer y : ');readln(y); max(x,y);
program fungsi3_pro; uses crt;
var
x,y,m:integer;
procedure max (a,b:integer;var maks:integer); begin
if a>=b then
writeln ('Nilai maks : ',a) else
writeln ('Nilai maks : ',b); end;
begin
clrscr;
write('Masukkan sembarang integer x : ');readln(x); write('Masukkan sembarang integer y : ');readln(y); max(x,y,m);
program fungsi4_pro; uses crt;
var n_data:integer; rataan:real;
procedure hitung_rataan (m_data:integer;var rata2:real); var x,i,jumlah:integer;
begin
jumlah:=0;
for i:=1 to m_data do begin
write('Data ke ',i,' : ');readln(x); jumlah:=jumlah+x;
end;
rata2:=jumlah/m_data;
writeln('Rata-rata : ',rata2:0:2); end;
begin
clrscr;
write('Banyaknya data : ');readln(n_data); hitung_rataan(n_data,rataan);
program fungsi4; uses crt;
var
n_data:integer;
function hitung_rataan (m_data:integer):real; var
x,i,jumlah:integer; rata2:real; begin
jumlah:=0;
for i:=1 to m_data do begin
write('Data ke ',i,' : ');readln(x); jumlah:=jumlah+x;
end;
rata2:=jumlah/m_data;
writeln('Rata-rata : ',rata2:0:2); end;
begin
clrscr;
write('Banyaknya data : ');readln(n_data); hitung_rataan(n_data);
Fungsi memanggil diri sendiri
Merupakan dasar dari program rekursif
function ulang (input deklarasi parameter): tipe;
Deklarasi
Algoritma
program fungsi5; uses crt;
var m:integer;
function faktorial(n:integer):real; begin
if n=0 then faktorial:=1 else faktorial:=n*faktorial(n-1); end; begin clrscr;
write('Berapa faktorial ? ');readln(m);
writeln(m,' faktorial = ',faktorial(m):0:0); readln;
Fungsi Tersarang
Fungsi tersarang (nested function) merupakan fungsi
program fungsi_6; uses crt;
var
z:integer;
function fungsi_a(x:integer):integer;
function fungsi_b(y:integer):integer; begin fungsi_b:=y*2; end; begin fungsi_a:=fungsi_b(x)+5; end; begin clrscr;
write('Masukkan nilai z: ');readln(z); writeln('Nilainya : ',fungsi_a(z)); readln;