Hesap Makinesi – do while döngüsü

Şimdiye kadar yaptığımız hesap makinesinde hep bir işlemi yapıp program kendini sonlandırıyordu. Peki biz yeniden başlatmak zorunda kalmadan her işlem sonunda bize sorsa olmaz mı?

İşte bunu yapabilen komutlar do – while döngüsüdür.

Do while kullanımı şu şekildedir.

do
{
komutlar, komutlar ve komutlar….
} while(şart)

While şartı doğru (true) olduğu müddetçe do parantezleri arasındaki kodlar çalışacaktır.

Yine günlük hayattan bir örnekle açıklayalım. Alışverişe çıktınız ve almanız gereken 10 farklı şey var. 10 tane ürünü almak için 10 defa markete gitmeyiz, hepsini bir defada alırız. Yani şöyle gösterelim:

int alisverisLisetsindekiUrunSayisi=10;
do
{
sepete at;
alisverisLisetsindekiUrunSayisi=alisverisLisetsindekiUrunSayisi-1 –> açıklama, C# daki gibi gösterdim alisverisLisetsindekiUrunSayisi’nın artık yeni değeri kendisinden 1 eksilmiş olan olarak veriyoruz ki sonsuza kadar satın almayalım.
} while(alisverisLisetsindekiUrunSayisi>0)

Bu kod alişveriş listesindeki ürün sayısı 0’dan büyük olduğu müddetçe çalışacaktır.

Bunu hesap makinesine taşıyalım:

string devam;
do
{
Console.WriteLine(“Lütfen ilk sayıyı giriniz:”);
int ilkSayi = int.Parse(Console.ReadLine());

Console.WriteLine(“Lütfen ikinci sayıyı giriniz:”);
int ikinciSayi = int.Parse(Console.ReadLine());
//belki başka bir işlemi seçeceği için kullanıcı burada hemen 0 kuralını sorgulamayacağız

Console.WriteLine(“Lütfen yapmak istediğiniz işlemin simgesini seçiniz : \n + \n – \n * \n / “);
string islem = Console.ReadLine(); //burada kullanıcı artık yapmak istediği işlemi seçebilecek

if (islem == “+”)
{
Console.WriteLine(“Toplama işleminin sonucu:{0}”, ilkSayi + ikinciSayi);
}
else if (islem == “-“)
{
Console.WriteLine(“Çıkarma işleminin sonucu:{0}”, ilkSayi – ikinciSayi);
}
else if (islem == “/”)
{
while (ikinciSayi == 0)
{
Console.WriteLine(“Lütfen ikinci sayıyı 0 dan farklı giriniz:”);
ikinciSayi = int.Parse(Console.ReadLine());
}

float sonuc = (float)ilkSayi / ikinciSayi;
Console.WriteLine(“İki sayının bölümü:{0}”, sonuc);
}
else if (islem == “*”)
{
Console.WriteLine(“Çarpma işleminin sonucu:{0}”, ilkSayi * ikinciSayi);
}
else
{
Console.WriteLine(“uygun bir seçim yapmadınız”);
}
Console.WriteLine(“Yeni bir işlem yapmak ister misiniz? \n E – H”);
devam = Console.ReadLine();

} while ((devam == “E”) || (devam == “e”) || (devam == “Evet”) || (devam == “evet”));

Burada string tipinde devam isimli bir değişkeni önceden tanımlıyorum. Bunun nedeni C#’daki hiyerarşiden kaynaklanıyor. C#’da eğer süslü parantezler arasında bir değişken tanımlarsanız bu değişken {}’lerin dışında tanınmazlar. Eğer {}’lerin dışında da çalışmasını istiyorsanız daha önceden tanımlamalısınız. {}’ların içinde değerini değiştirebilirsiniz.

Burada da string tipindeki devam değişkenini dışarda tanımlıyoruz ama içerde kullanıcının ekrana yazdığı şey ile değerini tanımlıyoruz.

string değişken; şeklinde tanımladım ve ilk değer atamadım. Neden hata vermedi? Int tipindeki değişkenlerde ilk değeri atamazken hata verirken string tipinde ilk değişken “null” boş değer, anlamsız olarak otomatik tanımlanır.

Do {}’leri kapanınca while parantezinin içine yazdıklarıma bakın:

