23 Kasım 2011 Çarşamba

C# Sayıyı Yazıya Çevirme(Sayının yazı karşılığı)

Merhaba arkadaşlar.Bugün paylaşacağım şey mantık oluşturması açısından önemli bir örnek.Basit şekilde yapılmış bu program ileride yapacağımız bir fatura programında kullanılabilir.Bildiğiniz gibi faturalarda Toplam Tutar yazar.Hemen yanında veya altında Toplam Tutarın yazıyla basılmış halini görürüz.Bu yaptığımızı programda bunu tam olarak yapmasakta mantık oluşturması bakımından iyi olacaktır. Biz burada sadece 0 ile 1000 arasında girilen tam sayıları yazıya çevireceğiz.Geliştirmesi size kalmış:)

Öncelikli aşağıdaki formu hazırlıyoruz.






























Gördüğünüz gibi formumuzda 1 adet Textbox 1 adet button 2 adet Label var.Bu formu oluşturduktan sonra button'a çift tıklayarak click olayına aşağıdaki kodları yazıyoruz.



private void button1_Click(object sender, EventArgs e)
        {
            int yuzler = 0, onlar = 0, birler = 0, girilen;
            string sonuc = "";
            girilen = Convert.ToInt32(textBox1.Text);
            if (girilen <= 0 || girilen >= 1000)
                MessageBox.Show("Lütfen 0 ile 1000 arasında bir sayı giriniz", "HATA", MessageBoxButtons.OK, MessageBoxIcon.Error);
            if (girilen > 99)
            {
                yuzler = girilen / 100;
                if (girilen - (yuzler * 100) == 0) goto ifSonu;
                onlar = (girilen - (yuzler * 100)) / 10;
                birler = girilen - ((yuzler * 100) + (onlar * 10));
            }
            else if (girilen > 9)
            {
                onlar = girilen / 10;
               
                birler = girilen - (onlar * 10);






            }
            else
                birler = girilen;




        ifSonu:
            


            if (yuzler > 0)
            {
               
                switch (yuzler)
                {
                    case 1:
                        sonuc = "yüz";
                        
                        break;
                    case 2:
                        sonuc = "ikiyüz";
                        break;
                    case 3:
                        sonuc = "üçyüz";
                        break;
                    case 4:
                        sonuc = "dörtyüz";
                        break;
                    case 5:
                        sonuc = "beşyüz";
                        break;
                    case 6:
                        sonuc = "altıyüz";
                        break;
                    case 7:
                        sonuc = "yediyüz";
                        break;
                    case 8:
                        sonuc = "sekizyüz";
                        break;
                    case 9:
                        sonuc = "dokuzyüz";
                        break;
                }
            }
            if (onlar > 0)
            {
                switch (onlar)
                {
                    case 1:
                        sonuc = sonuc + "on";
                        break;
                    case 2:
                        sonuc = sonuc + "yirmi";
                        break;
                    case 3:
                        sonuc = sonuc + "otuz";
                        break;
                    case 4:
                        sonuc = sonuc + "kırk";
                        break;
                    case 5:
                        sonuc = sonuc + "elli";
                        break;
                    case 6:
                        sonuc = sonuc + "altmış";
                        break;
                    case 7:
                        sonuc = sonuc + "yetmiş";
                        break;
                    case 8:
                        sonuc = sonuc + "seksen";
                        break;
                    case 9:
                        sonuc = sonuc + "doksan";
                        break;
                }
            }
            if (birler > 0)
            {
                switch (birler)
                {
                    case 1:
                        sonuc = sonuc + "bir";
                        break;
                    case 2:
                        sonuc = sonuc + "iki";
                        break;
                    case 3:
                        sonuc = sonuc + "üç";
                        break;
                    case 4:
                        sonuc = sonuc + "dört";
                        break;
                    case 5:
                        sonuc = sonuc + "beş";
                        break;
                    case 6:
                        sonuc = sonuc + "altı";
                        break;
                    case 7:
                        sonuc = sonuc + "yedi";
                        break;
                    case 8:
                        sonuc = sonuc + "sekiz";
                        break;
                    case 9:
                        sonuc = sonuc + "dokuz";
                        break;
                }


                }


            label1.Text = sonuc;
        }






