SlideShare a Scribd company logo
1 of 7
Download to read offline
Algoritme Penyebutan Bilangan Rekursif
                                                                  ∗
                                           Yohanes Suyanto
                                              yanto@ugm.ac.id
                                      FMIPA UGM Yogyakarta
                                           17 September 2005


                                                  Abstrak
           Algoritme penyebutan bilangan (terbilang) adalah pengubahan bilangan menjadi cara
       menyebutnya. Telah dibuat algoritme penyebutan bilangan yang bersifat rekursif dan di-
       implementasikan dalam bahasa pemrograman Pascal. Untuk tipe data bilangan bulat ter-
       nyata hasil penyebutan sangat bergantung pada tipe bilangan yang digunakan. Umumnya
       makin besar jumlah bit yang digunakan untuk merepresentasikan bilangan bulat, makin be-
       sar jangkauan bilangan yang dapat disebut dengan benar. Jumlah bit terbesar untuk tipe
       data yang diteliti adalah 64 bit, yang dapat menyebut bilangan dengan benar sampai dengan
       999.999.999.999.999.999 (orde ratusan bilyun).
           Kata kunci: algoritme, rekursif, terbilang


1      Pendahuluan
Pada aplikasi pencetakan kuitansi biasa ditemukan penyebutan nilai uang dengan kata-kata (ter-
bilang). Misalnya nilai uang Rp 234.050,00 akan disebut dengan ’dua ratus tiga puluh empat
ribu lima puluh rupiah’. Algoritme yang biasa digunakan adalah algoritme non-rekursif. Padahal
penyebutan nilai uang tersebut mengikuti pola berulang yang mestinya dapat dikerjakan secara
rekursif. Oleh karena itu, dalam penelitian ini dibahas mengenai algoritme penyebutan nilai terse-
but dengan pendekatan rekursif.


2      Rekursi
Rekursi adalah suatu proses yang penjabarannya merujuk pada proses itu juga [2]. Contoh yang
paling populer adalah penghitungan faktorial dari suatu bilangan. Dari definisi faktorial diketahui
bahwa:
                              n! = n × (n − 1) × (n − 2) × . . . × 1
sedangkan
                                   (n − 1)! = (n − 1) × (n − 2) × . . . × 1
Oleh karena itu didapat:
                                             n! = n × (n − 1)!
   Dari sini terlihat bahwa untuk menjelaskan nilai n! dapat ditempuh dengan melalui penjelasan
(n − 1)!. Dengan kata lain faktorial dijelaskan dengan faktorial juga.
   Algoritme rekursif memerlukan nilai henti agar tidak terjadi perulangan yang terus-menerus.
Untuk kasus faktorial tadi nilai hentinya adalah:

                                                   1! = 1
    ∗ Seminar   Nasional dalam Rangka Dies ke-50 FMIPA UGM




                                                      1
Oleh karena itu definisi lengkap dari faktorial adalah:
                               n! = n × (n − 1)! untuk n > 1
                                  = 1 untuk n = 0 atau n = 1
    Algoritme Faktorial adalah algoritme penghitungan faktorial dari suatu bilangan bulat [3].

    begin
       if N > 1 then
          Faktorial = N * Faktorial(N-1)
       else
          Faktorial = 1
       end
    end
                                 Fungsi Faktorial(N )



3     Algoritme penyebutan nilai N
Penyebutan nilai mempunyai pola, (dari nilai yang paling kecil) penyebutan satuan, puluhan, ra-
tusan, ribuan, jutaan, milyaran, dan seterusnya. Penyebutan puluhan berpola penyebutan satuan
diikuti dengan kata ’puluh’. Demikian juga penyebutan ratusan berpola penyebutan satuan di-
ikuti dengan kata ’ratus’. Dengan demikian nilai henti untuk algoritme penyebutan ini adalah
penyebutan satuan, atau nilai N < 10.
    Penyebutan nilai N dimulai dengan sebutan tertinggi dari nilai N tersebut kemudian diikuti
dengan sebutan yang lebih rendah sampai nilai N tersebut habis. Namun pengecekan nilai N
dimulai dari nilai sebutan terkecilnya yaitu satuan meningkat pada sebutan yang lebih tinggi
sampai batas tertinggi misalnya bilyun. Kerangka algoritme penyebutan nilai N ini terlihat pada
Fungsi Terbilang.

    begin
       if N < 10 then
          penyebutan satuan
       else if N < 100 then
          penyebutan puluhan
       else if N < 1.000 then
          penyebutan ratusan
       else if N < 1.000.000 then
          penyebutan ribuan
       else if N < 1.000.000.000 then
          penyebutan jutaan
       else if N < 1.000.000.000.000 then
          penyebutan milyaran
       else if N < 1.000.000.000.000.000 then
          penyebutan triyunan
       else
          penyebutan bilyunan

    end
                                  Fungsi Terbilang(N )



