Tag

, , , , ,


Bismillah. Berhubung banyaknya pencarian yang masuk ke blog ini berkaitan dengan konversi angka ke huruf, maka saya akan tulis sedikit tentang bagaimana melakukan konversi angka ke huruf ini dengan menggunakan C++.

Pada tulisan sebelumnya, saya pernah membahas tentang bagaimana melakukan konveris angka ke string atau sebaliknya. Pada pembahasan tersebut, telah dijelaskan secara singkat bagaimana mengubah angka Integer misal 12 menjadi string “12” sehingga dapat diolah untuk keperluan string atau sebalinya ketika input yang diperoleh berupa string misalnya “30.23” maka nilai tersevut tidak dapat diolah secara langsung untuk operasi matematis, kecuali harus di konversi terlebih dahulu ke float atau double.

Nah, pada kesempatan kali ini, saya akan mencoba mengangkat tema yang sedikit berbeda, yakni mengkonversi angka yang diberikan menjadi huruf terbilangnya, misalnya input 3211, maka huruf terbilangnya menjadi: “tiga ribu dua ratus sebelas”. Konversi dilakukan dengan memanfaatkan Rekursi dengan catatan ada beberapa hal yang perlu dipertimbangkan diantaranya:

  • Pembilang angka satuan, misalnya:satu, dua, tiga, sampai dengan sembilan.
  • Pembilang angka yang diawali dengan angka 1 (satu), misal: sepuluh, sebelas, seratus, seribu, sejuta (bisa ditulis satu juta), dst.
  • Pembilang angka belasan: dua belas, tiga belas, dst.
  • Pembilang angka puluhan: dua puluh, tiga puluh, empat puluh, dst.
  • Pembilang angka ratusan: dua ratus, tiga ratus, empat ratus, dst.
  • dan angka pembilang lainya seperti ribu, juta, milyar dan seterusnya.

Pembilang satuan akan sangat sering dipakai, misalkan pembilang “dua”, akan tetap dipakai pada puluhan, ratusan, jutaan, dan seterusnya. Khusus untuk beberapa pembilang yang diawali angka satu, (selain angka 1 sendiri) maka akan menggunakan awalan se- jika bertemu dengan puluhan, belasan, ratusan dan ribuan (untuk sementara dikhususkan dlm rekursi). Pembilang-pembilang lainnya dapat dikombinasikan satu sama lain dengan mengecek modulus dan hasil baginya secara bersamaan untuk mendapatkan pembilang yang cocok. (*bingung,,, wkwkwk)

Cara kerjanya: kita ingin menjadikan bilangan 2341 menjadi “dua ribu tiga ratus empat puluh satu”, maka kita perlu mengambil angka ribuan yakni 2 dengan cara mengurangi bilangan tersebut dengan modulus seribu dari bilangan itu sendiri (2341 – (2341 % 1000)) kemudian membaginya dengan 1000, sehingga diperoleh satuan dari angka ribuan tsb.  Setelah angka ribuan diperoleh, kita perlu mengambil angka ratusan dalam bilangan tersebut. begitu seterusnya hingga diperoleh angka satuan dari bilangan itu yakni 1. Setiap angka-angka yang diperoleh dalam rekursi dapat langsung di representasikan dengan pembilangnya ditambah dengan satuan angka tersebut (puluhan, belasan, ratusan, dst).

Singkatnya perhatikan kode program berikut:

#include <iostream>
#include <string>
#include <cstdlib>
#include <cmath>

using namespace std;
string satuan[] = {    "", "satu ", "dua ", "tiga ", "empat ", "lima ", "enam ", "tuju ", "delapan ", "sembilan " };

string konvertAngka(int n) {
    if (n < 0) {
        return "negatif " + konvertAngka(-n);
    } else if (n < 10) {
        return satuan[n];
    } else if (n == 10) { // khusus untuk sepuluh
        return "sepuluh ";
    } else if (n == 11) { // khusus untuk sebelas
        return "sebelas ";
    } else if (n < 20) {
        return satuan[n-10] + "belas ";
    } else if (n < 100) {
        return satuan[(n-(n%10))/10] + "puluh " + konvertAngka(n % 10);
    } else if (n < 1000) {
        return (n < 200 ? "seratus " : satuan[(n-(n%100))/100] + "ratus ") + konvertAngka(n % 100);
    } else if (n < 1000000) { 
        return (n < 2000 ? "seribu " : konvertAngka((n-(n%1000))/1000) + "ribu ") + konvertAngka(n % 1000);
    } else if (n < 1000000000) {
        return konvertAngka((n-(n%1000000))/1000000) + "juta " + konvertAngka(n % 1000000);
    } else {
        return "Angka lebih besar dari 999,999,999 (harus kurang dari 1 Milyar)";
    }
}int main(int argc, char * argv[]) {
    if(argc<=1) {
        cout << "jangan lupa masukkan angka saat run." << endl;
        return 1;
    }    int angka = atoi(argv[1]);
    cout << konvertAngka(angka)<< (argv[2]? argv[2] : "" ) << endl;
    return 0;
}

Keterangan: satuan angka disimpan dalam string array agar mudah dipanggil dari dalam program dengan menggunakan index-nya. Source code dapat di download di: http://pastebin.com/i2bjDaPE

Input bilangan yang akan dikonversi melalui argumen. Argumen minimal sebanyak 2 argumen angka/bilangan yang akan dikonversi dan satuan bersifat opsional (misal meter, rupah, dll). Kemudian bilangan yang diinputkan ini disimpan dalam variabel bertype Integer. Berikut adalah contoh hasil run program ini:

[koro@arch-x konversi]$ ./konversi 8761
delapan ribu tuju ratus enam puluh satu 
[koro@arch-x konversi]$ ./konversi 360 derajat
tiga ratus enam puluh derajat
[koro@arch-x konversi]$ ./konversi -45 derajat
negatif empat puluh lima derajat
[koro@arch-x konversi]$ ./konversi 97000000 Rupiah
sembilan puluh tuju juta Rupiah
[koro@arch-x konversi]$ ./konversi 11100000 Rupiah
sebelas juta seratus ribu Rupiah

Screenshot:

Konversi Angka ke huruf terbilang

Konversi Angka ke huruf terbilang

Akhir kata, ini bukan lah satu-satunya metode untuk melakukan konveris angka ini, ada banyak metode lainnya yang mungkin lebih efektif dan efisien. Semoga bermanfaat, jika ada tambahan silahkan diberikan di komentar. CMIIW.