En başta "girilen" diye bir değişken tanımladık.Bu int tipindeki değişkene klavyeden girdiğimiz sayıyı atıyoruz:
 girilen = Convert.ToInt32(textBox1.Text);


Burada bu değişkeni int olarak tanımladık çünkü bizim küsüratlı sayılarla işimiz yok ve int kullanmamız burada  bize büyük avantaj sağlayacak.Bunu programın gidişatında anlayabilirsiniz.


 if (girilen <= 0 || girilen >= 1000)
  MessageBox.Show("Lütfen 0 ile 1000 arasında bir sayı giriniz", "HATA", MessageBoxButtons.OK, MessageBoxIcon.Error);


Bu iki satıda girilen değerlerin kontrolünü yapıyoruz.0 ile 1000 arasındaki sayıları kabul ediyoruz sadece.Eğer bu koşula uymayan bir durum varsa messagebox nesnemiz çalışıyor.Messagebox'ın içine girilen ilk ifade göstermek isteğimiz uyarı mesajı ikinci ifade mesaj başlığımız üçüncüsü kullanılan button dördüncüsü ise messagebox içerisinde kullandığımız icon.Messagebox'ın birçok şekilde kullanımı vardır.



  if (girilen > 99)
            {
                yuzler = girilen / 100;
                if (girilen - (yuzler * 100) == 0) goto ifSonu;
                onlar = (girilen - (yuzler * 100)) / 10;
                birler = girilen - ((yuzler * 100) + (onlar * 10));
            }


Girilen sayı üç basamaklı ise yukarıdaki bu kod parçacığı çalışacaktır.Örnek olarak 115 sayısını ele alalım.Bu 3 basamaklı bir sayı olduğu için burada işleme sokuyoruz.Bu sayıyı 100'e böldüğümüzde 1.15 çıkıyor.Ama biz değişken tiplerimizi int olarak belirttiğimiz için bunun sadece tam kısmını alıyoruz.Int olarak tanımlamamızın avatajı burada.yuzler=1 oldu.İkinci kısımda aynı şekilde onlar=1 diğerinde ise birler=5 çıkıyor.Buradaki mantık sayıyı tamamen parçalamak.Basamaklarına ayırdık ki daha kolay bir şekilde yazıya dökebilelim.  if (girilen - (yuzler * 100) == 0) goto ifSonu; Bu cümlenin anlamı şudur.Girdiğimiz sayı düzse yani 100 200 300 gibi sayılarsa başka hiçbir işlem yapmadan goto ile gösterilen yere dallanıyor.Burada ifsonu diye bir etiket tanımlamışız.Eğer sayı böyle gelirse bütün işlemleri durdurup etiketin olduğu yerden devam ediyor.Bunu da programın bütününe bakarsanız göreceksiniz.



  else if (girilen > 9)
            {
                onlar = girilen / 10;
               
                birler = girilen - (onlar * 10);
}


Bu kısımda da aynı şekilde eğer 2 basamaklı bir sayı girilirse basamaklara bölüyoruz.


        else


                birler = girilen;


Zaten girilen tek basamaklı bir sayı ise bölmeye gerek yok direk birler değişkenimizin içine atıyoruz.

Son kısımda sayımızı basamaklara böldükten sonra herbir sayıya denk gelen yazılara isim veriyoruz. yuzler=1 ise bunun yazı karşılığı yüz olacaktır.Önemli nokta basamaklarımız 0 dan büyük ise isim verme olayı gerçekleşecektir.(if (onlar > 0))


Şart gerçekleştikten sonra switch case yapısıyla değişkenimizin hangi değerde olduğunu buluyoruz ve string tipindeki sonuc değişkenimizin içerisine ne yazması gerektiğini atıyoruz.Diğer yerlerdede aynısını yapıyoruz.Bu kısımda stiring ifadeleri toplamış oluyoruz. sonuc="yüz" ise sonuc=sonuc+"elli" dersek sonucu yazdığımız zaman "yüzelli" şeklinde olacaktır.En sonunda zaten label'a sonuc değişkenimizi atayıp olayı bitiriyoruz.





1 yorum: