Cykly
4. Cyklus s krokem
Tento
typ nepodmíněného cyklu se používá v případě, že je explicitně znám počet
provedení příkazu (víme, kolik proběhne smyček uvnitř cyklu, tedy je
znám počet iterací).
Dá se říci, že tento typ cyklu je formálnější verzi cyklu while, ve kterém jsou inicializace, logický výraz řídící podmínky a aktualizace
řídící proměnné zkombinovány do jedné kulaté závorky. Značka cyklu s krokem, ve vývojovém diagramu aplikace Flowgorithm byla následující - viz Obrázek 1. Jak vidíme, v cyklu je definována tzv. řídící proměnná, která je inicializována na počáteční hodnotu. Hodnota řídící proměnné je definována intervalem <počatečníHodnota, konečnáHodnota>. Po každém provedení iterace (smyčka Next) je hodnota této řídící proměnné zvýšena (nebo snížena) o hodnotu definovaného kroku. Pokud je hodnota řídící proměnné je mimo interval (větev Done), cyklus je ukončen, tzn., již není prováděno tělo cyklu.

Obrázek 1: Značka cyklu s krokem – vývojový diagram
Obecná syntaxe příkazu for v jazyce C# je následující:
for (inicializačníVýraz; řídícíPodmínka; aktualizaceŘídícíProměnné) těloCyklu;
- inicializačníVýraz - znamená nastavení počáteční hodnoty řídící proměnné cyklu ještě před vykonáním bloku cyklu (řídící proměnná cyklu, musí být ordinálního typu, tj. datový typ daného prvku je takový, že známe předchůdce a následníka daného prvku. Nejčastěji se pro řídící proměnnou používají celočíselné ordinální typy integer, short, byte nebo výčtový typ (o datových typech se dozvíte později v tomto kurzu). Inicializaci řídící proměnné, včetně její deklarace, lze provést i před deklarací příkazu for. V takovém případě lze v příkazu for inicializaci vypustit, ale prázdná inicializační část musí zůstat oddělena od řídící podmínky pomocí středníku.
Příkaz for může obsahovat i více řídících proměnných. Inicializační výraz pak může obsahovat inicializaci i více proměnných - řídícíPodmínka - představuje logický výraz, který je vyhodnocen a zároveň podmiňuje vykonání bloku těla cyklu. řídícíPodmínka musí být logického typu.
V případě použití více proměnných v cyklu for, lze spojovat logické výrazy týkající se těchto proměnných pomocí logických operátorů např. && - aktualizaceŘídícíProměnné - aktualizace řídící proměnné je vykonána vždy po provedení těla cyklu.
V případě více řídících proměnných musí být zajištěna aktualizace těchto proměnných - těloCyklu - příkaz (nebo složený příkaz uzavřený do složených závorek), který je proveden pokud platí, že výsledek logického výrazu v řídící podmínce je true. Po provedení příkazu v těle cyklu se aktualizuje hodnota řídící proměnné a následně se znovu vyhodnotí logický výraz. Proces provádění těla cyklu se opakuje, dokud je splněna řídícíPodmínka. Opuštění cyklu nastává tehdy, pokud řídící podmínka je vyhodnocena jako false
Ilustrativní příklad GrafickyPrvek
Algoritmus GrafickyPrvek
- Popis: Vývojový diagram pro vytvoření grafického prvku ve výpisu pomocí cyklu s krokem
- Zadání: Vytvořte algoritmus funkce GrafickyPrvek, která vytvoří textový řetězec (grafika), který bude použit jako grafický prvek ve výpisu výzvy. Tento grafický prvek se skládá ze znaků hvězdiček, tj. "*" umístěné v řádce za sebou. Pro postupné vkládání hvězdiček použijte cyklus s krokem. Počet hvězdiček (uložený v proměnné delkaVyzvy) v řádce je roven počtu znaků výzvy, která je vstupním argumentem (formální parametr vyzva) této funkce
- Řešení:
https://phix.zcu.cz/moodle/pluginfile.php/389320/mod_book/chapter/99033/Algoritmus_GrafickyPrvek.png?time=1580329500052
Program GrafickyPrvek
- Popis: Deklarace metody s návratem s použitím cyklu s podmínkou na konci
- Zadání: Vymyslete, jak byste na základě předchozího algoritmu GrafickyPrvek v C# naprogramovali statickou metodu s návratem (se stejným názvem) jako konzolovou aplikaci
- Řešení: Bude postupně probráno v následujícím textu
Deklarovaná metoda přijímá text výzvy, který je vypsán uživateli pro zadání číselného kódu aritmetické operace (formální parametr vyzva) - viz Kód 1. Díky tomuto formálnímu parametru lze určit počet hvězdiček. K tomu účelu použijeme metodu s návratem Length, určující počet znaků ve výzvě. Tuto metodu jsme zavolali pomocí tečkové notace u proměnné vyzva. Tato metoda a také další metody jsou definovány pro datový typ string (vyzva je datového typu string). Základním kamenem metody GrafickyPrvek je využití cyklu s krokem - for. Zde pokud logický výraz i <= delkaVyzvy (řídící proměnná i určuje aktuální index hvězdičky) nabývá hodnoty true, má být přidána pomoci příkazu grafika = grafika + "*"; další hvězdička do stávající grafiky. Jinými slovy řečeno, pokud ještě nebylo dosaženo potřebného počtu hvězdiček v řádce (hodnota řídící proměnné ještě nebyla tolikrát zvýšena o krok 1 pomocí příkazu i++ aby dosáhla své konečné hodnoty), příkaz umístěný v těle cyklu cyklus má znovu proběhnout. Pokud platí, že i > delkaVyzvy (logický výraz i <= delkaVyzvy nabývá hodnoty false) nedochází již k dalšímu přidání hvězdičky do řádku. Metoda navrací výsledný textový řetězec tvořený potřebným počtem hvězdiček.
//Metoda s návratem - vytvoření grafického prvku na základě textu výzvy (formálního parametru) public static string GrafickyPrvek(string vyzva) { /* Deklarace proměnné: 'grafika' ... znaky (hvězdička, tj. "*") umístěné v řádce * za sebou v délce počtu znaků výzvy, 'delkaVyzvy' ... počet znaků ve výzvě, * 'i' ... čítač, tj. aktuální index "*", tj. pořadí hvězdičky v řádku */ string grafika; int delkaVyzvy, i; // Uložení počtu znaků ve výzvě do proměnné 'delkaVyzvy' delkaVyzvy = vyzva.Length; // Inicializace grafiky (přiřazení prázdného textu) grafika = ""; // Cyklus s krokem - příkaz uvnitř těla cyklu proběhne tolikrát, kolik je znaků ve výzvě for (i = 1; i <= delkaVyzvy; i++) { // Připojení znaku "*" k předchozím znakům umístěných v grafika - vytvoření grafiky (hvězdiček v řádce) grafika = grafika + "*"; } //Návrat grafického prvku return grafika; }
Kód 1: Deklarace metody GrafickyPrvek - příklad cyklu s krokem