End

advertisement
Fungsi
Kuliah 7 –
Pengantar Pemrograman
1
FUNGSI



Modul program yang mengembalikan/ memberikan
(return) sebuah nilai yang bertipe sederhana.
 tipe data sederhana : integer, real, boolean, dan
string
Dalam matematika :
f(x,y) = 3x – y + xy
 f adalah sebuah fungsi dengan parameter x dan
y.
Nilai yang diberikan fungsi tergantung nilai parameter
masukannya.
FUNGSI (cont.)


Fungsi diakses dengan memanggil
namanya (sama seperti prosedur).
Fungsi dapat mengandung parameter
formal berjenis parameter masukan.
Fungsi


Untuk mendefinisikan sebuah operasi
Hanya satu return output
Input
parameters
Function
Return Value
4
Mendefinisikan Fungsi



Struktur fungsi sama dengan struktur
algoritma, yaitu : bagian judul, bagian
deklarasi, dan badan fungsi.
Setiap fungsi memiliki nama unik serta
daftar parameter formalnya (jika ada).
Tipe hasil (pada header)
menspesifikasikan tipe data dari nilai
yang diberikan fungsi.
Dua kelas fungsi

Fungsi Standar



Tersedia dalam Pascal
Contoh: Abs(x), sqr(x), sqrt(x), sin(x)
User-defined function



Didefinisikan oleh user
Didefinisikan pada bgian deklarasi program
Contoh: pangkat3(x), max(x)
6
Fungsi
Function nama_fungsi(parameter): ReturnType;
Bagian Deklarasi
Begin
Operasi
…
nama_fungsi := Nilai_pengembalian;
End;
7
Pemanggilan Fungsi

Fungsi diakses dengan memanggil
namanya dari program pemanggil
(program utama atau modul program
lain), diikuti dengan daftar parameter
aktual (jika ada).
Pemanggilan Fungsi (cont.)
Karena fungsi menghasilkan nilai, maka :
 nilai tersebut dapat ditampung dalam
sebuah peubah yang bertipe sama
dengan tipe fungsi :
Peubah  NAMA_FUNGSI(daftar parameter aktual)

nilai yang diberikan oleh fungsi dapat
langsung dimanipulasi
write(NAMA_FUNGSI(daftar parameter))
if 2 * NAMA_FUNGSI(daftar parameter) < 0 then …
Pemanggilan Fungsi (cont.)


Parameter aktual dapat berupa tetapan,
nama tetapan, atau nama peubah
asalkan sudah terdefinisi tipe dan
harganya.
Dalam program pemanggil, prototype
fungsi harus dideklarasikan supaya
program pemanggil mengenal nama
fungsi tersebut serta cara
mengaksesnya.
Untuk Menggunakan Fungsi
Perlu diketahui:
 Nama fungsi
 Jumlah parameter yang diperlukan
 Tipe setiap parameter
 Tipe nilai yang dikembalikan
