1.05.2015

Algoritma Sederhana Konversi Decimal-Biner Menggunakan Pangkat dan Logaritma

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?

3 comments:

  1. Saya tertarik dengan tulisan anda mengenai Elektronika.
    Saya juga mempunyai tulisan yang sejenis mengenai Elektronika yang bisa anda kunjungi di Informasi Elektronika

    ReplyDelete
  2. masih ada kesalahan kang waktu di demo, kalo saya masukin desimal 0, binernya kan seharusnya 0, tpi ini malah jadi 1

    ReplyDelete