Anda di halaman 1dari 8

LAPORAN PRAKTIKUM 6

Binary Tree

Disusun untuk Memenuhi Matakuliah Praktikum Pemrograman Deklaratif


Dibimbing oleh Ibu Kartika Candra Kirana, S.Pd., M.Kom.

Oleh :
Mohamad Firzon Ainur Roziqin (180535632548)

S1 TI’18 OFF B

UNIVERSITAS NEGERI MALANG


FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
PRODI S1 TEKNIK INFORMATIKA
MARET 2020
1. Menguji Keabsahan Representasi Binary Tree
a. Source code

%Binary tree

%4.01

isTree(nil).

isTree(t(_,nil,nil)) :- !.

isTree(t(_,L,nil)) :- isTree(L).

isTree(t(_,nil,R)) :- isTree(R).

isTree(t(_,L,R)) :- isTree(L), isTree(R), !.

b. Menjalankan Program dan Analisis


 Program 1

isTree(nil).

true.

Yang dijalankan baris 1

 Program 2

[trace] ?- isTree(t(a,t(b,nil,nil),nil)).

Call: (10) isTree(t(a, t(b, nil, nil), nil)) ? creep

Call: (11) isTree(t(b, nil, nil)) ? creep

Keterangan : diambil node yang paling bawah, yang dijalankan baris ke 2

Exit: (11) isTree(t(b, nil, nil)) ? creep

Keterangan : benar sehingga dikeluarkan

Exit: (10) isTree(t(a, t(b, nil, nil), nil)) ? creep

Keterangan : diambil node diatasnya, dan yang dijalankan baris ke 4 dan di cek nill
yang terakhir sebagai tree di bagian kiri

true .
 Program 3

[trace] ?- isTree(t(a,t(b,nil,nil))).

Call: (10) isTree(t(a, t(b, nil, nil))) ? creep

Keterangan : di cek di semua baris apakah node parent memuat 2 node, namun
pada baris ke 4 di program tidak memenuhi karena pada node parents hanya
memiliki 1 anak node sehingga bernilai false

Fail: (10) isTree(t(a, t(b, nil, nil))) ? creep

false

b nil

nil Nil

2. Membuat Balanced Binary Tree


a. Source kode

%4.02

cBalTree(0,nil):- !.

cBalTree(A,t(x,L,R)) :- A > 0, B is A - 1 , C is B//2, D is B - C,

distrib(C,D,NL,NR), cBalTree(NL,L), cBalTree(NR,R).

distrib(N,N,N,N) :- !.

distrib(A,B,A,B).

distrib(A,B,B,A).
b. Menjalankan Program dan Analisis
 Program 1

[trace] ?- cBalTree(0,nil).

Call: (10) cBalTree(0, nil) ? creep

Exit: (10) cBalTree(0, nil) ? creep

true.

 Program 2

[trace] ?- cBalTree(2,N).

Call: (12) cBalTree(2, _6664) ? creep // dijalankan baris pertama

Call: (13) 2>0 ? creep // dijalankan baris kedua, A=2, B = A-1, C= B//2, maka jika
A> 0 berarti 2>0 sehingga bernilai true

Exit: (13) 2>0 ? creep

Call: (13) _6912 is 2+ -1 ? creep // dijalankan baris 2 yaitu B=A-1 maka nilai B=1

Exit: (13) 1 is 2+ -1 ? creep

Call: (13) _6918 is 1//2 ? creep //dijalankan baris 2 B//2 maka hasilnya 1//2,
maka diambil integernya yaitu 0

Exit: (13) 0 is 1//2 ? creep // kembali ke baris pertama, karena nilainya 0 maka
program akan berpindah ke distrib

Call: (13) _6924 is 1-0 ? creep //

Exit: (13) 1 is 1-0 ? creep

Call: (13) distrib(0, 1, _6928, _6930) ? creep

Exit: (13) distrib(0, 1, 0, 1) ? creep

Call: (13) cBalTree(0, _6886) ? creep

Exit: (13) cBalTree(0, nil) ? creep

Call: (13) cBalTree(1, _6888) ? creep

Call: (14) 1>0 ? creep


Exit: (14) 1>0 ? creep

Call: (14) _6938 is 1+ -1 ? creep

Exit: (14) 0 is 1+ -1 ? creep

Call: (14) _6944 is 0//2 ? creep

Exit: (14) 0 is 0//2 ? creep

Call: (14) _6950 is 0-0 ? creep

Exit: (14) 0 is 0-0 ? creep

Call: (14) distrib(0, 0, _6954, _6956) ? creep

Exit: (14) distrib(0, 0, 0, 0) ? creep

Call: (14) cBalTree(0, _6912) ? creep

Exit: (14) cBalTree(0, nil) ? creep

Call: (14) cBalTree(0, _6914) ? creep

Exit: (14) cBalTree(0, nil) ? creep

Exit: (13) cBalTree(1, t(x, nil, nil)) ? creep

Exit: (12) cBalTree(2, t(x, nil, t(x, nil, nil))) ? creep

N = t(x, nil, t(x, nil, nil)) .

3. Membuat Symmetric Binary Tree


a. Source kode

%4.03

simetris(nil).