11
Contoh Program : x3
Program kalkulator(input, output);
Var x,y : integer;
Begin
write(‘Masukkan sebuah bilangan’);
Readln(x);
y := x * x * x;
writeln(‘Hasilnya adalah’, y)
End.
12
Contoh Fungsi : x3
Function pangkat3(bil:integer):integer;
Begin
pangkat3 := bil * bil * bil;
End;
13
Contoh Fungsi: x3
Program kalkulator;
Var x,y : integer;
Function pangkat3(bil:integer):integer;
Begin
pangkat3 := bil * bil * bil;
End;
Begin {program utama}
write(‘Masukkan sebuah bilangan’);
Readln(x);
y := pangkat3(x);
writeln(‘Hasilnya adalah’, y)
End.
14
Contoh fungsi: bil. terbesar
Function max(x,y : integer): integer;
Begin
if x > y then
max := x
else
max := y
End;
15
Contoh: fungsi terkecil
Function min(x,y: real): real;
Begin
if x < y then
min := x
else
min := y
End;
16
Contoh: Konversi USD ke IDR
Function USD_to_IDR(dollar:real):real;
Begin
US_to_IDR := dollar * 11500;
End;
17
Contoh: luas_lingkaran
Function luas_lingkaran(rad:real) :real;
Const Nilai_Pi = 3.14;
Begin
luas_lingkaran := Nilai_Pi * sqr(rad);
End;
18
Contoh: volume_lingkaran
Function pangkat3(bil:integer):integer;
Begin
pangkat3 := bil * bil * bil;
End;
Function volume_lingkaran(rad:real) :real;
Const nilai_pi = 3.14
Begin
volume_lingkaran := 4/3 * nilai_Pi * pangkat3(rad);
End;
19
Contoh: Operasi Array
FUNCTION Jum_Array( A : Array_num): integer;
Var
index, jum : integer;
Begin
jum:= 0;
for index := 1 to 50 do
jum:= jum + A[index];
Jum_Array := jum;
End;
Begin { Prog. Utama}
Total: = Jum_Array(array1) + Jum_Array( array2)
20
Contoh: Faktorial
FUNCTION Faktorial (X : integer) : integer;
Var
Hasil : integer;
Begin
Hasil := 1;
While X > 0 do
Begin
Hasil := Hasil * x;
x:= x -1;
end;
Faktorial := hasil;
End;
21
Contoh: Segitiga
FUNCION Segitiga (Sudut1,Sudut2,Sudut3 : Real) :Boolean;
Begin
If Sudut1 + Sudut2 + Sudut3 -180 = 0 then
Segitiga := true;
end;
Begin
Readln( sudutA, sudutB, sudutC);
If Segitiga(sudutA, sudutB, sudutC) then
writeln (‘ketiga sudut membentuk segitiga’);
else writeln (‘ketiga sudut tidak membentuk segitiga);
End.
22
Contoh: Memeriksa Nama
Tulis sebuah fungsi yang memeriksa apakah sebuah nama ditulis benar atau tidak.
Misal Nama dikatakan valid jika terdiri dari huruf kapital
FUNCTION NamaValid ( Nama : String) : BOOLEAN;
Var
index : integer;
begin
NamaValid : = true;
For index := 1 to length(Nama) do
If (Nama[index] < ‘A’) OR (Nama[index] > ‘Z’)
then
NamaValid := False;
end;{ function}
23
Contoh (cont’d)
Begin
writeln(‘Masukkan nama’);
Readln( NamaOrang);
If NamaValid (NamaOrang) then
writeln(‘Ok’);
End.
24
PERHATIKAN!






Cara pendefinisian fungsi
Penggunaan parameter masukan,
keluaran, dan masukan/keluaran
Parsing parameter
Tipe data parameter aktual dan formal
Nama lokal dan nama global
Cara pemanggilan fungsi (bandingkan
dengan prosedur)
Prosedur atau Fungsi ?


Sebuah prosedur dapat dituliskan sebagai
fungsi, demikian juga sebaliknya.
Sebaiknya buat modul program dalam bentuk :
 Fungsi
 jika modul program menghasilkan sebuah nilai.

Prosedur
 jika modul menghasilkan efek netto dari satu/sekumpulan aksi.

Modul Program dengan output lebih dari satu
tidak elegan dituliskan sebagai fungsi, meskipun
hal itu mungkin dilakukan.
Well-design program
Program kalkulator;
Var x: integer;
Procedure baca_data (var n:integer);
Begin
write(‘Masukkan sebuah bilangan’);
Readln(n);
End;
Function pangkat3(:integer):integer;
Begin
pangkat3 := bil * bil * bil;
End;
Begin {main routine}
baca_data (x);
writeln(‘Jika dipangkatkan 3 hasilnya’, power3(x))
End.
27
Rekursi
1.
Rekursi adalah kondisi dimana di dalam sebuah sub-proses terdapat
instruksi untuk memanggil sub-proses lain yang serupa dengan
dirinya.
2.
Setiap kali terjadi proses yang rekursif, sejumlah memori akan dipakai
untuk mengidentifikasi sub-proses yang baru dan lokasi dari subproses lama yang ditinggalkan.
3.
Komputer menyimpan address yang ditinggalkan di dalam memory
yang disebut STACK. Penggunaan STACK memastikan alur proses
berjalan dengan benar.
4.
Karena di dalam sub-proses terjadi pemanggilan sub-proses lain maka
STACK yang digunakan untuk menyimpan address saat ini semakin
penuh.
Rekursi (Lanjutan)
5.
Dalam sebuah sub-proses rekursif HARUS terdapat instruksi untuk
menghentikan proses rekursif pada suatu nilai tertentu.
6.
Besar-kecilnya ukuran STACK yang dipakai ditentukan oleh beberapa
faktor:
•
•
•
Tipe dari fungsi.
Jumlah variabel lokal di dalam fungsi.
Kompleksitas instruksi yang ada di dalam fungsi.
7.
Pengendalian terhadap alur proses rekursif sepenuhnya menjadi
tanggung jawab programmer.
8.
Dalam banyak hal, penggunaan fungsi rekursif lebih efisien
dibandingkan dengan looping. Kedua model perulangan ini bisa saling
dipertukarkan jika memungkinkan.
Rekursi dalam prosedur
SUB cetak(n)
Contoh #1
BEGIN
BENAR
SALAH
n>0
CALL cetak(3)
PRINT “Halo”
END
CALL cetak(n-1)
RETURN
Rekursi dalam fungsi
FUNCTION pangkat(a,b)
Contoh #2
hasil = 0
BEGIN
SALAH
BENAR
b == 0
PRINT pangkat(2,4)
hasil = a * pangkat(a,b-1)
hasil = 1
END
RETURN hasil
Latihan



