Ümit YORMAZ Kişisel Blog

25 Kasım 2013 Pazartesi

C#’da if, else, else if Komutları

1) if(eğer) komutu bir şart sunar ve şartın doğru olması sonucu içindeki işlemleri yapar.

if(şart)
{
işlemler(komutlar)
}

Burada şart doğru olmadığı sürece ‘işlemler(komutlar)’ satırına asla geçmez. Şimdi buna ilişkin bir not hesaplama ve şart sunarak ekrana geçti/kaldı yazdıralım.



//notlar için değişkenler
double not1 = 0, not2 = 0;
double ortalama = 0;
//'not1' verisi kullanıcıdan alınıyor
Console.Write("İLk notunuzu giriniz=");
not1 = Convert.ToDouble(Console.ReadLine());
//'not2' verisi kullanıcıdan alınıyor
Console.WriteLine("İkinci notu giriniz=");
not2 = Convert.ToDouble(Console.ReadLine());
//işlem yaptırılıyor
ortalama = not1 / 2 + not2 / 2;
//ortalama verisi ekrana yazdırılıyor
Console.WriteLine("Ortalamanız={0}", ortalama);
//koşullar oluşturuluyor
if (ortalama >= 50)
{
    Console.WriteLine("Geçtiniz");
}
if (ortalama < 50)
{
    Console.WriteLine("Kaldınız");
}


Burada ortalamayı istediğiniz gibi aldırabilirsiniz(Ör. ortalama=not1*0.4+not2*0,6;)
if koşulumuzu türkçe’ye çevirirsek, ‘hesaplanan ‘ortalama’ 50′den büyük veya eşitse’ denmektedir. Diğer if koşulumuzda ise ’50′den küçük ise’ koşulu vardır. Başka bir olasılık olmadığı için bir if komutuna daha gerek yoktur.
Bu komut satırında iki ‘if’ komutunuda bilgisayar ayrı ayrı gözden geçirir.

2)Şimdi ‘else’ komutuna gelelim.
else’nin kelime anlamı ‘değilse’ olarak tanımlanabilir. Değilse ama ne değilse. İşte buradanda anlaşılacağı gibi else’nin önünde bir komut olması gerekir ve bu komutta ‘if’ komutudur. if’te bir şart sunulur, bu şartın doğru ve yanlış olma olasılığı vardır. Doğru olduğunda kendi içindeki komutları gerçekleştirir ama şart doğru değilse ne olacak, veee else :), else’miz devreye girecek.
Yukarıdaki Kodu ‘else’ komutuyla yapalım.


double not1 = 0, not2 = 0;
double ortalama = 0;
Console.Write("İLk notunuzu giriniz=");
not1 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("İkinci notu giriniz=");
not2 = Convert.ToDouble(Console.ReadLine());
ortalama = not1 * 0.4 + not2 * 0.6;
Console.WriteLine("Ortalamanız={0}", ortalama);
if (ortalama >= 50)
{
    Console.WriteLine("Geçtiniz");
}
else
{
    Console.WriteLine("Kaldınız");
}


Değişen sadece if(ortalama<50) oldu ancak yine aynı işlemi yaptı. Fark ne diyorsanız, Bilgisayar eğer ayrı ayrı if'ler olsaydı hepsini tek tek gözden geçirmek zorundadır ve bu bilgisayarın işlemcisini yorması demektir, ancak else(değilse) olduğu zaman bilgisayar ilk önce if komutuna bakar Eğer doğruysa işlemini yapar ve else komutuna atlamaz. Bunun esas görüldüğü komut 'else if' komutudur. 3)'else if' (değilse eğer) komutu öncesinde ki if komutu doğru olmadığı zaman yeni bir şart sunmak için kullanılır. Yukardaki sistemi biraz değiştirip 5 üzerinden değerlendirelim.

