S1 Teknik Informatika-Unijoyo 1
Algoritma Pemrograman
Pertemuan Ke-10
(Fungsi)
::
Noor Ifada
::
Sub Pokok Bahasan
Pendahuluan
Pendefinisian Fungsi
Pemanggilan Fungsi
S1 Teknik Informatika-Unijoyo 3
Seperti halnya prosedur, fungsi juga merupakan modul
program yang mempunyai tujuan spesifik
Fungsi adalah modul program yang
memberikan/mengembalikan (
return
) sebuah nilai dan
tipe tertentu (tipe dasar atau tipe bentukan)
Pendahuluan
Sebagaimana halnya dengan prosedur, fungsi diakses dengan
memanggil namanya. Selain itu, fungsi juga dapat mengandung daftar parameter formal
Parameter pada fungsi selalu merupakan parameter masukan.
Jenis parameter masukan pada fungsi disebabkan oleh kenyataan bahwa parameter pada fungsi merupakan masukan yang digunakan oleh fungsi tersebut untuk menghasilkan nilai
Struktur fungsi sama dengan struktur algoritma yang sudah
dikenal sebelumnya:
ada bagianheader yang berisi nama fungsi dan spesifikasi fungsi bagian Deklarasi
badanfungsi
S1 Teknik Informatika-Unijoyo 5
Notasi algoritma untuk mendefinisikan
fungsi
function NamaFungsi(input daftar parameter formal)→→→→tipe hasil
{ Spesifikasi fungsi, menjelaskan apa yang dilakukan dan yang dikembalikan oleh fungsi. }
DEKLARASI
{ semua nama yang dipakai dalam algoritma fungsi
dideklarasikan di sini. Nama yang didefinisikan di dalam Deklarasi lokal hanya dikenal dan dipakai di dalam fungsi ini saja }
DESKRIPSI:
{ badan fungsi, berisi kumpulan instruksi untuk menghasilkan nilai yang akan dikembalikan oleh fungsi }
return hasil { pengembalian nilai yang dihasilkan fungsi }
Tipe hasil menspesifikasikan tipe nilai yang diberikan oleh
fungsi. Nilai yang diberikan oleh fungsi dapat bertipe dasar maupun bertipe bentukan. Sebagaimana halnya pada prosedur, parameter fungsi pada fungsi tidak selalu harus ada
Semua nama peubah/konstanta yang hanya berlaku di
dalam fungsi saja dideklarasikan di dalam bagian Deklarasi (lokal). Nama yang didefinisikan di dalam bagian Deklarasi fungsi hanya dikenal dan berlaku di dalam fungsi yang bersangkutan saja, fungsi lain atau program utama tidak dapat menggunakannya
S1 Teknik Informatika-Unijoyo 7
Fungsi diakses dengan cara memanggil namanya dari
program pemanggil, diikuti dengan daftar parameter aktual (bila ada)
Karena fungsi menghasilkan nilai, maka nilai tersebut
dapat ditampung dalam sebuah peubah yang bertipe sama dengan tipe fungsi atau nilai yang dikembalikan oleh fungsi dapat langsung dimanipulasi. Parameter aktual dapat berupa konstanta, nama konstanta, atau nama peubah
Pemanggilan Fungsi
function F(input x:real) → real
{ Mengembalikan nilai F(x) = x2 + 2x – 3, x Є R } DEKLARASI { tidak ada } DESKRIPSI: return x*x + 2*x – 3 Keterangan :
• Fadalah nama fungsi, tipenya real • xadalah parameter (by value) formal
• Di dalam badan fungsi, nilai yang dihasilkan oleh fungsi
dikembalikan (return) ke titik pemanggilan:
return x*x + 2*x – 3
S1 Teknik Informatika-Unijoyo 9
Fungsi dapat dipanggil dari program utama atau dari modul program
lain. Di dalam DEKLARASI program pemanggil harus dideklarasikan prototip atau header fungsi yang digunakan. Pendeklarasian prototip fungsi di dalam DEKLARASI diperlukan agar fungsi tersebut dikenal oleh program pemanggil serta cara fungsi dipanggil
Fungsi dariContoh 1dapat dipanggil untuk menampilkan tabel
nilai-nilai xdan F(x)di dalam selang [10,15] dengan ∆x = 0.5
seperti contoh berikut:
Contoh 2:
Pemanggilan Fungsi F(x)= x2+2x–3, xЄRAlgoritma CONTOH_PEMANGGILAN_FUNGSI
{ Program utama untuk pemanggilan fungsi F }
DEKLARASI
x : real
function F(input x:real) → real { Mengembalikan nilai F(x) = x2 + 2x – 3, x Є R } return x*x + 2*x - 3 DESKRIPSI: write(‘---‘) write(‘ x F(x) ‘) write(‘---‘) x ← 10.0 while x ≤ 15.0 do write(x,‘ ‘,F(x)) x ← x + 0.5 endwhile write(‘---‘) Program CONTOH_PEMANGGILAN_FUNGSI; var x : real;
function F(x : real) : real;
begin F := x*x + 2*x - 3 end; begin writeln(‘---‘); writeln(‘ x F(x) ‘); writeln(‘---‘); x := 10.0; while x <= 15.0 do begin writeln(x:6:2,‘ ‘,F(x) :6:2); x := x + 0.5; end; writeln(‘---‘); end.
S1 Teknik Informatika-Unijoyo 11
Fungsi lebih tepat digunakan apabila modul program
mengembalikan sebuah nilai, sementara prosedur digunakan bila modul menghasilkan efek netto dari (satu atau)
sekumpulan aksi. Namun dalam praktek, seringkali perbedaan antara keduanya tidak jelas, karena sebuah prosedur dapat juga ditulis sebagai fungsi, demikian pula sebaliknya. Pemilihan apakah sebuah modul direalisasikan sebagai fungsi atau prosedur bergantung pada kebutuhan dan seni memprogram
Fungsi dapat dikonversikan sebagai prosedur dengan
menyatakan nilai yang dikembalikan oleh fungsi tersebut sebagai parameter keluaran prosedur. Demikian juga, prosedur yang mempunyai satu buah parameter keluaran dapat ditulis sebagai fungsi dengan menyatakan parameter keluaran sebagai nilai yang dikembalikan oleh fungsi
Penggunaan Prosedur atau Fungsi?
(a) Mengubah
fungsi menjadi
prosedur
Contoh: fungsiMaks
dan program utama untuk menentukan bilangan terbesar di antara dua buah bilangan
Algoritma MENENTUKAN_MAKSIMUM
{ Program utama yang memanggil fungsi MAKS untuk menentukan nilai maksimum dari dua buah bilangan buat a dan b. }
DEKLARASI (* Program Utama *)
a, b : integer
function Maks(input a,b : integer)→ integer
{ Mengembalikan harga terbesar dari a dan b } DEKLARASI (* Fungsi *) { tidak ada } DESKRIPSI : (* Fungsi *) if a ≥ b then return a else return b endif
DESKRIPSI : (* Program Utama *) read(a,b)
S1 Teknik Informatika-Unijoyo 13 Program CONTOH_PEMANGGILAN_FUNGSI;
var
a : integer; b : integer;
function Maks(a, b : integer) : integer; begin if a >= b then Maks := a else Maks := b; end; begin
write(‘Masukkan nilai a ? ‘); readln(a);
write(‘Masukkan nilai b ? ‘); readln(b);
writeln(‘Nilai yang terbesar adalah : ‘,Maks(a,b)); end.
Di samping sebagai
fungsi, fungsi Maks
juga dapat dituliskan sebagai prosedur
TentukanMaks dan program utama
Algoritma MENENTUKAN_MAKSIMUM
{ Program utama yang memanggil prosedur TentukanMaks untuk menentukan nilai maksimum dua buah bilangan bulat a dan b }
DEKLARASI (* Program Utama *)
a, b, m : integer
procedure TentukanMaks(input a,b : integer, output
maks : integer)
{ Menentukan nilai terbesar dari a dan b } { K.awal: a dan b sudah terdefinisi nilai }
{ K.akhir: maks berisi nilai terbesar dari a atau b }
DEKLARASI (* Prosedur *) { tidak ada } DESKRIPSI : (* Prosedur *) ifa ≥ bthen maks ←a else maks ←b endif
DESKRIPSI : (* Program Utama *) read(a,b)
S1 Teknik Informatika-Unijoyo 15 Program CONTOH_PEMANGGILAN_FUNGSI; var a : integer; b : integer; m : integer;
procedure Tentukan_Maks(a,b:integer; var maks:integer); begin if a >= b then Maks := a else Maks := b; end; begin
write(‘Masukkan nilai a ? ‘); readln(a);
write(‘Masukkan nilai b ? ‘); readln(b);
Tentukan_Maks(a,b,m);
writeln(‘Nilai yang terbesar adalah : ‘,m); end.
(b) Mengubah
prosedur menjadi
fungsi
Contoh: prosedur HitungRataRatadan program utama untuk menghitung nilai rata-rata dari sejumlah data bilangan bulat
Algoritma MENGHITUNG_RATA_RATA
{ Program utama untuk menghitung nilai rata-rata N buah bilangan bulat yang dibaca dari piranti masukan} DEKLARASI (* Program Utama *)
Ndata : integer
rerata : real
procedure HitungRataRata(input N : integer, output
rata : real)
{ Menghitung nilai rata-rata N buah bilangan bulat } { K.awal: N berisi banyaknya bilangan bulat, N > 0 } { K.awal: rata berisi rata-rata seluruh bilangan } DEKLARASI (* Prosedur *)
x : integer { data bilangan bulat yang dibaca dari piranti masukan }
k : integer { pencacah banyak bilangan }
jumlah : integer { jumlah seluruh bilangan } DESKRIPSI : (* Prosedur *)
jumlah ←0 { inisialisasi penjumlah } for k ←1 to N do
read(x)
jumlah← jumlah + x
endfor
rata ← jumlah/N { rata-rata seluruh bilangan } DESKRIPSI : (* Program Utama *)
read(Ndata)
S1 Teknik Informatika-Unijoyo 17 Program MENGHITUNG_RATA_RATA;
var
Ndata : integer; rerata : real;
procedure HitungRataRata(N : integer; var rata : real); var x, k, jumlah : integer; begin jumlah := 0; for k := 1 to N do begin write(‘Nilai x ? ‘); readln(x); jumlah := jumlah + x; end; rata := jumlah/N; end; begin
writeln(‘Menghitung rata-rata N buah bilangan bulat’); write(‘Masukkan banyaknya data ? ’);
readln(Ndata);
HitungRataRata(Ndata,rerata); writeln(‘Nilai rata-rata = ‘,rerata) end.
Algoritma MENGHITUNG_RATA_RATA
{ Program utama untuk menghitung nilai rata-rata N buah bilangan bulat yang dibaca dari piranti masukan }
DEKLARASI (* Program Utama *) Ndata : integer
rerata : real
function RataRata(input N : integer) → real
{ Menghitung nilai rata-rata N buah bilangan bulat yang dibaca dari piranti masukan. Rata-rata bilangan merupakan nilai yang dikembalikan oleh fungsi }
DEKLARASI (* Fungsi *)
x : integer {data bilangan bulat} k : integer {pencacah banyak bilangan} jumlah : integer {jumlah seluruh bilangan}
DESKRIPSI : (* Fungsi *)
jumlah ← 0 { inisialisasi penjumlah } for k ← 1 to N do
read(x)
jumlah ← jumlah + x endfor
return jumlah/N {rata-rata seluruh bilangan}
DESKRIPSI : (* Program Utama *) read(Ndata)
Prosedur HitungRataRata
memiliki satu parameter keluaran, karena itu ia dapat diubah menjadi fungsi. Apabila ditulis sebagai fungsi, maka parameter keluaran rata tidak
diperlukan lagi, karena nilai rata merupakan nilai yang dihasilkan (return value) oleh fungsi
S1 Teknik Informatika-Unijoyo 19 Program CONTOH_PEMANGGILAN_FUNGSI;
var
Ndata : integer; rerata : real;
function RataRata(N : integer) : real; var x, k, jumlah : integer; begin jumlah := 0; for k := 1 to N do begin write(‘Nilai x ? ‘); readln(x); jumlah := jumlah + x; end; RataRata := jumlah/N; end; begin
writeln(‘Menghitung rata-rata N buah bilangan bulat’); write(‘Masukkan banyaknya data ? ’); readln(Ndata); writeln(‘Nilai rata-rata = ‘,RataRata(Ndata)) end.
• Fungsi adalah modul program yang memberikan/mengembalikan (return) sebuah nilai dan tipe tertentu (tipe dasar atau tipe bentukan) • Struktur fungsi terdiri dari bagian header, bagian Deklarasi dan badan
fungsi
• Semua nama peubah/konstanta yang hanya berlaku di dalam fungsi saja dideklarasikan di dalam bagian Deklarasi (lokal). Nama yang didefinisikan di dalam bagian Deklarasi fungsi hanya dikenal dan berlaku di dalam fungsi yang bersangkutan saja, fungsi lain atau program utama tidak dapat menggunakannya
• Fungsi diakses dengan cara memanggil namanya dari program pemanggil, diikuti dengan daftar parameter aktual (bila ada)
• Fungsi dapat dikonversikan sebagai prosedur, demikian juga prosedur yang mempunyai satu buah parameter keluaran dapat ditulis sebagai
S1 Teknik Informatika-Unijoyo 21