MAX2 dan MAX3
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 } 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 }
menghasilkan b jika b > a }
KAMUS LOKAL
ALGORITMA
depend on (a,b) a≥b:→a b>a:→b
function MAX3 (a, b, c : real) → real { Diberikan a, b, dan c, menghasilkan a jika a ≤ b dan a ≤ c, menghasilkan b jika b ≤ a dan b ≤ c, menghasilkan c jika c ≤ b dan c ≤ a }
KAMUS LOKAL
ALGORITMA
→ MAX2 (MAX2(a,b),c)
function MAX3BIS (a, b, c : real) → real { Diberikan a, b, dan c, menghasilkan a jika a ≤ b dan a ≤ c, menghasilkan b
jika b ≤ a dan b ≤ c, menghasilkan c jika c ≤ b dan c ≤ a }
KAMUS LOKAL
ALGORITMA
→ MAX2 (a,MAX2(b,c))
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
Program PENANGGALAN
KAMUS
type Tanggal : integer [1..31] type Bulan : integer [1..12] type Tahun : integer > 0 type DATE : < DD : Tanggal, MM : Bulan, YY : Tahun >
HariIni, Esok : DATE KodeBahasa : integer [1..3]
function NEXTDAY (Now : DATE) → DATE { Mengirimkan keesokan hari dari Now }
ALGORITMA
input (HariIni, KodeBahasa) { membaca <Tanggal,Bulan,Tahun> dan
Kodebahasa}
Esok ← NEXTDAY(HariIni) depend on KodeBahasa
KodeBahasa = 1 : output (Esok.MM, ”/”, Esok.DD, ”/”, Esok.YY) KodeBahasa = 2 : output (Esok.DD, ”-”, Esok.MM, ”-”, Esok.YY) KodeBahasa = 3 : output (Esok.DD, ”/”, Esok.MM, ”/”, Esok.YY)
function NEXTDAY (Now : DATE) → DATE
{ Menerima Now dan menghasilkan tanggal keesokan hari dari Now }
KAMUS LOKAL
function Kabisat (yy : integer) → boolean { true jika yy adalah tahun kabisat }
ALGORITMA
depend on (Now.MM) Now.MM = 2 : { bulan Februari, kasus kabisat dan bukan } depend on Now.DD
Now.DD < 28 : → <Now.DD+1,Now.MM,Now.YY> Now.DD = 28 :
depend on Now.YY not Kabisat(Now.YY) : → <1,Now.MM+1,Now.YY> Kabisat(Now.YY) : → <Now.DD+1,Now.MM,Now.YY>
Now.DD = 29 : → <1,Now.MM+1,Now.YY>
Now.MM = 12 : { mungkin pergantian tahun } depend on Now.DD
Now.DD < 31 : → <Now.DD+1,Now.MM,Now.YY> Now.DD = 31 : → <1,1,Now.YY + 1>
Now.Bulan ∈ [1,3,5,7,8,10] : { sebulan ada 31 hari } depend on Now.DD
Now.DD < 31 : → <Now.DD+1,Now.MM,Now.YY> Now.DD = 31 : → <1,Now.MM+1,Now.YY>
Now.Bulan ∈ [4,6,9,11] : { sebulan ada 30 hari } depend on Now.DD
Now.DD < 30 : → <Now.DD+1,Now.MM,Now.YY> Now.DD = 30 : → <1,Now.MM+1,Now.YY>
Soal untuk algoritma di atas:
- Tuliskanlah definisi fungsi KABISAT dan algoritmanya. - Buat analisis kasus yang lain dari yang dituliskan pada fungsi NEXTDAY di atas,
dengan mulai menganalisis tanggal dan bukan bulan. - Buatlah kode program dari fungsi Nextday yang sama dengan hanya melakukan
komputasi aritmatika, seperti halnya pada perhitungan Durasi yang dibahas pada kalkulasi Type terstruktur JAM (pada penjelasan sequence).