Fungsi adalah pemetaan suatu domain ke range berdomain tertentu. Fungsi adalah
sebuah transformasi akibat pemetaan suatu nilai (dari “domain”) ke nilai lain
(dalam “range”). Secara algoritmik, sebuah fungsi akan menerima suatu harga yang
diberikan lewat parameter formal bertype tertentu (jika ada) dan menghasilkan suatu
nilai sesuai dengan domain yang didefinisikan dalam spesifikasi fungsi.
Dalam penulisannya, fungsi diberi nama, dan parameter formal yaitu harga masukan
yang juga diberi nama dan dijelaskan typenya. Fungsi harus didefinisikan dalam
kamus.
Fungsi yang didefinisikan dapat “dipanggil” untuk dieksekusi lewat namanya, dan
dengan diberikan parameter aktualnya.
Penjelasan lebih rinci tentang parameter akan diberikan pada bagian Prosedur.
Contoh Fungsi:
Fungsi f(x) dengan satu parameter x dalam matematika yang didefinisikan sebagai:
f(x) = x2 + 3x – 5
jika x = 4 maka f(x) akan menghasilkan 23
jika x = 1 maka f(x) akan menghasilkan -1
f(x,y) = x2 + 3xy - 5y – 1 adalah fungsi dengan dua parameter x dan y
jika diberi harga x = 0 dan y = 0 maka f(x,y) akan menghasilkan -1
jika diberi harga x = 1 dan y=0 maka f(x,y) akan menghasilkan 0
Notasi Algoritmik untuk Fungsi
Pendefinisian/Spesifikasi Fungsi
dengan syarat :
- List parameter input boleh tidak ada (kosong), dalam hal ini di fungsi tidak
membutuhkan apa-apa dari pemakainya untuk menghasilkan harga.
- Jika list parameter input (parameter formal) tidak kosong, minimal mengandung
satu nama, maka nama tersebut harus berupa nama informasi beserta type-nya.
- Instruksi “terakhir” yang harus ada pada fungsi harus merupakan pengiriman
harga yang dihasilkan oleh fungsi (dituliskan seperti pada notasi di atas, dengan
type hasil boleh type dasar atau type terstruktur). Type hasil boleh dinyatakan oleh
suatu nama type. Dengan catatan, bahwa instruksi “terakhir” belum tentu
dituliskan pada baris terakhir, misalnya jika hasil merupakan sebuah nilai yang
dikirimkan berdasarkan analisis kasus.
Pemanggilan Fungsi
Catatan :
1. Pada waktu pemanggilan terjadilah asosiasi antara parameter formal/input dengan
parameter aktual sesuai dengan urutan penulisan dalam list nama parameter input.
2. List parameter input dapat berupa nama informasi atau nama konstanta yang telah
terdefinisi dalam kamus atau konstanta; dapat juga berupa harga konstanta, atau
harga yang dihasilkan oleh suatu ekspresi atau fungsi.
3. List parameter aktual harus sama jumlah, urutan dan type-nya dengan list
parameter formal pada pendefinisian fungsinya.
4. Harga yang dihasilkan oleh fungsi dapat didefinisikan domainnya dengan lebih
rinci.
5. Pada akhir dari eksekusi fungsi, harga yang dihasilkan oleh fungsi dikirimkan ke
pemakainya.
6. Fungsi boleh dipakai oleh program utama, prosedur atau fungsi lain.
Fungsi Terdefinisi
Fungsi terdefinisi adalah fungsi yang sudah diberikan oleh sistem dan tinggal dipakai
(dipanggil). Fungsi terdefinisi selalu diberikan daftar dan spesifikasinya (domain +
range).
Fungsi terdefinisi untuk Melakukan Konversi Tipe:
Seringkali, dibutuhkan konversi dari bilangan riil menjadi integer atau sebaliknya.
Maka didefinisikan duabuah fungsi konversi bilangan numerik sebagai berikut:
Contoh 1: FUNGSI KONVERSI
Persoalan:
Tuliskanlah sebuah fungsi, yang mengkonversikan harga karakter angka (nol sampai
dengan 9) menjadi harga numerik sesuai dengan karakter yang tertulis.
Contoh : '0' → 0
'8' → 8
Spesifikasi:
Fungsi KarakterToInteger:
Domain : x : character ['0'..'9'] )
Range : integer [0..9]
Proses : Analisis kasus terhadap x, untuk setiap harga x diasosiasikan integer
yang sesuai.
Contoh 2: APAKAH HURUF 'A'
Pemetaan karakter ke type boolean
Persoalan :
Tuliskanlah fungsi IsAnA yang mentest apakah sebuah karakter yang diberikan
kepadanya adalah sebuah huruf 'A'. Harga yang dihasilkan adalah benar jika huruf itu
'A', salah jika huruf itu bukan 'A'.
Contoh : IsAnA('A') → true
IsAnA ('X' ) → false
IsAnA ('Y') → false
Spesifikasi :
Fungsi IsAnA :
Domain : x (karakter)
Range : boolean
Proses : menghasilkan true jika x adalah ‘A’, false jika tidak
Contoh 3: HITUNG METER+CM
Pemetaan type dasar ke type bentukan
Persoalan:
Tuliskanlah sebuah fungsi, yang jika diberikan sebuah angka Cm yang menyatakan
panjang dalam cm, akan menghasilkan pasangan harga <x1, x2> sesuai dengan rumus
ukuran metris (i m = 100 cm).sehingga x1*100+x2 = Cm
Contoh : F(100) = <1,0>
F(355 ) = < 3, 55>
Spesifikasi :
Fungsi KonversiCm :
Domain : Cm : integer
Range : pasangan harga integer
Proses : menghitung Meter dan SisaCm sehingga Cm = 100* Meter + SisaCm


