Altien Jonathan Rindengan, S.Si., M.Kom

PROSEDUR DAN FUNGSI

Altien Jonathan Rindengan, S.Si., M.Kom

PROSEDUR

Pendahuluan




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
 Badan prosedur

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
data/informasi antara prosedur(atau fungsi)
dan titik mana ia dipanggil


Pendefinisian Prosedur ….






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.

Pendefinisian Prosedur ….


Notasi prosedur (tanpa parameter)

procedure NamaProsedur (deklarasi parameter, jika ada)
DEKLARASI
{semua nama konst, var, dll yang dipakai dan hanya
bersifat lokal di dalam prosedur ini}
ALGORITMA
{badan prosedur, berisi urutan instruksi}

Pendefinisian Prosedur ….


Contoh : Prosedur membaca panjang alas & tinggi

segitiga, menghitung luas dan mencetak luas
segitiga.

tinggi
alas

Pendefinisian Prosedur ….
procedure Hitung_Luas_Segitiga
DEKLARASI
alas,tinggi,luas : real

ALGORITMA
read(alas,tinggi)
luas
(alas x tinggi)/2
write(luas)

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
dengan namanya saja


Pemanggilan Prosedur ….


Contoh :
Jika terdapat N buah segitiga dan ingin
dihitung luasnya.
(Menggunakan pengulangan for-to-do)

program segitiga;
uses crt;
var
i,n:integer;


variabel global

procedure hitung_luas_segitiga;
var
variabel lokal
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.


Pemanggilan Prosedur ….

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
 hanya dapat digunakan dalam prosedur tersebut


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
Struktur output sama dengan kasus sebelumnya
Bagaimana programnya ?

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
var. global ke dalam prosedur akan menggunakan
parameter

Parameter






Prosedur dengan parameter diakses dengan cara
memanggil namanya dari program utama/
pemanggil

Parameter yang disertakan pada waktu
pemanggilan disebut parameter aktual
Model :
NamaProsedur (parameter aktual)



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/Output parameter

Input Parameter


Parameter input disebut juga parameter nilai

procedure Nama_prosedur (input_var:type)

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
 Variabel alas dan tinggi harus dideklarasikan
sebagai parameter formal

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);
end;
readln;
end.

Input Parameter ….

Output Parameter


Prosedur mungkin menghasilkan satu/lebih output
yg akan digunakan oleh program
utama/pemanggil
procedure Nama_prosedur
(input_var:type;var output_var:type)



Nilai output tersebut ditampung dalam parameter
output

Output Parameter ….


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;
readln;
end.

Output Parameter ….

Input/Output Parameter






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)

Input/Output Parameter ….
program tambah_empat;
uses crt;
var
Parameter input
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.

Input/Output Parameter ….

Input/Output Parameter ….
program tambah_empat1;
uses crt;
var
a,b:integer;
procedure tambah_empat(var
begin
x:=x+4;
y:=y+4;
writeln('Nilai x dan y
writeln(' x = ',x);
writeln(' y = ',y);
end;
begin
clrscr;
a:=15; b:=10;
writeln('Nilai a dan b
writeln(' a = ',a);
writeln(' b = ',b);
tambah_empat(a,b);
writeln('Nilai a dan b
writeln(' a = ',a);
writeln(' b = ',b);
readln;
end.

Parameter output
x,y:integer);

di akhir prosedur tambah_empat');

sebelum pemanggilan prosedur tambah_empat');

setelah pemanggilan prosedur tambah_empat');

Input/Output Parameter ….

Program dengan Prosedur atau tidak?



Program dengan prosedur
Program yang dipecah menjadi beberapa prosedur
menunjukkan teknik pemrograman yang baik dan
terstruktur

Prosedur dengan Parameter atau tidak?





Prosedur dengan parameter
Parameter berfungsi sebagai media komunikasi
antara prosedur dengan program
utama/pemanggil
Parameter mengurangi kebutuhan penggunaan
variabel global

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
parameter yang sama, gunakan parameter input/output

FUNGSI

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
definisi fungsi dalam matematika

Pendahuluan ….






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}
return ekspresi {pengembalian nilai yang dihasikan fungsi,
dapat berupa konstanta, variabel atau rumus}

Notasi Fungsi


Contoh

function F (input x:real)
real
{mengembalikan nilai f(x)=2x2+5x-8,x R}
Deklarasi
{tidak ada}
Algoritma
return 2*x*x + 5*x -8

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
 Nilai yang dikembalikan oleh fungsi dapat langsung
dimanipulasi

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;
end.

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=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);
readln;
end.

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);
readln;
end.

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);
readln;
end.

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);
readln;
end.

Fungsi memanggil diri sendiri


Merupakan dasar dari program rekursif
function ulang (input deklarasi parameter): tipe;
Deklarasi

Algoritma
ulang;

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;
end.

Fungsi Tersarang


Fungsi tersarang (nested function) merupakan fungsi
yang letaknya berada di dalam fungsi yang
lainnya.

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;
end.