Labotarorium Komputasi Program Studi Teknik Informatika Fakultas Teknologi Industri Universitas Atma Jaya Yogyakarta
MODUL II Assignment, Input‐Output, Conditional Assignment •
Assignment Î memberikan suatu nilai kepada suatu variable (nilai tersebut bisa bertipe data integer, string, maupun tipe data yang lain). Contoh sederhana untuk tipe data integer : A = 5 berarti ada suatu variable ‘A’ dengan tipe data integer. A = 5 Î berarti nilai di dalam variable ‘A’ tersebut adalah 5.
•
Di dalam visual prolog, assignment sederhana tersebut dapat dituliskan: (save as program dibawah ini dengan nama demo1.pro) domains
angka = integer
predicates
assign(angka,angka)
clauses
assign(X,Y) :‐ Y=X. % X akan di‐assign‐kan ke Y jika Y=X
goal
assign(5,I).
atau bisa juga X=Y
hasil Î I=5
1 solution
penjelasan: -
Mendeklarasikan suatu variable domain ‘angka’ bertipe integer.
-
Lalu dibuat suatu predikat berisi dua argumen ‘angka’ tersebut.
-
Di dalam clauses, X akan di‐assign‐kan ke Y jika Y = X.
-
assign(5,I) Î berarti berdasarkan aturan yang sudah ada di clauses, nilai 5 di assign (dimasukkan) ke dalam I.
Sehingga jika di test goal akan menghasilkan nilai variable I = 5.
Labotarorium Komputasi Program Studi Teknik Informatika Fakultas Teknologi Industri Universitas Atma Jaya Yogyakarta
Input‐Output •
Fungsi masukan dan keluaran (I/O atau Input/Output) dalam Prolog yaitu WRITE dan READ. Fungsi WRITE digunakan untuk menulis nilai atau ekspresi, sedangkan fungsi READ digunakan untuk menerima masukan dari keyboard.
Contoh : (save as program dibawah ini dengan nama demo2.pro) predicates
eksekusi
clauses
eksekusi:‐
write("tuliskan sebuah kata : "),readln(X),
write("kata yang saya ketik tadi adalah "), write(X),nl.
goal
eksekusi.
penjelasan: •
‘eksekusi’ merupakan deklarasi predikat.
•
Karena goal menjalankan ‘eksekusi’, maka program akan menjalankan urutan eksekusi yang ada pada clauses.
•
Saat Test goal, perintah write akan memunculkan “tuliskan sebuah kata : “ pada layar.
•
Setelah user menginputkan suatu kata (dan tekan Enter), maka kata tersebut akan dimasukkan ke dalam variable ‘X’.
•
Kemudian pada layar muncul “kata yang saya ketik tadi adalah “ lalu perintah write(X) akan menampilkan isi dari variable ‘X’ tersebut.
NB: syntax nl adalah untuk ganti baris. Conditional
Labotarorium Komputasi Program Studi Teknik Informatika Fakultas Teknologi Industri Universitas Atma Jaya Yogyakarta
•
Aksi kondisional mengandung dua aksi, aksi pertama harus suatu pengamatan. Hasil dari pengamatan ini adalah suatu keadaan benar (“true”) atau salah (“false”). Aksi kedua menghasilkan kejadian berlangsung sesuai dengan hasil pengamatan. Jika pengamatan memberikan hasil “true” maka aksi terjadi, jika pengamatan memberikan hasil “false” maka aksi tidak dilakukan.
•
Misalnya: seseorang akan pergi ke kampus menggunakan jenis kendaraan tergantung kondisi cuaca saat itu: Jika cuaca cerah, naik motor Jika cuaca hujan, naik mobil Pertama, melakukan pengamatan apakah cuacanya cerah?, jika iya (“true”), maka melakukan aksi yaitu naik motor,dan sebaliknya.
Berikut ini contoh program sederhana untuk membedakan suatu bilangan: (save as program dibawah ini dengan nama demo3.pro)
predicates
nondeterm bilangan(integer)
clauses
bilangan(X):‐ X>0, write("bilangan positif"),nl.
bilangan(X):‐ X=0, write("bilangan nol"),nl.
bilangan(X):‐ X<0, write("bilangan negatif"),nl.
goal
readint(A),
bilangan(A). penjelasan: •
Program membaca inputan suatu bilangan integer dari keyboard, kemudian bilangan tersebut dimasukkan ke variable ‘A’.
•
Pada clauses terdapat aturan untuk suatu bilangan X jika X>0 maka kemudian ditampilkan pesan “bilangan positif”, dan seterusnya.
•
Sehingga output pesan yang ditampilkan akan tergantung kondisi dari bilangan yang diinputkan, baik itu “positif”, “nol”, maupun “negatif”.
Penggunaan underscore ( _ ) sebagai variabel dan penggunaan perintah cut ( ! )
Labotarorium Komputasi Program Studi Teknik Informatika Fakultas Teknologi Industri Universitas Atma Jaya Yogyakarta
1.
Program 1 :
(save as program dibawah ini dengan nama demo4.pro) predicates nondeterm cuaca(symbol) clauses cuaca(X):‐ X="cerah", write("naik motor saja!"),nl. cuaca(X):‐ X="hujan", write("naik mobil saja!"),nl. cuaca(X):‐ X=_, write("terserah mau naik apa!"),nl. goal write("cuaca hari ini : "),readln(Cuaca), cuaca(Cuaca).
Program 2 : (save as program dibawah ini dengan nama demo5.pro) predicates nondeterm cuaca(symbol) clauses cuaca(X):‐ X="cerah", write("naik motor saja!"),nl,!. cuaca(X):‐ X="hujan", write("naik mobil saja!"),nl,!. cuaca(X):‐ X=_, write("terserah mau naik apa!"),nl,!. goal write("cuaca hari ini : "),readln(Cuaca), cuaca(Cuaca). Cobalah test goal dari kedua program untuk inputan “cerah”, “hujan”, dan “mendung”. Maka akan menampilkan hasil yang berbeda antara Program 1 dan Program 2, hal ini karena adanya perintah “!” atau cut yang berarti sama dengan break pada bahasa C. Jadi setelah suatu syarat atau suatu kondisi terpenuhi, maka program akan break sehingga tidak melihat syarat‐syarat yang lain lagi. GUIDED
Labotarorium Komputasi Program Studi Teknik Informatika Fakultas Teknologi Industri Universitas Atma Jaya Yogyakarta
1. Cari dan perbaiki error dalam program berikut ini sehingga memberikan hasil yang benar : (save as program dibawah ini dengan nama guided1.pro) predicates clauses go‐ write("masukkan angka = "),readInt(X), write("angka yang saya ketik tadi adalah "),write(X),nl, Y=Y*X, readln("kuadrat dari angka tersebut adalah "),write(Y),nl, goal go 2. Buatlah program untuk membedakan kondisi suhu yang diinputkan lewat keyboard :
(save as program yang akan dibuat dengan nama guided2.pro) •
Jika angka (suhu) yang diinputkan di atas 27 (derajat celcius), maka tampilkan pesan “panas”,
•
Jika angka (suhu) yang diinputkan di bawah 27 (derajat celcius), maka tampilkan pesan “dingin”.