...In Search of Knowledge


Build time 23 November 2014
13:57:10 PM
This page have been visited: times
 
Best viewed with Mozilla Firefox

     

Artikel

Download

Pribadi

Pencarian
Web This site
Google
 
Printer Friendly

Desimal ke Pecahan

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:

45 % 1 = 0	10 % 1 = 0 <-- Keduanya habis dibagi
45 % 2 = 1	10 % 2 = 0
45 % 3 = 0	10 % 3 = 1
45 % 4 = 1	10 % 4 = 2
45 % 5 = 0	10 % 5 = 0 <-- Keduanya habis dibagi
45 % 6 = 3	10 % 6 = 4
45 % 7 = 3	10 % 7 = 3
45 % 8 = 5 	10 % 8 = 2
45 % 9 = 0	10 % 9 = 1
45 % 10= 5	10 % 10= 0 

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...

Masukkan bilangan desimal

Last modified: 07 January 2009, 08:51:23.

     


Copyright © 2005-2007
βul§ärä, All Right Reserved
bul54r4yahoocomsg
loading page time: 0.039 second

Display PageRank