Bu site emekli olmuştur. Arşiv amaçlı olarak
BT AKADEMİ
sponsorluğunda yayın hayatına devam etmektedir.
Ana Sayfa
.net TV
Makaleler
Kaynak Kod
Haberler
Serbest Köşe
Canlı Köşe
Forum
C#nedir?
Ekibimiz
RSS
ADO.NET/SQL
C / Sys Prog.
Genel
Mono ve .NET
Silverlight
XML / Web Serv.
X86 Assembly
C++ / C++.NET
J#.NET / Java
.NET 3.x
UML / Analiz
Yazılım Müh.
ASP.NET
C# / VC#/.NET
Mobil Prog.
PHP 5
YAZAR HAKKINDA
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ı
:
58701
Yorum Sayısı
:
3
yorum yaz
SİTE İÇİ ARAMA
Ü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.
C#nedir? hesabınız yok mu?
Üye olabilmek için
tıklayın
.
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.
Silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
Bende Yazmak İstiyorum
Blogroll
Burak Selim Şenyurt
Bellek Yönetiminde Verimlilik için İpuçları (Rust Odaklı)
13.5.2025
Burak Selim Şenyurt
Rust ve Güvenli Bellek Yönetimi Hakkında
13.5.2025
Diğer Herşey
»
Makaleler RSS
»
Video Gönder
»
Makale Gönder
»
Serbest Köşeye Yazı Gönder
»
Yazar Başvurusu
»
C#nedir? Ekibinde Olmalıyım!
Sponsorlar
Ana Sayfa
/
Makaleler
/
C / Sys Prog.
/
Her yönüyle C Döngüleri(Loops) - 1
Her yönüyle C Döngüleri(Loops) - 1
Favorilerime Ekle
Gönderiliyor lütfen bekleyin...
arkadaşıma gönder
Arkadaşınızın email adresi:
*
Mesajınız:
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 inin 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 5e 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 5e 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
Fatih Yigit
/
üye hakkında
diğer döngülere de acilen ihtiyacım var..
EKİ
16
2003
Fatih Yigit
/
üye hakkında
çok işime yaradı saol..
EKİ
16
2003
Fatih Yigit
/
üye hakkında
ç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
Dizayn ve Kodlama
bt
akademi
. Tüm Hakları Saklıdır © Copyright 2002-2009 c#nedir?com
Makaleler
Serbest Köşe
Makale Gönder
.Net TV
Video Gönder
Canlı Köşe
Kaynak Kod
Forum
Haberler
Röportajlar
Anketler
C# Nedir?
İletişim
Site Haritası
RSS
Favorilere Ekle
Üyelik
Hesap Aktivasyon
Ekibimiz
Ekibe Katıl