laporan praktikum viii kecerdasan buatan

advertisement
LAPORAN PRAKTIKUM VIII
KECERDASAN BUATAN
TEKNIK INFORMATIKA/S1
MUHAMMAD ABDULLAH AL MUWAHHID
135410025
LABORATORIUM TERPADU
SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN
KOMPUTER
AKAKOM
YOGYAKARTA
STRUKTUR DATA REKURSI
I. TUJUAN.
Tujuan dari bab ini adalah agar mahasiswa dapat mengetahui bagaimana bentuk dari
struktur data rekursi, bagaimana mekanismenya dan mengetahui salah satu bidang dari rekursi
yaitu rekursi ekor, agar dapat diimplementasikan ke dalam pengolaha data – data yang
kompleks.
II. DASAR TEORI
Prolog merupakan satu-satunya bahasa pemrograman yang digunakan secara luas yang
memperbolehkan mendefinisikan tipe struktur data rekursif. Salah satu tipe struktu data
rekursif yaitu struktur data pohon (tree). Pohon dalam Prolog dapat didefinsikan sebagai
berikut:
DOMAINS
tipepohon = pohon(string, tipepohon, tipepohon)
Deklarasi tersebut menyatakan bahwa sebuah pohon ditulis sebagai sebuah functor pohon
yang argumennya adalah sebuah string dan dua tambahan pohon lainnya. Berikut ini
merupakan contoh program untuk membuat struktur data pohon.
Untuk menjelajahi sebuah pohon, algoritma yang sering digunakan adalah:
- Jika pohon tersebut empty maka tidak melakukan apa-apa.
- Jika tidak, lakukan proses pada titik tersebut, kemudian jelajahi subpohon sebelah kiri,
kemudian jelajahi subpohon sebelah kanan.
Metode diatas biasa disebut dengan metode dfs(Depth First Search).
III. PEMBAHASAN.
1. PRAKTEK 1.
Pada praktek 1 ini dibahas mengenai rekursi untuk struktur pohon karakter pada nama –
nama orang. Berikut penjelasannya :
DOMAINS
tipepohon = pohon(string,tipepohon,tipepohon) ; empty()
Pada sisi domain, diinstan tipepohon dengan nilai berupa pohon(string, tipepohon,
tipepohon).
PREDICATES
buat_pohon(string, tipepohon)
sisip_kiri(tipepohon, tipepohon, tipepohon)
sisip_kanan(tipepohon, tipepohon, tipepohon)
bentuk_pohon(tipepohon)
Pada sisi predikat, diinstan beberapa predikat, yaitu buat_pohon dengan parameter string
dan tipepohon, selanjutnya terdapat sisip_kiri dengan parameter tipepohon, tipepohon,
tipepohon. Predikat terakhir yang diinstan adalah bentuk_pohon dengan predikat tipepohon.
CLAUSES
buat_pohon(A, pohon(A, empty, empty)).
Pada klausa diatas, diinstan bahwa buat_pohon berisi A dan fungsi pohon dengan parameter
A, empty, empty.
sisip_kiri(X, pohon(A,_,B), pohon(A,X,B)).
Klausa diatas adalah penginstanan sisip_kiri, dimana klausa tersebut berparameter X, fungsi
pohon(A,_, B) dan fungsi pohon(A, X, B). Dengan begitu penyisipan pada sisip_kiri akan
berada di antara parameter A & B pada fungsi pohon.
sisip_kanan(X, pohon(A,B,_), pohon(A,B,X)).
Klausa diatas adalah penginstanan sisip_kanan, dimana klausa tersebut berparameter X,
fungsi pohon(A,B, _) dan fungsi pohon(A, B, X). Dengan begitu penyisipan pada
sisip_kanan akan berada di sebelah kanan parameter B pada fungsi pohon.
bentuk_pohon(Ca3):buat_pohon("Charles",Ch),
buat_pohon("Hazel",H),
buat_pohon("Michael",Mi),
buat_pohon("Jim",J),
buat_pohon("Eleanor",E),
buat_pohon("Melody",Me),
buat_pohon("Cathy",Ca),
Klausa diatas merupakan penginisialisasian fungsi bentuk_pohon(), dimana diinisialisasi 7
nilai dari fungsi buat_pohon di dalam fungsi bentuk_pohon(), Ca3 pada parameter
bentuk_pohon merupakan indeks terakhir pemakaian struktur pohon.
Pada klausa – klausa berikutnya akan diinstan penginisialisasian tiap nilai dari fungsi
sisip_kiri dan sisip_kanan, dimana penginisialisasian ini dimulai dari level paling bawah.
sisip_kiri(Ch, Mi, Mi2),
Klausa diatas merupakan penginisialisasian sisip_kiri pertama dengan penyisipan charles,
dengan level diatasnya adalah 2 kode yaitu michael dan Mi2 yang digunakan untuk
pemanggilan rekursi berekor untuk fungsi berikutnya yang ingin menggunakan berikutnya.
sisip_kanan(H, Mi2, Mi3),
Klausa diatas merupakan penginisialisasian sisip_kanan pertama dengan penyisipan hazel,
dengan level diatasnya adalah 2 kode yaitu michael dan Mi2 yang digunakan untuk
pemanggilan rekursi berekor untuk fungsi berikutnya yang ingin menggunakan berikutnya.
sisip_kiri(J, Me, Me2),
Klausa diatas merupakan penginisialisasian sisip_kiri pertama dengan penyisipan Jim,
dengan level diatasnya adalah 2 kode yaitu Melody dan Me2 yang digunakan untuk
pemanggilan rekursi berekor untuk fungsi berikutnya yang ingin menggunakan berikutnya.
sisip_kanan(E, Me2, Me3),
Klausa diatas merupakan penginisialisasian sisip_kanan pertama dengan penyisipan
Eleanor, dengan level diatasnya adalah 2 kode yaitu Melody dan Me3 yang digunakan untuk
pemanggilan rekursi berekor untuk fungsi berikutnya yang ingin menggunakan berikutnya.
sisip_kiri(Mi3, Ca, Ca2),
Klausa diatas merupakan penginisialisasian sisip_kiri dengan penyisipan Michael, dengan
level diatasnya adalah Cathy, Ca2 ini digunakan untuk memberikan rekursi berekor terhadap
fungsi yang akan menggunakan fungsi ini berikutnya.
sisip_kanan(Me3, Ca2, Ca3).
Klausa diatas merupakan penginisialisasian sisip_kanan dengan penyisipan Melody, dengan
level diatasnya adalah Cathy, Ca3 ini digunakan untuk memberikan rekursi berekor terhadap
fungsi yang akan menggunakan fungsi ini berikutnya.
GOAL
bentuk_pohon(Pohon).
2. Latihan .
Latihan dibahas program mengenai pembentukan pohon karakter berurut dari inputan
sembarang. Adapun inputan berupa nama lengkap masing – masing mahasiswa. Berikut
penjelasan program :
DOMAINS
pohonchar = pohon(char, pohonchar, pohonchar); akhir
Pada sisi domain diinstan domain bernama pohonchar yang bernilai objek yaitu pohon(char,
pohonchar, pohonchar)
PREDICATES
nondeterm lakukan(pohonchar)
kerjakan(char, pohonchar, pohonchar)
buat_pohon(pohonchar, pohonchar)
sisip(char, pohonchar, pohonchar)
cetak_pohon(pohonchar)
nondeterm ulang
Pada sisi predikat diinstan 6 predikat, yaitu lakukan(), kerjakan(), buat_pohon(), sisip(),
cetak_pohon() dan ulang.
CLAUSES
lakukan(Pohon):ulang,nl,
write("*******************************************************"),nl,
write("Ketik 1 meng-update pohon\n"),
write("Ketik 2 mencetak pohon\n"),
write("Ketik 7 keluar\n"),
write("*******************************************************"),nl,
write("Masukkan angka - "),
readchar(X),nl,
kerjakan(X, Pohon, PohonBaru),
lakukan(PohonBaru).
Klausa diatas merupakan output untuk menampilkan informasi fungsi input user. Selanjutnya
user dapat memberikan sembarang input dengan perintah readchar(X). Perintah berikutnya
adalah kerjakan(X, Pohon, PohonBaru), fungsi ini digunakan untuk memproses langkah
berikutnya setelah user menginputkan sembarang angka.
Syarat terakhir dari lakukan(Pohon) adalah melakukan perintah lakukan(X) lagi, perintah ini
merupakan proses rekursi yang nantinya akan diulang hingga user menginputkan angka yang
memanggil perintah keluar dari fungsi tersebut.
kerjakan('1',Pohon,PohonBaru):write("Ketik karakter # untuk mengakhiri: "),
buat_pohon(Pohon, PohonBaru).
Kerjakan() dengan parameter 1 akan memanggil fungsi buat_pohon(). Fungsi ini nantinya
akan digunakan untuk membuat pohon baru.
kerjakan('2',Pohon,Pohon):cetak_pohon(Pohon),
write("\nTekan sembarang tombol"),
readchar(_),nl.
kerjakan('7', _, akhir):exit.
Kerjakan() dengan nilai 2 akan melakukan beberapa proses :

