Konuyu Oyla:
  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
   
Konu: C# - for Döngüsü {28}
Hera
*
avatar
Yüzbaşı
Durum: Çevrimdışı
Seviye Puanı: 10
Yaşam Puanı: 239 / 239
Deneyim: 58 / 100
Rep Sayısı: 44
Mesaj Sayısı: 133
Üyelik Tarihi: 13.04.2019
     
Yorum: #1
C# - for Döngüsü {28}
11.06.2019 21:04
for döngüsü en çok kullanılan döngüdür diyebiliriz. Bir fot döngüsünün en temel formu aşağıdaki gibidir;

for (ifade1; ifade2; ifade3)
deyim1;

ya da;

for (ifade1; ifade2; ifade3) {
deyim1;
deyim2;
}


Yukarıdaki yapının dışındaki durumlar derleme zamanında hataya sebep olur. Mesela for döngüsünün içinde ancak ve ancak iki tane noktalı virgül ";" olmalıdır. İfadelerden herhangi biri boş olabilir ama mutlaka noktalı virgüller konulmalıdır. for parantezinden sonra gelen satırlar döngü bloğudur. Eğer döngü bloğu basit blok ise yani noktalı virgülle sonlanan tek satırda oluşuyorsa for döngüsü için açılan ve kapanan parantezleri kullanmamıza gerek yoktur. Fakat kullanmamızda herhangi bir sakınca da yoktur. Okunabilirliği arttırmak için her durumda blok parantezlerini kullanmamız yerinde olacaktır.

Şimdi bir for döngüsünün nasıl çalıştığına bakalım. Programın akışı for döngüsüne geldiğinde döngü parantezinde bulunan ilk ifade bir defaya mahsus olmak üzere çalıştırılır.. Bundan sonraki iterasyonlarda hiçbir zaman ifade1 icra edilmeyecektir. Herhangi bir zorunluluk olmamasına rağmen ifade1 ile genellikle döngü değişkeninin ilk değeri belirlenir. Unutmayın ki bu bir zorunluluk değildir, her türlü geçerli ifadeyi (expression) burada yazabiliriz.

Daha Sonra ifade2 çalıştırılır. ifade2 kontrol bölgesidir. Yani döngünün geleceği ile ilgili kararlar burada alınır. Peki, bu karar nasıl alınıyor? Şöyle ki; ifade2 çalıştırıldıktan sonra true değeri üretiliyorsa döngü devam eder ve for bloğunun sonuna geldiğinde ifade3 çalıştırılır, ifade3 ile genellikle döngü değişkeninin artırılması ya da azaltılması yapılır. Tabi bu da zorunlu olarak yapılmaz. Geçerli her tür ifadeyi ifade3 yerine yazabiliriz. Eğer ifade2 false bir değer üretirse akış ifade3'e gelmeden döngüden çıkılır ve programın akışı döngü bloğundan sonraki ilk satırdan devam eder.

Şimdi for döngüsünü daha iyi anlamak için basitr bir örnek yapayım ve adım adım inceleyelim. Örneğimde 1'den 3'e (3 dahil) kadar olan tamsayıların toplamını hesaplayacak bir döngü bloğu oluşturacağın. İçinizden hemen 6 cevabı verebilirsiniz Burn. Evet bu kolay bir problemi döngü bloğumuzda tek bir karakter değiştirerek 1'den 1000'e kadar olan tamsayıları da toplayabileceğiz. Aşağıdaki yapıyı inceledikten sonra programın akışını for döngüsüne geldiğinde neler olabileceğini tahmin edin Bottle

Kod:
using system;
class Cyberizm_ForDongusu
{
    static void Main()
    {
        int toplam = 0;
        for(int i = 1; i <= 3; i++)
        {
            toplam = toplam + i;
        }
        Console.WriteLine("Toplam = {0}", toplam);
    }
}