while ((devam == “E”) || (devam == “e”) || (devam == “Evet”) || (devam == “evet”));
Burada ne demek istedim?

|| işareti veya anlamına gelir.
== işareti eşit anlamına gelir.

Burada dediğimiz şey şu:

Kullanıcı ekrana “E” de yazsa “e”, “Evet” veya “evet” de yazsa biz onu devam et anlayacağız. Bunların dışında herhangi bir şey yazdığında ise programı kapatacağız. C# büyük küçük harf duyarlıdır. Bu nedenle ben aklıma gelen kullanıcının ekrana yazabileceği bazı şeyleri tanımladım. Kullanıcı her zaman sizin beklediğinizden daha fazla şey deneyen ve mutlaka programın bir bug’ını (hatasını) bulan kişidir. O yüzden keskin sınırlarla bir şekil çizmemenizi öneririm.

Bakalım bu kodun sonundaki sonuçlar ne oluyor?

Peki aynı örneği switch ile yapalım ama yaptığımıza biraz da renk katalım:

string devam;
do
{
Console.ForegroundColor = ConsoleColor.White; –> 1

Console.WriteLine(“Lütfen ilk sayıyı giriniz:”);
int ilkSayi = int.Parse(Console.ReadLine());

Console.WriteLine(“Lütfen ikinci sayıyı giriniz:”);
int ikinciSayi = int.Parse(Console.ReadLine());
//belki başka bir işlemi seçeceği için kullanıcı burada hemen 0 kuralını sorgulamayacağız

Console.WriteLine(“Lütfen yapmak istediğiniz işlemin simgesini seçiniz : \n + \n – \n * \n / “);
Console.ForegroundColor = ConsoleColor.Yellow; –>2
string islem = Console.ReadLine(); //burada kullanıcı artık yapmak istediği işlemi seçebilecek

Console.ForegroundColor = ConsoleColor.White; –>3
switch (islem)
{
case “+”:
Console.WriteLine(“Toplama işleminin sonucu:{0}”, ilkSayi + ikinciSayi);
break;
case “-“:
Console.WriteLine(“Çıkarma işleminin sonucu:{0}”, ilkSayi – ikinciSayi);
break;
case “*”:
Console.WriteLine(“Çarpma işleminin sonucu:{0}”, ilkSayi * ikinciSayi);
break;
case “/”:
while (ikinciSayi == 0)
{
Console.WriteLine(“Lütfen ikinci sayıyı 0 dan farklı giriniz:”);
ikinciSayi = int.Parse(Console.ReadLine());
}

float sonuc = (float)ilkSayi / ikinciSayi;
Console.WriteLine(“İki sayının bölümü:{0}”, sonuc);
break;
default:
Console.ForegroundColor = ConsoleColor.DarkRed; –>4
Console.WriteLine(“uygun bir işlem seçmediniz”);
break;
}

Console.WriteLine(“Yeni bir işlem yapmak ister misiniz? \n E – H”);
devam = Console.ReadLine();

} while ((devam == “E”) || (devam == “e”) || (devam == “Evet”) || (devam == “evet”));
Altını çizdiğim kodları yeni ekledim. Bakın bu kodların sonuçları ekranda ne değiştiriyor:

Console.ForegroundColor = ConsoleColor.DarkRed –> Bu kod şu demektir. Console uygulamasında ekrandaki yazı rengini kırmızı yapar.

1 ile işaretlediğimde konsol yazısını rengibi ne kalmış olursa olsun tekrar beyaz’a çeviriyorum. 2 ‘de kullanıcının girdiği işlemi sarı renkle yazdırıyorum.3’de işlem sonuçları beyaz görünmesi için tekrar beyaza çeviriyorum. ve 4’de eğer kullanıcı hatalı işlem seçerseonu uyarmak için kırmızı yazdırıyorum.

4. ile işaretlediğim aşamada kullanıcı yanlış işlem seçer ve düzeltip yeni bir işleme başladığında yazı rengini 1. deki kod ile düzeltmezsem artık kırmızı yazmaya başlar. Ya da işlem seçtikten sonra sarı rengini tekrar beyaza çevirmezsem devamını hep sarı yazar.

Kodlar sizin istediğiniz şeyi yaparlar, sizden daha fazla düşünmezler…

Reklamlar

No comments yet... Be the first to leave a reply!

Yorum Yaz

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

%d blogcu bunu beğendi: