Ruby’de Sayiyi Yaziya Ceviren Program

Ruby ile yapilmis sadece algoritma gelistirmeye yonelik bir calisma .Konsol programi olmakla beraber eger istenirse glade ile arayuz yapilip ve ya bir kac degisiklik yapilarak eklenti haline getirilebilir.Ornegin doviz birolari icin verilen paranin miktarini gonderip turkce okunus karsiligini geri gonderen bir fonksiyona donusturulebilir.Herneyse olayin genel mantigini anlatmak gerekirse eger turkce sayilarin okunusuna dikkat ederseniz,ilk uc haneden sonra bundan sonra gelen hanelerin sonuna basamak adi getirilerek devam edilir.Bir kac ornek ;
321 = Uc yuz + yirmi + bir
234754 = iki yuz +otuz +dort – bin – yedi yuz+ elli +dort // goruldgu gibi uc hane seklinde tekrarlaniyor sadece her uc hanede bir basamak adi ekleniyor.
Ozel durumlar :

  • Sifir sayi icinde gecerse okunmaz tek oldugunda okunur.
  • Normalde iki yuz,uc yuz,dort yuz gibi okundugu halde bir yuz okunmaz
  • Ustteki duruma benzer olarak bir bin okunmaz buna ragmen bir milyon ve sonrari okunur
  • Bu durumlar goz onunde bulundurularak bir kod yazmak istersek kisaca yazacagimiz kod soyle olmalidir.Sayimiz kac tane uclukten olusuyor.Bu uclukleri sirasiyla yazdirdiktan sonra (sayi degerini basamak degerini falan bulduktan sonra).Push yapip stack’a atiyoruz her atma olayindan once kacinci basamakta oldugumuzuda konrol edip sonuna ekliyoruz ki pop yaptigimizda sonucumuz sirali gelsin.Peki ama sayimiz ucun kati degilse bu olusacak ucluler patlamayacakmi bunuda en sondaki kalan kisminda tekrar baska uclu varmiscasina ama kac haneli olduguna bakarak ve ozel durumlarin ustesinden geliyoruz.

    1. span class=”st0″>"Okunacak sayiyi  : "#eksi sayiyi handle etme
    2.            a=a.abs
    3.            sayi=a
    4.           #eksi sayiyi handle etme
    5. "sifir"#
    6.       b[i]=a.modulo(katsayi)          #basamaksal deger bulma
    7.       a=a-b[i]                        #
    8.       rakam[i] =(b[i]/(katsayi/10))   #rakamsal deger bulma
    9.  
    10.       i=i+1                           #basamak sayisi
    11. "", 1 => "bir",2  => "iki",3 => "uc" ,4  => "dort",5  =>  "bes",6  =>  "alti",7  =>  "yedi", 8  => "sekiz", 9 => "dokuz"}
    12.     onlar= { 0 =>"",1 => "on",2  => "yirmi",3 => "otuz" ,4  => "kirk",5  =>  "elli",6  =>  "altmis",7  =>  "yetmis", 8  => "seksen", 9 => "doksan"}
    13.     hane =[ "" , "bin", "milyon", "milyar", "tirilyon", "katrilyon", "kentilyon", "seksilyon", "septilyon", "oktilyon", "nonilyon", "desilyon", "undesilyon", "dodesilyon", "tredesilyon", "kattuordesilyon", "kendesilyon", "sexdesilyon", "septendesilyon", "oktodesilyon", "novemdesilyon", "vigintilyon", "unvigintilyon", "dovigintilyon", "trevigintilyon", "kattuorvigintilyon", "kenvigintilyon"]
    14.  
    15.     #kac haneli oldugunu bildigimiz sayinin hanelerini 3erli ayirmam lazim icinde kac tane 3 erli grup
    16.     #oldugunu i sayisini 3 e bolerek bulup  daha sonrada 3 e gore modunu alip sayiyi tamamlamak gerek
    17. #puts "Kac grup :" + kac_grup.to_s
    18.      artan=i.modulo(3)
    19.  
    20.     z=0
    21.     c=0
    22.  
    23.           #3 hane veya buyukse gir
    24. " "# print  birler[rakam] + " yuz " + onlar[rakam] + " " +birler[rakam] + " "
    25. " yuz " + onlar[rakam[c+1]] + " " +birler[rakam[c]] + " "" " +birler[rakam[c]] + " "" yuz " + onlar[rakam[c+1]] + " " +birler[rakam[c]] + " "#puts "bir sekilde yazdirdiktan sonra 3 arttirrip artan degiskenini eklemek lazim"
    26. #3 hane veya buyukse cik
    27. #puts "Sonraki  " + birler[rakam] + " " + hane[z]
    28. "bir "" bir "+ hane[z] + " ""bin "" " + hane[z] + " "#sayi_oku.push( birler[rakam] + " " + hane[z] )
    29. # puts "Sonraki 2 " + onlar[ rakam ] + " " +birler[ rakam ] + " " + hane[z]
    30. " " +birler[ rakam[c] ] + " " + hane[z] + " ""Eksi ""================================================================="" = """"================================================================="""

    This program basically gets the number from console and writes to screen how its pronounce in Turkish.

    Tags: , , , , , ,

    Tuesday, March 31st, 2009 Linux, OS, Programming, Ruby, Uncategorized