Cyklus

Doteraz sme sa naučili príkaz echo (výpis niečoho), základné typy premenných (boolean, integer, string), komentovanie kódu (//popis kódu...), podmienku (if else) a operátory (porovnávacie a aritmetické). Názorne sme si ukázali, ako vieme jednotlivé veci kombinovať a využívať jednu vec v druhej a podobne. Teraz si ukážeme jednu z najkrajších a najefektívnejších vymožeností programovania, ktorá bude využívať všetky vedomosti, ktoré sme sa doteraz naučili. Na tomto príklade už budeme naozaj počítač využívať na to, aby nám niečo uľahčil a robil za nás automaticky.

 

Predstavme si situáciu, že pomocou príkazu echo potrebujeme vypísať nejaký text trikrát za sebou. S doteraz nadobudnutými vedomosťami by náš kód vyzeral asi takto:


<?php
echo "Uz nikdy nebudem pit pocas vyucovania!";
echo "Uz nikdy nebudem pit pocas vyucovania!";
echo "Uz nikdy nebudem pit pocas vyucovania!";

 

Ak si daný kód otestujeme v online simulátore, vidíme, že žiadúci výsledok to prinesie. Správne sme použili príkaz echo viackrát za sebou a nemáme žiadnu syntaktickú chybu. Naše zadanie sme splnili, pomocou kódu sme dosiahli výpis textu trikrát po sebe. Jedným zo základných princípov programovania však je písať kód optimálne. To znamená, najjednoduchšie a najefektívnejšie ako sa len dá. V našom prípade sa vyskytuje častá chyba začiatočníkov - máme viackrát napísaný ten istý kód alebo náš kód obsahuje opakujúce sa časti. Týchto chýb sa budeme celý čas snažiť vyvarovať - tým sa učíme lepšie programovať. Tento prípad sa ale dal ešte ako tak zvládnuť. Trikrát sme skopírovali jeden príkaz... Nebolo to až tak veľa roboty. Čo ale v prípade, že by sme potrebovali tento text vypísať stokrát?

 

Mať stokrát ten istý príkaz je dosť nepraktické a neprehľadné. Na vyriešenie tohto problému nám slúži možnosť použiť cyklus (loop). Čo to je? Laicky by sa dalo povedať, že povieme počítaču, sprav (opakuj) toto (príkaz alebo blok príkazov) toľkotokrát (určíme počet). Čiže namiesto toho, aby sme zabrali sto riadkov kódu, ktoré by obsahovali ten istý príkaz echo "Uz nikdy nebudem pit pocas vyucovania!"; použijeme cyklus, kde na jednom riadku zadefinujeme, koľkokrát sa má cyklus opakovať a na základe čoho sa má opakovať a na ďalších iba raz (!!!) určíme, čo sa má vykonávať (náš príkaz echo). Šikovné však? Poďme si ale ukázať, ako na to.

 

Zapísanie cyklu bude na začiatok pre vás zrejme mätúce, pretože zadefinovanie, koľkokrát sa má cyklus opakovať, je troška náročenejšie. Verím, že to na príklade pochopíte raz dva tri. Takže poďme si rozobrať náš prípad, že chceme trikrát vypísať text pomocou príkazu echo. Keby to v jazyku PHP malo byť úplne jednoduché, mohol by vyzerať príkaz nejako takto :


do(3){
echo "Uz nikdy nebudem pit pocas vyucovania!";
}


Príkaz do by hovoril počítaču rob (sprav, vykonaj), v zátvorke by sme určili koľkorát to má vykonať a medzi množinovými zátvorkami by sme uričili príkazy, ktoré chceme, aby sa vykonali (podobne ako v príkaze if). Nedajte sa ale pomýliť, tento kód nefunguje a neexistuje v jazyku PHP. Len som vám chcel priblížiť, čo asi ideme robiť. Náš skutočný cyklus bude vyzerať nejako podobne, až na prvý riadok. Ako to teda vyzerá po správnosti?

 

Na náš príklad použijeme cyklus for, ktorého syntax vyzerá nasledovne. Za príkazom for nasledujú okrúhle zátvorky, v ktorých sa nachádzajú tri výrazy (výraz je napríklad $i = 5 alebo $a < 5). Každý z výrazov má iný význam. Počas každého kroku cyklu (opakovania) sa vyhodnotia tieto príkazy, ktoré ovplyvňujú samotný cyklus napríklad tým, či už má skončiť alebo má ešte pokračovať.


Prvý výraz sa vykoná vždy iba raz na začiatku celého cyklu. Takže ak budeme mať vo výraze napríklad $i = 5, toto priradenie do premennej $i sa vykoná len raz, kedy program prečíta príkaz for. V žiadnom ďalšom opakovaní (kroku) cyklu sa tento prvý výraz nevykoná. Na čo je to dobré? Tento prvý výraz sa využíva na zadefinovanie premennej, ktorá bude použitá napríklad na určenie poradového čísla kroku nášho cyklu (poradové číslo opakovania, čiže či sa náš príkaz vykonáva prvýkrát, druhýkrát alebo tretíkrát). Čiže v našom prípade by mohol prvý výraz vyzerať $poradove_cislo = 1. Táto naša premenná sa na začiatku nastaví na číslo 1, takže budeme v kroku číslo 1. Ako sme už spomenuli, tento príkaz sa už viackrát nevykoná.


Potom program čítajúci náš cyklus spracúva druhý výraz v zátvorke. Druhý výraz v zátvorke slúži ako podmienka – overenie, či náš cyklus už má skončiť alebo sa má ešte vykonať blok príkazov definovaný za okrúhlymi zátvorkami v množinových zátvorkách. Takže, ak je naša premenná na začiatku nastavená na číslo 1, každým krokom ju ideme zvyšovať o jedna (krok prvý, druhý, tretí) a chceme, aby sa cyklus vykonal tri razy, naša podmienka (druhý výraz) musí byť $poradove_cislo < 4. Prečo? Pretože v prvom kroku je nasa premenna 1 a podmienka je splnená. V druhom kroku 2 – podmienka splnená, v treťom kroku bude 3 – podmienka bude splnená a v štvrtom kroku sa nastaví naša premenná na číslo 4. Tu už ale podmienka splnená nebude a tak sa blok príkazov nevykoná, cyklus bude ukončený a program pokračuje ďalej čítaním ostatných príkazov smerom dole. Náš cieš sme splnili, príkazy sa vykonali tri razy.


Tretí výraz slúži na zmenu stavu (napríklad našej premennej na určenie poradového čísla kroku) po vykonaní každého opakovania cyklu. Ako sme povedali, chceme, aby sa po každom opakovaní naša premenná zvýšila o jedna, aby sme vedeli, ktorý krok sa práve vykonáva. Toto už vieme pomocou aritmetickej operácie, takže náš tretí výraz bude vyzerať $poradove_cislo = $poradove_cislo + 1. Asi to znie zložito, ale nebojte sa, je to veľmi jednoduché a hneď to na príklad pochopíte. Náš cyklus bude teda v kóde vyzerať nasledovne:

 

for($poradove_cislo = 1; $poradove_cislo < 4; $poradove_cislo = $poradove_cislo + 1){
    echo "Krok cyklu for cislo ".$poradove_cislo." : ";
    echo "Uz nikdy nebudem pit pocas vyucovania!";
    echo "<br>";
}
echo "Cyklus uz skoncil :)";

 

Poďme si ale vysvetliť kompletné čítanie tohto kódu počítačom krok po kroku, aby sme pochopili, ako to funguje. Počítač prečíta slovo for a keďže vie, že to je typ cyklu for a aké má vlastnosti, začne sa podľa toho správať. Zoberie si prvý výraz zo zátvorky a vykoná ho. Do premennej s názvom poradove_cislo vloží hodnotu 1. Potom sa pozrie na druhý výraz v zátvorke, čo je podmienka, ktorá určuje, či sa aktuálny krok v cykle vykoná alebo má cyklus už skončiť. Pýta sa, či je naša premenná menšia ako číslo 4. Keďže je v našej premennej uložené číslo jedna a to je menšie ako štyri, podmienka je splnená a tak sa blok príkazov vykoná. Príkazy sa vykonávajú zaradom, prvé echo je veľmi praktické na pochopenie, že v ktorom kroku sa nachádzame. Po skončení bloku príkazov (stále sme v kroku 1), sa počítač pozrie na tretí výraz a vykoná ho. V našom výraze si priraďujeme do našej premennej jej pôvodnú hodnotu zvýšenú o jedna, takže teraz bude obsahovať číslo 2. Týmto sa prvý krok cyklu skončil.

 

Cyklus pokračuje ďalej druhým krokom. Ako sme povedali, prvý výraz sa vykonáva iba raz na začiatku cyklu, takže po prvotnom vykonaná je už ignorovaný. Počítač sa pozrie rovno na druhý výraz (na podmienku). Podmienka je splnená, aktuálna hodnota premennej je dva a to je menšie ako štyri, takže cyklus nekončí, ale pokračuje. Vykoná sa všetko čo je v množinových zátvorkách a vykoná sa tretí výraz. Naša premenná sa opäť zväčší o jedna a cyklus pokračuje ďalej. Overuje sa podmienka, číslo tri je menšie ako štyri, tažke sa cyklus opäť vykoná. Tentoraz je to už tretí krok, ako vidno v prvom výpise. Po vykonaní príkazov sa opäť vykoná tretí výraz, našu premennú zvýši o jedna a tentoraz už bude jej hodnota štyri. Cyklus stále pokračuje ďalej a narad príde overovanie podmienky. Naša premenná obsahuje číslo štyri a tak podmienka už nie je splenná, pretože to nie je menšie ako štyri, takže cyklus v tomto momente skončí a náš cieľ je splnený. Program pokračuje za konečnou množinovou zátvorkou, takže sa za cyklom vykoná náš posledný príkaz echo, ktorý nám indikuje, že cyklus sa naozaj skončil. Touto kombináciou počiatočnej premennej (nastavenej na číslo 1), podmienky menšej ako 4 a zvyšovanie o jedna sme dosiahli, že sa cyklus vykonal presne tri razy. Táto kapitola bola už zrejme náročnejšia na pochopenie, ale v nasledujúcej troška spomalíme a vysvetlíme si podrobnejšie možnosti tohto cyklu s rôznymi nastaveniami troch výrazov ovplyvňujúcich správanie cyklu.

Máte nejakú otázku alebo Vám niečo nie je jasné? Napíšte nám na info@zacni-programovat.sk a poradíme!

Ťažko sa vám učí samému?

Máte problémy s niektorými časťami alebo sa neviete učiť sám? Využite našu možnosť individuálnej asistencie:

  • samostatný prístup
  • vysvetlenie nejasností prebraného učiva
  • úlohy a cvičenia navyše
  • všetko z pohodlia domova cez mail a skype

Pre viac info kliknite tu

Kľúčové slová prednášky

cyklusphp cyklusforphp forcyklus forcyklus s pevnym poctom opakovani

IT ftip

- Oci, oci, nemôžem do počítaca založiť tretiu inštalačku! - Tú predtým si vybrala? - Keď tak o tom hovoríš, spomínam si, že už druhá tam išla nejak ťažko.