Sayýlarý Yazýya Çevirme Örneði

Bu yazýda bir sayýnýn yazýya nasýl çevirebileceðimiz hakkýnda bir yol göstereceðim, dil olarak C# kullanýlacaktýr. Öncelikle belirteyim ki programlama ve C# konusunda çok yeniyim. Hemen hemen tüm bildiklerimi bu siteye borçluyum.

Aþaðýdaki kodda bulunan Oku fonksiyonu kendisine string olarak gönderilen tam sayýyý yazýya çevirmektedir. Kodun çalýþma mantýðý þöyledir.

oku fonksiyonuna gönderilen string  baþýna "0" eklemek suretiyle önce 15 haneye tamamlanýr, sonra yeni string 3 erli kümeler halinde 5 eþit parçaya bölünür ve her bir üçlü küme tek tek
 rakam
 dizisine yüklenir. Böylece 5 elemanlý rakam dizisinin her bir elemanýnda 3 karakterli bir string yüklü olur. 

1.Aþama

sayýmýz  32313234 olsun. ilk olarak sayýmýzýn hane sayýsýný baþýna 0 eklemek sureti ile 15 e çýkarýrýz.
Böylece yeni stringimiz  000000032313234 þeklini alýr.

2.Aþama

Stringimiz 3 erli kümeler halinde 5 eþit parçaya bölünür.

1. küme : 000
2. küme : 000
3. küme : 032
4. küme : 313
5. küme : 234
 

3.aþama

her bir küme 5 elemanlý rakam isimli araya yüklenir ve sonuçta

rakam[0] = "000"
rakam[5] = "234"

olur

rakam[5][0]="2"  5. kümenin yüzler basamaðý;
rakam[5][1]= "3" 5. kümenin onlar basamaðý;
rakam[5][2]= "4" 5. kümenin birler basamaðý;

olur.

4.aþama

10 elemanlý yüzler, onlar, birler string dizileri tanýmlanýr  ve i çleri doldurulur.

örn:

yuzler.SetValue("ikiyuz",2);
onlar.SetValue("otuz",3);
birler.SetValue("dört",4);

yani yuzler[2]+onlar[3]+birler[4] = ikiyüzotuzdört olur.

int x =Convert.ToInt16(rakam[5][0].ToString()); yüzler

int y =Convert.ToInt16(rakam[5][1].ToString()); onlar

int z =Convert.ToInt16(rakam[5][2].ToString()); birler

 

yuzler[x]+onlar[y]+birler[z] = ikiyüzotuzdört

 

bir döngü ile her bir kümeye bu iþlemi uygularsanýz, 1 ve ikinci kümlerin bütün elemanlarý sýfýr olduðu için  sonuçta

otuzdört
üçyüzonuç
ikiyüzotuzdört

ü elde edersiniz

5.Aþama

hane isimli 5 li array tanýmlanýr ve elemanlarý trilyon, milyar, milyon, bin ve sonuncusu da boþ olacak þekilde ayarlanýr. ayný döngü içerisinde her bir kümenin sonuna eklenir

string sonuc = "";     

for(int i = 0 ; i < 5;i++)

{
    sonuc = sonuc +

    yuzler[Convert.ToInt16(rakam[i][0].ToString())]+

    onlar[Convert.ToInt16(rakam[i][1].ToString())]+

    birler[Convert.ToInt16(rakam[i][2].ToString())]+

    hane[i];

}

Burada ayarlanmasý gereken durum eðer bir kümenin bütün elemanlarý sýfýrsa (yukarýdaki gibi) hanenin gözükmemesi gerekir. Yani

000 = yuzler[0]+onlar[0]+birler[0]+hane[0] dersek sonuç trilyon olur bu durumda

 if(rakam[0].ToString()!= "000")

    hane.SetValue("trilyon ",0);

if(rakam[1].ToString()!= "000")

    hane.SetValue("milyar ",1);

 if(rakam[2].ToString()!= "000")

    hane.SetValue("milyon ",2);

 if(rakam[3].ToString()!= "000")

    hane.SetValue("bin ",3);

yani rakam[0] (trilyon kümesi) "000" deðilse hane[0] = "trilyon" olsun demeliyiz.