Yukarıdaki programda akış for bloğuna geldiğinde sırasıyla aşağıdaki adımlar gerçekleşir;
  1. ifade1 dediğimiz kısım çalıştırılır. ifade1 yerinde 'int i = 1;' deyimi olduğu için i değişkenine 1 atanır. Bu işlem hatırlarsanız bir defa yapılacaktır.
  2. Akış, ifade2 yani kontrol ifadesine gelir. Kontrol ifadesi çalıştırılır. Bu noktada i'nin değeri 1'dir ve i<=3 ifadesi doğrudur. Bu ifade doğru olduğu için true değeri üretilir ve programın akışını for bloğuna verir.
  3. Döngü yapısında blok parantezi olmazsa for parantezlerinin altındaki ilk satıra icra edilir. Yani toplam değişkenine o andaki i değeri eklenir. Bu durumda toplam 0 olduğu için, ifade icra edildikten sonra toplam değişkenin diğer toplam = 0 + 1 = 1 olur. (i'nin ifade değeri 1'di)
  4. Bundan sonra akış ifade3 dediğimiz bölgeye gelir ve burada toplam icra edilir. ifade3'ün yerinde i++; gibi bir ifade görüyorsunuz. Bu ifade ile i değişkeninin değeri 1 artırılıyor. Bu noktada i'nin değeri 2 olur.
  5. Akış tekrar ifade2'nin olduğu yere gelir. Adım 2'deki işlemler aynen tekrarlanır. 2<=3 olduğu için döngüye devam edilir.
  6. 3. adımdaki işlemler tekrar yapılır yani toplam değişkenine değeri i kadar arttırılır toplam = 1 + 2 = 3 olur.
  7. Akış tekrar 4. adımda anlatılan ifade3 bölümüne gelir ve i'nin değeri 1 arttırılır. i = 3 olur.
  8. deyim2 tekrar icra edilir. 2. adımdaki açıklamalar doğrultusunda yine döngüye devam edilir. Çünkü 3<=3; ifadesi true bir değer üretir.
  9. 3. adımdaki işlemler tekrar yapılır ve toplam = 3 + 4 = 6 olur. (i=3 ve toplam = 3 idi).
  10. Akış tekrar ifade3 bölümüne gelir ve i değeri 1 arttırılır. 1 = 4 olur.
  11. Programın akışı ifade2 bölümüne gelir ve kontrol ifadesini tekrar icra edilir. Kontrol yapıldığında bu sefer önceki kontrollerden farklı bir durum ortaya çıkar. 4<=3 olmadığı için ifadenin çalıştırılması sonucu true değeri üretilmez; false değeri üretilir. Bu da, hatırlarsanız akışı döngünün sonucu getirmektedir. Bundan sonra akış for bloğunun sonunda devam eder yani ekrana "Toplam = 6" yazılır.

Şimdi for döngüsünün çeşitli durumlarına bakalım. Yukarıda da dediğim gibi, örnekte verdiğim for yapısı ve kullanım biçimi en çok kullanılan biçimdir. Fakat for yapısının kullanımı çok esnektir. İstediğimiz biçimde kullanabiliriz; yeter ki for parantezlerinin geçerli ifadeler yazalım, tabii ki iki tane noktalı virgülü de eksiksiz yazmamız lazım.
Aşağıda, yukarıdaki kullanımdan farklı bir döngü görüyorsunuz;
Kod:
using system;
class Cyberizm_ForDongusu
{
    static void Main()
    {
        char ch;
        for (ch=Convert.ToChar(Console.ReadLine()); ch != 'q'; ch=Console.ReadLine())
        {
            Console.WriteLine(ch);
        }
    }
}

Bu döngü ile kullanıcıdan sürekli bir karakter alınıyor. Ta ki kullanıcı "q" girene karakterini girene kadar. Klavyeden 'q' karakteri girildiği zaman for döngüsünden çıkılır. Gördüğünüz gibi bu for döngüsü ilk verdiğim örnekten tamamen farlı bir uygulama için kullanılmaktadır.
for döngüleriyle ilgili diğer durumlar ise for döngüsü parantezin içindeki ifadelerin eksik bırakılmasıdır.

int k = 0;
for (; k < 10; ++k)
Console.WriteLine(k);