double not1 = 0, not2 = 0;
double ortalama = 0;
Console.Write("İLk notunuzu giriniz=");
not1 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("İkinci notu giriniz=");
not2 = Convert.ToDouble(Console.ReadLine());
ortalama = not1 * 0.4 + not2 * 0.6;
Console.WriteLine("Ortalamanız={0}", ortalama);
//koşullar oluşturuluyor
if (ortalama >= 85)
{
Console.WriteLine("Geçme notunuz=5");
}
else if(85 > ortalama >= 70)
{
Console.WriteLine("Geçme notunuz=4");
}
else if (70 > ortalama >= 55)
{
Console.WriteLine("Geçme notunuz=3");
}
else if (55 > ortalama >= 40)
{
Console.WriteLine("Geçme notunuz=2");
}
else if (40 > ortalama >= 25)
{
Console.WriteLine("Geçme notunuz=1");
}
else
{
Console.WriteLine("Geçme notunuz=0");
}
Console.WriteLine("komut satırı bitti");


'else if' komutlarını sadece 'if' te yapabilirdik ancak bunun gibi yüzlerce if olduğunu düşünürsek bilgisayar hepsini tek tek işleyeceği için yorulacak ve kasılacaktır (sizde kalaylayacaksınız tabi :)) ancak else if komutu hepsinin işlenmesini engeller. Mesela ilk 'if' komutuna bakar doğru ise işlemini yapar ve diğer 'else if' ve 'else' komutlarına bakmadan en son 'Console.WriteLine("komut satırı bitti");' koduna geçer, diyelim ilk 'if' şartı doğru değil, o zaman hemen sonraki 'else if' şartına bakar, doğru ise işlemi yapar ve 'Console.WriteLine("komut satırı bitti");' ve sonrasındaki komutlara bakar varsa devam eder yoksa programı bitirir. Eğer yine doğru değilse diğer 'else if' şartlarına bakar. Bu böyle 'else' komutuna kadar gidebilir.

Tek Boyutlu Diziyle Sayısal Loto Programı

Sayısal loto, 6 tane farklı sayı demektir. C# ta bunu yapmak zor olmasa gerek diye düşünebilirsiniz ve ilk yazacağınız program şu olabilir.

int[] loto = new int[6];
Random rnd = new Random();
 
for (int i = 0; i < 6; i++)
{
    loto[i] = rnd.Next(1, 50);
}
for (int i = 0; i < 6; i++)
{
    Console.WriteLine(loto[i]);
}


Evet sayısal lotoyu yaptınız. Ama mantık hatasıyla yaptınız.
Buradaki kodlarda program aynı sayıyı 6 kere seçebilir. Nasıl yani. Şöyle ki for içine girelim çalıştıralım. loto[0]=rnd.Next(1,50); Lotonun 0. elemanına 1 ile 49 arasında rastgele bir sayı at. Bu mesela 20 olsun. for içinde bir daha döndü ve loto[1] e rastgele bi değer daha atayacak, bu değer yine 20 olabilir. Çünkü bunun için bir şart sunmadık. Böylelikle bütün dizi 20 sayısını alabilir.
Peki nasıl olacak. Önceden tutulan değerleri kontrol ettirerek mümkün ya da tüm sayıları bir diziye alıp oradan seçtikten sonra kaldırabiliriz ya da başka alternatifleri düşünülebilir.
İlk dediğime göre yapacak olursak:


//dizi oluşturuluyor.
int[] loto = new int[6];
//random metodu oluşturuluyor.
Random rnd = new Random();
//rastgele sayıların aktarılması için for döngüsü kullanılıyor.
for (int i = 0; i < 6; i++)
{
    //Rastgele sayı aktarılıyor.
    loto[i] = rnd.Next(1, 50);
    //bütün sayıları karşılaştırmak için for açılıyor.
    for (int j = 0; j < i; j++)
    {
        //koşulla sayının eşit olup olmadığı denetleniyor.
        if (loto[i] == loto[j])
        {
            i--;
            break;
        }
    }
}
 //ekrana yazdırılıyor.
for (int i = 0; i < 6; i++)
{
    Console.WriteLine(loto[i]);
}


İlk kodlamamıza eklediğimiz sadece for ve if komutu ekledik.
for komutunu eklememizin sebebi o ana kadar atanmış sayıları kontrol etmek içindir. Yani atanan sayıyı önceki sayılarla karşılaştırma yapmak için kullandık. if komutunda şart sunduk “loto[i] == loto[j]” Bu şartta “eğer o an seçilen sayı loto[j] değerindeki sayıya eşitse” denmektedir. Eğer eşitse bu döngüyü tekrarlat (i–; break;) dedik.
Kodlamanın doğru çalıştığını görmek istiyorsanız “loto[i] = rnd.Next(1, 50);” kodundaki ’50′ değeri yerine 7 yazabilirsiniz. Bu durumda “1,2,3,4,5,6″ sayılarını seçtiğini göreceksiniz.

