13 Haziran 2014 Cuma

Okulda öğrendiğimiz gibi toplama yapan program

Bir çoğumuz hatırlar. Okulda toplamayı şema şeklinde yapardık. Örnek vermek gerekirse

      30
      40
+_____
      50

c# da yaparken ise genelde işlem hep arka planda otomatik hesaplar. Peki biz bunu tek tek nasıl hesaplarız?

Öyle bi mantık yürütmeliyiz ki program değil biz hesaplayalım. Elde olan sayıyı elinizde tutarak hesaplayalım. Bir blogda görmüştüm bu yapacağımız örnek bir yarışmada sorulmuştu. O zamanlar o yazı dikkatimi çekmemişti. Hatta hiç bakmadım bile girişi okudum puff dedim kapattım. Şimdi ise bir kahramanlık yapıp eskiden boş verdiğim bu programı yazmaya karar verdim. Sizinle de paylaşacağım ve tek tek satır satır hesaplayacağım. Adım adım anlatacağım.



1. Önce ekrana yazacak yazıları ve okuyacağımız değerleri alalım.
Console.Write("Toplanacak 2 sayı Girmeniz Gerekmektedir\nSayı 1 : ");
string sayi1 = Console.ReadLine();
Console.Write("Sayı 2 : ");
string sayi2 = Console.ReadLine();

2. adım ise  uzun olan sayıyı bulmak yani biri on basamaklı diğeri beş basamaklı ise üste 10 basamaklıyı koyalım ki döngümüz ona göre çalışsın.
string buyukolan = "", kucukolan = "", sonuc = ""; 
if (sayi1.Length > sayi2.Length) 
    { 
         buyukolan = sayi1; 
         kucukolan = sayi2; 
     }else
     { 
         buyukolan = sayi2; 
         kucukolan = sayi1; 
      }
3. Adım bu adımda fonksiyonumuzu yazalım bu sayede 4. adımda çağıracağımız fonksiyon gerekeceği için öncelik verdim. Bu Fonksiyonda 2 sayıyı topluyo yani 2 tane tek basamaklı sayı ile elde olan sayıyı topluyor ve ürettiği sayınıyı % işareti ile tek basamaklı toplamı döndürüyor ve /10 yaparak elde kalan sayıyı elde değişkenine atıyor. Elde değişkeni ref kullanıldığı için fonksiyonda başına ne geliyorsa yukarıda da o değeri alıyo yani bi fonksiyon ile 2 değer döndürüyoruz.hem elde sayısını hemde işlem sonucunu. Kodlarımızı vereyim hemen.

 static string Topla(int sayi1, int sayi2, ref int elde) 
   { 
      int sonuc=sayi1 + sayi2 + elde; 
      elde = sonuc / 10; 
      sonuc = sonuc % 10; 
      return sonuc.ToString(); 
   }
4. Adm ve bütün işleri toparladığımız adım. Burda büyük olan sayının karakter adedi kadar döngüye sokuyoruz ve döngüde sondan başa doğru teker teker rakamları toplatıyo ve sonuç değişkenine soldan ekliyor. Bu sayede okuldaki matematik kuralına uymuş ve kesin sonucu rakamların hex değere dönüşmeden istediğimiz kadar büyük sayıyı toplatmış oluyoruz. Döngüden çıktığımızda elde sayısı sıfır değilse en başa da onu ekliyor ve sonucumuzu ekrana yazıyor.

            int elde = 0; 
            for (int i = 0; i < buyukolan.Length; i++) 
{ 
                int x = int.Parse(buyukolan[(buyukolan.Length - 1) - i].ToString()); 
                int y = 0; 
                if ((kucukolan.Length - 1) - i >= 0) 
                { 
                   y= int.Parse(kucukolan[(kucukolan.Length - 1) - i].ToString()); 
                } 
                sonuc = Topla(x, y, ref elde) + sonuc; 
} 
            if (elde != 0) { sonuc = elde + sonuc; } 
            Console.WriteLine("Sonuç  : " + sonuc); 
            Console.ReadKey();

Programımızı denediğimizde math sınıfından daha başarılı bir toplama yaptığını göreceksiniz. Tabi bu programı yazarken de math sınıfını kullandık ama siz belli etmeyin :) Kodları tomar olarak altta veriyorum. Bloğumda bu yazımı okuduğunuz için teşekkür ederim.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Toplanacak 2 sayı Girmeniz Gerekmektedir\nSayı 1 : ");
            string sayi1 = Console.ReadLine();
            Console.Write("Sayı 2 : ");
            string sayi2 = Console.ReadLine();
            string buyukolan = "", kucukolan = "", sonuc = "";
            if (sayi1.Length > sayi2.Length)
            {
                buyukolan = sayi1;
                kucukolan = sayi2;
            }
            else
            {
                buyukolan = sayi2;
                kucukolan = sayi1;
            }
            int elde = 0;
            for (int i = 0; i < buyukolan.Length; i++)
            {
                int x = int.Parse(buyukolan[(buyukolan.Length - 1) - i].ToString());
                int y = 0;
                if ((kucukolan.Length - 1) - i >= 0)
                {
                    y = int.Parse(kucukolan[(kucukolan.Length - 1) - i].ToString());
                }
                sonuc = Topla(x, y, ref elde) + sonuc;

            }
            if (elde != 0) { sonuc = elde + sonuc; }
            Console.WriteLine("Sonuç  : " + sonuc);
            Console.ReadKey();
        }
        static string Topla(int sayi1, int sayi2, ref int elde)
        {
            int sonuc = sayi1 + sayi2 + elde;
            elde = sonuc / 10;
            sonuc = sonuc % 10;
            return sonuc.ToString();
        }
    }
}

Hiç yorum yok:

Yorum Gönder