Cyklus for alebo "tri v jednom".

Cyklus while, s ktorým ste sa zoznámili v predošlej lekcii je skvelý a univerzálny nástroj. Čo sa cyklov týka, všetko sa dá urobiť cez neho. Keď potrebujeme opakovať nejakú postupnosť príkazov určitý počet krát alebo keď potrebujeme čosi opakovať dovtedy, kým je splnená nejaká podmienka, vždy sa to s pomocou cyklu while a nejakých premenných dá uhrať. Vyzerá to tak, ako by sme už ďalšie typy cyklov nepotrebovali.

Napriek tomu je tu cyklus for. Totiž ľudia, ktorí C-čko vymýšľali si všimli, že váčšina cyklov funguje tak, že na začiatku sa spraví nejaká príprava, potom cyklus beží kým je splnená nejaká podmienka. Pritom sa v každom behu cyklu udeje nejaká malá zmena. No a rozhodli sa, že všetky tieto veci napchajú do jedného príkazu.

Cyklus for sa používa hlavne vtedy, keď dopredu vieme, koľkokrát sa má cyklus vykonať, ale dá sa s úspechom použiť aj inde. Jeho použitie ukážeme na programe, ktorý napočíta do desať:

    int i;
    
    for ( i = 1; i <= 10; i++ )
    {
        printf("%d\n", i);
    }
Za príkazom for nasleduje zátvorka v ktorej sa nachádzajú tri chlieviky oddelené bodkočiarkami. V prvom chlieviku je napísané, čo sa má spraviť ešte predtým, ako sa cyklus začne vykonávať. (Do premennej i sa hodí jednička.) V druhom chlieviku je podmienka. Cyklus bude bežať dovtedy, kým bude táto podmienka splnená. V treťom chlieviku je zmena, ktorá sa vykoná po každom prebehnutí cyklu. (Premenná i sa zväčší o 1.) Za touto "veľkou" zátvorkou nenasleduje bodkočiarka ale rovno kučeravé zátvorky s príkazmi, ktoré sa majú opakovať. (Ak je príkaz len jeden, môžeme si kučeravé zátvorky odpustiť.)

Uvedený program robí presne to isté, ako program

    int i;
    
    i = 1;
    while ( i <= 10 )
    {
        printf("%d\n", i);
        i++;
    }
Oba tieto programy sú z hľadiska počítača naprosto rovnaké. Z oboch sa pri kompilácii vygenerujú presne tie isté strojové inštrukcie. Ale zápis cez for je v tomto prípade kratší a prehľadnejší.

Iný príklad použitia cyklu for môžete vidieť tu:

   int i,j,velkost;
   
   printf("Zadaj velkost:");
   scanf("%d", &velkost);
   for ( i = 1; i <= velkost; i++ )
   {
        for ( j = 1; j <= i; j++ )
        {
            putchar('*');
        }
        putchar('\n');
   }

Úloha č.1 Prídite na to, čo robí uvedený program. Potom to napíšte, skompilujte a vyskúšajte.

Úloha č.2 S pomocou cyklu for napíšte program, ktorý vypíše všetky nepárne čísla od 1 do 99.

Úloha č.3 S pomocou cyklu for napíšte program, ktorý vypíše všetky čísla od 1 do 100 a ku každému napíše, či je párne, alebo nepárne.

Úloha č.4 Napíšte program, ktorý s pomocou scanf načíta číslo a potom urobí štvorček z hviezdičiek danej veľkosti. Napr. ak uživateľ zadá číslo 3, výsledok bude

***
***
***

Úloha č.5 (Nepovinná, pre machrov.) Napíšte program, ktorý načíta číslo a potom spraví symetrický trojuholník danej veľkosti. Pre vstup 4 to bude vyzerať takto:

   *
  ***
 *****
*******

Anino Belan 2003-10-26