Di sebuah mailing list yang saya ikuti ada sebuah pertanyaan dari salah seorang anggotanya yaitu bagaimana
caranya merubah sebuah nilai berbentuk bilangan desimal menjadi bentuk bilangan pecahan. Contoh: 4,5 menjadi
9/2 (Pembilang / Penyebut).
Saat itu ada rekan-rekan lain yang memberikan sumbang saran untuk
memecahkan masalah ini dengan cara memberikan konsep logika yang dapat digunakan. Saya yang sudah terlanjur tertarik
mencoba untuk membuatnya dalam bentuk program menggunakan Visual Basic 6.0 untuk menyelesaikan masalah ini.
Konsep logika yang digunakan adalah menjadikan bilangan desimal ini menjadi bilangan bulat untuk memperoleh nilai
Pembilang dan Penyebutnya.
Pertama kita mencari nilai untuk digunakan sebagai Penyebut dengan cara
melakukan operasi pangkat, yaitu 10 pangkat jumlah angka dibelakang koma. Kita gunakan contoh bilangan desimal diatas
yaitu 4,5. Jumlah angka dibelakang koma adalah 1, maka 10 pangkat 1 = 10. Jumlah inilah yang kita gunakan
sebagai nilai Penyebut. Dari sini nilai Pembilang kita peroleh dengan cara bilangan desimal itu dikalikan dengan
Penyebut, yaitu 4,5 * 10 = 45, maka nilai 45 adalah Pembilang.
Jadi bentuk bilangan pecahan awal
nilai 4,5 adalah 45 / 10.
Kenapa disebut pecahan awal? Karena masih ada kemungkinan bisa kita
cari nilai yang lebih kecil lagi. Bagaimana caranya?
Untuk mencari bentuk bilangan pecahan yang lebih kecil
hal pertama yang kita lakukan adalah dengan mencari nilai Pembagi yang dapat membagi habis Pembilang dan Penyebut
sekaligus. Setelah nilai Pembagi diperoleh maka kita melakukan proses pembagian Pembilang dan Penyebut dengan nilai
Pembagi untuk memperoleh bentuk pecahan yang lebih kecil. Kita gunakan contoh bilangan diatas, Pembilang = 45 dan
Penyebut = 10, 45 / 10. Kita memeriksa setiap nilai mulai dari 1 sampai nilai Penyebut apakah dapat membagi
sampai habis (tanpa sisa) atau modulus (%) = 0 bilangan Pembilang dan Penyebut.
Agar lebih jelas
kita lihat ilustrasi dibawah ini:
Pada ilustrasi diatas akan tampak ada dua nilai yang dapat membagi habis Pembilang dan Penyebut, yaitu 1 dan
5. Untuk mendapatkan bentuk pecahan yang terkecil maka kita hanya mengambil bilangan Pembagi yang terbesar,
yaitu 5.
Setelah nilai Pembagi didapat, sekarang kita akan memproses Pembilang dan Penyebut. Pertama
45 dibagi 5 = 9, inilah nilai Pembilang kita yang terkecil. Kemudian 10 dibagi 5 = 2, inilah nilai
Penyebut kita yang terkecil. Jadi sekarang kita sudah memiliki bentuk pecahan terkecil dari bilangan desimal 4,5 yaitu
9 / 2.
Nah..Begitulah metode logika yang saya gunakan untuk menyelesaikan masalah ini. Sekarang
bagaimana penerapannya dalam bentuk program?
Sebelum melangkah ke penerapannya didalam program saya
harus mengingatkan anda bahwa pada Regional Settings saya menggunakan tanda koma (,)sebagai
Decimal symbol-nya dan tanda titik (.) sebagai Digit grouping symbol. Kenapa hal ini
perlu dijelaskan? Karena fungsi CDbl() milik Visual Basic akan membaca setting ini untuk melakukan
konversi nilai. Contoh statement berikut ini CDbl("4.5") akan menghasilkan nilai bilangan bulat 45
dan bukannya bilangan desimal 4,5 bila Decimal symbol yang digunakan adalah tanda titik dan tanda koma sebagai
Digit grouping symbol.
Oke..ini dia listing programnya:
Fungsi dengan nama Konversi diatas adalah fungsi inti yang akan melakukan proses konversi dari desimal menjadi
pecahan, fungsi diatas sudah ditambah error handler untuk memberitahu bila ada overflow karena bilangan
yang diproses sudah melebihi kapasitas tipe data. Cara penggunaan fungsi ini adalah dengan melewatkan parameter nilai
desimal yang akan dirubah kedalam fungsi dalam bentuk string. Contoh:
Konversi("4,5")
Jadi nilai yang akan dikonversi itu harus dalam bentuk string, kita dapat menggunakan fungsi bawaan Visual
Basic untuk melakukan ini yaitu CStr().
Ada sebuah fungsi buatan yang digunakan oleh Konversi()
yaitu DiBelakangKoma(). Fungsi ini saya buat untuk memeriksa berapa jumlah digit dibelakang koma. Berikut ini
listing programnya:
Oh..ya..tentu saja saya berasumsi bilangan desimal yang akan diproses menggunakan tanda koma (,)
sebagai pemisah bilangan desimal, kalau anda menggunakan tanda titik (.) tentu saja fungsi ini
tidak akan memberikan hasil yang
diharapkan. Bagaimana caranya agar dapat secara otomatis memeriksa apakah yang digunakan titik atau koma? Well,
bagian ini saya tinggalkan untuk anda ...
Untuk mempercepat proses konversi sebuah nilai dan efisiensi penggunaan memori kita dapat menambahkan sebuah fungsi
untuk memeriksa apakah sebuah Pembilang merupakan bilangan prima atau bukan. Karena bila Pembilang adalah sebuah
bilangan prima maka pasti hanya bisa habis dibagi 1 dan bilangan itu sendiri. Sebagai contoh kita memiliki nilai desimal
yang hendak dikonversikan adalah 9,97. Pada proses pertama akan diperoleh bentuk awal pecahan 997 / 100.
Karena 997 ini merupakan sebuah bilangan prima maka dia hanya dapat habis dibagi 1 dan 997 itu sendiri. Jadi kita tidak
perlu melakukan looping dari 1 sampai 100 untuk melakukan pencarian bilangan Pembagi.
Untuk itu anda dapat menggunakan fungsi IsPrime() yang ada di artikel berikut ini untuk memeriksa apakah sebuah bilangan itu termasuk
bilangan prima atau bukan, Fungsi Bilangan Prima.
Dimana menaruh fungsi ini? Bisa anda lihat di contoh project yang saya buat dalam Visual Basic
disini.
Oke semoga artikel ini berguna bagi anda dan membacanya dengan senang hati sama seperti saat saya menulisnya
dan bila menurut anda ada hal yang perlu diperbaiki atau dilengkapi jangan ragu untuk berkirim e-mail. Bye...