3.1    Penyebutan satuan
Algoritme penyebutan satuan dapat dibuat dengan mudah yaitu dengan menerjemahkan nilai 0,
1, 2, . . . , 9 menjadi ’nol’, ’satu’, ’dua’, . . . , ’sembilan’. Lihat Fungsi Satuan.

                                                2
begin
      switch nilai N do
         case 0
            Satuan = ’nol’
         case 1
            Satuan = ’satu’
         case 2
            Satuan = ’dua’
         case 3
            Satuan = ’tiga’
         case 4
            Satuan = ’empat’
         case 5
            Satuan = ’lima’
         case 6
            Satuan = ’enam’
         case 7
            Satuan = ’tujuh’
         case 8
            Satuan = ’delapan’
         case 9
            Satuan = ’sembilan’

      end
   end
                                  Fungsi Satuan(N )


3.2   Penyebutan puluhan
Penyebutan puluhan dilakukan dengan mengumpankan hasil bagi nilai N dengan 10 kepada fungsi
Satuan dan membubuhinya dengan ’ puluh’. Sisa hasil bagi nilai N dengan 10 juga diumpankan
kepada fungsi Satuan dan dibubuhkan dibelakangnya. Lihat Fungsi Puluhan.

   begin
      Puluhan = Satuan(N div 10 ) + ’ puluh’ + Satuan(N mod 10 )
   end
                               Fungsi Puluhan(N )

    Namun demikian Fungsi Puluhan tersebut belum dapat menangani penyebutan bilangan be-
lasan. Oleh karena itu fungsi tersebut perlu disempurnakan. Bilangan belasan ditandai dengan
nilainya yang kurang dari 20. Bentuk Fungsi Puluhan2 (lihat Lampiran) adalah penyempurnaan
dari Fungsi Puluhan.

3.3   Penyebutan ratusan
Penyebutan ratusan mirip dengan penyebutan puluhan, yaitu dengan mengumpankan hasil bagi
nilai N dengan 100 kepada fungsi Satuan dan membubuhinya dengan ’ ratus’. Sisa hasil bagi nilai
N dengan 100 diumpankan kepada fungsi Puluhan dan dibubuhkan dibelakangnya. Lihat Fungsi
Ratusan yang sudah disempurnakan pada Lampiran sehingga dapat menangani juga bilangan
antara 100 s.d. 200.

3.4   Penyebutan ribuan, jutaan, milyaran, trilyunan, dan bilyunan
Analogi dengan penyebutan puluhan dan ratusan maka dapat dibuat penyebutan ribuan, jutaan,
milyaran, triyunan, dan bilyunan dengan cara yang sama. Lihat Fungsi Ribuan, Jutaan, Milyaran,
Trilyunan, dan Bilyunan pada Lampiran.

                                              3
3.5     Penyebutan rekursif
Jika fungsi-fungsi satuan, puluhan, ratusan, sampai dengan bilyunan digabung sesuai dengan
Fungsi Terbilang maka didapatlah Fungsi Terbilang2.
   Jika puluhan, ratusan, dan seterusnya disubstitusi dengan nilai fungsi yang sesuai maka akan
didapat Fungsi Terbilang3.
   Namun demikian puluhan, ratusan, dan seterusnya itu sebenarnya adalah fungsi Terbilang
juga. Oleh karena itu fungsi-fungsi tersebut dapat digantikan oleh fungsi Terbilang. Hasilnya
adalah Fungsi Terbilang4 yang merupakan fungsi rekursif dan cukup sederhana.


4      Implementasi
Algoritme fungsi Terbilang tersebut dapat dengan mudah diimplementasikan dalam berbagai ba-
hasa pemrograman. Implementasi dalam bahasa pemrograman Pascal perlu dilakukan pemilihan
tipe data argumen masukan fungsi karena Pascal mengenal beberapa variasi bilangan bulat maupun
bilangan real.
    Untuk kesempatan ini dilakukan implementasi dalam bahasa Pascal dengan tipe data bilangan
bulat. Variasi yang dicoba adalah tipe data bilangan bulat tak bertanda meliputi byte (8 bit),
word (16 bit), longword (32 bit). Untuk bilangan bulat bertanda dicoba tipe data shortint (8 bit),
smallint (16 bit), integer (32 bit), dan int64 (64 bit).


