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 StringApabila 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.
Dim Angka(10)
Public Function hasilTerbilang(ByVal isinya As String) As String
Dim y1, y2, y3, y4, y5 As String
If (Len(isinya) > 0) Theny1 = Right(isinya, 3)
y1 = writeBilangan(y1)
If (Len(isinya) > 3) Theny2 = Right(Left(isinya, Len(isinya) - 3), 3)End If
If (y2 = 1) Theny2 = "seribu "Elsey2 = writeBilangan(y2) & "ribu "End If If (Len(isinya) > 6) Theny3 = Right(Left(isinya, Len(isinya) - 6), 3)End If
If (y3 = 1) Theny3 = "sejuta "Elsey3 = writeBilangan(y3) & "juta "End If If (Len(isinya) > 9) Theny4 = Right(Left(isinya, Len(isinya) - 9), 3)End If
y4 = writeBilangan(y4) & "miliyar "
If (Len(isinya) > 12) Theny5 = Right(Left(isinya, Len(isinya) - 12), 3)End If
y5 = writeBilangan(y5) & "triliyun "
hasilTerbilang = y5 & y4 & y3 & y2 & y1
ElseIf (isinya = 0) ThenhasilTerbilang = "nol"End If
End Function
Public Function writeBilangan(ByVal nilai As String) As String
Angka(1) = "satu"End Function
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 Thennilai = Trim(nilai)Else
writeBilangan = procRatusan(Abs(nilai)) & procPuluhan(Abs(nilai)) & procSatuan(Abs(nilai))
writeBilangan = "nol"End If
Private Function procSatuan(ByVal x1 As String) As String
If (Left(Right(x1, 2), 1) <> Null) ThenEnd Function
procSatuan = ""ElseIf (Len(x1) > 1 And Left(Right(x1, 2), 1) = 1) Then
procSatuan = ""Else
procSatuan = Angka(Right(x1, 1))End If
Private Function procPuluhan(ByVal x2 As String) As String
Dim r2, s2 As StringEnd Function
r2 = Left(Right(x2, 2), 1)
s2 = Right(x2, 1)
If (Len(x2) > 1) Then
If (r2 = 1 And s2 = 0) ThenEnd If
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
Private Function procRatusan(ByVal x3 As String) As String
If (Len(x3) > 2) ThenEnd Function
If (Left(Right(x3, 3), 1) = 1) ThenEnd If
procRatusan = "seratus "Else
procRatusan = Angka(Left(Right(x3, 3), 1)) & " ratus "End If
3 komentar:
Jenius! satu kata yang bisa saya katakan kepada anda
Anda bisa membuat sesuatu yang sulit bisa semudah itu..salut
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...
Posting Komentar