C#’ta Sinema Programı


//iki boyutlu dizimizi oluşturuyoruz
int[,] sinema = new int[10, 10];
//dizimizini bütün değişkenlerine 0 (boş) değeri atıyoruz
for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < 10; j++)
    {
         sinema[i, j] = 0;
    }                
}
//değişkenleri tanımlıyoruz
int secenek = 0, sira=0, koltuk=0;
string cikis = "abc";
 
//programımızı for içinde gerçekleştirmemiz gerekiyor.
for (; cikis!="cik" ;)
{
    //ekranı temizliyoruz
    Console.Clear();
    //anamenüyü ekrana yazdırıyoruz
    Console.WriteLine("*****cCc AnaMenü CcC*****");
    Console.WriteLine("1.Bilet Al");
    Console.WriteLine("2.Bilet Sil");
    Console.WriteLine("3.Sinema Doluluğunu Göster");
    Console.WriteLine("4.Çıkış");
    Console.Write("Seçiniz=");
 
    //kullanıcıdan seçeneği alıyoruz
    secenek = Convert.ToInt32(Console.ReadLine());
    //seçeneği alıp işlem yaptırıyoruz
    if (secenek == 1)  //seçenek 1 ise
    {
        Console.Clear();
        Console.WriteLine("****Bilet AL****");
        //kişiden sıra (satır) ve Koltuk (sütun) numarasını alıyoruz
        Console.Write("Kaçıncı Sıra=");
        sira = Convert.ToInt32(Console.ReadLine());
        Console.Write("Kaçıncı Koltuk=");
        koltuk = Convert.ToInt32(Console.ReadLine());
        //dizimizin o değerine 1 (dolu) atıyoruz.
        sinema[sira - 1, koltuk - 1] = 1;
    }
    else if (secenek == 2) //seçenek 2 ise 
    {
        Console.Clear();
        //iki ye ayırıyoruz ve menü yapıyoruz.
        Console.WriteLine("1.Hepsini Sil");
        Console.WriteLine("2.Tek Sil");
        secenek = Convert.ToInt32(Console.ReadLine()); //seçeneği okutuyoruz
        if (secenek == 1) //seçenek 1 ise hepsine 0 (boş) ata
        {
            for (int i = 0; i < 10; i++)
            {
                for (int j = 0; j < 10; j++)
                {
                    sinema[i, j] = 0;
                }
            }
        }
        else  //seçenek 2 ise (if teki şart doğru değilse)
        {
            Console.Clear();
            Console.WriteLine("***Bilet Sil***");
            //kişiden sıra (satır) ve Koltuk (sütun) numarasını alıyoruz
            Console.Write("Kaçıncı Sıra=");
            sira = Convert.ToInt32(Console.ReadLine());
            Console.Write("Kaçıncı Koltuk");
            koltuk = Convert.ToInt32(Console.ReadLine());
            //o değerlere 0 (boş) atıyoruz.
            sinema[sira - 1, koltuk - 1] = 0;
        }
    }
    else if (secenek == 3)  //seçenek 3 ise
    {
        Console.Clear();
        for (int i = 0; i < 10; i++)
        {
            for (int j = 0; j < 10; j++)
            {
                //sütünları ekrana yazdırıyoruz
                Console.Write(sinema[i, j] + " ");
            }
            //Düzgün (sinemadaki gibi) görünmesi için satır atlatıyoruz
            Console.WriteLine("");
        }
        //görsellik içindir bi anlamı yoktur.
        Console.WriteLine("___________________");
        Console.WriteLine("| | | | | | | | | |");
        //ekran hemen geçmesin diye boş bi readLine oluşturuyoruz.
        Console.ReadLine();
    }
    //seçeneklerin hiç biri değilse 'cikis' değişkenine "cik" atıyoruz for da şart sağlanmadığı için programı bitiriyor.
    else
        cikis = "cik";
}



