$1.99 Domains* at GoDaddy.com

C# ile Sayıları Yazıya Çevirme Örneği

c-ders-134

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[ ] =newstring[10];
             private string[ ] onlar =new string[10];
             private string[ ] birler =new string[10];
             private string[ ] hane = new string[5];
             private string[ ] =newstring[5];
             // arrayları tanımlıyoruz

public ()

{

// 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 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;

}

}

}

Kategoriler: C# Programlama, Yazılım

Tags: , ,

Yorumlar

Yorum Yok

Yorumunuzu Ekleyin

Yorum eklemek için giris yapmalısınız.