5      Hasil dan pembahasan
Hasil penelitian untuk variasi tipe data yang dicoba terlihat pada Tabel 1.


    Tabel 1: Hasil implementasi algoritme penyebutan bilangan (terbilang) dalam bahasa Pascal
         Tipe data    byte   word   longword   shortint   smallint   integer   longint   int64
         jumlah bit      8    16       32         8         16         32        32        64
                        √     √        √          √         √           √         √        √
         satuan
                        √     √        √          √         √           √         √        √
         puluhan
                              √        √                    √           √         √        √
         ratusan        *                         *
                                       √                                √         √        √
         ribuan         -     *                   -          *
                                       √                                √         √        √
         jutaan         -     -                   -          -
                                                                                           √
         milyaran       -     -        *          -          -         *         *
                                                                                           √
         trilyunan      -     -        -          -          -         -         -
                                                                                           √
         bilyunan       -     -        -          -          -         -         -

    Dari Tabel 1 didapat bahwa tipe data yang dapat mencakup jangkauan sampai bilyun adalah
tipe data Int64. Tipe data ini memakan tempat sebanyak 64 bit dan rentang nilainya adalah dari
−263 sampai dengan 263 −1 atau -9.223.372.036.854.775.808 sampai dengan 9.223.372.036.854.775.807.
Rentang ini sudah melebihi orde bilyun.
           √
    Tanda     pada Tabel 1 menandakan bahwa untuk tipe data pada kolom tersebut penyebutan
pada baris bersangkutan dapat dihasilkan dengan benar. Tanda * menunjukkan bahwa tidak
semua penyebutan pada baris bersangkutan untuk kolom tersebut benar. Batas tertinggi nilai
yang dapat disebut dengan benar ada pada Tabel 2. Tanda − berarti penyebutan dalam rentang
baris bersangkutan dengan tipe data pada kolom tersebut tidak benar.
    Batas nilai pada Tabel 2 tersebut sesuai dengan nilai tertinggi [1] untuk masing-masing tipe
data, kecuali int64. Tipe data int64 nilai tertingginya lebih besar daripada nilai tertinggi dari
Tabel 2 karena rentangnya melebihi orde bilyun. Jadi untuk penyebutan sampai dengan orde
bilyun penggunaan tipe data Int64 telah mencukupi. Dengan demikian algoritme penyebutan nilai
rekursif tersebut dapat diterapkan dalam bahasa pemrograman Pascal.




                                                 4
Tabel 2: Batas nilai tertinggi untuk masing-masing tipe data yang disebut dengan benar
                              Tipe data             nilai tertinggi
                              byte                              255
                              word                          65.535
                              longword              4.294.967.295
                              shortint                          127
                              smallint                      32.767
                              integer               2.147.483.647
                              longint               2.147.483.647
                              int64       999.999.999.999.999.999


6    Kesimpulan
Algoritme penyebutan bilangan dapat disusun dalam bentuk rekursif. Implementasinya dalam
bahasa pemrograman Pascal menunjukkan hasil yang benar sampai orde ratusan bilyun dengan
menggunakan tipe data Int64.


Referensi
 [1] Borland, 2002, Delphi Language Guide, Borland Software Corporation, 100 Enterprise Way,
     Scotts Valley, CA 95066-3249.
 [2] Dale, N. dan Weems, C., 1997, Introduction to Pascal and Structured Design - 4th edition,
     John and Bartlett Publishers, Boston.
 [3] Suyanto, Y., 2005, Pemrograman Terstruktur dengan Delphi, Gadjah Mada University Press,
     Yogyakarta.


Lampiran

    begin
       if N < 20 then
          Puluhan = Satuan(N-10 ) + ’ belas’
       else
          Puluhan = Satuan(N div 10 ) + ’ puluh’ + Satuan(N mod 10 )
       end
    end
                               Fungsi Puluhan2(N )



    begin
       if N < 200 then
          Ratusan = ’ seratus’ + Puluhan(N-100 )
       else
          Ratusan = Satuan(N div 100 ) + ’ ratus’ + Puluhan(N mod 100 )
       end
    end
                                  Fungsi Ratusan(N )




                                               5
begin
   Ribuan = Ratusan(N div 1.000 ) + ’ ribu’ + Ratusan(N mod 1.000 )
end
                             Fungsi Ribuan(N )



begin
   Jutaan = Ratusan(N div 1.000.000 ) + ’ juta’ + Ribuan(N mod 1.000.000 )
end
                             Fungsi Jutaan(N )



begin
   Milyaran = Ratusan(N div 1.000.000.000 ) + ’ milyar’ + Jutaan(N mod
   1.000.000.000 )
end
                           Fungsi Milyaran(N )



begin
   Trilyunan = Ratusan(N div 1.000.000.000.000 ) + ’ trilyun’ + Milyaran(N mod
   1.000.000.000.000 )
