Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Sefer Algan
Sefer Algan
http://www.seferalgan.com
İletişme geçmek için tıklayın.
71 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  C / Sys Prog. Sefer Algan
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : C / Sys Prog.
Yayınlanma Tarihi : 15.1.2003
Okunma Sayısı : 55365
Yorum Sayısı : 3     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 25.4.2024
Turhal Temizer
Mac OS/X Removing CUDA 25.4.2024
Burak Selim Şenyurt
Kurumsal Yazılımcının Oyun Geliştirme ile İmtihanı 25.4.2024
Burak Selim Şenyurt
Matematik ve Oyun Programlama - Missile Command - Final 25.4.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Her yönüyle C Döngüleri(Loops) - 1
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Bu yazıda bir programlama dilinin en temel yapıları olan döngülerden olan for döngü yapısı anlatılacaktır. Döngüler bir programlama dilinde olmazsa olmaz yapılardır. Döngüler olmadan modern programlar yazmak imkansızdır. Döngüler bir program içerisinde belirli işleri defalarca yapmamızı sağlayan komut bloklarıdır. Sonsuz döngüler yapabildiğimiz gibi belirli kriterleri sağlayana kadar oluşan döngülerde yapabiliriz.

C dilinde 3 tip döngü vardır. Bunlar :

  • for döngüleri
  • while döngüleri
  • do while döngüleri
    olarak bilinirler.
Her bir döngü yapısı ayrıntılarıyla anlatılacaktır. Bu yazımızda for döngüsünü anlatacağım.

for döngüleri

for döngüsü en çok kullanılan döngülerdir diyebiliriz. Bir for döngüsünün en temel formu aşağıdaki gibidir.

for (ifade1; ifade2; ifade3)
     deyim1;

// yada
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ü 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ırdan oluşuyorsa for döngüsü için açılan ve kapanan parantezleri kullanmamıza gerek yoktur. Kullanmamızda herhangi bir sakınca yoktur. Ben şahsen okunabilirliği artırmak için her zaman kullanmayı tercih ederim.

Ş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ğman ifade1 ile genellikle döngü değişkeninin ilk değeri belirlenir. Unutmayın bu bir zorunluluk değildir, her türlü geçerli ifadeyi(expression) burada yazabiliriz. for bloğunun sonuna gelindiğinde ifade3 icra edilir, 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. ifade3 icra edildikten sonra çalıştırılma sırası ifade2 ’ye gelir. ifade2 control 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 sıfır dışı bir değer oluşturuluyorsa döngü devam eder aksi halde 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 basit bir örneği adım adım inceleyelim. Örneğimizde 1 ’den 3(3 dahil) ’e kadar olan tamsayıların toplamını hesaplayacak bir döngü bloğu oluşturacağız. İçinizden hemen 6 cevabını verdiğinizi hissediyorum. Evet bu kolay bir problemdi ama döngü bloğundaki tek bir karakteri değiştirerek 1 ’den 1000 ’e kadar olan tam sayılarıda toplayabileceğiz. Aşağıdaki yapıyı inceledikten sonra programın akışının for döngüsüne geldiğinde neler olabileceğini tahmin ediniz. Eğer zorlanıyorsanız programın altındaki adımları takip edin. Yine anlamakta zorlanıyorsanız problemimizin akışını anlatan simülasyonu takip edin, eminim ki bu sefer anlayacaksınız. Eğer yine anlayamadıysanız makalenin başına dönmenizi tavsiye ederim :)

#include <stdio.h> int main(void)
{
     int i;
     int toplam = 0;

     for (i = 1; i <= 3; i++)
          toplam = toplam + i;

     printf("Toplam = %d", total);

     return 0;
}


Yukarıdaki programda akış for bloğuna geldiğinde sırasıyla aşağıdaki adımlar olur :

1-) ifade1 dediğimiz kısım çalıştırılır. ifade1 yerinde i=0; deyimi olduğu için i değişkenine 0 değeri atanır. Bu işlem bir defa yapılacaktı hatırlarsanız.

2-) ifade2 yani kontrol ifadesine akış gelir. Kontrol ifadesi çalıştırılır. Şu anda i’nin değeri 1 yani i<=3 ifadesi doğrudur. C ’de mantıksal doğru demek sıfır dışı bir değer demek olduğu için ifade2 doğru bir değer , diğer bir deyişle sıfır dışı bir değer üretir. ifade2 ile sıfır dışı bir değer üretildiği için programın akışı for bloğuna gelir.

