NIM : 11S22038
Nama : Yizreel Schwartz Sipahutar
Kelas : 11IF2
Video Source Code : https://youtu.be/Q33cQwQALLQ
Tantangan Praktikum :
Buatlah tipe bentukan Pecahan, untuk mengolah tipe bilangan pecahan. Bilangan pecahan
adalah bilangan yang dinyatakan dengan a/b atau pembilang dan penyebut, dimana a dan b
adalah bilangan bulat.
1. Konstruktor
makeP (a, b) merupakan fungsi bentukan/ konstruktor untuk membuat pecahan dari dua
buah bilangan bulat.
Constructor
DEFINISI DAN SPESIFIKASI TYPE
type pecahan: <a : integer >=0, b : integer >> {<a : integer >=0, b : integer >0>
{ a adalah pembilang (numerator) dan b adalah penyebut (denumerator). Penyebut
sebuah pecahan tidak boleh bernilai nol agar pecahan tersebut dapat terdefenisi }
2. Selektor
Selektor berfungsi untuk memilih atau mengembalikan nilai tertentu dari fungsi dalam tipe
bentukan yang dibuat.
Selektor
DEFINISI DAN SPESIFIKASI SELEKTOR
pembilang : pecahan → integer >=0
{ pembilang (P) memberikan nilai dari pembilang (numerator) a dari dari pecahan
yang dibentuk }
penyebut : pecahan → integer >0
{ penyebut(P) memberikan nilai dari penyebut (denumerator) b dari pecahan yang
dibentuk }
REALISASI
pembilang (P) = car (P)
penyebut (P) = car (cdr P))
APLIKASI
⇒ (pembilang (makeP 3 7))
3
⇒ (penyebut (makeP 3 7))
7
⇒ (penyebut (makeP 5 6))
6
⇒ (pembilang (makeP 5 6))
5
⇒ (pembilang (makeP 3 4))
3
⇒ (penyebut (makeP 3 4))
4
Praktikum4/11S22038-DasPro
LISP: Tipe Bentukan Pecahan
3. Operator
Operator berfungsi untuk menentukan hasi dari penjumlahan, pengurangan, perkalian, dan
pembagian untuk bilangan pecahan yang sudah dibentuk
Operator
DEFINISI DAN SPESIFIKASI OPERATOR TERHADAP PECAHAN
AddP : 2 list pecahan → list
{ AddP (P1, P2) adalah fungsi untuk menjumlahkan dua buah bilangan pecahan P1 P2,
dimana hasil penjumlahan pecahan adalah penjumlahan hasil perkalian antara pembilang
P1 dengan penyebut P2 dan penyebut P1 dengan pembilang P2 dibagi dengan hasil
perkalian antara penyebut P1 dengan penyebut P2}
REALISASI
AddP (P1 P2) : ((a1*b2 + b1*a2)/(b1*b2))
3. Operator
APLIKASI PENJUMLAHAN
⇒ (AddP (makeP 2 3)(makeP 3 4))
(17 12)
⇒ (AddP (makeP 1 4)(makeP 5 6))
(26 24)
⇒ (AddP (makeP 7 12)(makeP 3 9))
(99 108)
⇒ (AddP (makeP 1 9)(makeP 7 3))
(66 27)
⇒ (AddP (makeP 5 2)(makeP 6 4))
(32 8)
APLIKASI PENGURANGAN
⇒ (SubP (makeP 3 4)(makeP 6 7))
(-3 28)
⇒ (SubP (makeP 1 4)(makeP 3 7))
(-5 28)
⇒ (SubP (makeP 10 4)(makeP 2 5))
(42 20)
⇒ (SubP (makeP 3 2)(makeP 1 5))
(13 10)
⇒ (SubP (makeP 9 2)(makeP 1 7))
(61 14)
Praktikum4/11S22038-DasPro
LISP: Tipe Bentukan Pecahan
3. Operator
APLIKASI PERKALIAN
⇒ (MulP (makeP 3 2)(makeP 2 7))
(6 14)
⇒ (MulP (makeP 1 6)(makeP 2 3))
(2 18)
⇒ (MulP (makeP 5 7)(makeP 9 3))
(45 21)
⇒ (MulP (makeP 3 8)(makeP 2 6))
(6 48)
⇒ (MulP (makeP 1 7)(makeP 7 8))
(7 56)
APLIKASI PEMBAGIAN
⇒ (DivP (makeP 1 7)(makeP 7 8))
(8 49)
⇒ (DivP (makeP 2 3)(makeP 4 6))
(12 12)
⇒ (DivP (makeP 9 8)(makeP 2 4))
(36 16)
⇒ (DivP (makeP 7 6)(makeP 6 8))
(56 36)
⇒ (DivP (makeP 6 6)(makeP 7 7))
(42 42)
Praktikum4/11S22038-DasPro
LISP: Tipe Bentukan Pecahan
Predikat
DEFINISI DAN SPESIFIKASI PREDIKAT
isEqP : 2 list pecahan → boolean
{ iseqp (P1, P2) adalah fungsi untuk menetukan apakah dua bilangan pecahan memiliki
nilai yang sama, atau senilai }
REALISASI
isEqP (P1 P2) :
if ((pembilang P1/penyebut P1) =
(pembilang P2/penyebut P2))
then true
else nil
APLIKASI ISLTP
⇒ (isltp (makeP 1 3)(makeP 2 7))
NIL
⇒ (isltp (makeP 4 3)(makeP 2 7))
NIL
⇒ (isltp (makeP 1 5)(makeP 2 7))
T
⇒ (isltp (makeP 1 5)(makeP 8 9))
T
⇒ (isltp (makeP 3 7)(makeP 8 9))
T
⇒ (isltp (makeP 8 7)(makeP 2 9))
NIL