Jump to content

Recommended Posts

  • Hlavní moderátor

Obtížnost: :1:
 
Osnova:
1. Úvod, co jsou to cykly
2. Cyklus for
3. Cyklus while
4. Cyklus do-while
5. Příkazy přeskoku (break a continue)
6. Závěr
 
1. Úvod
Po dlouhé době Vás vítám u dalšího návodu pro začátečníky. Předmětem tohoto návodu bude iterace a cykly.
 
Pojem iterace není nic jiného než opakování. Abychom v některých situacích (např. při procházení pole) nemuseli ručně psát zbytečně mnoho kódu se stejným účelem (např. výpis 50 prvků pole), můžeme si pomoct iterací, která nám kód zkrátí, zpřehlední a také nám ušetří práci. Iterace se v programování realizuje pomocí cyklů.
 
Cyklus je konstrukce, která nám umožňuje vykonávat libovolný počet opakování. V pawn máme celkem 3 cykly; všechny si postupně projdeme a řekneme si, k čemu jaký cyklus slouží.
 
2. Cyklus for
Prvním cyklus, se kterým se setkáváme nejčastěji, je cyklus for (tzv. iterační cyklus). Tento cyklus se neodmyslitelně pojí s polem – pomocí něj můžeme nejpohodlněji procházet hromadně prvky polí.
 
Syntaxe cyklus for je následovná:

.

for(inicializace; podmínka; modifikace)
{
    //kód
}

.

V inicializační části (jak už název napovídá) deklarujeme/definujeme proměnnou (může jich být i víc), která bude ovlivňovat počet opakování a kterou můžeme využít např. k indexaci pole.
 
Podmínková část obsahuje výraz, který nám určí, kdy cyklus skončí. Dost často obsahuje proměnnou z první části. Jakmile bude výraz v této části roven 0 (false), cyklus skončí.
 
Modifikační část nám poslouží ke změně hodnoty proměnné cyklu. Zde můžeme ovlivnit průběh cyklu (kolikrát se zopakuje).

.

for(new i=0; i<10; ++i)
{
    pole[i] = 1;
}

.

Zde je praktická ukázka použití iteračního cyklu. V první části jsme deklarovali proměnnou i a přiřadili jí hodnotu 0. Ve druhé části jsme zvolili podmínku, která říká, že cyklus poběží tak dlouho, dokud bude hodnota i menší než 10. Ve třetí části jsme se postarali o to, že se hodnota i při každém opakování zvětší o jedno. Cyklus pojede 10x (i bude mít postupně hodnoty 0 až 9), tedy vše, co je uvnitř něj, se vykoná 10x. Cílem tohoto kódu je uložit do desetiprvkového pole hodnotu 1 (všimněte si, jak jsme šikovně využili proměnnou i jako index pole).
 
Berme na vědomí, že jednotlivé části jsou odděleny středníky, ne čárkami!
 
Pro zajímavost (rozklikněte spoiler):


Nesetkáme se s tím často, ale žádná z části cyklu for není povinná. Kteroukoli z nich lze vynechat. Následující kód je např. legální způsob vytvoření nekonečného cyklu (v pawn):

.

for( ; ; ) //středníky musíme uvést vždy, ale do částí nic nepíšeme

.

Také bychom si mohli objasnit, proč zde používáme středníky. Proč ne čárku? Je to proto, že čárka zde plní oddělovací funkci v inicializační a modifikační části:

.

for(new i = 0, j = 10; i < 10 && j > 0; ++i, --i)

.

Inicializace dvou proměnných, složená podmínka a modifikace dvou proměnných. V 1. a ve 3. části využíváme čárku.

 

 

.

3. Cyklus while
Další na řadě je while, též nazývaný jako cyklus s podmínkou na začátku. Ten název mu nedali jen tak z hecu – čtěte dále. Jeho syntaxe vypadá takto:

.

while(podmínka)
{
    //kód
}

.

