Tuesday, 21 May 2013

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

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.

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_1, pilih WIN32 Console Application.
3. Masukkan code berikut :

// konversi_bilangan_1.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 decimalToBinary(int desimal) {
 for (int i=desimal; i>0; i/=2) {
  sisa = i % 2;
  x += 1;
  hasil[x] = sisa;
 }

 cout << "Hasil biner        : ";
 while (x) {
  cout << hasil[x];
  x -= 1;
 }
 cout << endl;
 return 0;
}

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

 cout << "Hasil oktal        : ";
 while (x) {
  cout << hasil[x];
  x -= 1;
 }
 cout << endl;
 return 0;
}

int decimalToHexa(int desimal) {
 for (int i=desimal; i>0; i/=16) {
  sisa = i % 16;
  x += 1;
  hasil[x] = sisa;
 }
 
 cout << "Hasil heksadesimal : ";
 while (x) {
  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;
}

void decimalToAll() {
 cout << "Masukkan bilangan desimal : "; cin >> bil;

 decimalToBinary(bil);
 decimalToOctal(bil);
 decimalToHexa(bil);
}

void binaryToAll() {
 int pangkat = 1;
 int hasil_desimal = 0;

 cout << "Masukkan bilangan biner : "; cin >> bil;
 for (int i=bil; i>0; i/=10) {
  sisa = i % 10;
  hasil_desimal += pangkat * sisa;
  pangkat *= 2;
 }

 cout << "Hasil desimal      : " << hasil_desimal << endl;
 decimalToOctal(hasil_desimal);
 decimalToHexa(hasil_desimal);
}

void octalToAll() {
 int pangkat = 1;
 int hasil_desimal = 0;

 cout << "Masukkan bilangan oktal : "; cin >> bil;
 for (int i=bil; i>0; i/=10) {
  sisa = i % 10;
  hasil_desimal += pangkat * sisa;
  pangkat *= 8;
 }
 cout << "Hasil desimal      : " << hasil_desimal << endl;
 decimalToBinary(hasil_desimal);
 decimalToHexa(hasil_desimal);
}

void hexaToAll() {
 char bil_hexa[100];
 int pangkat = 1;
 int hasil_desimal = 0;
 int desimal = 0;
 int index = 0;
 int a, b, c, length;

 cout << "Masukkan bilangan hexadesimal : "; cin >> bil_hexa;
 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;
 decimalToBinary(hasil_desimal);
 decimalToOctal(hasil_desimal);
}
 
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 {
  system("cls");
  cout << "Kode yang Anda masukkan salah!!" << endl;
  cout << endl;
  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 {
  system("cls");
  cout << "Kode yang Anda masukkan salah!!" << endl;
  cout << endl;
  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_1.
Ditunggu kritik saran pertanyaan dan komentarnya. :D

Semoga bermanfaat.

2 comments:

  1. gan, ini pake aplikasi apa compilernya..
    win32 console application itu ada microsoft visual basic?..

    ReplyDelete
  2. kaka ini kok udah ku ketik kok ada eror di strlen nya ya kak

    ReplyDelete