simetris(t(_,L,R)) :- mirror(L,R).

mirror(nil, nil).

mirror(t(_,L1,R1),t(_,L2,R2)) :-mirror(L1,R2), mirror(R1,L2).


b. Menjalankan Program dan Analisis
 Program 1

[trace] ?- simetris(N).

Call: (12) simetris(_6782) ? creep

Exit: (12) simetris(nil) ? creep // baris pertama yang dijalankan

N = nil . //maka N=Nil atau node

[trace] ?- simetris(N).

Call: (12) simetris(_7286) ? creep

Exit: (12) simetris(nil) ? creep //yang dijalankan baris pertama

N = nil ; //diberi “;” untuk mengulang program ke baris pertama dengan alamat
yang sama

Redo: (12) simetris(_7286) ? creep // dijalnakan baris pertama

Call: (13) mirror(_7502, _7504) ? creep //dijalankan baris ke 3

Exit: (13) mirror(nil, nil) ? creep

Exit: (12) simetris(t(_7500, nil, nil)) ? creep //dijalankan baris ke -4

N = t(_7500, nil, nil) // maka di dapatkan tree dengan jumlah cabang 2


 Program 2

[trace] ?- mirror(C,D).

Call: (12) mirror(_7286, _7288) ? creep //masuk baris ke-3

Exit: (12) mirror(nil, nil) ? creep // benar maka program dikeluarkan

C = D, D = nil ;

Redo: (12) mirror(_7286, _7288) ? creep // disiapkan alamat pertama

Call: (13) mirror(_7542, _7552) ? creep //disiapkan alamat kedua

Exit: (13) mirror(nil, nil) ? creep

Call: (13) mirror(_7544, _7550) ? creep // disiapkan alamat untuk variabel C

Exit: (13) mirror(nil, nil) ? creep

Exit: (12) mirror(t(_7540, nil, nil), t(_7548, nil, nil)) ? creep // disiapkan alamat
untuk variabel D

C = t(_7540, nil, nil), // maka dikembalikan dan digabung ke baris ke 4

D = t(_7548, nil, nil) // maka dikembalikan dan digabung ke baris ke 4


4. Binary Search Tree
a. Source Kode

[trace] ?- construct([1,2],T).

Call: (12) construct([1, 2], _942) ? creep

Call: (13) construct([1, 2], _942, nil) ? creep

Call: (14) add(1, nil, _1192) ? creep

Exit: (14) add(1, nil, t(1, nil, nil)) ? creep

Call: (14) construct([2], _942, t(1, nil, nil)) ? creep

Call: (15) add(2, t(1, nil, nil), _1200) ? creep

Call: (16) 2@<1 ? creep

Fail: (16) 2@<1 ? creep

b. Menjalankan Program dan analisis


 Program 1
[trace] ?- construct([1,2],T).

Call: (12) construct([1, 2], _942) ? creep // masuk baris 4 dan menyiapkan alamat untuk variabel T

Call: (13) construct([1, 2], _942, nil) ? creep // set nilai L dan T pada baris ke 4 serta set nill

Call: (14) add(1, nil, _1192) ? creep //nilai L=X jadi dijalankan pada baris pertama

Exit: (14) add(1, nil, t(1, nil, nil)) ? creep // dijalankan baris kedua

Call: (14) construct([2], _942, t(1, nil, nil)) ? creep //dijalankan baris kelima

Call: (15) add(2, t(1, nil, nil), _1200) ? creep // dijalankna baris ke 2

Call: (16) 2@<1 ? creep // nilai X=2, maka dijalankna baris 2 , dan nilai Ro bernilai 1

Fail: (16) 2@<1 ? creep //bernilai false.

Redo: (15) add(2, t(1, nil, nil), _1200) ? creep //diulang kembali

Call: (16) 2@>1 ? creep

Exit: (16) 2@>1 ? creep

Call: (16) add(2, nil, _1186) ? creep

Exit: (16) add(2, nil, t(2, nil, nil)) ? creep

Exit: (15) add(2, t(1, nil, nil), t(1, nil, t(2, nil, nil))) ? creep

Call: (15) construct([], _942, t(1, nil, t(2, nil, nil))) ? creep

Exit: (15) construct([], t(1, nil, t(2, nil, nil)), t(1, nil, t(2, nil, nil))) ? creep
Exit: (14) construct([2], t(1, nil, t(2, nil, nil)), t(1, nil, nil)) ? creep

Exit: (13) construct([1, 2], t(1, nil, t(2, nil, nil)), nil) ? creep

Exit: (12) construct([1, 2], t(1, nil, t(2, nil, nil))) ? creep

T = t(1, nil, t(2, nil, nil)) ;

Redo: (16) add(2, nil, _1186) ? creep

Fail: (16) add(2, nil, _1186) ? creep

Fail: (15) add(2, t(1, nil, nil), _1200) ? creep

Fail: (14) construct([2], _942, t(1, nil, nil)) ? creep

Redo: (14) add(1, nil, _1192) ? creep

Fail: (14) add(1, nil, _1192) ? creep

Fail: (13) construct([1, 2], _942, nil) ? creep

Fail: (12) construct([1, 2], _942) ? creep

false.

Anda mungkin juga menyukai