Programımızı iki boyutlu diziyle oluşturduk 10 satır ve 10 sütun olarak. İlk olarak bütün diziye 0 [boş] değerini atadık.
Değişkenlerimizi oluşturduk, buradaki ‘cikis’ değişkenine “abc” dedim ancak herhangi bişey olabilir yanlızca “cik” değeri olamaz. Çünkü programa girebilmesi için for daki şartımızın sağlanması gerekir.
Bütün kodları for içinde yapmamızın nedeni Kişi Çıkış işlemini yapmadığı sürece programda kalması için. for olmasaydı işlemi 1 kez yapıp programdan çıkacaktır.
Console.Clear(); yapmamızın nedeni yazıların birbirine karışmaması ve görselliğin bozulmaması içindir.
Menümüzü oluşturduktan sonra kullanıcının seçeneklerini değerlendirip if içinde işlemlerimizi yaptırıyoruz.
‘sinema[sira - 1, koltuk - 1] = 1;’ kodunda -1 dememizin nedeni kullanıcı ve bilgisayar arasındaki başlangıç değerinin farkıdır. Yani kullanıcı saymaya 1 den başlar ancak bilgisayarın ilk değeri herzaman için 0 dır.
Diğer gerekli açıklamalar kodların üstündedir.

C#’ta Diziler Arası Kriterli Aktarım

Burada yapacağımız işlem, 50 değişkenli bir dizinin içine rastgele sayılar aktarıp Bu sayıların 4 katının 5 ekisiğini bulup Bunların 3 e tam bölünüp bölünmediğine bakmak ve eğer bölünüyorsa bunları ayrı bir diziye aktarmak olacaktır.


//esas dizimizi oluşturuyoruz.
int[] dizi = new int[50];
//dizimize random sayılar atmak için random metodunu oluşturuyoruz.
Random rnd = new Random();
//değişkenleri oluşturuyoruz
int sayac = 0, deger=0;
//diziye rastgele değerler atıyoruz.
//bu değerlerin 4 katının 5 eksiği 3'e tam bölünüyosa 'deger' değişkenini arttırıyoruz.
for (int i = 0; i < dizi.Length; i++)
{
   dizi[i] = rnd.Next(100);
   Console.Write(dizi[i] + " ");
   if (((dizi[i]*4)-5)%3==0)
   {
       deger++;
    }
}
//3 e tam bölünenlerin sayısı kadar yeni bir dizi oluşturuyoruz
int[] yenidizi = new int[deger];
//esas (ilk) dizideki sayıların 4 katının 5 eksiği 3'e tam bölünüyosa yeni (ikinci) dizimize aktarıyoruz
for (int i = 0; i < dizi.Length; i++)
{
    if (((dizi[i] * 4) - 5) % 3 == 0)
    {
        yenidizi[sayac] = dizi[i];
        //ekrana yazdırıyoruz
        Console.WriteLine(yenidizi[sayac]);
        sayac++;
    }
}


İlk önce dizimizi esas 50′lik dizimizi oluşturuyoruz ve buna rastgele sayılar aktarıyoruz.
Bu sayıları aktarırken if içinde ‘((dizi[i]*4)-5)%3==0′ yazmamızın sebebi Yeni oluşturacağımız dizinin boyutunu bilmememizdir. Burada işlemimiz doğru olduğu sürece ‘deger’ artacaktır ve gerekli boyut bulunacaktır. İsterseniz yeni dizimizi önceki dizi boyutunda yapabilirsiniz Tercih sizin.
İkinci for döngümüzde ise bu sayıları yeni dizimize aktarma ve ekrana yazdırma işlemi yapıyoruz, tabi bu da sizin tercihinize kalmıştır. İkinci for döngüsünde sadece yeni diziye aktarabilir daha sonra yeni bir for döngüsüyle yeni dizimizi ekrana yazdırabilirsiniz.
Diğer gerekli açıklamalar kodların üstündedir.

C#’ta Tahmin Programı

Bu programda biLgisayar bir sayı tutacak bunu kullanıcı tahmin etmeye çalışacak. Program basit ancak bazı özellikler ekleyip zenginleştirmeye çalışacağız.


//değişkenleri oluşturuyoruz
int tahmin, rastgele;
//random metodunu çağırıyoruz
Random rnd = new Random();
//random (rastgele) değer atıyoruz
rastgele = rnd.Next(100);
//döngü içine alıyoruz
for (int i = 0; i == 0; )
{
    Console.Write("Tamininizi giriniz=");
    //kullanıcıdan tahminini alıyoruz
    tahmin = Convert.ToInt32(Console.ReadLine());
    //şartımızı oluşturuyoruz
    if (tahmin == rastgele) //eğer tahmin rastgele tutulan sayıya eşitse
    {
        Console.WriteLine("doğru tahmin");
        i++;
    }
    else //değilse
    {
        Console.WriteLine("Yanlış tahmin");
    }
}


