1 DAFTAR PUSTAKA Copi, I.M. (1978). Introductions to Logic New York: Macmillan. Hakim, L. (2008). Membongkar Trik Rahasia Para Master PHP. Yogyakarta:...
Aplikasi Pembelajaran Kalkulus Proposisi (APPEMKALPRO versi 2.0.0)
Aplikasi Pembelajaran Kalkulus Proposisi (APPEMKALPRO versi 2.0.0) merupakan sebuah pengembangan dari software APPEMKALPRO versi 1.0.0 yang berisi pokok pembahasan Kalkulus Proposisi. Diharapkan dapat bermanfaat dalam proses belajar dan mengajar secara komputerisasi yang efektif dan efisien. Kalkulus Proposisi merupakan metode untuk menghitung nilai kebenaran proposisi berdasarkan nilai kalimat deklarasi (benar atau salah) dalam mencari nilai kebenaran pada suatu proposisi diperlukan tahapan proses yang benar sesuai dengan kombinasi operand dan operator pembangunan yang digunakan.
Halaman Admin User (admin_user.php) alert('Anda tidak bisa menghapus data anda sendiri.'); location.href = 'admin_user.php'; "); } header("Location:admin_user.php");exit; } } else { $sql = "select * from user order by fullname asc"; $qry = mysql_query($sql); $c = mysql_num_rows($qry); } ?>
*/ include ("inc/connection.php"); include ("inc/function.php"); include ("inc/header.php"); include ("inc/menu.php"); is_not_logined(); $where = ''; if(isset($_GET['search'])) { $where = " where lower(judul) like '%".strtolower($_GET['search'])."%' "; } $sql = "select materi_id,judul from materi ".$where." order by materi_id desc"; $qry = mysql_query($sql); $c = mysql_num_rows($qry); ?>
function trim(s) { s = s.replace(/(^\s*)|(\s*$)/gi,""); s = s.replace(/[ ]{2,}/gi," "); s = s.replace(/\n /,"\n"); return s; } function Left(str, n){ if (n <= 0) return ""; else if (n > String(str).length) return str; else return String(str).substring(0,n); } function Right(str, n){ if (n <= 0) return ""; else if (n > String(str).length) return str; else { var iLen = String(str).length; return String(str).substring(iLen, iLen - n); } } function disableSelection (element) { if (typeof element.onselectstart!="undefined") element.onselectstart=function(){return false} else if (typeof element.style.MozUserSelect!="undefined") element.style.MozUserSelect="none"; else element.onmousedown=function(){return false} element.style.cursor = "default" }
function tulisRumus(r) { n = ''; for (i = 0; i < r.length; i++) { t = r.charAt(i); if(t == '~' || t == '^' || t == 'v' || t == 'g' || t == 'n'|| t == 'x'|| t == 'z') { if (t == 'g') t = '→'; if(t == 'n') t = '↔'; if (t == 'x') t = '↓'; if(t == 'z') t = '⊕'; c = '' + t + ''; } else { c = t; } n += c; } document.getElementById('rumus').innerHTML = n; } disableSelection(document.body); rumus = ''; //Penyimpanan data sementara var tb_data = ''; var tb_array = new Array(); var lkh_1 = '';
122
var lkh_2 = ''; var lkh_3 = ''; var lkh_4 = ''; var lkh_5 = ''; var lkh_6 = ''; var lkh_7 = ''; var lkh_8 = ''; var lkh_9 = ''; var lkh_10 = ''; //Fungsi untuk menambahkan karakter yang diklik pada rumus function addRumus(value) { //Jika yg diklik adalah tombol backspace, maka hapus 1 karakter dari belakang if (value == "backspace") { if (rumus == '') { document.getElementById('rumus').innerHTML = ' '; } else { rumus = rumus.substring(0,rumus.length-1); if(rumus.length == 0) { document.getElementById('rumus').innerHTML = ' '; rumus = ''; } else tulisRumus(rumus); } } //Jika yg diklik selain tombol bakcspace, masukkan karakter ke kotak rumus else { rumus += value; tulisRumus(rumus); } } //Fungsi ketika tombol OK diklik function ok() { //Jika tidak ada isi rumus, maka tampilkan jendela peringatan if (rumus == '') { alert('Tidak ada proposisi untuk diproses!'); return false; } //Periksa delimiter delimiterTotal = 0; for(i = 0; i < rumus.length; i++) { if(rumus.charAt(i) == '(') delimiterTotal++; if(rumus.charAt(i) == ')') delimiterTotal--; } if (delimiterTotal < 0) { alert('Delimiter kurang lengkap "("'); return false; } if (delimiterTotal > 0) { alert('Delimiter kurang lengkap ")"'); return false; } //Menyederhanakan proposisi jika ada double negasi rumusFinal = rumus.replace(/~~/g, "");
123
//Validasi rumusFinal var html = '
'; now = ''; before = ''; for(i = 0; i < rumusFinal.length; i++) { valid = false; now = rumusFinal.charAt(i); switch (now) { case ('p'): case ('q'): case ('r'): case ('s'): case ('~'): if(before == '' || before == '~' || before == 'v' || before == '^' || before == 'g' || before == 'n'|| before == 'x'|| before == 'z' || before == '(') valid = true; break; case ('v'): case ('^'): case ('g'): case ('n'): case ('x'): case ('z'): if(before == 'p' || before == 'q' || before == 'r' || before == 's' || before == ')') valid = true; break; case ('('): if(before == '' || before == '~' || before == 'v' || before == '^' || before == 'g' || before == 'n'|| before == 'x'|| before == 'z' || before == '(') valid = true; break; case (')'): if(before == 'p' || before == 'q' || before == 'r' || before == 's' || before == ')') valid = true; break; } if(!valid) { break; } before = now; } //Jika rumus valid if(valid) { var rows = 10; var data = rumus.split(''); var rumusFh = ''; for(i=0; i
'; html +='
'; //Start HTML dibuat
124
$('#body').html(html); } //Jika rumus tidak valid else { alert("Ada Kesalahan Struktur Proposisi, harap periksa kembali");return false; } } //Fungsi ketika tombol NEXT diklik function proses() { $('#btn-prosses').hide(); var html = '
'; var rows = 10; step = 1; prosesPecahRumus(); //alert('[Selesai] rumusFinal = ' + P);return false; html +="
Langkah-langkah proses yang akan dikerjakan untuk rumus di atas adalah:
"; html +="
"; for(i=1; i< P.length; i++) { if (i <= rows) { if(P[i] != undefined || P[i] != null){ html +="P["+ i +"] = " + replaceP(P[i]) + " "; } } } html +="
"; html +=''; html +='
'; //Tambah HTML $('#body').append(html); } //Fungsi ketika tombol tbKebenaran diklik function tbKebenaran() { //alert(rumus);return false; //~p^q?(s^r)?(pvq) var data = rumus.split(''); var p = 0; var q = 0; var r = 0; var s = 0; var tk = ""; for(i=0; i
125
if(s == 0){ s = 1; tk += "s"; } } } var dataTk = tk.split(''); dataTk.sort(); tb_data = dataTk; var rows = (p + q + r + s); var a = dataTk.length; var b = 2; pangkat = Math.pow(b,a); if(rows > 0) { html = "
"; html += '
Proposisi dari rumus tersebut memiliki '+ dataTk.length +' buah operand yaitu '+ dataTk +' sehingga memiliki test case sebanyak 2^'+ dataTk.length +' = '+pangkat+' buah
"; //Tambah HTML (ID 1) next(1); if($('#tbkebenaran').length>0){ $('#tbkebenaran').show(); }else{ $('#body').append(html); } } else { alert("Error"); } } //Fungsi untuk buat table dan hasil kebenaran. function setTBKebenaran(dataP) { var hasilFinish = ""; var table = "No data";
btn-large
127
var p = replaceP(dataP); var data_p = dataOperand(dataP).split(''); //alert(data_p); if(data_p.length > 0) { var index1 = data_p[0]; table = "
"; if(data_p.length == 1) { var data = getDataTemp(index1).split(''); table += '
'; var data1 = getDataTemp(index1).split(''); var data2 = getDataTemp(index2).split(''); for(var i=0; i'; if(data1[i] == 'B'){ table += '
B
'; }else{ table += '
S
'; } if(data2[i] == 'B'){ table += '
B
'; }else{ table += '
S
'; } var h = hasil(negasi(dataP),data1[i],data2[i]); if(h == 'B'){ table += '
B
'; }else{ table += '
S
'; } hasilFinish += h; table += ''; } }
128
table +='
'; } var out = { table : table, hasil : hasilFinish, }; return out; } function langkah1() { var data = setTBKebenaran(P[1]); var table = data.table; lkh_1 = data.hasil; html = '
'; html += '
LANGKAH P[1]
'; html += table; html +='
'; html +=' '; if(P[2] != undefined){ html +='
class="btn
btn-large
btn-primary"
onclick
=
"langkah2();">NEXT'; } html += "
"; html += "
"; next(2); if($('#langkah1').length>0){ $('#langkah1').show(); }else{ $('#body').append(html); } } function langkah2() { var data = setTBKebenaran(P[2]); var table = data.table; lkh_2 = data.hasil; html = '
'; html += '
LANGKAH P[2]
'; html += table; html +='
'; html +=' '; if(P[3] != undefined){ html +='
class="btn
"langkah3();">NEXT'; } html += "
"; html += "
"; next(3); if($('#langkah2').length>0){ $('#langkah2').show(); }else{ $('#body').append(html); } } function langkah3() { var data = setTBKebenaran(P[3]);
btn-large
btn-primary"
onclick
=
129
var table = data.table; lkh_3 = data.hasil; html = '
'; html += '
LANGKAH P[3]
'; html += table; html +='
'; html +=' '; if(P[4] != undefined){ html +='
class="btn
btn-large
btn-primary"
onclick
=
"langkah4();">NEXT'; } html += "
"; html += "
"; next(4); if($('#langkah3').length>0){ $('#langkah3').show(); }else{ $('#body').append(html); } } function langkah4() { var data = setTBKebenaran(P[4]); var table = data.table; lkh_4 = data.hasil; html = '
'; html += '
LANGKAH P[4]
'; html += table; html +='
'; html +=' '; if(P[5] != undefined){ html +='
class="btn
btn-large
btn-primary"
onclick
=
"langkah5();">NEXT'; } html += "
"; html += "
"; next(5); if($('#langkah4').length>0){ $('#langkah4').show(); }else{ $('#body').append(html); } } function langkah5() { var data = setTBKebenaran(P[5]); var table = data.table; lkh_5 = data.hasil; html = '
'; html += '
LANGKAH P[5]
'; html += table; html +='
'; html +=' '; if(P[6] != undefined){ html +=''; }
class="btn
btn-large
btn-primary"
onclick
=
130
html += "
"; html += "
"; next(6); if($('#langkah5').length>0){ $('#langkah5').show(); }else{ $('#body').append(html); } } function langkah6() { var data = setTBKebenaran(P[6]); var table = data.table; lkh_6 = data.hasil; html = '
'; html += '
LANGKAH P[6]
'; html += table; html +='
'; html +=' '; if(P[7] != undefined){ html +='
class="btn
btn-large
btn-primary"
onclick
=
"langkah7();">NEXT'; } html += "
"; html += "
"; next(7); if($('#langkah6').length>0){ $('#langkah6').show(); }else{ $('#body').append(html); } } function langkah7() { var data = setTBKebenaran(P[7]); var table = data.table; lkh_7 = data.hasil; html = '
'; html += '
LANGKAH P[7]
'; html += table; html +='
'; html +=' '; if(P[8] != undefined){ html +='
class="btn
"langkah8();">NEXT'; } html += "
"; html += "
"; next(8); if($('#langkah7').length>0){ $('#langkah7').show(); }else{ $('#body').append(html); } } function langkah8() { var data = setTBKebenaran(P[8]); var table = data.table;
btn-large
btn-primary"
onclick
=
131
lkh_8 = data.hasil; html = '
'; html += '
LANGKAH P[8]
'; html += table; html +='
'; html +=' '; if(P[9] != undefined){ html +='
class="btn
btn-large
btn-primary"
onclick
=
"langkah9();">NEXT'; } html += "
"; html += "
"; next(9); if($('#langkah8').length>0){ $('#langkah8').show(); }else{ $('#body').append(html); } } function langkah9() { var data = setTBKebenaran(P[9]); var table = data.table; lkh_9 = data.hasil; html = '
'; html += '
LANGKAH P[9]
'; html += table; html +='
'; html +='
onclick
=
"back(10);">BACK '; if(P[10] != undefined){ html +=''; }
class="btn
btn-large
btn-primary"
onclick
=
html += "
"; html += "
"; next(10); if($('#langkah9').length>0){ $('#langkah9').show(); }else{ $('#body').append(html); } } function langkah10() { var data = setTBKebenaran(P[10]); var table = data.table; lkh_10 = data.hasil; html = '
'; html += 'LANGKAH P[10] '; html += table; html +='
$('#body').append(html); } } function replaceP(v) { var val = v.replace("g","→"); val = val.replace("n","↔"); val = val.replace("x","↓"); val = val.replace("z","⊕"); //color val = val.replace("→","→"); val = val.replace("↔","↔"); val = val.replace("↓","↓"); val = val.replace("⊕","⊕"); val = val.replace("v","v"); val = val.replace("^","^"); val = val.replace("~","~"); return val; } function unReplaceDataP(v) { var val = v; val = val.replace("1","P[1]"); val = val.replace("2","P[2]"); val = val.replace("3","P[3]"); val = val.replace("4","P[4]"); val = val.replace("5","P[5]"); val = val.replace("6","P[6]"); val = val.replace("7","P[7]"); val = val.replace("8","P[8]"); val = val.replace("9","P[9]"); val = val.replace("0","P[0]"); return val; } function replaceDataP(v) { var val = v.replace("P[1]","1"); val = val.replace("P[2]","2"); val = val.replace("P[3]","3"); val = val.replace("P[4]","4"); val = val.replace("P[5]","5"); val = val.replace("P[6]","6"); val = val.replace("P[7]","7"); val = val.replace("P[8]","8"); val = val.replace("P[9]","9"); val = val.replace("P[10]","0"); return val; } function hasil(n,v1,v2) { if(n == '^'){ if((v1 == 'B') && (v2 == 'B')){ return 'B'; }else{ return 'S'; } } if(n == 'v'){ if((v1 == 'S') && (v2 == 'S')){ return 'S'; }else{ return 'B'; } } if(n == 'g'){
if (i == rumusFinal.length) if (putaranPemeriksaan <2) { i = 0; putaranPemeriksaan++; } else selesai = true; //alert('[Putaran pemeriksaan Operator] = ' + putaranPemeriksaan); i++; } } //Pecah Rumus sesuai delimiter P = new Array(); sudahDitemukanPenutupDelimiter = false; function buangDelimiter(r, index) { //Kerjakan bagian dalam delimiter if(r.indexOf('(', index) >= 0) { //Mulai pencarian Delimiter buka "(" dari posisi index for(var i = index; i < r.length; i++) { //Jika ditemukan delimiter buka if (r.charAt(i) == '(') { //alert('[Ditemukan "("] pada posisi = ' + i); i++; //temukan pasangan delimiter penutupnya for(var j = i; j < r.length; j++) { //Jika ditemukan if (r.charAt(j) == ')') { //alert('[Ditemukan ")"]
pada
posisi = ' + j); //Buang delimiternya subRumus = r.substring(i,j); //Replace () dengan spasi //alert('[RumusFinal sebelum diganti ()] ' + rumusFinal); rumusFinal = rumusFinal.substring(0, i - 1) + '{' + rumusFinal.substring(i, j) + '}' + rumusFinal.substring(j + 1, rumusFinal.length); //alert('[RumusFinal setelah diganti ()] ' + rumusFinal); //Periksa banyaknya Persamaan dalam delimiter tersebut pecahRumus(subRumus, i++);
sudahDitemukanPenutupDelimiter = true; break; } //Jika malah ditemukan delimiter pembuka, rekursive pecahRumus else if (r.charAt(j) == '(') { buangDelimiter(r, j); r = rumusFinal; //Mulai lagi pencarian dari awal i = -1; sudahDitemukanPenutupDelimiter = false; //alert('[Mulai lagi dari awal] i = ' + i); //alert('r = ' + r); break; } }
145
} //Jika sudah ditemukan penutup Delimiter, keluar dari loop if (sudahDitemukanPenutupDelimiter) { sudahDitemukanPenutupDelimiter = false; break; } } } //Kerjakan bagian setelah delimiter dibuang else { } } //Fungsi untuk memecah rumus menjadi rumus tunggal function pecahRumus(r, index) { //alert('[Jalankan pecahRumus] r = ' + r + ' index = ' + 0); //Jika hanya ada 1 rumus selain negasi, masukkan dalam langkah P if (r.length == 3) { P[step] = r.substring(0, 3); //alert('[1 Rumus] ' + P[step]); step++; } if (r.length > 3) { //alert('[Lebih 3] rumusFinal = ' + rumusFinal); //Cari proposisi negasi dulu karena prioritas setelah delimiter var posNegasi = r.indexOf('~'); //posNegasi menyimpan posisi negasi jika ada //Jika NEGASI ditemukan if(posNegasi >= 0) { P[step] = r.substring(posNegasi, posNegasi+2); step++; if(posNegasi == 0) { rumusFinal = '{' + r.substring(0, 2) + '}' + r.substring(2, r.length); } else { //rumusFinal = r.substring(posNegasi, posNegasi + 2); rumusFinal = r.substring(0, posNegasi) + '{' + r.substring(posNegasi, posNegasi + 2) + '}' + r.substring(posNegasi + 2, r.length); } //alert('[negasi rumusFinal] = ' + rumusFinal); } //Jika TIDAK ADA NEGASI, cari Operator lainnya else { for(i = 0; i < r.length; i++) { //Proses V if(r.charAt(i) == 'v') { v = cariBentukSederhanaProposisi(r); //alert('[v rumusFinal] = ' + rumusFinal); break; } //Proses ^ if(r.charAt(i) == '^')
146
{ v = cariBentukSederhanaProposisi(r); //alert('[^ rumusFinal] = ' + rumusFinal); break; } //Proses G if(r.charAt(i) == 'g') { v = cariBentukSederhanaProposisi(r);
//alert('[g rumusFinal] = ' + rumusFinal); break; } //Proses n if(r.charAt(i) == 'n') { v = cariBentukSederhanaProposisi(r);
//Proses z if(r.charAt(i) == 'z') { v = cariBentukSederhanaProposisi(r);
//alert('[z rumusFinal] = ' + rumusFinal); break; } } } } //replace persamaan dengan format P[x] rumusFinal = trim(rumusFinal); var awal = rumusFinal.indexOf('{'); var akhir = rumusFinal.indexOf('}', awal + 1); //alert('[awal] = ' + awal + ' [akhir] = ' + akhir); temp1 = rumusFinal.substring(0, awal); temp2 = rumusFinal.substring(akhir + 1, rumusFinal.length); rumusFinal = temp1 + 'P[' + (step-1) + ']' + temp2; //alert('[Rumus Final] ' + rumusFinal); }
147
function cariBentukSederhanaProposisi(r) { var a = 0; //menyimpan posisi awal persamaan var l = 0; //menyimpan posisi akhir persamaan //jika disebelah kiri sudah bentuk P[x] if(r.charAt(i - 1) == ']') { //cari awal P a = r.lastIndexOf('P', i - 1); } //Jika disebelah kiri bukan bentuk P[x] else { a = i - 1; } //Jika disebelah kanan sudah bentuk P[x] if(r.charAt(i+1) == 'P') { l = r.indexOf(']', i+1); } //Jika disebelah kanan belum bentuk P[x] else { l = i+1; } P[step] = r.substring(a, l+1); step++; if(a == 0) { rumusFinal = '{' + r.substring(a, l+1) + '}' + r.substring(l+1, r.length); } else { rumusFinal = r.substring(0, a - 1) + '{' + r.substring(a, l) + '}' + r.substring(l, r.length); } return {a:a , l:l}; } //Untuk Testing //rumusFinal = '(rv~sg(p^q))'; rumusFinal = '~p^(qvr)gsn(p^r)'; rumus = rumusFinal; tulisRumus(rumusFinal);
Fungsi untuk soal pilihan ganda dan jawaban (fungsi.php) 0) { return true; } else
148
{ return false; } } function check_email($email) { $sql = "select * from `user` where email = '$email'"; $qry = mysql_query($sql); $c = mysql_num_rows($qry); if ($c>0) { return true; } else { return false; } } function get_user_name($user_id) { $sql = "select fullname from `user` where user_id='". $user_id ."'"; $r = mysql_fetch_array(mysql_query($sql)); return $r['fullname']; } function get_email($user_id = 0) { $sql = "select email from `user` where user_id='". $user_id ."'"; $r = mysql_fetch_array(mysql_query($sql)); return $r['email']; } function user_id() { $v = (isset($_SESSION['session_user_id'])) ? $_SESSION['session_user_id'] : 0; return $v; } function username() { $v = (isset($_SESSION['session_email'])) ? $_SESSION['session_email'] : ''; return $v; } function password() { $v = (isset($_SESSION['session_password'])) ? $_SESSION['session_password'] : ''; return $v; } function rule() { $v = (isset($_SESSION['session_rule'])) ? $_SESSION['session_rule'] : 0; return $v; } function full_name() { $v = (isset($_SESSION['session_fullname'])) ? $_SESSION['session_fullname'] : 0; return $v; } function is_not_logined() { if(!is_login()) { header("location:login.php"); exit;
149
} } function is_logined() { if(is_login()) { header("location:beranda.php"); exit; } } function is_not_admin() { if(rule() > id_rule_admin()) { header("location:login.php"); exit; } } function id_rule_admin(){return 1;} function id_rule_member(){return 2;} function base_url() { $base_url = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "https" : "http"); $base_url .= "://".$_SERVER['HTTP_HOST']; $base_url .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']); return $base_url; } function date_FdY($date = null) { $out = ''; if(!empty($date)){ $date = new DateTime($date); $out .=$date->format("F d, Y"); } return $out; } function _minute(){return 30;}//hitungan per menit function _random(){return 5;}//jumlah soal yang ditampilkan function _point(){return 5;}//score untuk nilai yang benar per soal function _limit(){return 5;}//score untuk nilai yang benar per soal function count_nilai($date) { $sql = "select count(*) as jml from `nilai` where `date`='". $date ."' and user_id='". user_id() ."'"; $r = mysql_fetch_array(mysql_query($sql)); return $r["jml"]; } ?>