Yukarıdaki kodda görüldüğü gibi döngü değişkenine ilk değer verme işlemi döngünün dışında yapılıyor. Bu yöntem C# dilinin bir esnekliği olarak kabul edilse de okunabilirlik açısından kullanılmamasını öneririm.

Aynı şekilde bazı durumlarda for döngüsünün 1. ve 3. kısmı olmayabilir. Bu durumda döngü değişkenine döngünün dışında ilk değer verildiği gibi döngü değişkeni ile ilgili işlemler de döngü gövdesinde yapılır. Aşağıda bu duruma bir örnek göstermek isterim;
Kod:
using system;
class Cyberizm_ForDongusu
{
    static void Main()
    {
        int k = 0;
        for (; k < 10;)
        {
            Console.WriteLine(k);
            k++;
        }
    }
}

for döngüleriyle ilgili en ilginç özellik ise sonsuz döngülerdir. Sonsuz döngüler, döngü parantezinin içinde boş ifadelerin olmasıyla yapılabilir. Yani döngü parantezlerin de ki bütün alanlar boş bırakılır, tabi iki tane noktalı virgülü unutmamak şartıyla. Sonsuz bir döngünün kurulması aşağıdaki gibi olmaktadır;
Kod:
using system;
class Cyberizm_ForDongusu
{
    static void Main()
    {
        int k = 0;
        for (;;)
        {
            Console.WriteLine(k);
            k++;
        }
    }
}

Yukarıdaki for yapısından dolayı sonsuza kadar k değişkenini 1 arttırılacak ve ekrana yazılacaktır. Tabi bu pratikte böyle olmaz. Sonsuza kadar iş yapan bir alet nasıl kullanılabilir ki? Peki, o zaman bu sonsuz döngüler neden vardır, nerelerde kullanılırlar? Şimdi kısaca bu sorulara yanıt bulmaya çalışayım. Diyelim ki şifre korumalı bir Windows uygulaması yapıyoruz. Kullanıcı programı çalıştırmak istediğinde şifre sorgulaması yaparız. Kullanıcı yanlış şifre girdiğinde programı kapatmak yerine yeniden şifre girmesini istiyoruz. Buradaki stratejimiz şu olmalı: Bir sonsuz döngü kurulur, sonsuz döngü içerisinde şifre sorgulaması yapılacak fonskiyon çağrılır. Fonksiyondan beklediğimiz değeri bize döndürdüğünde sonsuz döngüden çıkılır ve işlemlere devam edilir. Fonksiyonlar konusunu ve döngülerden çıkmak için kullanılan anahtar sözcükleri görmediğimiz için şimdilik bu uygulama yerine farklı örnekler vereceğim. Fonksiyonların ve bahsedilen anahtar sözvcükleri işlediğimde bu tür uygulamalar zaten yapabiliyor olacaksınız.


Örnek : 1'den 1000'e kadar olan sayılar içerisinde 5'e tam bölünen aynı zamanda 7'ye tam bölünemeyen sayıları sayan, toplamlarını hesaplayan ve bu sayıları listeleyen program yazınız.

Kod:
using system;
class Cyberizm_ForDongusu
{
    static void Main()
    {
        int adet = 0, toplam = 0;
        for (int i = 1; i <= 1000; i++)
        {
            if ((i%5 == 0) && (i%7 != 0))
            {
                Console.WriteLine(i);
                toplam += i;
                adet++;
            }
        }
        Console.WriteLine("{0} adet sayı bulundu!", adet);
        Console.WriteLine("Toplamları : {0}", toplam);
    }
}


Elimden geldiğince detaylı anlattım, diğer döngülerle devam ediyoruz Kaccanzi
Alinti
Dessy
*
avatar
Yarbay
Durum: Çevrimdışı
Seviye Puanı: 23
Yaşam Puanı: 253 / 550
Deneyim: 0 / 100
Rep Sayısı: 120
Mesaj Sayısı: 634
Üyelik Tarihi: 20.11.2015
     
Yorum: #2
RE: C# - for Döngüsü {28}
11.06.2019 21:42
Teşekkürler, Emeğine Sağlık Smile

Sosyal Medya: Youtube - İnstagram
Alinti



1 Ziyaretçi