Advertisement
Mashudi

KONVERSI SISTEM BILANGAN 0.0.1 (Linux version)

Oct 24th, 2014
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.62 KB | None | 0 0
  1. /*
  2. Konverter ASCII ke OCTAL, DECIMAL, HEXADESIMAL, dan BINNER
  3. v 0.0.1
  4. reference source code :
  5. http://www.cplusplus.com/forum/beginner/11401/
  6. http://www.cplusplus.com/forum/general/1764/
  7. modifikasi oleh : Muhamad Mashudi Ardi Winata (Mashudi Castol)
  8. muhamadmashudiardiwinata[at]gmail.com
  9. http://mashudicastol.blogspot.com
  10. */
  11. #include <iostream>
  12. #include <cstdlib>
  13. #include <cstring>
  14. #include <fstream>
  15. #include <cmath>
  16. using namespace std;
  17.  
  18. void A_ke_B(const char*); //fungsi untuk konversi ASCII ke BINARY
  19. void B_ke_A(const char*); //fungsi untuk konversi ASCII ke BINARY
  20. int main(void)
  21. {
  22.     //variable untuk konversi ASCII ke OCTAL, DECIMAL, HEXADESIMAL
  23.     string c;
  24.     int i;
  25.     //deklarasi teks konverter binary
  26.     char text[501];
  27.     //variable menu
  28.     int menu, back;
  29.     //kembali ke menu utama
  30.         do {
  31.             //bersihkan layar
  32.             system("clear");
  33.                 cout << "###################################################################\n"
  34.                      << "#                    KONVERSI SISTEM BILANGAN                     #\n"
  35.                      << "#                            v 0.0.1                              #\n"
  36.                      << "###################################################################\n"
  37.                      << "\n";
  38.                 //menu utama
  39.                 cout << "Pilih Menu :\n\n";
  40.                 cout << "1. Konversi ASCII ke OCTAL, DECIMAL, HEXADESIMAL\n"
  41.                      << "2. Konversi ASCII ke BINARY\n"
  42.                      << "3. Konversi BINARY ke ASCII\n"
  43.                      << "4. Keluar\n\n";
  44.                 cout << "Masukkan Pilihan : ";
  45.                 cin >> menu;
  46.                     //bersihkan layar
  47.                     system("clear");
  48.                         //menu
  49.                         switch(menu) {
  50.                             case 1 :
  51.                                 //prosos Konversi ASCII ke OCTAL, DECIMAL, HEXADESIMAL
  52.                                 cout << "Konversi ASCII ke OCTAL, DECIMAL, HEXADESIMAL\n\n";
  53.                                 cout << "Masukkan huruf/angka yang akan dikonversi : ";
  54.                                 cin  >> c;
  55.                                 cout << "\n";
  56.                                     for(i = 0; i < c.length(); i++) {
  57.                                         // keluaran di ASCII, OCTAL, DECIMAL, HEXADESIMAL
  58.                                         cout << "ASC " << c << endl
  59.                                              << "OCT " << oct << (int) c [i] << endl
  60.                                              << "DEC " << dec << (int) c [i] << endl
  61.                                              << "HEX " << hex << (int) c [i] << endl << endl;
  62.                                     }
  63.                             break;
  64.                             case 2 :
  65.                                 //proses Konversi ASCII ke BINARY
  66.                                 cout << "Konversi ASCII ke BINARY\n\n";
  67.                                 cout << "Masukkan huruf/angka yang akan dikonversi : ";
  68.                                 cin >> text;
  69.                                 cout << "\n";
  70.                                 A_ke_B(text);
  71.                             break;
  72.                             case 3 :
  73.                                 //proses Konversi BINARY ke ASCII
  74.                                 cout << "Konversi BINARY ke ASCII\n\n";
  75.                                 cout << "Masukkan BINARY akan dikonversi : ";
  76.                                 cin >> text;
  77.                                 cout << "\n";
  78.                                 B_ke_A(text);
  79.                             break;
  80.                             case 4 :
  81.                                 //keluar program
  82.                                 system("clear");
  83.                                 return 0;
  84.                             break;
  85.                             //jika masukkan tidak ada dalam pilihan menu
  86.                             default :
  87.                                     cout << "Pilihan Anda Tidak Ada di Dalam Menu";
  88.                         }
  89.             //keterangan, kembali ke menu utama
  90.             cout << "\n\ntekan tombol 1 untuk kembali ke menu utama, dan 0 untuk keluar.";
  91.             cin >> menu;
  92.         }
  93.         //kembali ke menu utama
  94.         while(menu);
  95.     cout << "\n\n";
  96.     return 0;
  97. }
  98. //proses perhitungan ASCII ke BINARY dan sebaliknya dimulai dari sini
  99. void A_ke_B(const char* input) {
  100.     //variable untuk konversi ASCII ke BINNER
  101.     int ascii; //digunakan untuk menyimpan ascii angka atau karakter
  102.     int length = strlen(input);
  103.     cout << " ";
  104.         for(int x = 0; x < length; x++) {
  105.             ascii = input[x]; //menyimpan karakter
  106.             char* binary_reverse = new char [9]; //alokasi memory dinamik
  107.             char* binary = new char [9];
  108.             int y = 0; //menghitung array yang digunakan
  109.             //ulangi sampai ascii == 1
  110.             while(ascii != 1) {
  111.                 if(ascii % 2 == 0) {
  112.                     binary_reverse[y] = '0';
  113.                 }
  114.                 else if(ascii % 2 == 1) {
  115.                     binary_reverse[y] = '1';
  116.                 }
  117.                 ascii /= 2;
  118.                 y++; //masukkan 1 untuk ke y untuk perulangan selanjutnya
  119.             }
  120.             if(ascii == 1) {
  121.                 binary_reverse[y] = '1';
  122.                 y++;
  123.             }
  124.             //isi nol diterakhir jika string bukan 8 karakter(1byte)
  125.             if(y < 8) {
  126.                 for(; y < 8; y++) {
  127.                     binary_reverse[y] = '0';
  128.                 }
  129.             }
  130.             for(int z = 0; z < 8; z++) {
  131.                 binary[z] = binary_reverse[7 - z];
  132.             }
  133.             cout << binary; //tampilkan 8 digit angka binary
  134.             delete [] binary_reverse; //bersihkan memori dinamik yang telah dibuat
  135.             delete [] binary;
  136.         }
  137.     cout << "\n";
  138. }
  139. void B_ke_A(const char* input) {
  140.     int length = strlen(input); //mendapatkan panjang string
  141.     int binary[8]; //array inin digunakan untuk menyimpan 1 byte dari angka binary (1 karakter)
  142.     int asciiNum = 0; //angka ascii setelah dikonverter dari binary
  143.     char ascii; //karakter ascii itu sendiri
  144.     cout << " ";
  145.     int z = 0; //cdigunakan untuk menghitung
  146.         //membaca di byte. total karakter = length / 8
  147.         for(int x = 0; x < length / 8; x++) {
  148.             //simpan info di dalam binary[0] menuji binary [7]
  149.             for(int a = 0; a < 8; a++) {
  150.                 binary[a] = (int) input[z] - 48; //z tidak pernah di ulang
  151.                 z++;
  152.             }
  153.             int power[8]; //akan menyimpan power dari 2 di dalam array
  154.             int counter = 7; // power dimulai dari 2^0, berhenti di 2^7
  155.             for(int x = 0; x < 8; x++) {
  156.                 power[x] = counter; //power[] = {7,6,5,...1,0}
  157.                 counter--;
  158.             }
  159.             //jika computasi asciiNum
  160.             for(int y = 0; y < 8; y++) {
  161.                 double a = binary[y]; //simpan elemen dari binary[] sebagai "a"
  162.                 double b = power[y]; //simpan elemen dari binary[] sebagai "b"
  163.                 asciiNum += a * pow(2, b); //asciiNum = total dari a * 2^power dimana 0 <= power <= 7, power adalah int
  164.             }
  165.             ascii = asciiNum; //penentuan value asciiNum ke ascii, untuk menganti ke karakter terkini
  166.             asciiNum = 0; //reset asciiNum untuk perulangan selanjutnya
  167.             cout << ascii; //menampilkan karakter ascii
  168.         }
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement