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