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í | ||
IČ | 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 |
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:
Nejprve se provede deklarace proměnné
i
a přiřadí se jí hodnota 1;Následuje cyklus
while
, což lze volně přeložit zatím co;-
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ýrazui < 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. Vypíše se obsah proměnné
i
;Proměnná
i
se navýší (inkrementuje) o jedna - bude tedy o jedna větší.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:
Do proměnné
i
nastav počáteční hodnotu 1;Zkontroluj podmínku cyklení
i < 10
, je-li pravda, pokračuj;Vypiš hodnotu
i
;Proveď výraz
i++
;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.