3-) Döngü bloğu olmadığı için for parantezlerinin altındaki ilk satır icra edilir. Yani toplam değişkenine o andaki i değeri eklenir. Bu durumda toplam sıfır olduğu için, ifade icra edildikten sonra toplam değişkenin değeri toplam = 0 + 1 = 1 (i nin değeri 1 idi)

4-) Bundan sonra akış ifade3 dediğimiz bölgeye gelir, ve burada deyim icra edilir. ifade3 ’ün yerinde i++; gibi bir ifade görüyorsunuz . Bu ifade ile i değişkenin değeri 1 artırılıyor. Şu anda i ’nin değeri 2 oldu.

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şkeninin değeri i kadar artı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 artı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 sıfır dışı bir değer üretir.

9-) 3. Adımdaki işlemler tekrar yapılır ve toplam = 3 + 3 = 6 olur. (i=3 ve toplam = 3 idi).

10-) Akış tekrar ifade3 bölümüne gelir ve i değeri 1 artırılır. i = 4 olur.

11-) Programın akışı ifade2 bölümüne gelir ve kontrol ifadesi 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 0 dışında bir değer üretilmez.Yani sıfır değeri üretilir. Bu , kuralda hatırlarsanız döngünün sonunu getirmektedir. Bundan sonra akış for bloğunun sonundan devam eder yani ekrana "Toplam = 6" yazılır.

Bu adımları aşağıdaki simulasyonda da görebilirsiniz. Aşağıdaki animasyonu görebilmeniz için bilgisayarınıza Macromedia Flash player yüklü olmalıdır. www.macromedia.com adresinden ücretsiz player edinebilirsiniz.



Sanırım for döngüsünün çalışma prensibine iyice aşina oldunuz. Şimdi for döngüsünün çeşitli durumlarına bakalım. Yukarıda da bahsettiğimiz gibi örnekte verdiğimiz for yapısı ve kullanım biçimi en çok kullanılan biçimdir, fakat for yapısının kullanımı çok esnektir, istediğimiz biçimde kullanabiliriz yeter ki for parantezlerine geçerli ifadeler yazalım, tabi ki iki tane noktalı virgülü de eksiksiz yazmamız lazım.

Aşağıda ,yukarıdaki kullanımdan farklı olan bir döngü görüyorsunuz, bu döngünün de çalışma prensibi aynı olduğu için tekrar anlatmama gerek yok sanırım.


char ch;

for (ch = getch(); ch != ’q’ || ch = !=’Q’ ; ch = getch())
      birseyleryap(ch);
Bu döngü ile kullanıcıdan sürekli bir karakter alınıyor, ta ki kullanıcının ’q’ ve ’Q’ karakterlerini girmesine kadar. Kullanıcı q karakterlerini girdiği zaman for döngüsünden çıkılır. Gördüğünüz gibi bu for döngüsü ilk verdiğimiz örnekten tamamen farklı bir uygulama için kullanılabilir.

for döngüleriyle ilgili diğer durumlar ise for döngü parantezi içindeki ifadelerin eksik bırakılmasıdır.


k = 0;
for (; k< 10; ++k)
    printf("%d\n", 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çıdan kullanılmaması tercih edilebilir.

Aynı şekilde bazı durumlarda for döngüsünün 1. ve 3. kısmı da 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örmektesiniz.


k = 0;
for ( ; i < 10; ) {
   printf("%d\n", k);
   ++k;
}
for döngüleriyle ilgili en önemli 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ü parantezindeki bütün alanlar boş bırakılır, tabi iki tane noktalı virgüle unutmamak şartıyla. Sonsuz bir döngünün kurulması aşağıdaki gibi olmaktadır.


for (; ;)
    sonsuzakadarbirseyleryap();
Yukarıdaki for yapısından dolayı sonsuzakadarbirseyleryap adlı fonksiyonumuz adından da anlaşılacağı gibi sonsuza kadar bir şeyler yapacaktır. Tabi bu, pratikte böyle olamaz. Sonsuza kadar iş yapan bir alet henüz bilinmiyor. Peki o zaman bu sonsuz döngüler neden vardır, nerelerde kullanılırlar? Şimdi kısaca bu sorulara yanıt bulmaya çalışalım. Diyelim ki şifre korumalı bir Windows uygulaması yapıyoruz. Kullanıcı programı çalıştırmak istediğinde şifre sorgulaması yapmak istiyoruz. Kullanıcı yanlış şifre girdiğinde programı kapatmak yerine yeniden şifre girmesini istiyoruz. Burdaki stratejimiz şu olmalı : Bir sonsuz döngü kurulur, sonsuz döngü içerisinde şifre sorgulaması yapılacak fonksiyon çağrılır. Fonksiyon beklediğimiz değeri bize döndürdüğünde sonsuz döngüden çıkılır ve işlemlere devam edilir. Peki sonsuz döngüden çıkma nasıl olur? Şimdi de bu konuya değinelim.

Sonsuz döngüden çıkmanın 4 temel yolu vardır. Bunlar aşağıdaki gibi sıralanır.

1-) break anahtar sözcüğü ile : Bir for döngüsünde break; ifadesi görüldüğü anda programın akışı for döngü bloğunun sonuna gelir. Yukarıdaki örneğimize geri dönersek, şifre sorgulama fonksiyonundan gelen değer için bir if-else karar mekanizması kurarak şifre doğrulanmadığı takdirde for döngüsünden break anahtar sözcüğü ile çıkılır. Not: Eğer içi-içe(nested) döngüler kullanıyorsak break anahtar sözcüğü sadece en içteki döngüden çıkacaktır. Yani break anahtar sözcüğünün kullanıldığı for döngüsünden çıkılacaktır. Dıştaki for döngüsü icrasına devam edecektir. break anahtar sözcüğüne ilişkin bir örnek aşağıdaki gibi verilebilir.

