Senin, 08 April 2013

ADT Persoalan


 ADT POINT
Type adalah himpunan nilai dan sekumpulan operator terdefinisi terhadap type tersebut.
Type Point terdiri dari <absis,ordinat> bertype <integer,integer>. Untuk menyatakan nilai suatu point yang didefinisikan oleh tuple <x: integer, y: integer>, dipakai notasi : <0,0> sebagai titik Origin, <1,2> untuk titik dengan x=2 dan y=2.
Dalam LISP, tuple nilai suatu type bentukan dinyatakan dalam bentuk list. Karena list adalah salah satu symbol dasar dalam LISP, tidak ada realisasi definisi type.
Selektor  direalisasikan sebagai fungsi untuk mengakses komponen-komponen list.
Contoh :
Absis : Point = > real
            Absis (P) memberikan absis dr point P
;Realisasi Selektor
(defun Absis(P) (car P)
(defun Ordinat(P) (car (cdr P)))
Konstruktor  direalisasikan sebagai fungsi untuk membentuk list.
Contoh :
MakePoint (a,b) membentuk sebuah point dari a dan b dengan a sebagai absis dan b sebagai ordinat.
            (defun makepoint(a b) (list a b))


Predikat direalisasikan sebagai fungsi yang menghasilkan nilai Boolean.
Contoh :
Isorigin? :
            IsOrigin? (P) benar jika P adalah titik origin yaitu <0,0>
(defun IsOrigin? (P)
            (and     (= (absis P) 0)
                        (= (ordinat P) 0)
            )
)
Fungsi Lain yang didefinisikan, dibuat spesifikasinya dan harus direalisasi untuk type tersebut, yang akan berlaku sebagai “operator” terhadap type tersebut.
Contoh :
(defun Kuadran(P)
            (cond   ((and (> (Absis P) 0) (> (ordinat P) 0)) 1)
                        ((and (< (Absis P) 0) (> (ordinat P) 0)) 2)
                        ((and (> (Absis P) 0) (< (ordinat P) 0)) 3)
                        ((and (< (Absis P) 0) (< (ordinat P) 0)) 4)

 ADT Pecahan
Type pecahan terdiri dari  <pembilang, penyebut> yang bernilai  <integer, integer>.  Numerator (pembilang) dan (denumerator) adalah penyebut. Penyebut sebuah pecahan tidak boleh nol.
Selektor  Pecahan :
(defun pemb(n)
            (car n) )
“Pemb(p) memberikan numerator pembilang n dari pecahan tsb.”
(defun peny(n)
            (car (cdr n)) )
“Peny: pecahan bertype integer >0”
“Peny(P) memberikan denumerator penyebut d dari pecahan tersebut.”




Konstruktor Pecahan membuat type data pecahan suatu list bilangan, missal (1 2) è ½.
(defun makep(x y)
            (cond   ((= y 0) "format penyebut tidak boleh nol")
                        (t (cons x (cons y nil))) 
            )
)
Konstruktor Predikat
Predikat adalah ekspresi yang akan menghasilkan true atau false bila dievaluasi.
Contoh :
IsLtp? : 2 pecahan => Boolean
Membandingkan dua buah pecahan, apakah p1 lebih kecil nilainya dari p2: n1/d1 < n2/d2 jika dan hanya jika n1d2 < n2d1.
Isltp? (P1,P2)
            Pemb (P1) * Peny (P2) < Peny (P1)* Pemb(P2)

ADT Date
Type Date
Type date <d : Hr, m : Bln, y : Thn>
Spesifikasi Type
(defun Hr(h) (car h))
;h = 1…31
(defun Bln(b) (car b))
;b = 1..12
(defun Thn(th) (car th))
;thn >0
            ; Definisi diatas hanyalah untuk “menamakan” type integer  dg daerah nilai trtentu tuk mewakili hari/bulan/tahun  shg dapat memeriksa apakah nilai integer trsebut mewakili hari yg absah.



Selektor Date
(defun day(tgl) (car tgl))
”Day(D) mmberikan hari d dari D yang terdiri dari <d,m,y>
(defun month(tgl) (car (cdr tgl)))
            “month(D) mmberikan bulan m dari D yang terdiri dari <d,m,y>
(defun year(tgl) (car (car (cdr tgl))))
            “year(D) memberikan tahun y dari D yang terdiri dari <d,m,y>
Konstruktor Date
Membentuk date dari tanggal h, bulan b dan tahun t yang berupa list.
(defun makedate(h b th)
            (cond ((= th 0) "tidak boleh nol")
                        (t (cons h (cons b (cons th nil))))
            )
)

Predikat Date
Predikat direalisasikan sebagai fungsi  nilai Boolean  yang akan menghasilkan true atau false bila dievaluasi.
Contoh :
(defun iskabisat(a)
            (cond ((or (and (= (mod a 4) 0) (= (mod a 100) 0))
                  (=(/ a 400) 0)))
             (t nil)
            )
)
            ; IsKabisat (a) true jika tahun 1900+a habis dibagi 4 tetapi tidak habis dibagi 100, atau habis dibagi 400.

.

0 komentar:

Posting Komentar