İterasyon Komutları

Belli bir kod parçasını istenen bir şart sağlanana kadar tekrar tekrar çalıştırmaya yarayan komutlara iterasyon komutları denir. C'de forwhile ve do olmak üzere üç iterasyon komutu bulunmaktadır. Şimdi sırayla bu iterasyon komutlarının çalışma mantıklarına bakalım.


for

for komutu genel olarak şu kalıpla kullanılır:

for (başlangıç ifadesi ; şart ifadesi ; artım ifadesi)
çalıştırılacak kod

Bir örnekle bu komutun nasıl çalıştığını inceleyelim:

#include <stdio.h>

int main(void){
    int a;
    for(a=0;a<=10;a++){
        int b=a*a;
        printf("%d\n",b);
    }
    printf("%d",a);
    return 0;
}

Yukarıdaki kod 0'dan 10'a kadar olan tam sayıların karelerini ve en son olarak da a'nın değerini yazdırmaktadır. a'nın ilk değeri 0'dır. Her adımda a'nın 10'dan küçük veya eşit olup olmadığı kontrol edilmekte ve eğer bu ifade doğruysa bloğun içindeki kod çalıştırılmakta ardından a'nın değeri 1 arttırılmaktadır. Dikkat edilirse for komutunda da birden fazla satır komuta bağlanmak istenirse bu kod parçasının if komutunda olduğu gibi blok içine alınması gerektiği görülebilir. Son adımda a'nın değeri 11 olmuştur. Bu nedenle a'nın 11 değeri için bloğun içindeki kod çalıştırılmamış ve blok dışına çıkılmış a'nın değeri 11 olarak yazdırılmıştır.

Bilinmesi gereken bir başka şey de eğer ilk seferde şartlı ifadenin doğruluğu sağlanmazsa for komutunun altındaki kodun hiç çalıştırılmayacağıdır. Örneğin a<=10 ifadesini a>=10 ile değiştirirseniz daha ilk adımda şart ifadesi yanlış olacak ve bu komut altındaki hiçbir kod işleme alınmayacaktır. Bu durumda çıktı olarak sadece "0" ifadesi görülecektir.

Bunlarla birlikte for döngüleri tek bir değişkene bağlanmak zorunda değildir. for komutunun içindeki üç kısım da birden fazla değişken içerebilir.

#include <stdio.h>

int main(void){
    int a,b,c;
    for(a=0,b=5,c=10;a*b*c<=100;a++,c--){
        printf("%d\n",a*b*c);
    }
    return 0;
}

Yukarıdaki örnekte başlangıç ifadesi ve şart ifadesi üç değişkenle, artım ifadesi ise iki değişkenle ifade edilmiştir. Kodu inceleyecek olursak;

İlk başta a=0, b=5 ve c=10'dur. a*b*c=0'dır ve bu değer 100'den küçüktür bu nedenle alttaki blok içerisindeki kod çalıştırılacaktır. 0 değeri yazdırıldıktan sonra a 1 arttırılacak, c 1 azaltılacaktır. Bu işlemin en son yapılmasının nedeni ++ ve -- ifadelerinin değişkenlerin sonuna konması değildir. for döngüsünde artım ifadesi tüm kod parçası çalıştırıldıktan sonra işleme alınır.

İkinci adımda a=1, b=5 ve c=9'dur. a*b*c=45'tir ve bu değer 100'den küçüktür. Bu nedenle kod parçası yine çalıştırılacak ve 45 değeri yazdırılacaktır.

Üçüncü adımda a=2, b=5 ve c=8'dir. a*b*c=80'dir ve bu değer 100'den küçüktür. Bu nedenle kod parçası yine çalıştırılacak ve 80 değeri yazdırılacaktır.

Dördüncü adımda a=3, b=5 ve c=7'dir. a*b*c=105'tir ve bu değer 100'den büyüktür. Bu nedenle for komutu durdurulacaktır.

Bilinmesi gereken bir başka şey de for komutu içerisindeki üç ifadeden hepsinin var olmak zorunda olmadığıdır. Misalen başlatma işlemi ve artım işlemi kodun başka kısımlarında yapılabilir. Örnek olarak aşağıdaki kod buna uyacaktır:

#include <stdio.h>

int main(void){
    int a=0;
    for(;a<=10;){
        int b=a*a;
        printf("%d\n",b);
        a++;
    }
    return 0;
}

En baştaki sayıların karelerini yazdırma örneği bu şekilde de yapılabilirdi.

for komutunun başka kullanım şekilleri de vardır. Misalen for komutundan sonraki ifadeler yazılır fakat altına çalıştırılacak kod yazılmazsa bu yapı zaman geçirmek için kullanılabilir. Program for komutunun içindeki ifadelerle oyalanırken zaman harcanmış olacaktır. Bu durum donanımsal bir şey kodlarken kullanılabilir.

for komutunun başka bir kullanımı ise ifadelerin yazılması gereken üç yerin de boş bırakılmasıdır. Bu durumda for herhangi bir şarta bağlı olmadığı için devamlı şekilde işlemi tekrarlayacaktır. Buna sonsuz döngü denir. Misalen ışığı algılayan bir donanımın devamlı şekilde ışık gelip gelmediğini kontrol etmesi için bu yapı kullanılabilir.

for döngüsünün başlangıç kısmı değişken ilan etmek için de kullanılabilir. Misalen ilk örneğimizde a'yı dögünün dışında ilan etmeyip "for(int a=0;a<=10,a++)" şeklinde de yazılabilirdi. Fakat bu yapı C89'da tanımlı değildir. Bu yapıyı kullanabilmek için C99'u destekleyen bir derleyici kullanılmalıdır.

Bunlarla beraber artım ++ veya -- işlemleriyle yapılmak zorunda değildir. "x=x+a" veya "x+=a" gibi bir ifadeyle her adımda a kadar artım yapılması sağlanabilir.


while

while komutunun genel yapısı ise şöyledir:

while(ifade)
kod;

Burada da ifadenin doğru olduğu her seferde kod çalıştırılır. En başta verdiğimiz sayıların karelerini yazdırma örneğini while ile yapalım:

#include <stdio.h>

int main(void){
    int a=0;
    while(a<=10){
        int b=a*a;
        printf("%d\n",b);
        a++;
    }
    return 0;
}

while komutunda da örnekte görüldüğü gibi birden fazla satır komuta bağlanacaksa blok kullanılmalıdır. Eğer <=10 yerine a>=10 yazsaydık içerideki kod hiç çalışmayacaktı. Fakat, eğer kodun ifade doğru da yanlış da olsa en azından bir kere çalıştırılması isteniyorsa do komutu kullanılabilir.

do

do-while kullanım kalıbı şu şekildedir:

do
kod
while(ifade);

Bu durumda kod ifade yanlış da olsa bir kez çalışacaktır. İfadenin yanlışlığı keşfedilir edilmez de kod parçasının çalıştırılması durdurulacaktır.

#include <stdio.h>

int main(void){
    int a=8;
    do{
        int b=a*a;
        printf("%d\n",b);
        a++;
    }while(a>=10);
    return 0;
}

Yukarıdaki örnekte 8<=10 olmamasına rağmen döngü bir kez çalışacaktır. Bu da ekranda "64" ifadesini görmemize yol açacaktır.