Başlangıç > Kodlar > Visual Basic 6 ile Sayıyı yazıya dönüştürmenin özü

Visual Basic 6 ile Sayıyı yazıya dönüştürmenin özü





Doğal sayıları ifade edebilecek en genel yöntemle yazıldı. Öz birkaç kuralın, tüm doğal sayıları kavrayışının yalın biçimidir.






'   Geliştiren Okan ÖZÇELİK

Option Explicit

Private Type BirimDüzey
    Basamak(2) As Byte
End Type

Private Çözüm() As BirimDüzey
'Bu dizi aslında 2 boyutlu Byte  olsaydı da yeterliydi. Performans bakımından pek farkı olmadığı ve okunulurluğu daha kolay olduğu varsayılarak düzen bu şekilde sağlandı.

Private Düzey As Integer
Private kDüzey(4) As String


Private Function SayıyıYazıyaDönüştür(Sayı As String) As String
If Sayı = 0 Then SayıyıYazıyaDönüştür = "sıfır": Exit Function
Çözümle (Sayı)
SayıyıYazıyaDönüştür = Dönüştür
End Function

Private Sub Çözümle(Sayı As String)
'İşlemlemenin daha kolay olması ve mümkün olduğunca az farklı VB komutu _
kullanarak yalınlığı koruma niyetiyle sayı çözümleniyor.. _
Her basamağı dizi değişkenine atanıyor. Diziler, sayının bir nevi ritmik olan _
yüzlük düzeyler (gruplar) biçimindedir.
Dim Basamak As Byte
Dim BasamakSayısı As Byte

BasamakSayısı = Len(Sayı)

If BasamakSayısı Mod 3 = 0 Then ReDim Çözüm(BasamakSayısı / 3 - 1) _
Else ReDim Çözüm(BasamakSayısı \ 3)

For Düzey = 0 To UBound(Çözüm) - 1
    For Basamak = 0 To 2
        Çözüm(Düzey).Basamak(Basamak) _
        = Mid(Sayı, (BasamakSayısı - (Düzey * 3 + Basamak + 1)) + 1, 1)
    Next
Next


For Basamak = 0 To BasamakSayısı - 3 * (UBound(Çözüm)) - 1
    Çözüm(Düzey).Basamak(Basamak) _
    = Mid(Sayı, (BasamakSayısı - 3 * ((UBound(Çözüm))) - Basamak), 1)
Next

End Sub

Private Function Dönüştür() As String
Dim SonuçDüzeyDönüştür As String
kDüzey(0) = "bin"
kDüzey(1) = "milyon"
kDüzey(2) = "milyar"
kDüzey(3) = "trilyon"
kDüzey(4) = "katrilyon"
'Bu yazlım hiçbir yordamı değiştirmeye ya da yeni yordam eklemeye gerek olmadan _
"katrilyon"dan büyük sayıları da yazabilir. Bu tür sayıların adlarını kDüzey dizisine _
eklemeniz yeterlidir.

For Düzey = UBound(Çözüm) To 2 Step -1
    SonuçDüzeyDönüştür = DüzeyDönüştür(Çözüm(Düzey), False)
    If Not SonuçDüzeyDönüştür = "" Then
        Dönüştür = Dönüştür & SonuçDüzeyDönüştür & kDüzey(Düzey - 1)
    End If
Next

'Normalde her 10^(3*x) sayısı "bir" kelimesi eklenerek yazılır (birmilyon, birtrilyon...), _
ancak 10^(3*1) sayısı "birbin" olarak değil sadece "bin" olarak yazılır. _
Bu özel düzey özel algoritmaya muhtaçtır.
SonuçDüzeyDönüştür = DüzeyDönüştür(Çözüm(Düzey), True)
If UBound(Çözüm) > 0 Then
    If SonuçDüzeyDönüştür = "" Then
        If Çözüm(Düzey).Basamak(0) = 1 Then Dönüştür = Dönüştür & kDüzey(Düzey - 1)
    Else
        Dönüştür = Dönüştür & SonuçDüzeyDönüştür & kDüzey(Düzey - 1)
    End If
End If

Dönüştür = Dönüştür & DüzeyDönüştür(Çözüm(0), False)

End Function

Private Function DüzeyDönüştür(Sayı As BirimDüzey, ÖzelDüzey As Boolean) As String
Dim Rakam(9) As String
Dim Onluk(9) As String
Const YüzKat As String = "yüz"

Rakam(0) = ""
Rakam(1) = "bir"
Rakam(2) = "iki"
Rakam(3) = "üç"
Rakam(4) = "dört"
Rakam(5) = "beş"
Rakam(6) = "altı"
Rakam(7) = "yedi"
Rakam(8) = "sekiz"
Rakam(9) = "dokuz"

Onluk(0) = ""
Onluk(1) = "on"
Onluk(2) = "yirmi"
Onluk(3) = "otuz"
Onluk(4) = "kırk"
Onluk(5) = "elli"
Onluk(6) = "altmış"
Onluk(7) = "yetmiş"
Onluk(8) = "seksen"
Onluk(9) = "doksan"

If ÖzelDüzey = True Then
    'Dönüştür Fonksiyonunda bildirilen özel durum, Düzey'in sağ ilk rakamının _
    dışındaki rakamların 0 olması halinde geçerlidir...
    If Sayı.Basamak(2) = 0 And Sayı.Basamak(1) = 0 _
    And Sayı.Basamak(0) = 1 Then DüzeyDönüştür = "": Exit Function
End If

Select Case Sayı.Basamak(2)
    Case 0
    Case 1: DüzeyDönüştür = YüzKat
    Case Else: DüzeyDönüştür = Rakam(Sayı.Basamak(2)) & YüzKat
End Select

DüzeyDönüştür = _
DüzeyDönüştür _
& Onluk(Sayı.Basamak(1)) _
& Rakam(Sayı.Basamak(0))

End Function

Private Sub ŞimdiDönüştür_Click()
If Not IsNumeric(Sayıyla) Then GoTo YanlışGiriş
If Not Sayıyla = Format(Sayıyla, "#") Or Not Sayıyla >= 0 Or Not Sayıyla < 10 ^ (3 * (UBound(kDüzey) + 2)) Then GoTo YanlışGiriş
Yazıyla = SayıyıYazıyaDönüştür(Sayıyla)
Exit Sub
YanlışGiriş:
MsgBox "Doğru kapsamda bir Doğal Sayı girin..."
End Sub

Private Sub Form_Load()
Geliştiren = "Geliştiren Okan ÖZÇELİK" & Chr(13) & "okanozcelik@yahoo.com"
End Sub

Private Sub YazıyıKopyala_Click()
Clipboard.Clear
Clipboard.SetText Yazıyla
End Sub

 

TD Software


Reklamlar
  1. Henüz yorum yapılmamış.
  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s