Cykly jsou dalším základním stavebním prvkem všech algoritmů a programů. Cykly se v programování používají tehdy pokud chceme nějakou konkrétní činnost (klidně i funkci nebo proceduru) několikrát opakovat. V praxi sel lze setkat i se situacemi, kdy dopředu nevíme, kolikrát se bude daná část kódu opakovat.

<aside> 👉 Iterace = opakování cyklu! 0. iterace = první volání těla cyklu

</aside>

<aside> ☝ Veškerý kód níže je psány uvnitř funkce main()!

</aside>

<aside> ☝ Před cykly je dobré si zopakovat základní části co známe o jazyku C:

</aside>

Cyklus for

for cyklus je obecně použitelný tehdy, pokud dopředu víme, kolikrát chceme danou část kódu opakovat (iterovat). Je potřeba si říct že nemusíme dopředu.

Takový ukázkový cyklus for může být následující tvrzení: Vyskoč 5x. Tedy 5x vykonáte stejnou funkci (vyskočíte).

Ukázka kódu tvrzení Vyskoč 5x

Syntaxe cyklu for

for (initExpression; testExpressionCondition; updateExpression) {
  // kód, funkce a procedury, které chcete vykonat
}

initExpression se provede (jednou) před provedením těla cyklu.

testExpressionCondition definuje podmínku pro provedení bloku kódu.

updateExpression se provede (pokaždé) po provedení těla cyklu.

Krok Akce
1. Nastaví se proměnná
2. Kontroluje se podmínka s proměnnou
3. Vykoná se tělo
4. Aktualizuje se proměnná

<aside> 💡 Cyklus for stejně jako všechny ostatní cykly používáme ve funkcích nebo procedurách. Tento cyklus ze složen z definice proměnné, podmínky, těla a iterátoru. Tělo se vykonává tolikrát. kolikrát je splněna podmínka. Podmínka je stejná jako u podmínek a větvení.

</aside>

c-for-loop.jpg.webp

Základní ukázka cyklu for

int i; // definice proměnné

for (i = 0; i < 5; i++) { // nastavení cyklu dle syntaxe
  printf("%d\\n", i); // výpis do konzole v každé iteraci
}

Tento cyklus definuje proměnnou i (tato proměnná je dostupná i po dokončení cyklu - všech iterací a zůstává na posledním nastaveném čísle z poslední iterace) následně ji předává a nastavuje na 0 cyklu for kde se kontroluje podmínka i < 5 pokud je podmínka pravdivá, tedy i je menší jak 5 vykoná se tělo cyklu, v tomto případě funkce print. Po dokončení těla je vykonána akce i++, které k původnímu i přidá +1.

Iterace i
0. iterace 0
1. iterace 1
2. iterace 2
3. iterace 3
4. iterace 4

<aside> 👉 Iterace začínají vždy od 0 i nemusí začínat na 0, záleží jak jej nastavíme.

</aside>

// ukázka dkyž i nezačína od 0
// také se jedná o změnšování i
for (int i = 5; i > 0; i--) { // nastavení cyklu dle syntaxe
  printf("%d\\n", i); // výpis do konzole v každé iteraci
}

Častější použití cyklu for

for (int i = 0; i < 5; i++) { // nastavení cyklu dle syntaxe
  printf("%d\\n", i); // výpis do konzole v každé iteraci
}

V této ukázce se děje to samé jako v ukázce výše s jedním rozdílem. proměnnou i definuji pouze pro tento cyklus, tedy po vykonání cyklu (dokončení všech iterací) nebude už platit a není definována. Uvolní se z paměti.

Cyklus while

while cyklus se využívá pokud nevíme přesně kolik opakování (iterací) chceme provést, ale víme, že to chceme provádět, dokud je platná určitá podmínka.

Takový ukázkový cyklus while může být následující tvrzení: Pokud neprší, skákej. Tedy vykonávat stále dokola stejnou funkci (vyskočíte) pokud nebude pršet, jak bude pršet cyklus skončí a vy už nebudete skákat. Pokud již prší, skákání ani nezačne!

Syntaxe cyklu while

while (testExpressionCondition) {
  // kód, funkce a procedury, 
	// které chcete vykonat
}

testExpressionCondition definuje podmínku před provedení bloku kódu.

Krok Akce
1. Nastaví se proměnná před cyklem
2. Kontroluje se podmínka s proměnnou
3. Vykoná se tělo, které může ovlivnit proměnnou

c-while-loop_0.jpg.webp

<aside> 💡 Cyklus while stejně jako všechny ostatní cykly používáme ve funkcích nebo procedurách. Tento cyklus ze složen z podmínky a těla. Tělo se vykonává tolikrát. kolikrát je splněna podmínka. Podmínka je stejná jako u podmínek a větvení.

</aside>