#include <stdio.h>
#define DOGRU 1;
#define YANLIS 0;

int SifreKontrol()
{
    ......

     if (kontrol)
        return DOGRU;
     else
        return YANLIS;
}

void main()
{

for (; ;)
    if (SifreKontrol() == DOGRU);
       break;

}
Yukarıdaki örnekte main fonksiyonu içerisindeki sonsuz döngü ile sürekli SifreKontrol fonksiyonu çağrılıyor ve şifre doğrulandığında break anahtar sözcüğü ile sonsuz döngüden çıkılıyor.

2-) goto anahtar sözcüğü ile : goto anahtar sözcüğünün kullanımı çok yaygın olmamasına rağmen sonsuz döngüler de döngüden çıkmak için kullanılabilir. goto anahtar sözcüğü genellikle programın akışını belirli bir noktaya atlatmak için kullanılır.

3-) exit() fonksiyonu ile : Exit fonksiyonun prototipi stdio.h başlık dosyasında tanımlanmıştır. exit fonksiyonunu çağırdığımızda döngüden çıkacağımız gibi programımız da sonlandırılacaktır.exit fonksiyonu genellikle programımızın beklenmedik hatalara karşı sonlandırılması amacıyla kullanılır.

4-) return anahtar sözcüğü ile : return anahtar sözcüğü bir fonksiyonun sonlanması ve fonksiyonu çağırana bir değer döndürmesi için kullanılır. return anahtar sözcüğü kullanıldığında eğer for döngüsü main fonksiyonu içerisindeyse döngü biteceği gibi programımız da sonlanır, aksi halde sadece return ifadesinin bulunduğu fonksiyon sonlanacaktır.

Döngülerle ilgili olan diğer bir önemli anahtar sözcük de continue anahtar sözcüğüdür. Kullanımı break anahtar sözcüğü gibidir. Fakat continue kullanıldığında döngüden çıkılmaz yalnızca continue ifedesinin görüldüğü yerden itibaren icra edilmez. continue anahtar sözcüğünün kullanımına bir örnek verecek olursak : 1 ’den 100 ’e kadar olan tam sayılardan 5’e bölünmeyenleri ekrana yazan bir program için kurulacak for döngüsü aşağıdaki gibidir.Tabi buradaki şartımız döngü değişkenini birer birer artırmak olacaktır. Bizim amacımız ise continue anahtar sözcüğünün nasıl kullanıldığını göstermek.


for (i =0 ; i<100 ; i++)
    if (i % 5 == 0);
        continue;
    else
        printf("%d\n",i);
Örnekte görüldüğü gibi döngü değişkeni olan i 5’e tam bölündüğünde continue; ifadesi işletilecek ve döngü tekrar başa dönecektir. Bu durumda döngü parantezindeki 3.ifade çalıştırılır.

Bu makalemizde for döngülerine geniş bir başlangıç yaptık. Bundan sonraki makalemizde C dilinin diğer döngü yapıları olan while ve do-while yapılarını göreceğiz.

Makale:
Her yönüyle C Döngüleri(Loops) - 1 C ve Sistem Programlama Sefer Algan
  • Yazılan Yorumlar
  • Yorum Yaz
EKİ
16
2003
diğer döngülere de acilen ihtiyacım var..
EKİ
16
2003
çok işime yaradı saol..
EKİ
16
2003
çok işime yaradı saol..
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor