C# For Döngüsü

  • 543
  • (1)
  • (5)
  • 25 May 2017

Döngüler hemen hemen bütün programlama dillerinde sıkça kullanılan bir tekniktir. Arka arkaya belli bir miktarda veya koşula bağlı gerçekleşen işlemlerde döngü kullanmak bir zorunluluktır.

for döngüsünün yapısı genel olarak şöyle gösterilebilir.


for (ilk_değer; koşul; sayaç)
{
    // işlemler...
}

for (int i = 0; i < 10; i++)
{
    // işlemler...
}

İlk parametre kısmında döngü için bir i değişkeni tanımlanıyor ve ilk değeri 0 olarak belirleniyor. İkinci kısımda hangi koşul altında döngünün çalışmaya devam edeceği belirtiliyor ki, bu koşul aynı if ve while koşulları gibi bool cinsinden bir ifadedir. Üçüncü kısımda ise her adımda bu değişkenin ne kadar değişeceği belirtiliyor. Burada döngü i 10' dan küçük olduğu sürece 1 artarak dönmektedir.

Aynı döngü için her seferinde i değeri konsol ekranına yazdırılırsa aşağıdaki gibi bir kod kullanmak gerekir.


for (int i = 0; i < 10; i++)
{
    Console.WriteLine($"{i} değeri yazıldı");
}

Ekran çıktısı aşağıdaki gibi olacaktır.

1' den 50' ye kadar olan sayılar arasında hangi sayıların 7, 11 ve 13' e tam bölündüğünü ve adetlerini hesaplayan bir kod yazılabilir.


int count7 = 0, count11 = 0, count13 = 0;
for (int i = 1; i <= 50; i++)
{
    if (i % 7 == 0)
    {
        Console.WriteLine($"{i} değeri 7' ye tam bölünür");
        count7++;
    }
    if (i % 11 == 0)
    {
        Console.WriteLine($"{i} değeri 11' e tam bölünür");
        count11++;
    }
    if (i % 13 == 0)
    {
        Console.WriteLine($"{i} değeri 13' e tam bölünür");
        count13++;
    }
}
Console.WriteLine("--------------------------------------");
Console.WriteLine($"{count7} adet değer 7' e tam bölünüyor");
Console.WriteLine($"{count11} adet değer 11' e tam bölünüyor");
Console.WriteLine($"{count13} adet değer 13' e tam bölünüyor");
Console.ReadKey();

Kod çalıştırıldığında şöyle bir çıktı alınacaktır.

Örnekte if koşullarının birbirinden bağımsız yazılmasının sebebi aynı sayının hem 7' ye hem de 11' e bölünebilmesidir. 1-50 arasında böyle bir sayı yoktur. Ancak 50 sınırını 100 veya daha yukarı çıkarırsanız bu durumu görebilirsiniz. Bağımlı if koşullarında yani 2. ve sonraki koşulların else if olarak yazılması durumunda 77 sayısı 7' ye tam bölünür yazısı yazar ancak 77 sayısı 11' e tam bölünür yazmayacaktır.

Döngüyü Kasıtlı Bitirme (break)

Döngü içerisinde istisnai bir durumda döngüyü kapatmak isteyebilirsiniz. Bu durumları if koşulu ile denetleyip break komutu ile döngüyü sonlandırabilirsiniz. Örneğin elinizde string dizisi türünden bir isim listesi var (string[]). Bu listedeki isimlerden herhangi birinin ilk harfinin Ş olduğu tespit edilince döngü kapansın.


string[] isimler = new string[] { "Semih", "Yusuf", "Ali", "Tolga", 
    "Emre", "Hasan", "Necla", "Ayşe", "Şebnem", "Mustafa", "Kerim", 
    "Lale", "Suat", "Bahattin", "Alparslan", "İsmail", "Tevfik" };
// 17 elemanlı bir dizi tanımlandı
for (int i = 0; i < isimler.Length; i++)
{
    string isim = isimler[i]; // dizinin her bir elemanı string türünden
    if (isim[0] == 'Ş') // 0 indisli karakter (char) Ş' ye eşitse
    {
        Console.WriteLine("Döngü sonlandırılıyor");
        break;
    }
    Console.WriteLine($"{isimler[i]} bilgisi işlendi");
}
Console.ReadKey();

Şebnem ismi ve sonrası asla ekrana yazdırılmayacaktır. Çünkü ilk harfi Ş olan isim if koşulu ile farkedildiğinde ekrana "Döngü sonlandırılıyor" yazar ve ardından break komutu ile döngü sonlandırılır.

Döngü Adımını Kasıtlı Atlama (continue)

Döngü içerisinde istisnai bir durumda döngüyü kapatmak yerine o adımı atlamak istetebilirsiniz. Bu durumda break komutu yerine continue komutu kullanmalısınız. Bir önceki örnekte Ş harfi ile başlayan bir isim tespit edildiğinde döngü sonlanıyordu. Bu sefer Ş ve A harfleri ile başlayan isimler atlansın.


string[] isimler = new string[] { "Semih", "Yusuf", "Ali", "Tolga", 
    "Emre", "Hasan", "Necla", "Ayşe", "Şebnem", "Mustafa", "Kerim", 
    "Lale", "Suat", "Bahattin", "Alparslan", "İsmail", "Tevfik" };
// 17 elemanlı bir dizi tanımlandı
for (int i = 0; i < isimler.Length; i++)
{
    string isim = isimler[i]; // dizinin her bir elemanı string türünden
    if (isim[0] == 'Ş' && isim[0] == 'A') // 0 indisli karakter (char) Ş' ye veya A' ya eşitse
    {
        Console.WriteLine("Döngü adımı atlanıyor");
        continue;
    }
    Console.WriteLine($"{isimler[i]} bilgisi işlendi");
}
Console.ReadKey();

Çeşitli Örnekler

20 adım boyunca ekrandan sayı okunan ve her adımda tüm sayıların toplamını yazan bir uygulamayı for döngüsü ile yazmak...


int toplam = 0;
for (int i = 0; i < 20; i++)
{
    Console.Write("Sayı Girin: ");
    string girilen_sayi_metni = Console.ReadLine();
    // sayı ekrandan metin (string) olarak okunur
    int sayi = 0;
    bool donusturme = int.TryParse(girilen_sayi_metni, out sayi);
    // int' e ait TryParse metodu, metni sayıya dönüştürürse true
    // dönüştüremezse false değeri döner
    if (donusturme) // dönüştürdüyse
        toplam += sayi; // toplam değerine sayi değerini ekler
    else // dönüştüremediyse
    {
        Console.WriteLine("Hatalı sayı formatı girdiniz.");
        continue; // döngü sonraki adıma atlar
    }
    Console.WriteLine($"Toplam: {toplam}"); // toplamı ekrana yazar
}
Console.WriteLine("Döngü sona erdi.");
Console.ReadKey();

İlişkili İçerikler

While döngüleri birçok programlama dilinde kullanılan bir döngü türüdür.

Paylaşın
Etiket Bulutu