end
                          Fungsi Trilyunan(N )



begin
   Bilyunan = Ratusan(N div 1.000.000.000.000.000 ) + ’ bilyun’ + Milyaran(N mod
   1.000.000.000.000.000 )
end
                           Fungsi Bilyunan(N )



begin
   if N < 10 then
      Terbilang = Satuan(N )
   else if N < 100 then
      Terbilang = Puluhan(N )
   else if N < 1.000 then
      Terbilang = Ratusan(N )
   else if N < 1.000.000 then
      Terbilang = Ribuan(N )
   else if N < 1.000.000.000 then
      Terbilang = Jutaan(N )
   else if N < 1.000.000.000.000 then
      Terbilang = Milyaran(N )
   else if N < 1.000.000.000.000.000 then
      Terbilang = Trilyunan(N )
   else
      Terbilang = Bilyunan(N )

end
                            Fungsi Terbilang2(N )



                                            6
begin
   if N < 10 then
      Terbilang = Satuan(N )
   else if N < 20 then
      Terbilang = Satuan(N-10 ) + ’ belas’
   else if N < 100 then
      Terbilang = Satuan(N div 10 ) + ’ puluh’ + Satuan(N mod 10 )
   else if N < 200 then
      Terbilang = ’ seratus’ + Puluhan(N-100 )
   else if N < 1.000 then
      Terbilang = Satuan(N div 100 ) + ’ ratus’ + Puluhan(N mod 100 )
   else if N < 1.000.000 then
      Terbilang = Ratusan(N div 1.000 ) + ’ ribu’ + Ratusan(N mod 1.000 )
   else if N < 1.000.000.000 then
      Terbilang = Ratusan(N div 1.000.000 ) + ’ juta’ + Ribuan(N mod 1.000.000 )
   else if N < 1.000.000.000.000 then
      Terbilang = Ratusan(N div 1.000.000.000 ) + ’ milyar’ + Jutaan(N mod
      1.000.000.000 )
   else if N < 1.000.000.000.000.000 then
      Terbilang = Ratusan(N div 1.000.000.000.000 ) + ’ trilyun’ + Milyaran(N mod
      1.000.000.000.000 )
   else
      Terbilang = Ratusan(N div 1.000.000.000.000.000 ) + ’ bilyun’ + Milyaran(N
      mod 1.000.000.000.000.000 )

end
                           Fungsi Terbilang3(N )


begin
   if N < 10 then
      Terbilang = Satuan(N )
   else if N < 20 then
      Terbilang = Terbilang(N-10 ) + ’ belas’
   else if N < 100 then
      Terbilang = Terbilang(N div 10 ) + ’ puluh’ + Terbilang(N mod 10 )
   else if N < 200 then
      Terbilang = ’ seratus’ + Terbilang(N-100 )
   else if N < 1.000 then
      Terbilang = Terbilang(N div 100 ) + ’ ratus’ + Terbilang(N mod 100 )
   else if N < 1.000.000 then
      Terbilang = Terbilang(N div 1.000 ) + ’ ribu’ + Terbilang(N mod 1.000 )
   else if N < 1.000.000.000 then
      Terbilang = Terbilang(N div 1.000.000 ) + ’ juta’ + Terbilang(N mod
      1.000.000 )
   else if N < 1.000.000.000.000 then
      Terbilang = Terbilang(N div 1.000.000.000 ) + ’ milyar’ + Terbilang(N mod
      1.000.000.000 )
   else if N < 1.000.000.000.000.000 then
      Terbilang = Terbilang(N div 1.000.000.000.000 ) + ’ trilyun’ + Terbilang(N
      mod 1.000.000.000.000 )
   else
      Terbilang = Terbilang(N div 1.000.000.000.000.000 ) + ’ bilyun’ + Terbilang(N
      mod 1.000.000.000.000.000 )

end
                           Fungsi Terbilang4(N )



                                        7

More Related Content

Similar to Terbilang

1. Pengantar Struktur data.pptx
1. Pengantar Struktur data.pptx1. Pengantar Struktur data.pptx
1. Pengantar Struktur data.pptx
BobyDarmawan2
 
barisan dan deret
 barisan dan deret barisan dan deret
barisan dan deret
mfebri26
 
5. pemrograman array dan_string
5. pemrograman array dan_string5. pemrograman array dan_string
5. pemrograman array dan_string
Roziq Bahtiar
 

Similar to Terbilang (20)

3 konsep algoritma
3 konsep algoritma3 konsep algoritma
3 konsep algoritma
 
3 konsep algoritma
3 konsep algoritma3 konsep algoritma
3 konsep algoritma
 
3 konsep algoritma
3 konsep algoritma3 konsep algoritma
3 konsep algoritma
 