Tuliskan fungsi untuk mengkonversikan harga karakter angka
(0..9) menjadi harga numerik sesuai dengan karakter yang
tertulis. Contoh: ‘8’8, ‘4’4
Tuliskan 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
Tuliskanlah fungsi, yang jika diberikan sebuah angka Cm yang
menyatakan panjang dalam cm, akan menghasilkan pasangan
harga <x1,x2> sesuai dengan rumus ukuran metris (1 m = 100
cm) sehingga x1*100+x2 = cm. Contoh:
 F(100) = <1,0>
 F(355) = <3,55>
32
Latihan



Tuliskan fungsi IsPrima(), yang mentest apakah
sebuah bilangan integer yang diberikan merupakan
bilangan prima atau bukan. Contoh:
IsPrima(2)true, IsPrima(15)false.
Tuliskan fungsi IsEven(), yang mentest apakah
sebuah bilangan integer yang diberikan merupakan
bilangan genap atau bukan. Contoh:
IsEven(43)false, IsEven(32)true.
Tuliskan fungsi IsOdd(), yang mentest apakah
sebuah bilangan integer yang diberikan merupakan
bilangan ganjil atau bukan. Contoh:
IsOdd(24)false, IsOdd(43)true.
33
Latihan


Tuliskanlah sebuah fungsi MAX2, yang menerima
masukan dua buah bilangan integer dan
menghasilkan sebuah bilangan integer yaitu salah
satu diantara nilai dua buah bilangan tersebut yang
terbesar.
Kemudian, dengan memakai fungsi MAX2, tuliskan
sebuah fungsi lain MAX3 yang menghasilkan nilai
terbesar dari tiga buah bilangan integer. 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 MAX3(MAX2(10,2),3)10
34
Latihan
Didefinisikan tipe terstruktur untuk mewakili hari seperti dalam
kalender yang kita pakai sehari-hari:
type nama: DATE<tanggal,bulan,tahun>
Tuliskan algoritma untuk:

Membaca sebuah tanggal dan sebuah kode bahasa penulisan
(1=Inggris, 2=Indonesia, 3=Perancis),

Menuliskan tanggal keesokan harinya sesuai dengan kode
bahasa.
 Inggris, DATE ditulis dalam: bulan,’/’,tanggal,’/’,tahun
 Indonesia, DATE ditulis dalam: tanggal,’-’,bulan,’-’,tahun
 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:
 NextDay(<13,4,1990>,1)4/14/1990
 NextDay(<30,1,1990>,2)31-1-1990
 NextDay(<31,12,1990>,1)1/1/1991
35
Latihan Rekursi
1. Menampilkan deret bilangan: cacah, genap, gasal, fibonacci
2. Menampilkan pola segitiga: pascal, genap, gasal
3. Perhitungan statistik: MAX, MIN, AVERAGE, TOTAL
4. Perhitungan matematika: perkalian, FPB, KPK
5. Menampilkan pola bintang
Any
Question?
Download