9/19/2008

Logika Program Terbilang (3 Digit) VB 6.0

Liburan puasa ini, dapat PR dari guru nih. Masa kita disuruh buat program pembilang? ah, ribet tau, tapi tak apa, rumit bukan berarti sulit, hehehe..... Saya tulis artikel ini buat teman - teman semua dan juga beberapa penjelasan yang mungkin dapat berguna bukan hanya untuk teman - teman sekolah saja, tapi juga buat teman - teman pembaca sekalian... hehe... (Kali ini saya hanya menulis angka 3 digit saja, karena PR nya disuruh 3 digit saja)



Sebenarnya, membuat program terbilang sama saja dengan membuat kamus. Apabila angka 1, menghasilkan terbilang "satu", 10 = "sepuluh", 33 = "tiga puluh tiga", dan 125 = "seratus dua puluh lima". Hanya saja teknik untuk mempresenstasikannya dengan kode yang benar - benar baik tidaklah mudah.



Tekniknya, adalah dengan mengambil angka setiap besaran. Misal 987. Maka 9 termasuk "ratusan", 8 termasuk "puluhan", dan 7 termasuk "satuan". Disini terdapat alur logikanya, apabila 9 adalah ratusan maka dibaca "sembilan" ditambah "ratus, menjadi "sembilan ratus". Kalau 9 adalah puluhan maka "sembilan"+"puluh" = "sembilan puluh". Cukup dengan fungsi pengolahan string seperti Len, Left, Right anda akan menemukan kemudahan dari algoritma ini.


Len : mengambil banyaknya character (hasil dlm bentuk angka)
Len ([expression/string dlm variabel])


Right : mengambil beberapa char dlm string, dimulai dari kanan.
Right (string, lenght As long/banyaknya yang diambil)


Left : mengambil beberapa char dlm string, dimulai dari kiri.
Left (string, lenght As long/banyaknya yang diambil)


Contoh penggunaan :


Len ("makanNasi") menghasilkan "9"


Right ("makanNasi", 4) menghasilkan "Nasi"


Left ("makanNasi", 4) menghasilkan "maka"


Coba baca dengan cepat: 123 321 231 121 221 212 112 312 123 .....

Sebenarnya tak ada hubungannya, saya hanya mengerjai anda. Tapi coba lihat, dari sekian banyak angka, anda pasti membacanya "seratus dua puluh tiga", bukan "satu ratus dua puluh tiga" bukan. Kemunginan inilah yang akan terjadi dalam pemrograman, misal 11 bukan dibaca "sepuluh satu", tapi "sebelas".



Untuk kasus yang seperti itu, kita butuh fungsi deklarasi relatif, atau struktur pengambil keputusan, seperti IF...Then..Else.. dan Function untuk menyimpan fungsi terbilang.



Ok, sepertinya rahasianya sudah terungkap, mari kita lihat kodenya :



Dim Angka(10)

Public Function writeBilangan(ByVal nilai As String) As String

Angka(1) = "satu"
Angka(2) = "dua"
Angka(3) = "tiga"
Angka(4) = "empat"
Angka(5) = "lima"
Angka(6) = "enam"
Angka(7) = "tujuh"
Angka(8) = "delapan"
Angka(9) = "sembilan"

If nilai <> 0 Then
nilai = Trim(nilai)
writeBilangan = procRatusan(Abs(nilai)) & procPuluhan(Abs(nilai)) & procSatuan(Abs(nilai))
Else
writeBilangan = "nol"
End If
End Function

Private Function procSatuan(ByVal x1 As String) As String
If (Left(Right(x1, 2), 1) <> Null) Then
procSatuan = ""
ElseIf (Len(x1) > 1 And Left(Right(x1, 2), 1) = 1) Then
procSatuan = ""
Else
procSatuan = Angka(Right(x1, 1))
End If

End Function

Private Function procPuluhan(ByVal x2 As String) As String
Dim r2, s2 As String
r2 = Left(Right(x2, 2), 1)
s2 = Right(x2, 1)

If (Len(x2) > 1) Then
If (r2 = 1 And s2 = 0) Then
procPuluhan = "sepuluh "
ElseIf (r2 = 1 And s2 = 1) Then
procPuluhan = "sebelas "
ElseIf (r2 = 1 And s2 > 1) Then
procPuluhan = Angka(s2) & " belas "
ElseIf (r2 > 0) Then
procPuluhan = Angka(r2) & " puluh "
End If
End If
End Function

Private Function procRatusan(ByVal x3 As String) As String
If (Len(x3) > 2) Then
If (Left(Right(x3, 3), 1) = 1) Then
procRatusan = "seratus "
Else
procRatusan = Angka(Left(Right(x3, 3), 1)) & " ratus "
End If
End If
End Function

Tulis kode ini (copy paste sajalah) kedalah sebuah form kosong. Apabila anda ingin melihat fungsinya, silahkan tulis kode dibawah pada form, bagian general..



Private Sub Form_Load()
writeBilangan("345")
End Sub

Ok, mungkin itu saja yang bisa saya jelaskan. Apabila anda ingin membuat input text, hapus kode tadi yang berisi writeBilangan("345"), lalu buat "text box", "command button", dan "label". Kemudian buat script di command button yang mengubah caption label menjadi hasil dari fungsi yang sudah dibuat. Contoh :


Private Sub Command1_Click()
label1.caption = writeBilangan(text1.text)
End Sub

Mungkin masih banyak cara lain untuk menyusun program terbilang ini, masih banyak cara lain untuk membuat hasil yang sama dan logika yang sama, hanya saja alur untuk membuatnya saja yang berbeda.



Sebagai pengembangan untuk lebih dari 3 digit saja, saya akan berikan contoh permisalkan.



Tentu kita kesulitan saat membaca 95871258, namun tidak dengan 95.871.258 bukan? bagian 258 dibaca "dua ratus lima puluh delapan", dan bagian 871 dibaca "delapan ratus tujuh puluh satu" + "ribu" , dan 95 dibaca dengan "sembilan puluh lima" + "juta". Saat anda membilangkannya, menjadi "sembilan puluh lima" + "juta" + "delapan ratus tujuh puluh satu" + "ribu" + "dua ratus lima puluh delapan".



Mudah bukan? hanya menambah juta, ribu.. dan memanggil fungsi sebelumnya yang sudah dibuat. Kuncinya adalah pemisahan 3 digit pada bilangan tersebut. Pisahkan setiap 3 digit pada bilangan yang akan diproses, lalu panggil fungsi untuk membilangkannya.

OK, buat pembaca sekalian, selamat mencoba... dan teman - teman sekolah satu SMA 2, moga sukses PR nya!

3 komentar:

Anonim mengatakan...

burit...sombonk..
wkwkwkwkw

Anonim mengatakan...

pake vista yooo???

Anonim mengatakan...

kurang jelas....
tambahin dung...

ku ga ngertu.....