Cyklus while má jen jednu část, a tou je podmínková. Ta nám určuje počet opakování – cyklus poběží, dokud bude podmínka pravdivá. Je dobré uvést, že tento cyklus nemusí proběhnout ani jednou.

.

new i = 0;

while(i < 10)
{
    pole[i] = 1;
    ++i;
}

.

Jak vidíme, účel kódu je stejný jako v případě s iteračním cyklem. Může se nám zdát, že cyklus while vypadá jako ochuzená verze cyklu for; na jednu stranu to tak je (while se používal před for), chybí mu inicializační a modifikační část, ale cyklus s podmínkou na začátku může sloužit k různým účelům (např. ke čtení ze souboru), ne vždy zde budeme potřebovat proměnnou i.
 
4. Cyklus do-while
Třetím bratříčkem je cyklus do-while, známý i jako cyklus s podmínkou na konci. Ano, od cyklu while se liší tím, že má podmínku na konci. Co to pro nás znamená? O tom za chvíli. Zde je jeho syntaxe:

.

do
{
    //kód
}while(podmínka);

.

I tento cyklus má jen podmínkovou část, a to na konci. Teď si asi říkáte, jaký je rozdíl mezi tímto cyklem a cyklem while. Zatímco while nemusí proběhnout ani jednou, do-while proběhne vždy alespoň jednou.

.

new i = 0;

do
{
    pole[i] = 1;
    ++i;
}while(i < 10);

.

Stejný kód jako dvakrát předtím. Cyklus opět poběží, dokud i nepřekročí hodnotu 9. Rozdíl je, že prvek pole pole bude mít na indexu 0 hodnotu 1, ať už zvolíte jakoukoli podmínku.

5. Příkazy přeskoku (break a continue)
Příkazy pro základní cykly jsme si již probrali. Teď si zmínímme ještě tzv. příkazy přeskoku.

Jedná se příkazy, které nám mohou ovlivnit životnost celého cyklu či jen konkrétního opakování. Jedná se o příkazy break a continue.

a) break
Nejprve tedy break. Tímto příkazem můžeme předčasně ukončit cyklus. (Předčasně – kdykoli v jeho průběhu)

.

for(new i=0; i<10; i++)
{
    if(i == 5) break;
    pole[i] = 1;
}

.

Pro ukázku jsem zvolil cyklus for, ale fungovalo by to i ve while a do-while. A co se tedy stane? Jakmile bude proměnná i rovna pěti, cyklus skončí a nebude pokračovat v dalších opakováních. Pouze prvky s indexem 0 až 4 budou mít hodnotu 1.

b ) continue
Druhým příkazem je continue. Jeho úkolem je přeskočit dané opakování a pokračovat v dalším.

.

for(new i=0; i<10; i++)
{
    if(i == 5) continue;
    pole[i] = 1;
}

.

Jakmile bude proměnná i rovna pěti, cyklus přeskočí na další opakování, aniž by vykonal cokoliv pod continue. Takže prvek s indexem 5 bude jediný, který nebude mít hodnotu 1.

 

Pro zajímavost (rozklikněte spoiler):

 

 

Existuje ještě jeden příkaz přeskoku, a tím je goto. Tento příkaz ale narušuje přirozený chod kódu (lze díky němu přeskakovat i z funkce do funkce), má jen pár odůvodněných případů využití, proto nechám další studium tohoto příkazu na vás.

 

 

 

6. Závěr

A tímto končíme téma iterace. Už víme, že máme v pawn 3 základní cykly (for, while, do-while) a příkazy přeskoku (break, continue).

 

Tento návod, stejně jako ty předchozí, je určen pro nováčky, pokročilejší věci byly buďto úplně vynechány, nebo jsou uvedeny ve spoilerech. Přesto, zdá-li se Vám, že jsem něco opomněl, někde jsem se spletl nebo se jen chcete vyjádřit, napište pod tento příspěvek.

  • Líbí se mi to! (+1) 4
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...