Yanlýz bir sorun daha var. eðer sayý 1000 ise fonksiyon  bize haklý olarak "birbin"  i döndürür. Bir milyar var, Bir Milyon var ama bir bin ve bir yüz yok. Ben bu sorunu BirSorunu isimli fonksiyonla hallettim.

Aþaðýdaki kodu inceleyebilirsiniz.

using System;

namespace numbereader

{
     public class SayiOkuma
       {

             
privatestring[ ] yuzler =newstring[10];
             private string[ ] onlar =new string[10];
             private string[ ] birler =new string[10];
             private string[ ] hane = new string[5];
             private string[ ] rakam =newstring[5];
             // arraylarý tanýmlýyoruz

public SayiOkuma()

{

// içlerini dolduruyoruz

yuzler.SetValue("dokuzyüz",9);
yuzler.SetValue("sekizyüz",8);
yuzler.SetValue("yediyüz",7);
yuzler.SetValue("altýyüz",6);
yuzler.SetValue("beþyüz",5);
yuzler.SetValue("dörtyüz",4);
yuzler.SetValue("üçyüz",3);
yuzler.SetValue("ikiyüz",2);
yuzler.SetValue("yüz",1);
yuzler.SetValue("",0);

onlar.SetValue("doksan",9);
onlar.SetValue("seksen",8);
onlar.SetValue("yetmiþ",7);
onlar.SetValue("altmýþ",6);
onlar.SetValue("elli",5);
onlar.SetValue("kýrk",4);
onlar.SetValue("otuz",3);
onlar.SetValue("yirmi",2);
onlar.SetValue("on",1);
onlar.SetValue("",0);

birler.SetValue("dokuz",9);
birler.SetValue("sekiz",8);
birler.SetValue("yedi",7);
birler.SetValue("altý",6);
birler.SetValue("beþ",5);
birler.SetValue("dört",4);
birler.SetValue("üç",3);
birler.SetValue("iki",2);
birler.SetValue("bir",1);
birler.SetValue("",0);

hane.SetValue("",0);
hane.SetValue("",1);
hane.SetValue("",2);
hane.SetValue("",3);
hane.SetValue("",4);
/*  ilk olarak bu arrayýn elemanlarýný boþ olarak ayarlýyoruz eðer küme elemanlarý
000 deðilse trilyon,milyar,milyon bin deðerleri ile dolduruyoruz
*/

}

public string oku(string sayi)

{

int uzunluk = sayi.Length;
if(uzunluk > 15)

return "Hata girilen deðerin uzunluðu en fazla 15 olmalý";
// uzunluk 15 karakterden fazla olmamalý. si

try
{

long k = Convert.ToInt64(sayi);

}

catch(Exception ex)

{

return ex.Message.ToString();

}

sayi = "000000000000000"+sayi;
sayi = sayi.Substring(uzunluk,15);

rakam.SetValue(sayi.Substring(0,3),0);
rakam.SetValue(sayi.Substring(3,3),1);
rakam.SetValue(sayi.Substring(6,3),2);
rakam.SetValue(sayi.Substring(9,3),3);
rakam.SetValue(sayi.Substring(12,3),4);

if(rakam[0].ToString()!= "000")
    hane.SetValue("trilyon ",0);
if(rakam[1].ToString()!= "000")
    hane.SetValue("milyar ",1);
if(rakam[2].ToString()!= "000")
    hane.SetValue("milyon ",2);
if(rakam[3].ToString()!= "000")
    hane.SetValue("bin ",3);

string sonuc = "";

for(int i = 0 ; i < 5;i++)

{

sonuc = sonuc + yuzler[Convert.ToInt16(rakam[i][0].ToString())]+
birsorunu(onlar[Convert.ToInt16(rakam[i][1].ToString())]+birler[Convert.ToInt16(rakam[i][2].ToString())]+hane[i]);

}

return sonuc;

}

privatestring birsorunu (string sorun)

{

string cozum = "";
if (sorun == "birbin ")
cozum = "bin ";

else
    cozum = sorun;   

return cozum;

}

}

}

Herkese kolay gelsin. Bu arada dileyene DLL i gönderebilirim. Ýyi çalýþmalar.