10/20/2008

Program terbilang (15 digit ; VB 6.0)

Artikel sebelumnya, sudah dibahas tentang pemrograman program membilang 3 digit. Dengan nilai maksimum sebesar 999. Seperti yang sebelumnya sudah dibahas, rahasia pemrograman program terbilang ini terletak pada pemisahan (pembagian) digit pada angka.

Pada program 3 digit, terdapat 3 karakter angka yang masing - masing bernilai sebagai satuan, puluhan, dan ratusan. Bila pada pemrograman lebih dari 3 digit, hanya diperlukan sedikit perulangan dari fungsi program 3 digit, karena berapa digitpun ( > 3) pastinya dibagi setiap 3 digit. Contoh : dua puluh lima ribu = 25.000 ; perhatikan tanda titik pada 25.000 dan bayangkan pada angka - angka lainnya.

Intinya, hanya diperlukan sebuah fungsi yang dapat memanggil fungsi 3 digit dan memprosesnya, kemudian ditambahkan kata seperti "ribu", "juta", "miliyar", dan "triliun" sebagai pemisah nilai.

Berikut adalah diagram fungsinya.



Ok, cukup simple bukan? sekarang hanya tinggal mengetahui bagaimana cara mengambil 3 digit yang barusan dimaksud. Huh, lagi - lagi kita akan gunakan dungsi yang sama, pengolahan string, yaitu left, right dan Len.

Untuk menemukannya, cukup rumit dan membuat saya sedikit bingung, bagaimana saya bisa tepat mengambuil per 3 digit pada angka yang tak tentu digitnya? setelah di cuba - cuba, ternyata disini rahasianya "Len ( x ) -3", hasil dari jurus rahasia ini bisa diperkirakan seperti ini, "99687" di Len menghasilkan 5, dikurang 3 menjadi 2, nah angka 2 ini yang akan mengmbil "99", dan "687" nya diproses terlebih dahulu, baru angka "99" itu di proses.

Hmmm....
saya bingung apalagi yang mesti dijelaskan, mungkin anda akan lebih dapat polanya apabila membuatnya sendiri dari awal. Kembali ke pembahasan utama, semua terletak pada pembagian dan pengolahan string.

Ini script untuk program pembilangnya (max 15 digit) :

Dim digit As String
Dim Angka(10)

Public Function hasilTerbilang(ByVal isinya As String) As String

Dim y1, y2, y3, y4, y5 As String

If (Len(isinya) > 0) Then
y1 = Right(isinya, 3)
y1 = writeBilangan(y1)

If (Len(isinya) > 3) Then
y2 = Right(Left(isinya, Len(isinya) - 3), 3)
If (y2 = 1) Then
y2 = "seribu "
Else
y2 = writeBilangan(y2) & "ribu "
End If If (Len(isinya) > 6) Then
y3 = Right(Left(isinya, Len(isinya) - 6), 3)
If (y3 = 1) Then
y3 = "sejuta "
Else
y3 = writeBilangan(y3) & "juta "
End If If (Len(isinya) > 9) Then
y4 = Right(Left(isinya, Len(isinya) - 9), 3)
y4 = writeBilangan(y4) & "miliyar "


If (Len(isinya) > 12) Then
y5 = Right(Left(isinya, Len(isinya) - 12), 3)
y5 = writeBilangan(y5) & "triliyun "
End If
End If
End If
End If

hasilTerbilang = y5 & y4 & y3 & y2 & y1

ElseIf (isinya = 0) Then
hasilTerbilang = "nol"
End If

End Function



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
Apabila sebelumnya anda membaca tentang pembilang 3 digit, disini anda akan menemukan sedikit perubahan pada bagian deklarasi fungsi, bagian public pada fungsi "writeBilangan" diganti menjadi private. Pada script sebelumnya, tidak ada perubahan, hanya kode pemrograman yang 3 digit, dijalankan berulang - ulang, dan perulangan ini membuat fungsi baru bernama "hasilTerbilang" yang menghasilkan pembilang dari angka 15 digit. Dan ingat, masih banyak kode pemrograman yang lebih indah logikanya dari pemrograman ini.

3 komentar:

Anonim mengatakan...

Jenius! satu kata yang bisa saya katakan kepada anda

Anonim mengatakan...

Anda bisa membuat sesuatu yang sulit bisa semudah itu..salut

Anonim mengatakan...

Mungkin logikanya bisa dirubah dikit. Fungsi pembilang anda cukup bagus tapi jika diperbaiki sedikit mungkin lebih sesuai. sebaiknya jangan mengulang 3 digit, tapi dibuatkan prosedur baru yang menangani masing-masing (3 digit) dari bilangan. Mungkin lebih sesuai...