Saturday 26 February 2011

Change Decimal (double/float) to biner/okta/heksa


(java programing)

latar belakang : temen minta buatin
alasan memakai java : lupa stetment compile c dalam terminal :p

Teman ku minta tapi tidak digunakan karena dia dapat yang pascal, tetapi dia bilang tetapi koma-koma masih belum bisa. :p (dalam hati, siapa suruh nga lihat program ku dulu)

algoritma muda saja, contoh :

biner : 2^x 2^3 2^2 2^1 2^0 1/(2^1) 1/(2^2) 1/(2^x)
okta  : 8^x 2^3 8^2 8^1 8^0 1/(8^1) 1/(8^2) 1/(8^x)

dari cara perhitungan diatas kita dapat melihat suatu pola

   a^x a^3 a^2 a^1 a^0 1/(a^1) 1/(a^2) 1/(a^x)

sehingga kita dapat membuat bilangan berapa pun semau kita (maksimum 16 , kecuali anda tahu kelanjutan dari bilangan heksa : 0123456789ABCDEF).
kita melakukan algoritma (a^y) ketika input kita lebih besar dari atau sama dengan 1. dan apabila di bawah 1 kita menggunakan algoritma (1/(a^y).
Nilai 10 diganti dengan A, 11 = B, C = 12 dan seterusnya.

Bagaimana tahu nilai nya? (kalau 0-1 biner mudah, kalau 1-16?)
nah mari langsung saja lihat listing codingnya dan analisis sendiri ya :p
(maaf jika berantakan, maklum saya tidak dibayar untuk ini^^. jika ada tampilan listing yang error mohon di koreksi, mungkin blogger memblock keyword tersebut)
note : maaf tidak memakai looping bagian outputnya, sehingga agak lebar :p

import javax.swing.JOptionPane;
import java.lang.String;
import java.io.*;
import java.math.*;

class Bineru {
 public static void main(String[]Args){
  double decx;
  decx = Double.parseDouble(JOptionPane.showInputDialog("Masukan bilangan desimal yang ingin di Konversi (Jangan Gede-gede)"));
  int bilx;
  do{
  bilx = Integer.parseInt(JOptionPane.showInputDialog("Masukan bilangan yang menjadi acuan konversi (biner = 2 okta = 8 heksa= 16 , Jangan Gila ya masukinnya!! max 16)"));}while(bilx<=1||bilx>16);
  
  double z;
  int x,b,a;
  double d,e,c;
  int[] hx= new int[44];
  e=decx;
  for (a=20;a>=0;a--) {
   z=Math.pow(bilx,a);
   hx[a]=0;
   for (b=bilx-1;b>0;b--) {
    c=z*b;
    if (c<=e) {
     hx[a]=b; 
     e= e-c;
    }
   }
  }
   x=22;
   for (a=1;a<=20;a++) {
    z=1/(Math.pow(bilx,a));
    hx[x]=0;
    for (b=bilx-1;b>=1;b--) {
     if ((z*b)<=e) {
      hx[x]=b; e=e-(z*b);
     }
    }
    x=x+1;
   }

 if(bilx >= 10) {
 System.out.println("Bilangan "+bilx+" dari "+decx+" adalah :\n ");
 for (a=20;a>=0;a--){
  switch(hx[a]){
  case 10:
  System.out.print("A");break;
  case 11:
  System.out.print("B");break;
  case 12:
  System.out.print("C");break;
  case 13:
  System.out.print("D");break;
  case 14:
  System.out.print("E");break;
  case 15:
  System.out.print("F");break;
  default :
  System.out.print(hx[a]);break;
  
}
}
  System.out.print(".");
  for (a=22;a<=43;a++){
  switch(hx[a]){
  case 10:
  System.out.print("A");break;
  case 11:
  System.out.print("B");break;
  case 12:
  System.out.print("C");break;
  case 13:
  System.out.print("D");break;
  case 14:
  System.out.print("E");break;
  case 15:
  System.out.print("F");break;
  default :
  System.out.print(hx[a]);break;
 }
}
 System.out.print("\n");
 }else{
 System.out.println("Bilangan "+bilx+" dari "+decx+" adalah :\n "+hx[20]+hx[19]+hx[18]+hx[17]+hx[16]+hx[15]+hx[14]+hx[13]+hx[12]+hx[11]+hx[10]+hx[9]+hx[8]+hx[7]+hx[6]+hx[5]+hx[4]+hx[3]+hx[2]+hx[1]+hx[0]+"."+hx[22]+hx[23]+hx[24]+hx[25]+hx[26]+hx[27]+hx[28]+hx[29]+hx[30]+hx[31]+hx[32]+hx[33]+hx[34]+hx[35]+hx[36]+hx[37]+hx[38]+hx[39]+hx[40]+"\n");
 }
System.exit ( 0 );
 }
}

No comments:

Post a Comment