Fisika dasar
Fisika dasarFisika dasar
Fisika dasar
 
Fisika dasar
Fisika dasarFisika dasar
Fisika dasar
 
Trik Perkalian [Gasing]
Trik Perkalian [Gasing]Trik Perkalian [Gasing]
Trik Perkalian [Gasing]
 
Sistem bilangan2
Sistem bilangan2Sistem bilangan2
Sistem bilangan2
 
Sistem bilangan3
Sistem bilangan3Sistem bilangan3
Sistem bilangan3
 
3-Kriptografi .pptx
3-Kriptografi .pptx3-Kriptografi .pptx
3-Kriptografi .pptx
 
3-Kriptografi .pptx
3-Kriptografi .pptx3-Kriptografi .pptx
3-Kriptografi .pptx
 
1. Pengantar Struktur data.pptx
1. Pengantar Struktur data.pptx1. Pengantar Struktur data.pptx
1. Pengantar Struktur data.pptx
 
Sistem bilangan3
Sistem bilangan3Sistem bilangan3
Sistem bilangan3
 
Sistem bilangan2
Sistem bilangan2Sistem bilangan2
Sistem bilangan2
 
Sistem bilangan2
Sistem bilangan2Sistem bilangan2
Sistem bilangan2
 
Sistem bilangan2
Sistem bilangan2Sistem bilangan2
Sistem bilangan2
 
barisan dan deret
 barisan dan deret barisan dan deret
barisan dan deret
 
207 p06
207 p06207 p06
207 p06
 
2.6. Jumlah Digit dalam Bilangan Ratusan Menggunakan C++
2.6. Jumlah Digit dalam Bilangan Ratusan Menggunakan C++2.6. Jumlah Digit dalam Bilangan Ratusan Menggunakan C++
2.6. Jumlah Digit dalam Bilangan Ratusan Menggunakan C++
 
5. pemrograman array dan_string
5. pemrograman array dan_string5. pemrograman array dan_string
5. pemrograman array dan_string
 
Matematika Diskrit part 2
Matematika Diskrit part 2Matematika Diskrit part 2
Matematika Diskrit part 2
 