Catatan:
1. Terjemahan teks fungsi pada contoh ini ke dalam beberapa bahasa pemrograman
tidak “sederhana”, bahkan tidak mungkin dapat dilakukan secara langsung.
2. Cobalah menterjemahkan funsgi di atas ke dalam bahasa Pascal, C dan Ada. Akan
terlihat perbedaan yang sangat besar di antara ketiganya.
Contoh 4: UBAHDANPERIKSAKAR
Persoalan:
Tuliskanlah algoritma yang membaca sebuah karakter dan mengubahnya menjadi
integer yang sesuai dengan karakter itu jika karakter yang dibaca adalah antara '0' dan
'9' dengan memanfaatkan funsgi KarakterToInteger yang pernah dibuat. . Jika bukan
di dalam daerah harga nol dan sembilan, maka harus dituliskan pesan yang berbunyi :
'Bukan angka' .
Spesifikasi:
Input : CC karakter
Output : menuliskan integer [0..9] sesuai dengan karakter yang dibaca, jika karakter
['0'..'9'], atau “Bukan angka” jika CC bukan angka
Proses : Konversi dari karakter ke integer, jika CC ['0'..'9']
Dengan catatan fungsi konversi adalah seperti terdefinisi pada contoh 1.
Catatan:
Tes yang dilakukan sebelum pemanggilan fungsi KarakterToInteger membuat fungsi
KarakterToInteger cukup mengembalikan nilai yang terdefinisi. Jika domain dari nilai
masukan fungsi tidak hanya mencakup karakter angka, maka di dalam fungsi harus
didefinisikan suatu nilai yang diluar definisi angka.

Contoh 5: HITUNGFUNGSI
Definisi dan pemanggilan fungsi
Persoalan:
Tuliskanlah algoritma yang membaca 3 bilangan bulat (a,b,c), dan menghitung:
6*( ax2 + bx +c) untuk x = 1
Spesifikasi:
Input : a, b, c bilangan bulat, koefisien persamaan kuadrat, x = 1
Output : Fx
Proses : menghitung Fx = 6*( ax2 + bx +c)
menuliskan hasil
Contoh 6: MAX2 dan MAX3
a. Tuliskanlah fungsi MAX2, yang menerima masukan dua buah bilangan real dan
menghasilkan sebuah bilangan real, yaitu salah satu di antara nilai dua buah
bilangan tersebut yang terbesar.
b. Kemudian dengan memakai fungsi MAX2, tuliskanlah sebuah fungsi lain
MAX3 yang menghasilkan nilai terbesar dari tiga buah bilangan real.
Contoh : MAX2(1,2) ) → 2
MAX2(10,2 ) →10
MAX3(1,2,3) adalah MAX2(MAX2(1,2),3) → 3
MAX3(10,2,3) adalah MAX2(MAX2(10,2),3) → 10 }

Catatan :
1. Bagi yang sudah mengikuti kuliah “Pemrograman Fungsional”, dapat dilihat
bahwa teks program di atas sangat selaras dengan ekspresi fungsional yang pernah
dipelajari.
2. Pemanggilan fungsi pada konteks prosedural adalah aplikasi fungsi pada konteks
fungsional.
Contoh-7: PENANGGALAN DAN NEXTDAY
Pemetaan type bentukan ke type bentukan
Didefinisikan type terstruktur untuk mewakili hari seperti dalam kalender yang
kita pakai sehari-hari:
type DATE : < DD : Tanggal, MM : Bulan, YY : Tahun >
Konstanta : <5,12,1990> { artinya 5 Desember 1990}
<25,2,2001> { artinya 25 Februari 2001}
Tuliskanlah algoritma untuk :
- Membaca sebuah tanggal dan sebuah kode bahasa penulisan (1 = Inggris, 2 =
Indonesia, 3 = Perancis),
Menuliskan tanggal keesokan harinya sesuai dengan kode bahasa:
Dalam bahasa Inggris , DATE ditulis dalam: Bulan, '/',Tanggal.'/',Tahun
Dalam bahasa Indonesia, DATE ditulis dalam: Tanggal, '-',Bulan.'-',Tahun
Dalam bahasa Perancis DATE ditulis dalam: Tanggal, '/',Bulan.'/',Tahun
- Proses menghitung hari esok dilakukan oleh sebuah fungsi NextDay yang
menerima masukan sebuah tanggal dan menghasilkan tanggal keesokan harinya.
Contoh pemanggilan dan hasil fungsi diberikan sebagai berikut:
NextDay(<13,4,1990>,1) → 4 /14/1990
NextDay(<30,1,1990>,2) → 31-1-1990
NextDay(<31,12,1990>,3) → 1/1/1991
Komentar
Posting Komentar