1. Hello Guest, selamat datang di Forum WinPoin. Kamu bisa bertanya, berdiskusi, sharing, dan ngobrolin apapun seputar Windows, Windows Phone, PC, Gadget, atau hal seputar Teknologi lainnya. Selamat berkomunitas! ;)

Membuat Fungsi Terbilang dengan VBNet

Discussion in 'Developer Corner' started by mabaega, Jan 31, 2014.

  1. mabaega

    mabaega Well-Known Member

    Joined:
    Nov 9, 2013
    Messages:
    2,735
    Menbuat Fungsi Terbilang dengan VBNet

    Tulisan ini pernah saya buat sebelumnya di forum yang lain, sebagai bahan pembelajaran bahasa pemrograman.
    Dalam membuat program, seseorang dituntut untuk memahami konstanta, teknik dan logika dari permasalahan yang akan dituangkan kedalam program.

    Untuk pemanasan, saya akan coba menganalisa cara manusia menulis angka dan membaca angka, yang nantinya akan kita tuangkan kedalam program, sehingga program akan mampu membaca angka seperti halnya manusia.

    Dalam tulisan ini saya akan batasi pada pembacaan bilangan bulat yang terdiri dari bilangan cacah negatif dan bilangan cacah positif dan komponen desimal karena bilangan ini yang paling banyak digunakan dan paling mudah diapplikasikan kedalam program komputer.

    Bagaimana Angka Disusun.
    - Symbol bilangan negatif dituliskan dibagian paling kiri dari sederetan angka
    - Angka disusun dari kiri kekanan, dari angka dengan nilai satuan yang lebih besar ke nilai satuan yang labih kecil.
    - Komponen pecahan ditulis dengan menambahkan sysmbol desimal sebelum angka.
    - Untuk memudahkan pembacaan, angka akan disusun kedalam 3 digit group dan setiap group memiliki satuan yang berbeda.
    - Setiap digit dalam Group terdiri memiliki satuan yang berbeda (ratusan, puluhan dan satuan)

    Bagaimana Angka Dibaca
    cara membaca angka mungkin berbeda-beda, tulisan ini akan menggunakan cara saya dalam membaca angka.
    Setiap bahasa punya ketentuan-ketentuan/konstanta tersendiri dalam mambaca/menyebutkan angka.

    Konstanta/Ketentuan
    Dalam Bahasa Indonesia ada beberapa ketentuan dalam menyebutkan angka, diantaranya :

    Angka 0 dibaca Nol jika berdiri sendiri dan tidak dibaca jika digabungkan dengan angka lain
    Angka 1...9 dibaca Satu...Sembilan
    Angka 1 dalam Group dibaca Se jika memiliki Satuan, dan di baca Satu jika tidak memiliki Satuan
    Angka 1 (Puluhan) dibaca Se jika di ikuti angka 0 dan angka 1.
    Angka 1 (Puluhan) dibaca * Belas jika nilai puluhan < 20

    Tiga digit group diberi satuan yang ditentukan dari kanan ke kiri.
    Satuan untuk tiga digit group (Tanpa Satuan, Ribuan (Ribu), Jutaan (Juta), Milyaran (Milyar), Triliunan (Triliun)...dst.)
    Setelah Triliun, biasanya orang akan mengembalikan satuan ke Ribuan. misal Seribu Triliun, dst.... (ini akan jadi bug sampai disepakati nama satuannya)

    Prosedure pembacaan
    - Periksa angka apakah bernilai positif/negatif (symbol negatif dituliskan dibagian paling kiri angka)
    - Periksa angka apakah memiliki nilai pecahan (Pecahan dipisahkan dengan sysmbol desimal)
    - Pisahkan angka antara bilangan cacah dan pecahan
    - Pisahkan bilangan cacah dalam 3 digit group. (Group digit dipisahkan dengan symbol Group)
    - Setiap Group memiliki Nama/Satuan tersendiri sesuai urutan/levelnya
    - Untuk komponen pecahan, angka dibaca perdigit tanpa satuan.
    - Hasil pembacaan akan disatukan mulai dari symbol bilangan, group paling kiri kekanan dan nilai pecahannya.

    Kebetulan saya bukan pemerhati angka dan tata bahasa, jadi mungkin banyak yang kurang atau tidak sesuai.
    Tetapi wacana diatas sepertinya sudah cukup untuk diapplikasikan kedalam bahasa pemrograman.


    Apa yang perlu dipersiapkan dalam kode program?

    1. Kamus untuk menterjemahkan angka menjadi kata-kata
    2. Refrensi Nilai Satuan untuk tiap digit group
    3. Untuk memperkecil penggunaan memory, kata-kata unik akan langsung diterjemahkan dalam program
    4. Sebuah Fungsi/Prosedure yang akan memisahkan angka kedalam bilangan cacah dan pecahan, sekaligus mengelompokan angka kedalam tiga digit group.
    5. Sebuah Fungsi/Prosedure untuk untuk menterjemahkan angka dengan melihat refrensi yang dideklarasikan dalam Kamus dan Refrensi Satuan.

    ====================
    :bingung:

    Pertanyaan yang ada dalam benak saya:
    Membaca angka itu sepertinya mudah, Apakah penjabaran diatas tidak terlalu banyak?
    Sepertinya tidak, butuh waktu kurang lebih 3 tahun untuk mengenal angka, memahami angka dan bagai mana membacanya. Angka dikenalkan sejak Sekolah Pra TK hingga SD. dan kita tahu, anak-anak SD masih sulit jika diminta membaca angka lebih dari 6 digit.

    Siapa yang butuh program seperti ini?
    Semua applikasi membutuhkan otomatisasi dalam penterjemahan angka kedalam kata. Sistem informasi yang berhubungan dengan keuangan akan membutuhkan automatisasi ini.

    =====================
    :kagum:

    Coding akan dilanjutkan di post berikutnya.
    Click {Like} , jika ingin melihat kelanjutannya....

    GOTO NetxPost
    :woa:
     
  2. Jazz

    Jazz Windows Freak Staff Member

    Joined:
    Jan 6, 2014
    Messages:
    14,720
    RE: Menbuat Fungsi Terbilang dengan VBNet

    To Be Continued..??
    Kamu Penasaran..?? Sama Saya juga...:ketawa::ketawa:
    .
    Sepertinya belum disediain mas di Forum Fitur Resevered Post...:cool:
     
  3. mabaega

    mabaega Well-Known Member

    Joined:
    Nov 9, 2013
    Messages:
    2,735
    RE: Menbuat Fungsi Terbilang dengan VBNet

    Menterjemahkan Analisa kedalam Kode Program

    Buka Visual Studio IDE,
    Buat Sebuah VB Project Baru,
    Tambahkan sebuah Module baru dalam Project, dan buka Code Window.

    Membuat Kamus Refrensi, menggunakan SortedDictionary berisi angka sebagai Key dan String sebagai Kata.
    Buat Prosedure untuk mengisi kamus dengan bilangan-bilangan yang memiliki nama.
    Prosedur ini akan dijalankan sebelum Proses penterjemahan

    [vb]
    Private _Kamus As SortedDictionary(Of Integer, String)

    Private Sub InitializeKamus()
    _Kamus = New SortedDictionary(Of Integer, String)
    _Kamus.Clear()
    _Kamus.Add(0, "")
    _Kamus.Add(1, " Satu")
    _Kamus.Add(2, " Dua")
    _Kamus.Add(3, " Tiga")
    _Kamus.Add(4, " Empat")
    _Kamus.Add(5, " Lima")
    _Kamus.Add(6, " Enam")
    _Kamus.Add(7, " Tujuh")
    _Kamus.Add(8, " Delapan")
    _Kamus.Add(9, " Sembilan")
    _Kamus.Add(10, " Sepuluh")
    _Kamus.Add(11, " Sebelas")
    -Kamus.Add (100, " Seratus")
    End Sub

    [/vb]

    Membuat Refrensi Nama/Satuan untuk Group Angka dalam sebuah array
    Digunakan sebagai refrensi untuk menamai group sesuai dengan levelnya
    dari kanan ke kiri.

    [vb]
    Private _ArGroup() As String = {"", " Ribu", " Juta", " Milyar", " Triliun"}
    [/vb]


    Selanjutnya, membuat Fungsi Terbilang, yang akan menerima Input berupa angka
    apa yang dilakukan fungsi ini akan dijelaskan langsung dalam code

    [vb]
    'Fungsi ini menerima Masukan berupa bilangan bulat dengan type data Double
    'Dan akan memberikan Keluaran berupa string hasil terjemahan
    Public Function Terbilang(Bilangan As Double) As String
    'Deklarasi variable untuk pengelompokan bilangan
    Dim sRet As String = ""
    Dim sMinus As String = ""
    Dim BilCacah As Double = 0
    Dim BilPecahan As Integer = 0

    'Memanggil Prosedur InitializeKamus Mengisi daftar Kamus
    InitializeKamus()

    Try
    ' Jika Negatif atau kurang dari 0, Isi Variable dengan kata Minus
    If Bilangan < 0 Then sMinus = "Minus "

    ' Pisahkan antara bilangan cacah dan bilangan pecahan dengan membaca tanda desimal pada bilangan
    Dim grp() As String = Split(Math.Abs(Bilangan).ToString(System.Globalization.NumberFormatInfo.CurrentInfo), System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator)

    'Pisahkan bilangan dan simpan dalam variable masing-masing
    If grp.Length > 1 Then
    BilCacah = CDbl(grp(0))
    BilPecahan = CInt(grp(1))
    Else
    BilCacah = Bilangan
    End If

    'Pisahkan bilangan cacah menjadi 3 digit group Triple
    Dim triple() As String = Split(BilCacah.ToString("#,##0", System.Globalization.NumberFormatInfo.CurrentInfo), System.Globalization.NumberFormatInfo.CurrentInfo.NumberGroupSeparator)
    Array.Reverse(triple)


    For i As Integer = triple.Length - 1 To 0 Step -1
    ' Untuk setiap Group, Panggil Fungsi yang bertugas untuk membaca angka (BacaGroupAngka),
    ' Beritahu Funngsi tersebut, level group dari angka yang diberikan
    ' dan gabungkan hasilnya dalam variable StringReturn
    sRet = sRet & BacaGroupAngka(triple(i), False, IIf(i > 5, i - 5 + 1, i))
    Next


    If BilPecahan > 0 Then
    'Jika Input memiliki Pecahan, Panggil Fungsi yang bertugas untuk membaca angka(BacaGroupAngka),
    'dan beri tahu fungsi tersebut, bahwa angka yang kita beri adalah pecahan.
    'dan gabungkan hasilnya dalam variable StringReturn
    sRet = sRet & " Koma" & BacaGroupAngka(BilPecahan, True)
    End If

    'Gabungkan semua hasil dengan pembacaan
    sRet = sMinus & sRet

    Catch ex As Exception
    MsgBox(ex.Message, vbOKOnly, "Parsing Bilangan")

    End Try

    'Kosongkan Kamus dan hapus kamus dari memory

    _Kamus.Clear()
    _Kamus = Nothing

    'Kembalikan Hasil Pembacaan. Kepada peemberi perintah.
    Return sRet.Trim
    End Function

    [/vb]

    Fungsi Pembaca Group Angka, adalah bagian proses yang akan menterjemahkan angka yang diterima dengan kamus yang didefinisikan diatas. Fungsi ini akan membedakan Input, berdasarkan jenis bilangan, apakah cacah atau pecahan karena kedua bilangan tersebut punya cara berbeda dalam membacanya.
    Fungsi ini juga membutuhkan Level Group untuk memberi nama/satuan pada group angka.

    Lebih jelasnya, akan dijelaskan dalam code berikut :

    [vb]
    'Fungsi pembaca angka, menerima masukan berupa angka, jenis bilangan, dan level group
    Private Function BacaGroupAngka(ByVal Angka As Integer, Optional IsPecahan As Boolean = False, Optional iGroup As Byte = 0) As String

    Dim sRet As String = ""
    'Ubah tipe data angka menjadi string dengan format "000", karena angka akan dipisahkan
    Dim sAngka As String = Angka.ToString("000")

    'Periksa jenis bilangan, Pecahan atau Cacah
    Select Case IsPecahan
    Case True 'Jika pecahan
    Try
    For i As Integer = 0 To sAngka.Length - 1
    'Terjemahkan semua angka satu persatu perdigit dengan melihat kamus
    If CInt(sAngka.Substring(i, 1)) = 0 Then
    'jika angka "0", beri nama langsung dengan "Nol"
    'dalam kamus key "0" tidak akan memiliki nama, karena "0" digabungkan dengan angka lain
    sRet = sRet & "Nol"
    Else
    'jika bukan "0", ambil value angka dari kamus sesuai dengan angkanya sebagai Key
    sRet = sRet & _Kamus(CInt(sAngka.Substring(i, 1)))
    End If
    Next
    Catch ex As Exception
    MsgBox(ex.Message, vbOKOnly, "Baca Pecahan")
    End Try
    Case Else ' Juka bukan Pecahan (bilangan cacah)
    Try
    If Angka = 1 And iGroup = 1 Then
    'Jika angka yang diberikan = 1 dan level Group = 1 pasti dibaca Seribu (001.xxx)
    sRet = " Seribu"
    ElseIf _Kamus.ContainsKey(Angka) Then
    'Jika bukan=1 dan atau bukan level = 1, lihat angka dalam kamus,
    'Gunakan jika angka ada dalam kamus.
    sRet = _Kamus(Angka) & _ArGroup(iGroup)
    Else
    'jika tidak ada dalam kamus, pisahkan angka dalam group
    'angka paling kanan adalah satuan. pasti ada dalam kamus
    Dim Satuan As String = _Kamus(CInt(sAngka.Substring(2, 1)))

    'Siapkan variable untuk puluhan dan ratusan
    Dim puluhan As String = ""
    Dim ratusan As String = ""

    'Periksa 2 digit angka paling kanan
    If _Kamus.ContainsKey(CInt(sAngka.Substring(1, 2))) Then
    'ambil value jika 2 digit angka paling kanan ada dalam kamus (10 dan 11)
    puluhan = _Kamus(CInt(sAngka.Substring(1, 2)))
    Else
    'Jika tidak ada angka dalam kamus, ambil 1 digit angka kedua (puluhan)
    If CInt(sAngka.Substring(1, 1)) = 0 Then
    'jika angka ke 2 = 0, berarti dua angka sebelah kanan adalah satuan
    'isi variable puluhan dengan angka pada variable satuan.
    puluhan = Satuan
    ElseIf CInt(sAngka.Substring(1, 1)) = 1 Then
    'jika angka ke 2 adalah 1, berarti 2 digit angka adalah belasan (kurang dari 20)
    'isi variable puluhan dengan menambahkan kata Belas pada satuan
    puluhan = Satuan & " Belas"
    Else
    'Jika angka ke 2 bukan 0 dan bukan 1, cari angka dikamus, dan tambahkan kata " Puluh"
    puluhan = _Kamus(CInt(sAngka.Substring(1, 1))) & " Puluh" & Satuan
    End If
    End If

    'Periksa angka pertama pada group (ratusan)
    If CInt(sAngka.Substring(0, 1)) = 0 Then
    'Jika angka pertama adalah 0, berarti group adalah puluhan
    ratusan = puluhan
    ElseIf CInt(sAngka.Substring(0, 1)) = 1 Then
    'Jika angka pertama adalah 1, beri nama Seratus
    ratusan = " Seratus" & puluhan
    Else
    'jika bukan 0 dan bukan 1, ambil nilai di kamus dan tambahkan kata "Ratus"
    ratusan = _Kamus(CInt(sAngka.Substring(0, 1))) & " Ratus" & puluhan
    End If

    'Proses selanjutnya adalah memberi Nama Group sesuai dengan Levelnya
    sRet = ratusan & _ArGroup(iGroup)
    End If
    Catch ex As Exception
    MsgBox(ex.Message, vbOKOnly, "Baca Bilangan Bulat")
    End Try
    End Select

    'Kembalikan Hasilnya pada Fungsi Terbilang diatas.
    Return sRet
    End Function

    [/vb]


    Selesai. jangan lupa simpan Project.
    mudah-mudahan dapat dipahami alurnya. Lumayan buat melatih otak menterjemahkan logika.

    Selanjutnya adalah bagaimana menggunakan Modele ini dalam code form?

    Buka Form1 dalam Project
    Tambahkan 1 Textbox dan 1 Button dan 1 label, nama default TextBox1, Button1, dan Label1
    Double click Button1 (jendela code akan terbuka)
    Tambahkan code berikut didalamnya

    [vb]
    'Tambahkan kode-kode untuk memeriksa isi textbox sebelum fungsi terbilang dipanggil.
    'ini untuk mencegah error saat textbox berisi angka yang tidak dapat di konversi ke typedata Double.

    Label1.Text = Terbilang(TextBox1.text)

    [/vb]

    Running Applikasinya....

    Seharusnya Fungsi Terbilang Sudah Bekerja.....
    ===========
    [attachment=617]


    Full Code :


    Module1.vb
    [vb]
    Module Module1
    Private _Kamus As SortedDictionary(Of Integer, String)
    Private _ArGroup() As String = {"", " Ribu", " Juta", " Milyar", " Triliun"}

    Private Sub InitializeKamus()
    _Kamus = New SortedDictionary(Of Integer, String)
    _Kamus.Clear()
    _Kamus.Add(0, "")
    _Kamus.Add(1, " Satu")
    _Kamus.Add(2, " Dua")
    _Kamus.Add(3, " Tiga")
    _Kamus.Add(4, " Empat")
    _Kamus.Add(5, " Lima")
    _Kamus.Add(6, " Enam")
    _Kamus.Add(7, " Tujuh")
    _Kamus.Add(8, " Delapan")
    _Kamus.Add(9, " Sembilan")
    _Kamus.Add(10, " Sepuluh")
    _Kamus.Add(11, " Sebelas")
    _Kamus.Add(100, " Seratus")
    End Sub

    Public Function Terbilang(Bilangan As Double) As String
    Dim sRet As String = ""
    Dim sMinus As String = ""
    Dim BilCacah As Double = 0
    Dim BilPecahan As Integer = 0


    InitializeKamus()

    Try
    If Bilangan < 0 Then sMinus = "Minus "

    Dim grp() As String = Split(Math.Abs(Bilangan).ToString(System.Globalization.NumberFormatInfo.CurrentInfo), System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator)
    If grp.Length > 1 Then
    BilCacah = CDbl(grp(0))
    BilPecahan = CInt(grp(1))
    Else
    BilCacah = Bilangan
    End If

    Dim triple() As String = Split(BilCacah.ToString("#,##0", System.Globalization.NumberFormatInfo.CurrentInfo), System.Globalization.NumberFormatInfo.CurrentInfo.NumberGroupSeparator)
    Array.Reverse(triple)

    For i As Integer = triple.Length - 1 To 0 Step -1
    sRet = sRet & BacaGroupAngka(triple(i), False, IIf(i > 5, i - 5 + 1, i))
    Next

    If BilPecahan > 0 Then
    sRet = sRet & " Koma" & BacaGroupAngka(BilPecahan, True)
    End If

    sRet = sMinus & sRet

    Catch ex As Exception
    MsgBox(ex.Message, vbOKOnly, "Parsing Bilangan")

    End Try

    _Kamus.Clear()
    _Kamus = Nothing

    Return sRet.Trim
    End Function

    Private Function BacaGroupAngka(ByVal Angka As Integer, Optional IsPecahan As Boolean = False, Optional iGroup As Byte = 0) As String
    Dim sRet As String = ""
    Dim sAngka As String = Angka.ToString("000")

    Select Case IsPecahan
    Case True
    Try
    For i As Integer = 0 To sAngka.Length - 1
    If CInt(sAngka.Substring(i, 1)) = 0 Then
    sRet = sRet & "Nol"
    Else
    sRet = sRet & _Kamus(CInt(sAngka.Substring(i, 1)))
    End If
    Next
    Catch ex As Exception
    MsgBox(ex.Message, vbOKOnly, "Baca Pecahan")
    End Try
    Case Else
    Try
    If Angka = 1 And iGroup = 1 Then
    sRet = " Seribu"
    ElseIf _Kamus.ContainsKey(Angka) Then
    sRet = _Kamus(Angka) & _ArGroup(iGroup)
    Else
    Dim Satuan As String = _Kamus(CInt(sAngka.Substring(2, 1)))
    Dim puluhan As String = ""
    Dim ratusan As String = ""

    If _Kamus.ContainsKey(CInt(sAngka.Substring(1, 2))) Then
    puluhan = _Kamus(CInt(sAngka.Substring(1, 2)))
    Else
    If CInt(sAngka.Substring(1, 1)) = 0 Then
    puluhan = Satuan
    ElseIf CInt(sAngka.Substring(1, 1)) = 1 Then
    puluhan = Satuan & " Belas"
    Else
    puluhan = _Kamus(CInt(sAngka.Substring(1, 1))) & " Puluh" & Satuan
    End If
    End If

    If CInt(sAngka.Substring(0, 1)) = 0 Then
    ratusan = puluhan
    ElseIf CInt(sAngka.Substring(0, 1)) = 1 Then
    ratusan = " Seratus" & puluhan
    Else
    ratusan = _Kamus(CInt(sAngka.Substring(0, 1))) & " Ratus" & puluhan
    End If

    sRet = ratusan & _ArGroup(iGroup)
    End If
    Catch ex As Exception
    MsgBox(ex.Message, vbOKOnly, "Baca Bilangan Bulat")
    End Try
    End Select

    Return sRet
    End Function

    End Module

    [/vb]

    Form1.vb
    [vb]
    Public Class Form1

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim angka As Double = 0
    If Double.TryParse(TextBox1.Text, angka) Then
    Label1.Text = Terbilang(angka)
    End If
    End Sub
    End Class
    [/vb]


    'Kritik, Saran dan pertanyaan dapat di tanyakan di Post selanjutnya...
    Thank's
    :sokganteng:
     

    Attached Files:

  4. Febian

    Febian Administrator Staff Member

    Joined:
    May 7, 2013
    Messages:
    8,029
    RE: Menbuat Fungsi Terbilang dengan VBNet

    Done..!
    Fitur reserved post di forum developer corner dan programming udah aktif
    Sekarang di kedua forum tsb udah bs bikin reserved post
    :Goodjob:
     
  5. Febian

    Febian Administrator Staff Member

    Joined:
    May 7, 2013
    Messages:
    8,029
    RE: Menbuat Fungsi Terbilang dengan VBNet

    Thanks sob udah sharing, ditunggu lanjutannya..udah penasaran nih..hihihihiihi
    +Rep
    :Goodjob:
     
  6. Jazz

    Jazz Windows Freak Staff Member

    Joined:
    Jan 6, 2014
    Messages:
    14,720
    RE: Menbuat Fungsi Terbilang dengan VBNet

    Fungsi Koma
    Code:
    Public Function AmbilSblmKoma (ByVal NilaiNya As Decimal) As Decimal
        Dim hSl As Decimal
      
        hSl = Left(NilaiNya, InStr(NilaiNya, ",") - 1)  
        Return hSl  
      
    End Function
    
    Fungsi Konversi
    Code:
    Option Explicit On  
    Module module_terbilang  
      
        Public Function TERBILANG(ByVal x As Double) As String  
            Dim tampung As Double  
            Dim teks As String  
            Dim bagian As String  
            Dim i As Integer  
            Dim tanda As Boolean  
      
            Dim letak(5)  
            letak(1) = "RIBU "  
            letak(2) = "JUTA "  
            letak(3) = "MILYAR "  
            letak(4) = "TRILYUN "  
      
            If (x < 0) Then  
                TERBILANG = ""  
                Exit Function  
            End If  
      
            If (x = 0) Then  
                TERBILANG = "NOL"  
                Exit Function  
            End If  
      
            If (x < 2000) Then  
                tanda = True  
            End If  
            teks = ""  
      
            If (x >= 1.0E+15) Then  
                TERBILANG = "NILAI TERLALU BESAR"  
                Exit Function  
            End If  
      
            For i = 4 To 1 Step -1  
                tampung = Int(x / (10 ^ (3 * i)))  
                If (tampung > 0) Then  
                    bagian = ratusan(tampung, tanda)  
                    teks = teks & bagian & letak(i)  
                End If  
                x = x - tampung * (10 ^ (3 * i))  
            Next  
      
            teks = teks & ratusan(x, False)  
            TERBILANG = teks & "RUPIAH"  
        End Function  
      
        Function ratusan(ByVal y As Double, ByVal flag As Boolean) As String  
            Dim tmp As Double  
            Dim bilang As String  
            Dim bag As String  
            Dim j As Integer  
      
            Dim angka(9)  
            angka(1) = "SE"  
            angka(2) = "DUA"  
            angka(3) = "TIGA"  
            angka(4) = "EMPAT"  
            angka(5) = "LIMA"  
            angka(6) = "ENAM"  
            angka(7) = "TUJUH"  
            angka(8) = "DELAPAN"  
            angka(9) = "SEMBILAN"  
      
            Dim posisi(2)  
            posisi(1) = "PULUH"
            posisi(2) = "RATUS"  
      
            bilang = ""  
            For j = 2 To 1 Step -1  
                tmp = Int(y / (10 ^ j))  
                If (tmp > 0) Then  
                    bag = angka(tmp)  
                    If (j = 1 And tmp = 1) Then  
                        y = y - tmp * 10 ^ j  
                        If (y >= 1) Then  
                            posisi(j) = "BELAS "  
                        Else  
                            angka(y) = "SE"  
                        End If  
                        bilang = bilang & angka(y) & posisi(j)  
                        ratusan = bilang  
                        Exit Function  
                    Else  
                        bilang = bilang & bag & posisi(j)  
                    End If  
                End If  
                y = y - tmp * 10 ^ j  
            Next  
      
            If (flag = False) Then  
                angka(1) = "SATU "  
            End If  
            bilang = bilang & angka(y)  
            ratusan = bilang  
        End Function  
          
    End Module
    
    :kagum:
     
  7. megapro1945

    megapro1945 New Member

    Joined:
    May 14, 2014
    Messages:
    11
    RE: Menbuat Fungsi Terbilang dengan VBNet

    bro bro mau tanya donk, kalo fungsi terbilang nya sperti baca plat no kendaraan, kan ga bisa dia 123, seratus dua puluh tiga, tapi satu dua tiga, itu gimana ya kodingannya???thanks..

    mohon bantuannya.....:kagum:
     
  8. mabaega

    mabaega Well-Known Member

    Joined:
    Nov 9, 2013
    Messages:
    2,735
    wah itu jauh lebih mudah om. tinggal buat array atau dictionary list berisi test Nol, Satu ... Sembilan dan huruf dari A - Z
    kemudian bandingkan angkanya dengan yang di baca oleh OCR.

    untuk OCR aku gak ada samplenya om. tapi kalau hanya untuk konversi angka ke Text bisa dengan cara ini :

    1. Buat Project Baru
    2. Buka Form1
    3. Tambahkan 1 Textbox, 1 Button dan 1 label
    4. Buka window Code dan copy/paste code berikut :

    Code:
    Public Class Form1
        Private dt As New Dictionary(Of Integer, String)
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim Txt As String = TextBox1.Text.Trim
            Dim str As String = ""
            If Txt.Length > 0 Then
                Dim spl As Char() = Txt.ToCharArray
                For i As Integer = 0 To spl.Length - 1
                    If IsNumeric(spl(i)) Then
                        str = str & " " & dt(CInt(spl(i).ToString))
                    Else
                        If spl(i).ToString.Trim.Length > 0 Then
                            str = str & " " & spl(i).ToString.ToUpper
                        End If
                    End If
                Next
            End If
            Label1.Text = str.Trim
        End Sub
    
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            dt.Clear()
            dt.Add(0, "Nol")
            dt.Add(1, "Satu")
            dt.Add(2, "Dua")
            dt.Add(3, "Tiga")
            dt.Add(4, "Empat")
            dt.Add(5, "Lima")
            dt.Add(6, "Enam")
            dt.Add(7, "Tujuh")
            dt.Add(8, "Delapan")
            dt.Add(9, "Sembilan")
        End Sub
    End Class
    
    [attachment=2420]

    Untuk Angka Ke Suara lebih simple lagi...
    Konversi Char ke Suara Menggunakan Component WINMM.DLL (VB.Net)
     

    Attached Files:

    • BE.png
      BE.png
      File size:
      3.1 KB
      Views:
      1,497

Share This Page