Terbilang

  • 1. Algoritme Penyebutan Bilangan Rekursif ∗ Yohanes Suyanto yanto@ugm.ac.id FMIPA UGM Yogyakarta 17 September 2005 Abstrak Algoritme penyebutan bilangan (terbilang) adalah pengubahan bilangan menjadi cara menyebutnya. Telah dibuat algoritme penyebutan bilangan yang bersifat rekursif dan di- implementasikan dalam bahasa pemrograman Pascal. Untuk tipe data bilangan bulat ter- nyata hasil penyebutan sangat bergantung pada tipe bilangan yang digunakan. Umumnya makin besar jumlah bit yang digunakan untuk merepresentasikan bilangan bulat, makin be- sar jangkauan bilangan yang dapat disebut dengan benar. Jumlah bit terbesar untuk tipe data yang diteliti adalah 64 bit, yang dapat menyebut bilangan dengan benar sampai dengan 999.999.999.999.999.999 (orde ratusan bilyun). Kata kunci: algoritme, rekursif, terbilang 1 Pendahuluan Pada aplikasi pencetakan kuitansi biasa ditemukan penyebutan nilai uang dengan kata-kata (ter- bilang). Misalnya nilai uang Rp 234.050,00 akan disebut dengan ’dua ratus tiga puluh empat ribu lima puluh rupiah’. Algoritme yang biasa digunakan adalah algoritme non-rekursif. Padahal penyebutan nilai uang tersebut mengikuti pola berulang yang mestinya dapat dikerjakan secara rekursif. Oleh karena itu, dalam penelitian ini dibahas mengenai algoritme penyebutan nilai terse- but dengan pendekatan rekursif. 2 Rekursi Rekursi adalah suatu proses yang penjabarannya merujuk pada proses itu juga [2]. Contoh yang paling populer adalah penghitungan faktorial dari suatu bilangan. Dari definisi faktorial diketahui bahwa: n! = n × (n − 1) × (n − 2) × . . . × 1 sedangkan (n − 1)! = (n − 1) × (n − 2) × . . . × 1 Oleh karena itu didapat: n! = n × (n − 1)! Dari sini terlihat bahwa untuk menjelaskan nilai n! dapat ditempuh dengan melalui penjelasan (n − 1)!. Dengan kata lain faktorial dijelaskan dengan faktorial juga. Algoritme rekursif memerlukan nilai henti agar tidak terjadi perulangan yang terus-menerus. Untuk kasus faktorial tadi nilai hentinya adalah: 1! = 1 ∗ Seminar Nasional dalam Rangka Dies ke-50 FMIPA UGM 1
  • 2. Oleh karena itu definisi lengkap dari faktorial adalah: n! = n × (n − 1)! untuk n > 1 = 1 untuk n = 0 atau n = 1 Algoritme Faktorial adalah algoritme penghitungan faktorial dari suatu bilangan bulat [3]. begin if N > 1 then Faktorial = N * Faktorial(N-1) else Faktorial = 1 end end Fungsi Faktorial(N ) 3 Algoritme penyebutan nilai N Penyebutan nilai mempunyai pola, (dari nilai yang paling kecil) penyebutan satuan, puluhan, ra- tusan, ribuan, jutaan, milyaran, dan seterusnya. Penyebutan puluhan berpola penyebutan satuan diikuti dengan kata ’puluh’. Demikian juga penyebutan ratusan berpola penyebutan satuan di- ikuti dengan kata ’ratus’. Dengan demikian nilai henti untuk algoritme penyebutan ini adalah penyebutan satuan, atau nilai N < 10. Penyebutan nilai N dimulai dengan sebutan tertinggi dari nilai N tersebut kemudian diikuti dengan sebutan yang lebih rendah sampai nilai N tersebut habis. Namun pengecekan nilai N dimulai dari nilai sebutan terkecilnya yaitu satuan meningkat pada sebutan yang lebih tinggi sampai batas tertinggi misalnya bilyun. Kerangka algoritme penyebutan nilai N ini terlihat pada Fungsi Terbilang. begin if N < 10 then penyebutan satuan else if N < 100 then penyebutan puluhan else if N < 1.000 then penyebutan ratusan else if N < 1.000.000 then penyebutan ribuan else if N < 1.000.000.000 then penyebutan jutaan else if N < 1.000.000.000.000 then penyebutan milyaran else if N < 1.000.000.000.000.000 then penyebutan triyunan else penyebutan bilyunan end Fungsi Terbilang(N ) 3.1 Penyebutan satuan Algoritme penyebutan satuan dapat dibuat dengan mudah yaitu dengan menerjemahkan nilai 0, 1, 2, . . . , 9 menjadi ’nol’, ’satu’, ’dua’, . . . , ’sembilan’. Lihat Fungsi Satuan. 2
  • 3. begin switch nilai N do case 0 Satuan = ’nol’ case 1 Satuan = ’satu’ case 2 Satuan = ’dua’ case 3 Satuan = ’tiga’ case 4 Satuan = ’empat’ case 5 Satuan = ’lima’ case 6 Satuan = ’enam’ case 7 Satuan = ’tujuh’ case 8 Satuan = ’delapan’ case 9 Satuan = ’sembilan’ end end Fungsi Satuan(N ) 3.2 Penyebutan puluhan Penyebutan puluhan dilakukan dengan mengumpankan hasil bagi nilai N dengan 10 kepada fungsi Satuan dan membubuhinya dengan ’ puluh’. Sisa hasil bagi nilai N dengan 10 juga diumpankan kepada fungsi Satuan dan dibubuhkan dibelakangnya. Lihat Fungsi Puluhan. begin Puluhan = Satuan(N div 10 ) + ’ puluh’ + Satuan(N mod 10 ) end Fungsi Puluhan(N ) Namun demikian Fungsi Puluhan tersebut belum dapat menangani penyebutan bilangan be- lasan. Oleh karena itu fungsi tersebut perlu disempurnakan. Bilangan belasan ditandai dengan nilainya yang kurang dari 20. Bentuk Fungsi Puluhan2 (lihat Lampiran) adalah penyempurnaan dari Fungsi Puluhan. 3.3 Penyebutan ratusan Penyebutan ratusan mirip dengan penyebutan puluhan, yaitu dengan mengumpankan hasil bagi nilai N dengan 100 kepada fungsi Satuan dan membubuhinya dengan ’ ratus’. Sisa hasil bagi nilai N dengan 100 diumpankan kepada fungsi Puluhan dan dibubuhkan dibelakangnya. Lihat Fungsi Ratusan yang sudah disempurnakan pada Lampiran sehingga dapat menangani juga bilangan antara 100 s.d. 200. 3.4 Penyebutan ribuan, jutaan, milyaran, trilyunan, dan bilyunan Analogi dengan penyebutan puluhan dan ratusan maka dapat dibuat penyebutan ribuan, jutaan, milyaran, triyunan, dan bilyunan dengan cara yang sama. Lihat Fungsi Ribuan, Jutaan, Milyaran, Trilyunan, dan Bilyunan pada Lampiran. 3
  • 4. 3.5 Penyebutan rekursif Jika fungsi-fungsi satuan, puluhan, ratusan, sampai dengan bilyunan digabung sesuai dengan Fungsi Terbilang maka didapatlah Fungsi Terbilang2. Jika puluhan, ratusan, dan seterusnya disubstitusi dengan nilai fungsi yang sesuai maka akan didapat Fungsi Terbilang3. Namun demikian puluhan, ratusan, dan seterusnya itu sebenarnya adalah fungsi Terbilang juga. Oleh karena itu fungsi-fungsi tersebut dapat digantikan oleh fungsi Terbilang. Hasilnya adalah Fungsi Terbilang4 yang merupakan fungsi rekursif dan cukup sederhana. 4 Implementasi Algoritme fungsi Terbilang tersebut dapat dengan mudah diimplementasikan dalam berbagai ba- hasa pemrograman. Implementasi dalam bahasa pemrograman Pascal perlu dilakukan pemilihan tipe data argumen masukan fungsi karena Pascal mengenal beberapa variasi bilangan bulat maupun bilangan real. Untuk kesempatan ini dilakukan implementasi dalam bahasa Pascal dengan tipe data bilangan bulat. Variasi yang dicoba adalah tipe data bilangan bulat tak bertanda meliputi byte (8 bit), word (16 bit), longword (32 bit). Untuk bilangan bulat bertanda dicoba tipe data shortint (8 bit), smallint (16 bit), integer (32 bit), dan int64 (64 bit). 5 Hasil dan pembahasan Hasil penelitian untuk variasi tipe data yang dicoba terlihat pada Tabel 1. Tabel 1: Hasil implementasi algoritme penyebutan bilangan (terbilang) dalam bahasa Pascal Tipe data byte word longword shortint smallint integer longint int64 jumlah bit 8 16 32 8 16 32 32 64 √ √ √ √ √ √ √ √ satuan √ √ √ √ √ √ √ √ puluhan √ √ √ √ √ √ ratusan * * √ √ √ √ ribuan - * - * √ √ √ √ jutaan - - - - √ milyaran - - * - - * * √ trilyunan - - - - - - - √ bilyunan - - - - - - - Dari Tabel 1 didapat bahwa tipe data yang dapat mencakup jangkauan sampai bilyun adalah tipe data Int64. Tipe data ini memakan tempat sebanyak 64 bit dan rentang nilainya adalah dari −263 sampai dengan 263 −1 atau -9.223.372.036.854.775.808 sampai dengan 9.223.372.036.854.775.807. Rentang ini sudah melebihi orde bilyun. √ Tanda pada Tabel 1 menandakan bahwa untuk tipe data pada kolom tersebut penyebutan pada baris bersangkutan dapat dihasilkan dengan benar. Tanda * menunjukkan bahwa tidak semua penyebutan pada baris bersangkutan untuk kolom tersebut benar. Batas tertinggi nilai yang dapat disebut dengan benar ada pada Tabel 2. Tanda − berarti penyebutan dalam rentang baris bersangkutan dengan tipe data pada kolom tersebut tidak benar. Batas nilai pada Tabel 2 tersebut sesuai dengan nilai tertinggi [1] untuk masing-masing tipe data, kecuali int64. Tipe data int64 nilai tertingginya lebih besar daripada nilai tertinggi dari Tabel 2 karena rentangnya melebihi orde bilyun. Jadi untuk penyebutan sampai dengan orde bilyun penggunaan tipe data Int64 telah mencukupi. Dengan demikian algoritme penyebutan nilai rekursif tersebut dapat diterapkan dalam bahasa pemrograman Pascal. 4
  • 5. Tabel 2: Batas nilai tertinggi untuk masing-masing tipe data yang disebut dengan benar Tipe data nilai tertinggi byte 255 word 65.535 longword 4.294.967.295 shortint 127 smallint 32.767 integer 2.147.483.647 longint 2.147.483.647 int64 999.999.999.999.999.999 6 Kesimpulan Algoritme penyebutan bilangan dapat disusun dalam bentuk rekursif. Implementasinya dalam bahasa pemrograman Pascal menunjukkan hasil yang benar sampai orde ratusan bilyun dengan menggunakan tipe data Int64. Referensi [1] Borland, 2002, Delphi Language Guide, Borland Software Corporation, 100 Enterprise Way, Scotts Valley, CA 95066-3249. [2] Dale, N. dan Weems, C., 1997, Introduction to Pascal and Structured Design - 4th edition, John and Bartlett Publishers, Boston. [3] Suyanto, Y., 2005, Pemrograman Terstruktur dengan Delphi, Gadjah Mada University Press, Yogyakarta. Lampiran begin if N < 20 then Puluhan = Satuan(N-10 ) + ’ belas’ else Puluhan = Satuan(N div 10 ) + ’ puluh’ + Satuan(N mod 10 ) end end Fungsi Puluhan2(N ) begin if N < 200 then Ratusan = ’ seratus’ + Puluhan(N-100 ) else Ratusan = Satuan(N div 100 ) + ’ ratus’ + Puluhan(N mod 100 ) end end Fungsi Ratusan(N ) 5
  • 6. begin Ribuan = Ratusan(N div 1.000 ) + ’ ribu’ + Ratusan(N mod 1.000 ) end Fungsi Ribuan(N ) begin Jutaan = Ratusan(N div 1.000.000 ) + ’ juta’ + Ribuan(N mod 1.000.000 ) end Fungsi Jutaan(N ) begin Milyaran = Ratusan(N div 1.000.000.000 ) + ’ milyar’ + Jutaan(N mod 1.000.000.000 ) end Fungsi Milyaran(N ) begin Trilyunan = Ratusan(N div 1.000.000.000.000 ) + ’ trilyun’ + Milyaran(N mod 1.000.000.000.000 ) end Fungsi Trilyunan(N ) begin Bilyunan = Ratusan(N div 1.000.000.000.000.000 ) + ’ bilyun’ + Milyaran(N mod 1.000.000.000.000.000 ) end Fungsi Bilyunan(N ) begin if N < 10 then Terbilang = Satuan(N ) else if N < 100 then Terbilang = Puluhan(N ) else if N < 1.000 then Terbilang = Ratusan(N ) else if N < 1.000.000 then Terbilang = Ribuan(N ) else if N < 1.000.000.000 then Terbilang = Jutaan(N ) else if N < 1.000.000.000.000 then Terbilang = Milyaran(N ) else if N < 1.000.000.000.000.000 then Terbilang = Trilyunan(N ) else Terbilang = Bilyunan(N ) end Fungsi Terbilang2(N ) 6
  • 7. begin if N < 10 then Terbilang = Satuan(N ) else if N < 20 then Terbilang = Satuan(N-10 ) + ’ belas’ else if N < 100 then Terbilang = Satuan(N div 10 ) + ’ puluh’ + Satuan(N mod 10 ) else if N < 200 then Terbilang = ’ seratus’ + Puluhan(N-100 ) else if N < 1.000 then Terbilang = Satuan(N div 100 ) + ’ ratus’ + Puluhan(N mod 100 ) else if N < 1.000.000 then Terbilang = Ratusan(N div 1.000 ) + ’ ribu’ + Ratusan(N mod 1.000 ) else if N < 1.000.000.000 then Terbilang = Ratusan(N div 1.000.000 ) + ’ juta’ + Ribuan(N mod 1.000.000 ) else if N < 1.000.000.000.000 then Terbilang = Ratusan(N div 1.000.000.000 ) + ’ milyar’ + Jutaan(N mod 1.000.000.000 ) else if N < 1.000.000.000.000.000 then Terbilang = Ratusan(N div 1.000.000.000.000 ) + ’ trilyun’ + Milyaran(N mod 1.000.000.000.000 ) else Terbilang = Ratusan(N div 1.000.000.000.000.000 ) + ’ bilyun’ + Milyaran(N mod 1.000.000.000.000.000 ) end Fungsi Terbilang3(N ) begin if N < 10 then Terbilang = Satuan(N ) else if N < 20 then Terbilang = Terbilang(N-10 ) + ’ belas’ else if N < 100 then Terbilang = Terbilang(N div 10 ) + ’ puluh’ + Terbilang(N mod 10 ) else if N < 200 then Terbilang = ’ seratus’ + Terbilang(N-100 ) else if N < 1.000 then Terbilang = Terbilang(N div 100 ) + ’ ratus’ + Terbilang(N mod 100 ) else if N < 1.000.000 then Terbilang = Terbilang(N div 1.000 ) + ’ ribu’ + Terbilang(N mod 1.000 ) else if N < 1.000.000.000 then Terbilang = Terbilang(N div 1.000.000 ) + ’ juta’ + Terbilang(N mod 1.000.000 ) else if N < 1.000.000.000.000 then Terbilang = Terbilang(N div 1.000.000.000 ) + ’ milyar’ + Terbilang(N mod 1.000.000.000 ) else if N < 1.000.000.000.000.000 then Terbilang = Terbilang(N div 1.000.000.000.000 ) + ’ trilyun’ + Terbilang(N mod 1.000.000.000.000 ) else Terbilang = Terbilang(N div 1.000.000.000.000.000 ) + ’ bilyun’ + Terbilang(N mod 1.000.000.000.000.000 ) end Fungsi Terbilang4(N ) 7