dum | žák

Programování C#

Název školy Vyšší odborná škola obalové techniky a Střední škola, Štětí, příspěvková organizace
Adresa školky Kostelní 134, 411 08 Štětí
46773509
Název operačního programu OP Vzdělávání pro konkurenceschopnost
Registrační číslo CZ.1.07/1.5.00/34.1006
Označení vzdělávacího materiálu
Název tématické oblasti (sady) Programování
Název materiálu Cykly
Anotace
Autor Ivan Pomykacz Jazyk čeština
Očekávaný výstup
Klíčová slova
Druh výukového zdroje Věková skupina žáků 15+
Typ interakce aktivita Ročník
Speciální vzdělávací potřeby žádné
Zhotoveno, (datum/období) Celková velikost

pdf icon
Cykly

Obsah

Cykly jsou řídící konstrukce, které umožňují opakování daného bloku kódu. Dejme si hned příklad cyklu, který vypíše čísla od 1 do 9.

int i = 1;
while (i < 10) {
	Console.Write(i);
	i = i + 1;
}
 

Pokud bychom četli kód shora dolů, pak:

  1. Nejprve se provede deklarace proměnné i a přiřadí se jí hodnota 1;

  2. Následuje cyklus while, což lze volně přeložit zatím co;

  3. V záhlaví cyklu - v kulatých závorkách - je výraz i < 10. Výraz představuje podmínku cyklení - ano podmínku. Tudíž, bude-li platit podmínka, tj. vyhodnocení výrazu i < 10 bude pravda (true), pak cyklus bude cyklit.

    Bude cyklus cyklit? Ano, protože proměnná i obsahuje hodnotu 1, a to je menší jak 10.

  4. Vypíše se obsah proměnné i;

  5. Proměnná i se navýší (inkrementuje) o jedna - bude tedy o jedna větší.

  6. Provede se test výrazu pro cyklení i < 10 - je-li výsledek pravda, začne se opět provádět bod 4.

Jak je vidět, cykly jsou v podstatě triviální - co už není tak triviální je udržet v hlavě nebo si představit, jak bude vypadat desátá otočka nebo tisícátá otočka a nebo jak napsat podmínku cyklení, aby cyklus skončil v pravou chvíli.

Typy cyklů

Princip cyklení je tedy snad jasný. Je-li splněná daná podmínka (různě složitým výrazem), cyklus opakuje příkazy, které jsou zapsány v jeho těle - to je ohraničeno složenými závorkami.

V podstatě bychom si mohli vystačit s jedním "typem" cyklu. Jsou ale situace, kdy se programátorům prostě hodí, když cyklus už dopředu počítá s tím, co bude cyklit.

Existuje proto několik typů cyklů, které se hodí v různých situacích. Podle názvu asi sami poznáte o jaké situace by mohlo jít:

  • cyklus s podmínkou na začátku while() {...};

  • cyklus s podmínkou na konci do {...} while();

  • cyklus s pevným počtem opakování for () {...};

  • cyklus na procházení pole foreach () {...}.

Celé to lze zjednodušit asi tak: Víte-li kolikrát chcete cyklit, nejspíš použijete for, pokud není jisté kolikrát má cyklus proběhnout, pak to bude nejspíš while.

Cyklus while

Aby cyklus cyklil, musí být splněna podmínka cyklení (v kulatých závorkách). Předně je třeba si uvědomit, že zde může být uvedeno cokoli, čehož výsledkem bude boolean (pravda, nepravda).

Zkuste tedy rozhodnout v následujících příkladech o tom, zda-li cyklus bude cyklit a pokud ano, kolikrát.

while (true) {
	Console.WriteLine("true");
}
 
while (false == false) {
	Console.WriteLine("false == false");
}
 
while (1 > 0.1) {
	Console.WriteLine("1 > 0.1");
}
 
while ("lorem" == "lorem") {
	Console.WriteLine("lorem == lorem");
}
 
string t1 = "lorem";
string t2 = "ipsum";
while (t1 != t2) {
	Console.WriteLine("t1 != t2");
}
 

Odpověď je pro všechny stejná: všechny cykly budou cyklit a to nekonečně dlouho (nesmíte je ovšem pustit najednou, protože již první cyklus zasekne vykonávání programu a na další se už nedostane.

Jako výraz - podmínka - cyklení může být i složená podmínka pomocí operátorů && a ||. Jeden příklad za všechny:

int x = 3;
while (x > 0 && x < 10) {
	Console.WriteLine(x);
	x++;
}
 

Cyklus for

Vezmeme-li příklad, jež byl uveden na začátku tohoto textu, tak při použití cyklu for by se zapsal takto:

for (int i = 1; i < 10; i++) {
	Console.Write(i);
}
 

Cyklus for má jiné záhlaví, než while. Tady se totiž přímo počítá s tím, že budeme chtít nějakou proměnnou (zde i), která bude mít nějaký počáteční stav (i = 1), bude se navyšovat (i++) a podmínkou cyklení bude výraz, zpravidla ve stylu i < X. Postup vykonávání cyklu je tento:

  1. Do proměnné i nastav počáteční hodnotu 1;

  2. Zkontroluj podmínku cyklení i < 10, je-li pravda, pokračuj;

  3. Vypiš hodnotu i;

  4. Proveď výraz i++;

  5. Zkontroluj podmínku cyklení, je-li pravda, pokračuj bodem 3;

Break

Cyklus lze během cyklení (a to kdekoli v těle cyklu) přerušit příkazem break. Zkuste odhadnout, jaké poslední číslo cyklus vypíše, než skončí.

int x = 10;
while (true) {
    Console.WriteLine(x);
	if (x < 5) {
		break;
	}
 
	x--;
}
 

Bude to číslo deset mínus šest (schválně zapsáno takto).

Příkaz break můžete použít kolikrát chcete, pokud jste v cyklu.