Fungsi adalah modul program yang mengembalikan nilai. Fungsi dapat menerima parameter dan mengembalikan hasil berupa nilai tertentu. Fungsi mirip prosedur namun harus menentukan tipe data hasil yang dikembalikan. Contoh fungsi adalah menghitung faktorial, pangkat, atau mengembalikan nilai terbesar dari dua nilai.
1. MODUL 10
SUBPROGRAM 2 ( FUNCTION )
Fungsi adalah modul program yang memberikan/mengembalikan (return) sebuah
nilai yang bertipe sederhana (integer, real, Boolean, string). Sebagaimana halnya
dengan prosedur, fungsi diakses dengan memanggil namanya. Selain itu fungsi juga
dapat mengandung daftar parameter formal.
Blok fungsi hampir sama dengan blok prosedur, hanya fungsi harus dideklarasikan
dengan tipenya. Tipe deklarasi ini menunjukkan tipe hasil dari fungsi. Penulisannya
adalah :
FUNCTION identifier(daftar parameter) : type;
Contoh :
Function Faktorial(Var Fak, Hasil : integer) : integer;
Function Pangkat(X,Y : real) : real;
Blok fungsi sama dengan blok prosedur yang diawali dengan kata Begin dan diakhiri
dengan kata End dan titik koma. Berikut adalah Contoh :
Function Hitung(Var A,B : integer) : integer;
Begin
Hitung := A + B;
End;
Var
X, Y : integer;
Begin
Write(‘Nilai X ? ‘);
Readln(X);
Write(‘Nilai Y ? ‘);
Readln(Y);
Writeln;
Writeln(X, ‘ + ‘,Y,’ = ‘,Hitung(X,Y));
End.
2. Bila program dijalankan :
Nilai X ? 2
Nilai Y ? 3
2 + 3 = 5
I. PARAMETER DALAM FUNGSI
Sama dengan prosedur, parameter dalam fungsi dapat dikirim secara nilai (by
value) atau secara acuan (by reference).
I.1 Parameter By Value
Function Hitung (A,B : integer) : integer;
Contoh :
Berikut akan dibuat suatu fungsi yang akan menghasilkan nilai terbesar dari 2 buah nilai
real.
Bila program dijalankan :
Nilai pertama ? 12.356
Nilai kedua ? 55.182
Nilai terbesar adalah 55.182
Function Terbesar(X,Y : real) : real;
Begin
If X>Y Then
Terbesar := X
Else
Terbesar := Y;
End;
Var
Nilai1, Nilai2 : real;
Begin
Write(‘Nilai pertama ? ‘); readln(Nilai1);
Write(‘Nilai kedua ? ‘); readln(Nilai2);
Writeln(‘Nilai terbesar adalah ‘,Terbesar(Nilai1,Nilai2):9:3);
End;
3. I.2 Parameter by Reference
Function Hitung(var A,B : integer) : integer;
Pengiriman parameter dengan secara acuan akan mengakibatkan perubahan nilai
parameter di fungsi juga merubah nilai parameter di modul yang mengirimkannya.
Bila program dijalankan :
Nilai X ? 2
Nilai Y ? 3
2 + 3 = 5
2 * 3 = 6
Function Hitung(Var A,B,C : integer) : integer;
Begin
Hitung := A + B;
C := A * B;
End;
Var
X, Y, Z : integer;
Begin
Write(‘Nilai X ? ‘);
Readln(X);
Write(‘Nilai Y ? ‘);
Readln(Y);
Writeln;
Writeln(X,’ + ‘,Y,’ = ‘,Hitung(X,Y,Z);
Writeln(X,’ * ‘,Y,’ = ‘,Z);
End.
4. II. FUNGSI PANGKAT
Pada pascal tidak menyediakan fungsi untuk perpangkatan tinggi, yang ada hanyalah
fungsi standar sqr, yaitu pemangkatan kuadrat. Bila akan dilakukan pemangkatan lebih
dari pangkat 2, maka harus dibuat program tersendiri. Berikut contohnya :
Bila program dijalankan :
Nilai akan dipangkatkan ? 1.5
Dipangkatkan dengan ? 3
1.500 pangkat 3 adalah 3.375
Function Pangkat(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
Write(‘Nilai yang akan dipangkatkan ? ‘);
Readln(A);
Write(‘Dipangkatkan dengan ? ‘);
Readln(B);
Writeln(A:9:3,’ pangkat ‘,B,’ adalah ‘,PangkatI(A,B):9:3);
End.
5. III. FUNGSI MEMANGGIL DIRINYA SENDIRI
Seperti halnya prosedur, fungsi juga dapat memanggil dirinya sendiri. Proses fungsi
memanggil dirinya sendiri juga merupakan proses recursion.
Contoh :
IV. FUNGSI MEMANGGIL FUNGSI YANG LAIN
Suatu fungsi dapat juga memanggil fungsi yang lainnya. Fungsi yang dipanggil letaknya
harus berada diatas fungsi yang memanggil.
Contoh :
Function Faktorial(Nilai : integer) : real;
Begin
If Nilai = 0 then
Faktorial := 1
Else
Faktorial := Nilai * Faktorial(Nilai-1);
End;
Var
N : integer;
Begin
Write(‘Berapa faktorial ? ‘);
Readln(N);
Writeln(N,’ faktorial = ‘,Faktorial(N):9:0);
End.
Function Fungsi2(Y: integer) : integer;
Begin
Fungsi2 := Y*2;
End;
Function Fungsi1(X:integer) : integer;
Begin
Fungsi1 := Fungsi2(X) + 5;
End;
Begin
Writeln(Fungsi1(3));
End.
6. Bila program dijalankan :
11
V. FUNGSI BERSARANG
Fungsi bersarang merupakan fungsi yang letaknya berada didalam fungsi yang lainnya.
Contoh :
VI. FUNGSI STANDAR
Pascal menyediakan beberapa fungsi standar yang telah didefinisikan dan tidak perlu
dibuat kembali oleh si pemakai. Berikut beberapa contoh fungsi standar :
Jenis fungsi standar Contoh Keterangan
Arithmatika Abs(X); Memutlakan suatu nilai yang ditunjukkan
oleh argumen x
Exp(x:real):real; Menghitung nilai pangkat dari bilangan e
Int(x:real):real; Menghasilkan nilai integer dari x
Sqr(x); Menghitung nilai pangkat kuadrat dari
argumen x
Transfer Chr(X:byte):char; Merubah nilai dari byte x ke bentuk
karakter yang sesuai dengan kode ASCII
Ord(X):longint; Merubah nilai x ke bentuk nilai longint
yang sesuai dengan kode ASCII
Round(x:real):longint; Membulatkan nilai dari real x ke longint
yeng terdekat
Contoh : Panggunaan fungsi standar Abs
Function Fungsi1(X:integer) : integer;
Function Fungsi2(Y:integer) : integer;
Begin
Fungsi2 := Y*2;
End;
Begin
Fungsi1 := Fungsi2(X) + 5;
End;
Begin
Writeln(Fungsi1(3));
End.
7. Bila program dijalankan :
Nilai yang akan dimutlakkan ? -25.75
Nilai mutlaknya = 25.75
Contoh : Penggunaan fungsi standar Exp
Bila program dijalankan :
Nilai yang akan diexponentialkan ? 7.5
Nilai exponentialnya = 1808.04241
Contoh : Fungsi standar SQRT
Var X : real;
Begin
Write(‘Nilai yang akan dimutlakan ? ‘); readln(X);
Writeln(‘Nilai mutlaknya = ‘,Abs(X):9:2);
End.
Var X : real;
Begin
Write(‘Nilai yang akan diexponentialkan ? ‘); readln(X);
Writeln(‘Nilai exponentialnya = ‘,Exp(X):9:2);
End.
Var A,B,C : real;
Begin
Write(‘Panjang sisi tegak ? ‘);readln(A);
Write(‘Panjang sisi datar ? ‘);readln(B);
C := SQRT(SQR(A) + SQR(B));
Writeln(“Panjang sisi miring = ‘,C:9:2);
End.
8. Contoh : Penggunaan fungsi standar CHR
Contoh : Penggunaan fungsi standar round
Var
X : byte;
Begin
Write(‘Nilai kode ASCII (0-255) ? ‘);
Readln(X);
Writeln(“Karakter kode ASCII ini adalah : ‘,chr(X));
End.
Begin
Writeln(’10 dibagi 3 hasil pembulatan terdekat adalah ‘,Round(10/3));
Writeln(’20 dibagi 3 hasil pembulatan terdekat adalah ‘,Round(20/3));
End.