c.tadst.com
Algoritma mengubah bilangan desimal menjadi biner adalah salah satu algoritma yang sulit untuk buat, terutama jika kita hanya terpatok dengan cara yang sudah umum. Ini terjadi pada saya, ketika saya masih duduk dibangku kuliah semester 1.
Waktu itu Ujian Tengan Semester untuk mata kuliah DDP, dimana salah satu soalnya adalah membuat algoritma mengubah bilangan desimal menjadi bilangan biner. Saya pada saat itu tidak terpikir sama sekali bahwa ada cara yang 'umum'-nya digunakan untuk mengkonversi bilangan tersebut, sehingga saya 'terpaksa' untuk menemukan cara sendiri. Namun ketika UTS sudah berakhir, saya baru 'ngeh' (sadar) bahwa ternyata sudah ada algoritmanya. #huft #KZL.
Saya sendiri belajar mengenai bilangan-bilangan digital sejak dari SMK, karena saya dulu SMK di jurusan Elektronika. Sejak SMK, cara saya untuk mengkonversi bilangan desimal ke biner berbeda dengan cara yang diajarkan guru saya, dimana cara yang umum adalah dengan membagi dua bilangan desimal, lalu mengambil sisanya (antara 0 dan 1) untuk disimpan. Kemudian seluruh bilangan sisa itu dibaca secara terbalik (reverse) untuk menemukan bilangan binernya. Cara demikian bisa dikatakan konversi "dari depan".
Sedangkan cara saya adalah konversi "dari belakang", dimana saya hanya melakukan pengurangan pengurangan pada bilangan desimal dengan nilai pangkat 2 terbesar yang paling dekat dengan nilai desimal itu dan terus diulang hingga nilai pangkatnya habis. Ya benar, hanya itu.
Bisa dilihat dari kedua gambar, bahwa cara tersebut sebenarnya hampir sama, namun menurut saya cara kedua adalah cara yang lebih cepat dan lebih 'gampang' untuk diterapkan pada algoritma. Dan bahkan sampai sekarang saya tidak berhasil membuat algoritma konversi bilang desimal ke biner menggunakan cara pertama. *entah karena saya terbiasa dengan cara ke-2 atau mungkin karena memang 'belet' hha
Jadi...
Berikut adalah algoritma konversi bilangan desimal ke biner menggunakan cara yang saya buat ketika UTS tahun 2010:
FUNCTION goBiner(value) BEGIN desimal <- value sisa <- 0 strBiner <- '' pangkat <- floor(log(desimal, 2)) + 1 do{ temp <- 2 ^ pangkat sisa <- 0 if (desimal >= temp) then desimal <- desimal - temp sisa <- 1 endif pangkat <- pangkat - 1 strBiner <- strBiner + sisa }while(pangkat >=0) // selama pangkat belum habis return strBiner END
Bila diimplementasi pada aplikasi web menggunakan javascript menjadi:
<script> function goBiner(el){ if (el.value == ""){ document.getElementById("bin").value = ""; }else{ // algoritma var desimal = el.value; var sisa = 0; var strBiner = ""; var pangkat = Math.floor(Math.log(desimal) * Math.LOG2E) + 1; do{ var temp = Math.pow(2, pangkat); sisa = 0; if (desimal >= temp){ desimal -= temp; sisa = 1; } pangkat--; strBiner += sisa; }while(pangkat >= 0); document.getElementById("bin").value = parseInt(strBiner); } } </script> Decimal : <input type="text" id="dec" onkeyup="goBiner(this)" /> Biner : <input type="text" id="bin" disabled/>
Baca juga Algoritma Swapping Tanpa Variabel Tambahan, Manakah yang Lebih Efisien?
Saya tertarik dengan tulisan anda mengenai Elektronika.
ReplyDeleteSaya juga mempunyai tulisan yang sejenis mengenai Elektronika yang bisa anda kunjungi di Informasi Elektronika
masih ada kesalahan kang waktu di demo, kalo saya masukin desimal 0, binernya kan seharusnya 0, tpi ini malah jadi 1
ReplyDeleteOh gitu? sip.. thanks masukannya
Delete