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