C Döngüler
C Programlama Dili:
Döngüler
Bir C programı ile karşı
karşıya kalındığında programda bol miktarda if ve bol miktarda for
komutundan başka birşey olmadığını göreceksiniz. Programlar
genellikle bu iki komut arasına serpilmiş işlemler ve çağrılardan
oluşur. Tabii sistem programlarında assambly çağrıları da vardır.
ama temel hep mantıksallar ve döngürelerdir. Ve bu yapılar tüm
programlama dillerinde aynıdır. Biz daha önceden bir programlama
dili ile haşırneşir olan insanlar olduğumuza göre bu yapıların C
dilindeki görüntüsüne bakmak yetecektir. İşte döngüer.
for döngüsü en çok
karşılaşılan döngüdür. yapısı
for(giriş;karşılaştırma;iterasyon) {kodbir;kodiki;kodn;}
Şeklindedir. giriş kısmı
for döngüsü ilk çalıştığında bir kere işletilir. genelde bu kısımda
bir değişkene değer atanır ve bu daha sonra sayılır. karşılaştırma
sıtandart if karşılaştırmaları gibidir. Bu karşılaştırma doğru
olduğu müddetçe döngü tekrarlanır. iterasyon genelde girişte atanan
değişkenin değerini arttırmaya yöneliktir.
for(;;) puts(""çalıştırmaaa!);
İle sonsuz döngü
kurulabilir. basit for programı yazalım;
#include stdio.h
int main(void){
int i;
for (i=1;i=10;i++) {
printf("%d\n",i);
}
}
programı ile ekrana 1 den
10 kadar olan sayılar yazılabir. yukardaki program şöyle de
yazılabilir.
#include stdio.h
int main(void){
int i=1;
for (;i=10;) {
printf("%d\n",i);
i++;
}
}
For komutu çok esnektir.
Değişik bir örnek yapalım. 1000 den 9999 e kadar olan sayılardan
rakkamlarının dördüncü katlarının toplamı kendisi olan sayıları
bulalım;
#include stdio.h
int main(void){
int sayi,a,b,c,d;
long double hesap;
for(sayi=1000;sayi=9999;sayi++){
a=sayi/1000;
// binler basamağı a da;
b=(sayi-(a*1000))/100;
// yüzler basamağı b de;
c=(sayi-(a*1000)-(b*100))/10;
// onlar basamağı c de;
d=sayi-(a*1000)-(b*100)-(c*10);
// birler basamağı d de;
hesap=(a*a*a*a)+(b*b*b*b)+(c*c*c*c)+(d*d*d*d);
if (hesap==sayi){
printf("%d\n",sayi);
}
}
printf("hesaplama tamamlandı...\n");
}
Program yazmak böyle
birşey arkadaşlar mantıklı çözümler bulmak; sonuçlara bakalım. 1634,
8208, 9474 olacaktır. programı şıklaştıralım.
#include stdio.h
int main(void){
int sayi,a,b,c,d;
long double hesap;
for (a=1;a10;a++){
for (b=0;b10;b++){
for (c=0;c10;c++){
for (d=0;d10;d++){
sayi=(1000*a)+(100*b)+(10*c)+d;
hesap=(a*a*a*a)+(b*b*b*b)+(c*c*c*c)+(d*d*d*d);
if (sayi==hesap){
printf("%d\n",sayi);
}
}
}
}
}
printf("hesaplama tamamlandı...\n");
}
Bir programı yazmanın
milyonlarca yolu vardır. Programcı en işe yararını arar.
while
döngüsünü ise for döngüsünün sadece şartların belirtildiği şekli
olarak düşünmek yalnış olmaz. Zaten de öyle. bir örnekte gösterelim;
#include stdio.h
int main(void){
int c;
int i=0;
printf("döngü sayisi:");
scanf("%d",&c);
while (i!=c){
i++;
puts("Mükemmel!");
}
puts("program sonlandı.");
}
do while
döngüsünde ise şartın doğruluğu kontrol edilmeksizin bir kere
işletilir. ilk işletme sonunda kontrol yapılır.
#include stdio.h
int main(void){
int c;
int i=0;
printf("döngü sayisi:");
scanf("%d",&c);
do {
i++;
puts("Mükemmel!");
if (i==1000) {
puts("\tSistem içi hata!!!");
break;
}
}
while (i!=c);
puts("program sonlandı.");
}
While komutundan sonra ;
geldiğine dikkat edin. Yukarıda break komutunu farketmişsinizdir. Bu
komutu daha önce switch case ortamında da gördük. Burada break
döngüyü sonlandırmaktadır. yani while komutunun altına bırakır. Eğer
döngü for döngüsü ise bu sefer for döngüsü işletilmez. Döngülerde
break gibi işlevi olan bir diğer komut ise continue komutudur. Bu
komut döngünün bir sonraki durum için işletilmesini sağlar ve sadece
for döngüsünde kullanılabilir. Çünkü while döngüsünde iterasyon
tanımlayan bir kısım yok. Continue komutu for döngüsü için hemen for
etiketine yönlenme yapar ve iterasyon kısmında belirtilen işlemi
yapar. Biz yukarıda sıklıkla i++ türünden bunu kullanmıştık. Yani bu
durumda bir sonraki i değeri için işlem yapılır. böylece döngü
içerisindeki diğer komutlar işletilmez. Brak ve continue işlemi
genelde bir if kontrolü sonrasında verilen bir karardır. Yoksa
döngüye tek başına koyarsanız. Döngünün içindeki diğer komutlar hiç
işlemeyecektir. Gereksiz kullanım yani.
Goto
komutunu BASIC dilinden hatırlarsınız. Bu komut etiket ile
belirtilen adrese bir sıçrama yapar. Goto komutu günümüz yapısal
programlama dilleri sayesinde tarih olmuştur denebilir. Programcılar
bu komutu pek gerekmedikçe kullanmazlar. Ama ben hala kullanıyorum.
Bazı durumlarda goto komutu sayesinde sizinde program iskeletiniz
hafifleyebilir. Goto komutuyla bir adet döngü kuralım bu döngüde
olanları for ile yapmak daha kolay gerçi ama olsun.
#include stdio.h
int main(void){
// birden yüze kadar olan sayıların
// toplamını bulan program..
int i=0,t=0;
dongu:
i++;
t+=i;
if (i!=100) {
goto dongu;
}
printf("%d\n",t);
}
|