0 ile (0 dahil) 100 arası (100 dahil değil) rastgele bir sayıyı tutturuyoruz. Bu sayıyı bilemediğinde ekrana “Yanlış tahmin” yazıyor ve tekrar tahmin etmesini istiyor. Bildiğinde ekrana “doğru tahmin” yazıyor ve programdan çıkıyor. Doğru tahmin yapana kadar programda kalacaktır. Bi yönlendirme olmadığı için Bu durumda kullanıcı bütün sayıları ekrana yazdırabilir. Bu durumu kurtarmak için kullanıcıya girdiği sayıya göre “aşağı” ya da “yukarı” tahmin yürütmesini söylememiz lazım.


int tahmin, rastgele;
Random rnd = new Random();
rastgele = rnd.Next(100);
for (int i = 0; i == 0; )
{
    Console.Write("Tamininizi giriniz=");
    tahmin = Convert.ToInt32(Console.ReadLine());
    if (tahmin == rastgele)
    {
        Console.WriteLine("doğru tahmin");
        i++;
    }
    else
    {
        Console.WriteLine("Yanlış tahmin");
        //Yeni kodlarımızı giriyoruz
        if (tahmin>rastgele) //eğer tahmin rastgele seçilen sayıdan büyükse
        {
            Console.WriteLine("Aşağı");
        }
        else //değilse (tahmin rastgele seçilen sayıdan küçükse)
        {
            Console.WriteLine("Yukarı");
        }
    }
}



Yeni kodlarımız sayesinde kullanıcıya ipucu veriliyor. Bu da tahmini biraz daha kolaylaştırıyor.
Tahmin olayını kolaylaştırdık Biraz da zorlaştıralım. Mesela kullanıcının 10 kere tahmin etme hakkı olsun ve tahmin ettiği zaman kaçıncı tahmininde tahmin ettiğini ekrana yazdıralım.


int tahmin, rastgele;
Random rnd = new Random();
rastgele = rnd.Next(100);
//sadece döngümüzde değişiklik yapıyoruz.
for (int i = 0; i < 10; i++)
{
    Console.Write("Tamininizi giriniz=");
    tahmin = Convert.ToInt32(Console.ReadLine());
     
    if (tahmin == rastgele) 
    {
        //doğru durumunu ekrana yazdırıyoruz
        Console.WriteLine("{0}.tamininizde doğru bildiniz",i+1);
        //doğru olduğunda döngüyü bitirmemiz gerektiği için 'i' değerine 10 veya üstü bir sayı atıyoruz
        //veya break; komutu kullanılabilir.
        i = 10;
    }
    else
    {
        //yanlış durumunu ekrana yazdırıyoruz
        Console.WriteLine("{0}. kez yanlış tahmin ettiniz",i+1);
        if (tahmin>rastgele)
        {
            Console.WriteLine("Aşağı");
        }
        else
        {
            Console.WriteLine("Yukarı");
        }
    }
}


‘for ‘ döngüsünü değiştirerek programımızı oluşturuyoruz. for döngüsünü değiştirmemizin sebebi sayaç olayını gerçekleştirmek. Kullanıcı her defasında giriş yaptığında (tahmin yanlışsa) for dönecektir ve sayaç (‘i’) artacaktır. Burada sadece kaçıncı tahmin olduğunu ve 10 defadan fazla giriş yapmaması için for döngüsü kullanılmıştır. Doğru tahmin edildiği zaman döngünün bitmesi için ‘i’ değişkenine 10 ve 10′dan büyük değer atadık.
Programda tahmin aralığını istediğiniz gibi ayarlayabilirsiniz, ‘rnd.Next(x)’ x yazan yere istediğiniz değeri girebilirsiniz aynı zamanda en fazla kaç kere tahmin ettikten sonra programdan çıkış yapılabileceğini de ayarlayabilirsiniz (ör. ‘for (int i = 0; i < x; i++)' x yerine herhangi bir değer yazabilirsiniz.)