Anda di halaman 1dari 7

Praktikum4/11S22038-DasPro

LISP: Tipe Bentukan Pecahan

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 }

DEFINISI DAN SPESIFIKASI KONSTRUKTOR


makeP : integer >=0, integer > 0 → pecahan
{ makeP (a, b) merupakan fungsi bentukan/ konstruktor untuk membuat pecahan dari
dua buah bilangan bulat }

REALISASI LISP UNTUK KONSTRUKTOR


(defun makeP (a b)
(cons a(cons b nil)
)
APLIKASI
⇒ (setq P1 (makeP 3 4))
(3 4)
⇒ (makeP 4 5)
(4 5)
⇒ (makeP 3 6)
(3 6)
⇒ (makeP 8 9)
(8 9)
⇒ (makeP 1 9)
(1 9)
⇒ (makeP 3 2)
(3 2)
Praktikum4/11S22038-DasPro
LISP: Tipe Bentukan Pecahan

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))

REALISASI LISP UNTUK SELEKTOR


(defun pembilang(P)
(car P)
)
(defun 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}

SubP : 2 list pecahan → list


{ SubP (P1, P2) adalah fungsi untuk mengurangkan dua buah bilangan pecahan P1 P2,
dimana hasil pengurangan pecahan adalah pengurangan hasil perkalian antara pembilang
P1 dengan penyebut P2 dan penyebut P1 dengan pembilang P2 dibagi dengan hasil
perkalian antara penyebut P1 dengan penyebut P2}

MulP : 2 list pecahan → list


{ MulP (P1, P2) adalah fungsi untuk mengalikan dua buah bilangan pecahan P1 P2,
dimana hasil perkalian pecahan adalah perkalian pembilang P1 dengan pembilang P2
dibagi dengan perkalian penyebut P1 dengan penyebut P2}

DivP : 2 list pecahan → list


{ DivP (P1, P2) adalah fungsi untuk membagikan dua buah bilangan pecahan P1 P2,
dimana hasil pembagian pecahan adalah perkalian pembilang P1 dengan penyebutP2
dibagi dengan perkalian penyebut P1 dengan pembilang P2}

REALISASI
AddP (P1 P2) : ((a1*b2 + b1*a2)/(b1*b2))

SubP (P1 P2) : ((a1*b2 - b1*a2)/(b1*b2))

MulP (P1 P2) : ((a1*a2)/(b1*b2))

DivP (P1 P2) : ((a1*b2)/(b1*a2))

REALISASI LISP PENJUMLAHAN


(defun AddP(P1 P2)
(makeP (+ (* (pembilang P1)(penyebut P2))
(* (pembilang P2)(penyebut P1)))
(* (penyebut P1)(penyebut P2)))
)
Praktikum4/11S22038-DasPro
LISP: Tipe Bentukan Pecahan

3. Operator

REALISASI LISP PENGURANGAN


(defun SubP(P1 P2)
(makeP (- (* (pembilang P1)(penyebut P2))
(* (pembilang P2)(penyebut P1)))
(* (penyebut P1)(penyebut P2)))
)

REALISASI LISP PERKALIAN


(defun MulP(P1 P2)
(makeP (* (pembilang P1)(pembilang P2))
(* (penyebut P1)(penyebut P2)))
)

REALISASI LISP PEMBAGIAN


(defun DivP(P1 P2)
(makeP (* (pembilang P1)(penyebut P2))
(* (penyebut P1)(pembilang P2)))
)

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

4. Predikat (Operator Rasional Pecahan)


Predikat adalah fungsi yang digunakan untuk menentukan kesamaan dari dua buah
bilangan pecahan serta juga dapat digunakan untuk membandingkan nilai dari dua buah
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 }

isLtP : 2 list pecahan → Boolean


{ isltp (P1, P2) adalah fungsi untuk membandingkan nilai dari buah pecahan yang
dibentuk. Apabila pecahan P1 lebih kecil dari pecahan P2 maka keluaran yang diberikan
bernilai benar }

REALISASI
isEqP (P1 P2) :
if ((pembilang P1/penyebut P1) =
(pembilang P2/penyebut P2))
then true
else nil

isLtP (P1 P2) :


if ((pembilang P1/penyebut P1) <
(pembilang P2/penyebut P2))
then true
else nil

REALISASI LISP ISEQP


(defun iseqp(P1 P2)
(= (/ (pembilang P1)(penyebut P1))
(/ (pembilang P2)(penyebut P2))
)
)

REALISASI LISP ISLTP


(defun isltp(P1 P2)
(< (/ (pembilang P1)(penyebut P1))
(/ (pembilang P2)(penyebut P2))
)
)
Praktikum4/11S22038-DasPro
LISP: Tipe Bentukan Pecahan

4. Predikat (Operator Rasional Pecahan)


APLIKASI ISEQP
⇒ (iseqp (makeP 2 3)(makeP 1 4))
NIL
⇒ (iseqp (makeP 2 3)(makeP 4 6))
T
⇒ (iseqp (makeP 1 3)(makeP 4 6))
NIL
⇒ (iseqp (makeP 1 3)(makeP 5 15))
T
⇒ (iseqp (makeP 6 9)(makeP 5 15))
NIL
⇒ (iseqp (makeP 6 9)(makeP 12 18))
T
⇒ (iseqp (makeP 5 7)(makeP 12 18))
NIL
⇒ (iseqp (makeP 5 7)(makeP 15 21))

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

Anda mungkin juga menyukai