BAB9

advertisement
Bab 9
Fungsi
Fungsi mirip dengan prosedur, tapi fungsi musti dideklarasikan
dengan tipenya. Hal ini berkaitan dengan hasil dari fungsi tersebut, tipe
deklarasi itu adalah menunjukkan tipe hasil dari fungsi. Tipe tersebut
ditulis pada akhir deklarasi fungsi yang didahului dengan titik koma,
sebagai berikut:
Function identifier (daftar parameter):type;
Contoh:
Function Faktorial(var Fak,hasil:integer):integer;
Function Pangka(X,Y:real):real;
Blok fungsi sama dengan blok prosedur, yaitu diawali dengan Begin dan
diakhiri dengan End dan titik koma.
Contoh program: fungsi.pas
uses crt;
Function Hitung(Var A,B:integer):integer;
begin
hitung:=A+B;
end;
Var
X,Y:integer;
Begin
clrscr;
Write(' Nilai X ? ');
Readln(X);
Write(' Nilai Y ? ');
Readln(Y);
Writeln;
Writeln(X,' + ',Y,' = ', hitung(X,Y));
repeat until keypressed;
End.
9.1. Fungsi tanpa parameter
Suatu fungsi dapat juga tanpa parameter, hal ini berarti bahwa
hasil dari fungsi tersebut merupakan nilai yang sudah pasti. Parameter
merupakan input pada fungsi dan fungsi akan memberikan hasil balik
sesuai dengan input yang diberikan. Sedang pada fungsi tanpa
parameter, hasil tidak tergantung pada program luar yang menggunakan
fungsi tersebut tapi bergantung pada fungsi itu sendiri. Fungsi jenis ini
jarang digunakan.
Contoh program : noparam.pas
Function Deteksi:boolean;
begin
deteksi:=true;
end;
begin
writeln(deteksi);
end.
Fungsi seperti ini jarang digunakan, karena memang tidak ada gunanya
sebab nilai yang dihasilkan dapat langsung ditentukan dengan statemen :
Writeln(TRUE);
9.2. Parameter dalam fungsi
Seperti halnya pada prosedur, maka parameter dalam fungsi
ada dua jenis, yaitu yang dikirimkan secara nilai (by value) atau secara
acuan (by reference). Contoh tata penulisannya adalah sebagai berikut :
Function Hitung(A,B:integer):integer;
Contoh :
Program berikut adalah untuk mendeteksi mana yang lebih besar dari 2
buah nilai real.
Terbesar.pas
uses crt;
Function Terbesar(X,Y:real):real;
begin
if x>y then
terbesar:=x
else
terbesar:=y;
end;
var
angka1,angka2:real;
begin
clrscr;
write(' Angka pertama : ');readln(angka1);
write(' Angka kedua
: ');readln(angka2);
writeln(' Nilai terbesar adalah
',terbesar(angka1,angka1):9:2);
repeat until keypressed;
end.
9.3. Pengiriman parameter secara acuan
Sedang tata penulisan judul fungsi yang menggunakan
parameter dalah sebagai berikut :
Function Hitung (var A,B :integer):integer;
Bisa kita lihat adanya tambahan kata var pada fungsi tersebut
yang menunjukkan bahwa pengiriman parameter tersebut adalah dengan
acuan (by reference).
Contoh program: acuan.pas
uses crt;
Function Hitung (var A,B,C :integer):integer;
begin
hitung:=A+B;
C:=A*B;
end;
var
X,Y,Z:integer;
Begin
clrscr;
Write(' Nilai Y : ');
readln(X);
Write(' Nilai Y : ');
readln(Y);
writeln;
writeln(X,' + ',Y,' = ',hitung(X,Y,Z));
writeln(X,' x ',Y,' = ',Z);
repeat until keypressed;
End.
9.3. Fungsi memanggil dirinya sendiri
Seperti halnya dalam prosedur, fungsi dapat juga memanggil
dirinya sendiri. Proses ini disebut juga proses recursion.
Contoh Program : faktoria.pas
uses crt;
Function Faktorial(Nilai:integer):real;
Begin
IF Nilai = 0 then
Faktorial:=1
else
Faktorial:=Nilai*faktorial(Nilai-1);
end;
Var
N:integer;
Begin
clrscr;
Write(' Berapa faktorial : ');
Readln(N);
Writeln(N,' Faktorial = ',Faktorial(N):9:0);
repeat until keypressed;
End.
9.4. Fungsi memanggil fungsi yang lain
Suatu fungsi dapat juga memanggil fungsi yang lainnya. Fungsi
yang dipanggil letaknya harus berada pada fungsi yang memanggil.
Contoh:
Besarnya nilai uang pada periode mendatang bila dihitung dengan bunga
majemuk (compound interest) adalah sebesar :
Nilai mendatang = Nilai sekarang.(1+Bunga)Periode
Akan dibuat suatu fungsi untuk menghitung nilai mendatang ini. Pada
rumus
nilai mendatang ini diperlukan suatu proses perpangkatan.
Karena pascal tidak menyediakan fungsi untuk perpangkatan banyak
maka perlu dibikin dulu fungsi perpangkatan banyak.
Program perpangkatan : pangkat.pas
uses crt;
Function PangkatI(X:real;Y:integer):real;
var
Pangkat:real;
I
:integer;
Begin
Pangkat:=1;
For I:=1 to Y do
Pangkat:=Pangkat*X;
PangkatI:=Pangkat;
end;
var
A : Real;
B : integer;
begin
clrscr;
writeln(' 2 pangkat 4 = ',PangkatI(2,4):9:2);
readln;
end.
Fungsi perpangkatan diatas mempunyai keterbatasan yaitu,
bahwa pangkat yang diijinkan cuman dalam bilangan bulat (integer)
sedang pada hal-hal tertentu kita membutuhkan pangkat real.
Nilai perpangkatan dapat dihitung denngan cara lain yaitu,
dengan rumus exponensial sebagai berikut :
Xn = e(Ln X).n
Rumus perpangkatan tersebut dapat diselesaikan dengan
memanfaatkan fungsi-fungsi standar yang disediakan oleh pascal, yaitu
fungsi Exp untuk menghitung nilai ex dan fungsi standar Ln untuk
menghitung nilai Ln X.
Program perpangkatan bilangan real : pangkat1.pas
uses crt;
Function Pangkat(X,N:real):real;
begin
Pangkat:=Exp(Ln(X)*N);
end;
Var
A,B:real;
Begin
clrscr;
Writeln('2.5 pangkat 3.6 = ',pangkat(2.5,3.6):9:3);
repeat until keypressed;
End.
Untuk menghitung nilai bunga majemuk yang paling tepat dipakai
fungsi perpangkatan yang kedua.
Program interest.pas
uses crt;
Function Pangkat(X,N:real):real;
begin
Pangkat:=Exp(Ln(X)*N);
end;
Function BungaMajemuk(Nilai,Bunga,Periode:real):real;
Begin
BungaMajemuk:=Nilai*Pangkat((1+Bunga/100),periode);
end;
Var
NS,Bunga,N:real;
Begin
clrscr;
Write(' Nilai sekarang : ');Readln(NS);
Write(' Tingkat Bunga
: ');Readln(Bunga);
Write(' Lama Peminjaman : ');Readln(N);
Writeln;
Writeln('Nilai besok = ',BungaMajemuk(NS,Bunga,N):9:2);
repeat until keypressed;
End.
9.5. Fungsi tersarang
Fungsi tersarang (nested function) adalah fungsi yang letaknya
berada di dalam fungsi yang lain.
Contoh program : sarang.pas
uses crt;
Function Fungsi1(X:integer):integer;
Function Fungsi2(Y:integer):integer;
begin
Fungsi2:=Y*2;
end;
Begin
Fungsi1:=Fungsi2(X)+5;
end;
begin
clrscr;
writeln(Fungsi1(3));
repeat until keypressed;
end.
Download