Tuesday 21 May 2013

C++: Program Konversi Bilangan - Desimal Biner Oktal Heksadesimal (Part 2)

Program ini adalah program yang saya buat sebagai latihan pra-UAS mata kuliah Algoritma Pemrograman.
Pada UAS nanti saya akan membuat program sederhana, yaitu program konversi bilangan.

Ini adalah lanjutan dari tutorial saya sebelumnya, yaitu C++: Program Konversi Bilangan - Desimal Biner Oktal Heksadesimal (Part 1). Pada tutorial sebelumnya terdapat banyak pengulangan kode program sehingga pada tutorial kali ini, penulisan kode lebih dioptimalisasi. :D

1. Langsung aja, buka Microsoft Visual Studio (karena saya menggunakan Microsoft Visual Studio, tapi teman-teman bisa menggunakan code editor lain seperti Borland C++).
2. Buat project baru, saya beri nama projectnya konversi_bilangan_2, pilih WIN32 Console Application.
3. Masukkan code berikut :

// konversi_bilangan_2.cpp : Defines the entry point for the console application.
// Developer : Erik Gunawan
// Nickname  : EXz

#include "stdafx.h"
#include <iostream>

using namespace std;

void pilihan();

void header() {
 cout << "Program Konversi Bilangan" << endl;
 cout << "=============================================" << endl;
 cout << "A = Desimal ke Biner, Oktal, Heksadesimal " << endl;
 cout << "B = Biner ke Desimal, Oktal, Heksadesimal " << endl;
 cout << "C = Oktal ke Desimal, Biner, Heksadesimal " << endl;
 cout << "D = Heksadesimal ke Desimal, Biner, Oktal " << endl;
 cout << "=============================================" << endl;
 cout << endl;
}

int hasil[100];
int bil;
int sisa = 0;
int x = 0;

int fromDecimal(int desimal, int kode) {
 for (int i=desimal; i>0; i/=kode) {
  sisa = i % kode;
  x += 1;
  hasil[x] = sisa;
 }

 if (kode==2) {
  cout << "Hasil biner        : ";
 }
 else if (kode==8) {
  cout << "Hasil oktal        : ";
 }
 else if (kode==16) {
  cout << "Hasil heksadesimal : ";
 }

 while (x) {
  if (kode==2 || kode==8) {
   cout << hasil[x];
  }
  else if (kode==16) {
   switch (hasil[x]) {
    case 10 : cout << 'A'; break;
    case 11 : cout << 'B'; break;
    case 12 : cout << 'C'; break;
    case 13 : cout << 'D'; break;
    case 14 : cout << 'E'; break;
    case 15 : cout << 'F'; break;
    default : cout << hasil[x]; break;
   }
  }
  x -= 1;
 }

 cout << endl;
 return 0;
}

char bil_hexa[100];
void toDecimal(int kode) {
 int pangkat = 1;
 int hasil_desimal = 0;

 int desimal = 0;
 int index = 0;
 int a, b, c, length;

 if (kode==2 || kode==8) {
  for (int i=bil; i>0; i/=10) {
   sisa = i % 10;
   hasil_desimal += pangkat * sisa;
   pangkat *= kode;
  }

  cout << "Hasil desimal      : " << hasil_desimal << endl;
  if (kode==2) {
   fromDecimal(hasil_desimal,8);
   fromDecimal(hasil_desimal,16);
  }
  else if (kode==8) {
   fromDecimal(hasil_desimal,2);
   fromDecimal(hasil_desimal,16);
  }
 }

 if (kode==16) {
  length = strlen(bil_hexa);
  for (int i=length-1; i>=0; i--) {
   a = bil_hexa[index];
   switch (a) {
    case 'A' : 
    case 'B' :
    case 'C' :
    case 'D' :
    case 'E' :
    case 'F' : b = a-55; break;
    default :  b = a-48; break;
   }
  
   c = i;
   while (c>=0) {
    desimal = pangkat*b;
    pangkat *= 16;
    c -= 1;
   } 
   pangkat = 1;
   hasil_desimal += desimal;
  
   index += 1;
  }
  cout << "Hasil desimal      : " << hasil_desimal << endl;
  fromDecimal(hasil_desimal,2);
  fromDecimal(hasil_desimal,8);
 }
}

void decimalToAll() {
 cout << "Masukkan bilangan desimal : "; cin >> bil;
 fromDecimal(bil,2);
 fromDecimal(bil,8);
 fromDecimal(bil,16);
}

void binaryToAll() {
 cout << "Masukkan bilangan biner : "; cin >> bil;
 toDecimal(2);
}

void octalToAll() {
 cout << "Masukkan bilangan oktal : "; cin >> bil;
 toDecimal(8);
}

void hexaToAll() {
 cout << "Masukkan bilangan hexadesimal : "; cin >> bil_hexa;
 toDecimal(16);
 
}
 
void pesan_salah() {
 system("cls");
 cout << "Kode yang Anda masukkan salah!!" << endl;
 cout << endl; 
}

void pilihan() {
 char pilih, coba_lagi;

 pilih:
 header();
 cout << "Masukkan Pilihan : "; cin >> pilih;
 cout << endl;

 if (pilih=='a' || pilih=='A') {
  decimalToAll();
 }
 else if (pilih=='b' || pilih=='B') {
  binaryToAll();
 }
 else if (pilih=='c' || pilih=='C') {
  octalToAll();
 }
 else if (pilih=='d' || pilih=='D') {
  hexaToAll();
 }
 else {
  pesan_salah();
  goto pilih;
 }

 coba:
 cout << endl;
 cout << "Ingin coba lagi (Y/N) ? "; cin >> coba_lagi;
 if (coba_lagi=='Y' || coba_lagi=='y') {
  system("cls");
  goto pilih;
 } 
 else if (coba_lagi=='N' || coba_lagi=='n') {
  _exit(0);
 } 
 else {
  pesan_salah();
  goto coba;
 }
}

void main(){
 pilihan();
}
4. Run file, hasilnya akan seperti ini :


 5. Masukkan bilangan yang ingin dicari.





Program ini masih banyak kekurangannya, jadi mohon maaf. :D
Untuk download contoh project di atas, klik disini atau konversi_bilangan_2.
Ditunggu kritik saran pertanyaan dan komentarnya. :D

Semoga bermanfaat.

0 komentar:

Post a Comment