F U N C T I O N (F U N G S I)
Blok
Fungsi hampir sama dengan blok prosedur, hanya fungsi harus
dideklarasikan dengan tipenya. Tipe deklarasi ini menunjukkan tipe hasil dari
fungsi.
FUNGSI merupakan suatu program terpisah dalam blok
tersendiri yang berfungsi sebagai subprogram dan dideklarasikan dengan tipe
yang menunjukkan tipe hasil dari fungsi
Bentuk
Umum :
Function
Identifier(daftar-parameter):type;
Contoh
:
Function Faktorial(Var Fak,Hasil :
Integer):Integer;
Function Pangkat(X,Y : Real):Real;
Blok
Fungsi diawali dengan kata cadangan Begin dan diakhiri dengan kata cadangan End
dan titik koma.
Contoh
:
1.
Function Hitung(Var A,B : Integer):Integer; Output :
Begin
Hitung :=A+B; Nilai
X ? 2
End; Nilai
Y ? 3
Var 2
+ 3 = 5
X,Y : Integer;
Begin
Write(‘Nilai X ?’);
Readln(X);
Write(‘Nilai Y ?’);
Readln(Y);
Writeln;
Writeln(X,’+’,Y, ‘=’,Hitung(X,Y));
End.
2.
Function Hitung(Var A,B,C : Integer): Integer; Output :
Begin
A:=A+2; Nilai
X ? 2
B:=B+2; Nilai
Y ? 3
C:=A+B;
Hitung:=C; 4
+ 5 = 9
End;
Var
X,Y,Z,Hasil : Integer;
Begin
Write(‘Nilai X ?’);
Readln(X);
Write(“Nilai Y ?’);
Readln(Y);
Writeln;
Hasil :=Hitung(X,Y,Z);
Writeln(X,’+’,Y, ‘=’,Hasil);
End.
·
Perbedaan Fungsi
dengan Prosedur adalah :
1.
Pada fungsi, nilai yang dikirimkan balik terdapat pada nama Fungsinya (kalau pada prosedur pada Parameter
yang dikirimkan secara acuan). Pada contoh, nama Fungsi tersebut adalah Hitung
dan nilai yang dikirim balik berada pada nama Fungsi tersebut. Sehingga nama
Fungsi ini harus digunakan untuk menampung hasil yang akan dikirimkan dari
Fungsi sebagai berikut :
Hitung := A+B;
2.
Karena nilai balik berada di nama Fungsi tersebut,
maka Fungsi tersebut dapat langsung digunakan untuk dicetak hasil sebagai
berikut :
Writeln(X,’+’,Y, ‘=’,
Hitung(X,Y);
Nama Fungsi yang langsung digunakan untuk ditampilkan hasilnya
Atau Nilai Fungsi
tersebut dapat juga langsung dipindahkan ke pengenal Variabel yang lainnya,
sebagai berikut :
Hasil := Hitung(X,Y);
Writeln(X, ‘+’ ,Y, ‘=’, Hasil);
Sedang pada Prosedur, nama Prosedur tersebut tidak dapat digunakan
langsung, yang dapat langsung digunakan adalah parameternya yang langsung
mengandung nilai balik.
Parameter
Parameter merupakan suatu nilai atau referensi yang
dilewatkan ke dalam rutin tertentu dan kehadirannya akan mempengaruhi proses
maupun nilai yang terdapat di dalam rutin itu sendiri. Parameter ditempatkan di
dalam tanda kurung setelah nama rutin bersangkutan.
Suatu
fungsi umumnya mempunyai parameter. Namun bisa saja suatu fungsi tidak memiliki
paramater.
Setiap parameter yang dilewatkan harus memiliki tipe data
tersendiri yang dapat berupa dari tipe dasar maupun bentukan seperti array,
record atau pointer. Untuk mengetahui arti parameter, perhatikan fungsi
matematika di bawah ini.
f (x) = 2x2
+ 5x – 3
Bila
x=1, maka f akan mengembalikan nilai 4, yang berasal dari
f (1) = 2(1)2
+ 5(1) – 3 = 2 + 5 – 3 = 4
Bila
x=2, maka f akan mengembalikan nilai 15, yang berasal dari
f (2) = 2(2)2
+ 5(2) – 3 = 8 + 10 – 3 = 15
Dari ilustrasi tersebut terlihat jelas bahwa hasil nilai
dari fungsi f ditentukan oleh besarnya nilai x, sehingga x disebut sebagai
parameter dari fungsi f.
Contoh:
Function hitung(Var A,B : integer):integer; è Var A,B: integer merupakan
Begin parameter
hitung:=A+B;
end;
·
Fungsi Tanpa Parameter
Suatu Fungsi yang tanpa menggunakan parameter berarti nilai balik yang
akan dihasilkan merupakan nilai yang sudah pasti. Pada Fungsi yang tidak
mempunyai parameter, maka hsail tersebut tidak dapat diatur dari modul yang
menggunakannya, karena tidak ada parameter yang dikirimkan.
Contoh :
Type
Huruf = String;
Function Garis : Huruf; Output:
Begin --------
Garis
:= ‘-----------‘; Pascal
End; --------
Begin
Writeln(Garis);
Writeln(‘Pascal’);
Writeln(Garis);
End.
Atau dapat juga didefinisikan sebagai suatu konstanta dibagian definisi
konstanta, sebagai berikut :
Contoh :
Const Output :
Garis:=’---------‘; ---------
Begin Pascal
Writeln(Garis); ---------
Writeln(‘Pascal’);
Writeln(Garis);
End.
·
Pengiriman Parameter
Dalam Fungsi
Parameter
dalam fungsi dapat dikirimkan secara Nilai (By Value) atau secara Acuan (By
Reference).
Pengiriman parameter secara Nilai (By Value) adalah
tampak sebagai berikut :
Function Hitung(A,B : Integer): Integer;
Contoh
:
Suatu
Fungsi yang akan menghasilkan nilai terbesar dari 2 buah Nilai Real.
Function Terbesar(X,Y:Real):Real;
Begin Output :
If X>Y then Nilai Pertama ? 12,356
Terbesar :=X Nilai Kedua ? 55.182
Else Nilai Terbesar adalah 55,182
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.
Pengiriman parameter secara Acuan (By
Reference) adalah dengan menambahkan kata cadangan Var sebagai
berikut :
Function Hitung(Var A,B :
Integer):Integer;
Pengiriman
parameter dengan secara Acuan akan mengakibatkan perubahan nilai parameter di
Fungsi juga merubah nilai parameter dimodul yang mengirimkannya.
Contoh
:
Function
Hitung(Var A,B,C : Integer):Integer; Output
:
Begin
Hitung :=A+B; Nilai X ? 2
C :=A*B; Nilai
Y ? 3
End.
2
+ 3 = 5
Var 2
* 3 = 6
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.
·
Fungsi Pangkat
Pascal
tidak menyediakan Fungsi untuk perpangkatan tinggi, yang ada hanyalah SQR,
yaitu untuk pemangkatan kuadrat. Bila akan melakukan perpangkatan lebih dari
pangkat 2, maka harus dibuat program tersendiri.
Contoh
:
Function
PangkatI(X:Real; Y:Integer):Real;
Var
Pangkat :=1;
For I := 1 to Y do
Pangkat := Pangkat * X;
PangkatI := Pangkat;
End;
Var
A: Real;
B : Integer;
Begin
Write(‘Nilai akan dipangkatkan ?’);
Readln(A);
Write(‘Dipangkatkan dengan ?’);
Readln(B);
Writeln(A:9:3, ‘Pangkat’ ,B,
‘adalah’,PangkatI(A,B):9:3);
End.
Output
:
Nilai
akan dipangkatkan ? 1.5
Dipangkatkan
dengan ? 3
1.500 pangkat 3 adalah 3.375
·
Fungsi Memanggil Dirinya Sendiri (Fungsi
Rekursif)
Suatu Fungsi dapat juga memanggil dirinya sendiri atau disebut dengan
Recursion
Fungsi
Rekursif : fungsi yang dapat memanggil dirinya sendiri. Berikut ini sebuah contoh fungsi
rekursif
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.
Output :
Berapa Faktorial ? 5
5 Faktorial = 120
·
Fungsi Memanggil Fungsi Yang Lain
Suatu Fungsi dapat juga memanggil Fungsi
yang lainnya. Fungsi yang dipanggil letaknya harus berada diatas Fungsi yang
memanggil.
Contoh
: Output
:
Function
Fungsi2(Y:Integer):Integer; 11
Begin
Fungsi2 := Y*2; Didapat dari :
End;
Fungsi1 := Fungsi2(X) + 5
Function
Fungsi1(X:Integer):Integer; Fungsi1
:= Y * 2+5
Begin Maka untuk Nilai Fungsi(3) adalah
3 * 2 + 5 = 11
Fungsi1 := Fungsi2(X)+5;
End;
Begin
Writeln(Fungsi1(3));
End.
