Cykly

Mechanické opakování příkazu není příliš pohodlné. Mnohem lepší způsob, jak programu sdělit, že má určitý k...


Mechanické opakování příkazu není příliš pohodlné. Mnohem lepší způsob, jak
programu sdělit, že má určitý kód provést několikrát za sebou, vede přes
využití cyklů. Těch v C# existují tři typy.
Pevný počet opakování
Cyklus se vytvoří příkazem for. Za tímto příkazem je uvedena řídicí proměnná a
koncová podmínka. Dále je nutné určit, zda se má hodnota řídicí proměnné
zvyšovat, nebo snižovat. Pak již následují složené závorky a mezi nimi jsou
uvedeny příkazy, které se opakují tak dlouho, dokud hodnota řídicí proměnné
nedosáhne hodnoty uvedené v koncové podmínce. Úkol lze tedy elegantně vyřešit
takto:

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Cyklus s pevným počtem opakování

nikdy opakovaně nekopírují kód!
"); } %>


Ještě jednou se zaměřme na to, jak je v předchozím příkladu cyklus utvořen.
Na začátku je do řídicí proměnné uložena hodnota 1. Při každém průchodu cyklem
(iteraci) se tato hodnota zvětší o jedničku a ověří se, zda již není větší než
100. Dokud není, cyklus probíhá a na stránku se pod sebe vypisuje zadaný text
a číslo aktuální iterace. Výsledkem cyklu bude tedy sto řádků s požadovaným
textem. Stejně, jak je to vidět na obrázku.
Výhoda je, že kdykoli budete chtít změnit počet provedených iterací (tedy
počet vypsaných řádků), stačí jen změnit podmínku a místo 100 můžete daný text
nechat vypsat pětkrát nebo i tisíckrát.
Při používání cyklů je důležité velmi opatrně zadávat ukončovací podmínku.
Kdybyste ji zvolili nevhodně, mohlo by se stát, že ji nebude možné splnit a
program uvázne v nekonečném cyklu. Takový program potom běží tak dlouho, dokud
jej někdo násilně neukončí. Abyste snížili riziko nekonečného cyklu, neměli
byste nikdy v těle cyklu měnit hodnotu řídicí proměnné. Pak by se totiž mohlo
stát, že ukončovací podmínka nebude nikdy splněna.
Dříve, než se dostaneme k dalším typům cyklů, si ještě vyzkoušejte, jak
uvedený příklad upravit, aby se věty číslovaly sestupně. Napovím jen, že kromě
operátoru ++ existuje i operátor -. Pochopitelně to ale není to jediné, co
musíte změnit.
Podmínka na začátku Ne vždy je však používání cyklů takto přímočaré, abychom
již dopředu přesně věděli, kolikrát má cyklus proběhnout. Například načítáme
data ze souboru tak dlouho, než nalezneme konec souboru. To může být již po
první iteraci, ale také po tisící.
Z toho důvodu potřebujeme nějaký obecnější cyklus, než byl ten předchozí. Je
jím cyklus s podmínkou na začátku, kterému se někdy také říká while cyklus. To
proto, že se tvoří pomocí klíčového slova while, za nímž je v závorkách
uvedena podmínka. Příkazy v těle cyklu se provádějí tak dlouho, dokud podmínka
platí. Jakmile platit přestane, cyklus končí. V cyklu while se nepoužívá žádná
řídicí proměnná, k níž by se měla ukončovací podmínka vztahovat. Lze použít
jakoukoli podmínku, jen je nutné pamatovat na to, že musí někdy přestat
platit, jinak opět dojde k nekonečnému cyklu.
Použití cyklu while si ukážeme na modelu spořicího prasátka. Představte si,
že máte prasátko, do kterého každý týden vhodíte dvacetikorunu. Vaším cílem je
uspořit nějakou cílovou částku a chcete vědět, za jak dlouho budete moci
prasátko rozbít, když na počátku máte určitou částku. Zde je kód, který vám
výsledek prozradí (úvodní řádky jsou vynechány):

Obsah prasátka


pozadovanaCastka = 150; while ( aktualniCastka pocetTydnu++; aktualniCastka += tydenniVklad; Response.Write(pocetTydnu + ".
týden bude v prasátku " + aktualniCastka + " korun
"); }
Response.Write("


Požadovaná částka bude naspořena za " + pocetTydnu + "
týdnů.
"); %>

Při každém průchodu cyklem se zvýší počet týdnů, které jsou potřeba k
naspoření požadované částky, a aktuální částka je zvýšena o týdenní vklad.
Poté se vypíše stav prasátka k danému týdnu. Cyklus skončí v okamžiku, kdy
aktuální částka dosáhne požadované hodnoty.
Podmínka na konci
Poslední typ cyklu se tvoří klíčovými slovy do a while. Od předchozího se liší
v tom, že se ukončovací podmínka testuje na konci každého průchodu a ne na
začátku, jako tomu bylo dosud. Pomocí tohoto cyklu bychom předchozí příklad
vytvořili následovně (uvádím pouze vlastní cyklus): do { pocetTydnu++;
aktualniCastka += tydenniVklad; Response.Write(pocetTydnu + ". týden bude v
prasátku " + aktualniCastka + " korun
"); } while (aktualniCastka pozadovanaCastka); Jestliže naprogramujete prasátko oběma způsoby, mohlo by se vám na první
pohled zdát, že jsou oba cykly rovnocenné, a že je tedy můžete libovolně
zaměňovat. To ale není pravda. Schválně vyzkoušejte, co se stane, když na
počátku bude aktuální částka vyšší než ta požadovaná, a vy si tedy budete
moci peníze vybrat bez spoření. Použijete-li cyklus s podmínkou na začátku,
bude vše fungovat správně. Pokud ale použijete cyklus s podmínkou na konci,
program nejprve zcela nesmyslně částku navýší o týdenní příspěvek a pak
ohlásí, že spoření bude trvat jeden týden. Je to proto, že cyklus s podmínkou
na konci proběhne za všech okolností alespoň jednou. Zatímco cyklus s
podmínkou na začátku za určitých podmínek (když neplatí podmínka) neproběhne
ani jednou, a to je zásadní rozdíl. (pat) 6 1412

 









Komentáře
K tomuto článku není připojena žádná diskuze, nebo byla zakázána.