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;a‹10;a++){
for (b=0;b‹10;b++){
for (c=0;c‹10;c++){
for (d=0;d‹10;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);
}

Hiç yorum yok:

Yorum Gönder

Teşekkürler