Calendar

Minggu, 09 Desember 2012

Perkalian Bilangan Berbasis 8 dan Mengubahnya ke Bilangan Biner


Ini program ketigaku. Well. . Monggo dicoba. . komen ya kalo ada yang salah. . 


import java.math.BigInteger;
import java.util.Scanner;

public class praktikum4{
	public static void main(String[] argv){
		String bilangan1, bilangan2;
		System.out.print("Masukkan bilangan pecahan berbasis 8 pertama : ");
                bilangan1 = getInput();
                System.out.print("Masukkan bilangan pecahan berbasis 8 kedua : ");
                bilangan2 = getInput();
                String hasil = Double.toString(octalToDecimal(bilangan1)*octalToDecimal(bilangan2));
                System.out.println(hasil);
                toBinary(hasil);	
	}
        
        public static void toBinary(String input){
            if(input.indexOf("E")==-1){
                String bulat = input.substring(0, input.indexOf("."));
                String pecahan = input.substring(input.indexOf(".")+1, input.length());
                if(Double.parseDouble("0."+pecahan)>0){
                    System.out.println("Hasil kali bilangan dalam biner adalah:");
                    System.out.println("Bilangan: "+new BigInteger(bulat.concat(pecahan)).toString(2));
                    System.out.println("Mantisa: "+Integer.toBinaryString(-1*pecahan.length()));
                }else{
                    System.out.println("Hasil kali dalam biner adalah: "+new BigInteger(bulat).toString(2));
                }
            }else{
                String bulat = input.substring(0, input.indexOf("."));
                String pecahan = input.substring(input.indexOf(".")+1, input.indexOf("E"));
                Integer mantisa = new Integer(input.substring(input.indexOf("E")+1,input.length()));
                System.out.println("Hasil kali bilangan dalam biner adalah:");
                System.out.println("Bilangan: "+new BigInteger(bulat.concat(pecahan)).toString(2));
                System.out.println("Mantisa: "+Integer.toBinaryString((mantisa-pecahan.length())));
            }
        }
       
        public static String getInput(){
            String input="";
            Scanner key = new Scanner(System.in);
            boolean valid;
            do{
                input = key.nextLine();
                if(input.matches("([0-7]*\\.[0-7]*)")){
                    valid = true;
                }else{
                     System.out.print("Input tidak valid, coba masukkan lagi (Ex. 7.0): ");
                    valid = false;
                }          
            }while(!valid);
            return input;
        }
        
        public static double octalToDecimal(String input){
            double hasil=0;
            int power = 0;
            for(int i=input.indexOf(".")-1;i>=0;i--){
                hasil += (Double.parseDouble(""+input.charAt(i))*Math.pow(8, power));
                power++;
            }
            power = -1;
            for(int i=input.indexOf(".")+1;i<input.length();i++){
                hasil += (Double.parseDouble(""+input.charAt(i))*Math.pow(8, power));
                power--;
            }
            return hasil;
        }
		
        
}

Tidak ada komentar:

Posting Komentar