Pemanggilan fungsi cetak_pohon()

Pemanggilan perintah untuk input.

Pemanggilan fungsi kerjakan(X, _, akhir) dengan nilai X adalah 7.
buat_pohon(Pohon, PohonBaru):readchar(C),
C<>'#',!,
write(C, " "),
sisip(C, Pohon, PohonTemp),
buat_pohon(PohonTemp, PohonBaru).
buat_pohon(Pohon, Pohon).
Buat_pohon() memiliki beberapa perintah yang dilakukan:
Input data untuk variabel C
Pemrosesan variabel C pada buat_pohon()
Pemanggilan sisip() untuk variabel C.
Pemanggilan fungsi buat_pohon() dengan parameter PohonTemp dan PohonBaru. Ini
merupakan perintah dilakukannya rekursi ekor untuk mengurutkan karakter
sembarang.
Pemanggilan fungsi buat_pohon() dengan parameter Pohon dan Pohon, fungsi ini
merpuakan perintah dari rekursi untuk menetapkan karakter – karakter yang suddah
diurutkan sebelumnya,
sisip(Baru,akhir,pohon(Baru,akhir,akhir)):-!.
Perintah pemanggilan diatas merupakan indikasi bahwa fungsi sisip() dengan parameternya
tidak boleh kosong.
sisip(Baru,pohon(Elemen,Kiri,Kanan),pohon(Elemen,KiriBaru,Kanan)):Baru<Elemen,!,
sisip(Baru,Kiri,KiriBaru).
Pemanggilan fungsi sisip() diatas digunakan untuk melakukan penyisipan karakter untuk sisi
kiri dengan syarat karakter baru kurang dari elemen. Perintah selanjutnya adalah memanggil
fungsi sisip() lagi dengan parameter Baru, Kiri, dan KiriBaru.
sisip(Baru,pohon(Elemen,Kiri,Kanan),pohon(Elemen,Kiri,KananBaru)):sisip(Baru,Kanan,KananBaru).
Pemanggilan fungsi sisip() diatas dengan parameternya digunakan untuk menyisipkan
karakter ke sisi kanan dengam memanggil fungsi sisip() yang berparameter Baru, Kanan dan
KananBaru.
cetak_pohon(akhir).
Pemanggilan fungsi diatas digunakan untuk menampilkan akhir, dimana akhir merupakan
variabel yang didapat dari hasil pengurutan sebelumn - sebelumnya. Sedangkan akhir sendiri
penjelasan prosesnya akan diinstan di klausa berikutnya.
cetak_pohon(pohon(Item,Kiri,Kanan)):cetak_pohon(Kiri),
write(Item, " "),
cetak_pohon(Kanan).
Pemanggilan fungsi buat_pohon() diatas dengan parameter objek pohon() merupakan yang
nantinya akan digenerate ke variabel akhir memiliki beberapa perintah, yaitu pemanggilan
cetak_pohon() dengan parameter Kiri selanjutnya pemanggilan cetak_pohon() dengan
parameter Kanan yang akan diulang hingga karakter habis.
ulang.
ulang:-ulang.
Perintah ulang digunakan untuk melakukan pengulangan pada cetak_pohon.
Dari hasil yang tertera, berikut tampilan struktur pohonnya :
3. TUGAS.
Pada TUGAS, dibuat program menggunakan prolog untuk membuat struktur instansi yang
berada di kampus STMIK akakom, berikut adalah struktur pohonnya :
Adapun skrip dari visual prolognya adalah sebagai berikut :
DOMAINS
tipepohon = pohon(string,tipepohon,tipepohon) ; empty()
PREDICATES
buat_pohon(string, tipepohon)
sisip_kiri(tipepohon, tipepohon, tipepohon)
sisip_kanan(tipepohon, tipepohon, tipepohon)
bentuk_pohon(tipepohon)
CLAUSES
buat_pohon(A, pohon(A, empty, empty)).
sisip_kiri(X, pohon(A,_,B), pohon(A,X,B)).
sisip_kanan(X, pohon(A,B,_), pohon(A,B,X)).
bentuk_pohon(Kt2):buat_pohon("Ketua",Kt),
buat_pohon("Puket1",P1k),
buat_pohon("Puket2",P2k),
buat_pohon("TI",Ti),
buat_pohon("SI",Si),
buat_pohon("Pegawai",Pg),
buat_pohon("Keuangan",Ku),
buat_pohon("ACC",Ac),
buat_pohon("Mahasiswa",Mh),
buat_pohon("Edukasi",Ed),
buat_pohon("NonEdukasi",No),
sisip_kiri(Ti, P1k, P1k2),
sisip_kanan(Si, P1k2, P1k3),
sisip_kiri(P1k3, Kt, Kt1),
sisip_kiri(Ed, Pg, Pg1),
sisip_kanan(No, Pg1, Pg2),
sisip_kiri(Pg2, P2k, P2k1),
sisip_kanan(Ku, P2k1, P2k2),
sisip_kanan(P2k2, Kt1, Kt2).
GOAL
bentuk_pohon(Pohon).
HASIL :
IV. KESIMPULAN.
Dari bab ini dapat disimpulkan, pada turbo prolog dapat menginisialisasi pembentukan
fungsi yang digunakan untuk membuat struktur data rekursi, dengan pemanggilan fungsi
berulang di dalam fungsi tersebut. Fungsi tersebut biasa disebut dengan rekursi ekor.
V. LISTING.
Terlampir.
Download