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); Dasar pemrograman/ Modul_10_SubProgram(Fungsi)
11.2
PARAMETER DALAM FUNGSI Sama dengan prosedur, parameter dalam fungsi dapat dikirim secara nilai (by
value) atau secara acuan (by reference). Parameter By Value Pengiriman parameter berdasarkan nilai, jenis pengiriman ini akan mengirimkan parameter satu arah, sehingga jika terjadi perubahan nilai pada parameter yang terdapat di fungsi tidak akan mempengaruhi nilai yang ada di fungsi yang memanggil. Untuk pengiriman nilai tidak memerlukan keyword var dalam daftar parameternya. Bentuk umum pengiriman parameter pada fungsi secara nilai: FUNCTION Name (formal_parameter_list) : tipedata fungsi ; Contoh : Berikut akan dibuat suatu fungsi yang akan menghasilkan nilai terbesar dari 2 buah nilai real.
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;
Bila program dijalankan : Nilai pertama ? 12.356 Nilai kedua ? 55.182 Nilai terbesar adalah 55.182
Parameter by Reference Pengiriman parameter dengan secara acuan akan mengakibatkan perubahan nilai parameter di fungsi juga merubah nilai parameter di modul yang mengirimkannya. Untuk pengiriman sacara acuan HARUS menggunakan keyword var pendeklarasian variabel dalam daftar parameternya. sebelum
Bentuk umum pengiriman parameter pada fungsi secara acuan: FUNCTION Name ( VAR formal_parameter_list) : Tipedata_fungsi ;
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.
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 :
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.
Bila program dijalankan : Nilai akan dipangkatkan ? 1.5 Dipangkatkan dengan 1.500 pangkat 3 adalah ? 3 3.375
11.3
Seperti halnya prosedur, fungsi juga dapat memanggil dirinya sendiri. Proses fungsi memanggil dirinya sendiri juga merupakan proses recursion. Contoh :
Function Faktorial(Nilai : integer) : real; Begin If Nilai = 0 then Faktorial := 1 Else Faktorial := Nilai * Faktorial(Nilai-1); End; Var Begin N : integer; Write(Berapa faktorial ? ); Readln(N); Writeln(N, faktorial = ,Faktorial(N):9:0);
End.
11.4
Suatu fungsi dapat juga memanggil fungsi yang lainnya. Fungsi yang dipanggil letaknya harus berada diatas fungsi yang memanggil. Contoh : 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.
11.5
FUNGSI BERSARANG
Fungsi bersarang merupakan fungsi yang letaknya berada didalam fungsi yang lainnya. Contoh : 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.
11.6
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 Arithmatika Contoh Abs(X); Exp(x:real):real; Int(x:real):real; Sqr(x); Transfer Chr(X:byte):char; Ord(X):longint; Round(x:real):longint; Contoh : Panggunaan fungsi standar Abs Keterangan Memutlakan suatu nilai yang ditunjukkan oleh argumen x Menghitung nilai pangkat dari bilangan e Menghasilkan nilai integer dari x Menghitung nilai pangkat kuadrat dari argumen x Merubah nilai dari byte x ke bentuk karakter yang sesuai dengan kode ASCII Merubah nilai x ke bentuk nilai longint yang sesuai dengan kode ASCII Membulatkan nilai dari real x ke longint yeng terdekat
Var X : real; Begin Write(Nilai yang akan dimutlakan ? ); readln(X); Writeln(Nilai mutlaknya = ,Abs(X):9:2); End.
Bila program dijalankan : Nilai yang akan dimutlakkan ? -25.75 Nilai mutlaknya = 25.75 Contoh : Penggunaan fungsi standar Exp Var X : real; Begin Write(Nilai yang akan diexponentialkan ? ); readln(X); Writeln(Nilai exponentialnya = ,Exp(X):9:2); End.
Bila program dijalankan : Nilai yang akan diexponentialkan ? 7.5 Nilai exponentialnya = 1808.04241 Contoh : Fungsi standar SQRT 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); Contoh : Penggunaan fungsi standar CHR End. Dasar pemrograman/ Modul_10_SubProgram(Fungsi)
Var X : byte; Begin Write(Nilai kode ASCII (0-255) ? ); Readln(X); Writeln(Karakter kode ASCII ini adalah : ,chr(X)); End.
Contoh : Penggunaan fungsi standar round Begin Writeln(10 dibagi 3 hasil pembulatan terdekat adalah , Round(10/3)); Writeln(20 dibagi 3 hasil pembulatan terdekat adalah , Round(20/3)); End.
Rinaldi Munir, Algoritma dan Pemrograman Dalam Bahasa Pascal dan C, Edisi ke-3, Penerbit Informatika, Bandung 2003
Thompson Susabda Ngoen, Pengantar Algoritma dengan Bahasa C, Salemba Teknika, Jakarta, 2004
===========