Pri programovaní v akomkoľvek jazyku sa dosť často používa cyklus. Slúži na opakovanie určitého kroku alebo krokov. Vždy si treba pamätať, že počet opakovaní musí byť konečný, pretože nekonečný program nebude nikdy na osoh.
Cyklus s určeným počtom opakovaní môžeme využiť, ak dopredu vieme, koľko krát treba dané inštrukcie vykonávať. Má syntax:
for premenná := hodnota1 to hodnota2 do príkaz;
Premenná v tomto prípade slúži na počítanie opakovaní a musí byť ordinálna (napr. celé číslo alebo znak). Hodnota premennej sa bude zvyšovať od hodnoty1 do hodnoty2. Nasledujúci príklad vypíše čísla od 1 do 15:
program cisla; var c: integer; begin for c := 1 to 15 do writeln(c); end.
Ak chceme vykonať viac ako jeden príkaz, musíme použiť kľúčové slová begin
a end
.
for cislo := -5 to 5 do begin writeln(cislo); writeln('mocnina: ',cislo*cislo); end;
Existuje aj variant, pri ktorom sa hodnota premennej nezväčšuje, ale zmenšuje. Stačí miesto slova to
použiť downto
.
writeln('odpocitavanie:'); for i := 10 downto 1 do writeln(i); writeln('koniec');
Ešte jedna vychytávka. Miesto celého čísla môžeme tiež použiť znak - typ char
.
program abeceda; var znak: char; begin for znak := 'a' to 'z' do write(znak); end.
Využívame ho, ak má podmienka rozhodnúť o tom, či bude cyklus pokračovať.
while podmienka do príkaz;
Príkaz sa bude vykonávať dovtedy, kým má logický výraz (testovaný na začiatku) hodnotu true
. Pri viacerých príkazoch používame známe begin
a end
. Tento príklad bude žiadať napísanie čísla dovtedy, kým užívateľ nezadá číslo väčšie ako 10.
program cyklus2; var cislo: integer; begin while cislo <= 10 do begin writeln('zadajte cislo vacsie ako 10'); readln(cislo); end; end.
Existuje aj iný typ cyklu a má syntax:
repeat príkaz(y) until nepravdiva_podmienka
Daný príkaz sa bude opakovať, kým bude mať logický príkaz (zisťovaný na konci) hodnotu false
. Jednoduchým, ale užitočným príkladom je pozastavenie programu pred jeho koncom, kým užívateľ nestlačí klávesu. Pomôže nám funkcia keypressed
.
program vypisx; uses crt; begin writeln('x'); repeat until keypressed; end.
Zistili sme, že medzi repeat
a until
nemusíme uviesť žiaden príkaz.
Medzi cyklom s podmienkou na začiatku a na konci je jeden dôležitý rozdiel - v druhom spomínanom prípade sa príkazy vykonajú vždy aspoň raz.
Ak potrebujeme okamžite ukončiť cyklus, napríklad niekde v jeho strede, použijeme príkaz break
.
program stop; var i, cislo: integer; begin for i := 1 to 5 do begin writeln('Napiste cislo.'); readln(cislo); if cislo >= 100 then begin writeln('Nespravna hodnota, koncim!'); break; // uplny koniec cyklu end; writeln('Spravna hodnota.'); end; end.
Náš program v ideálnom prípade prečíta päť čísel z klávesnice. Akonáhle však zadáme číslo >= 100, vypíše sa hláška a celý cyklus sa ukončí.
Príkaz continue
preskočí všetko, čo nasleduje za ním v cykle. Potom pokračuje až v ďalšom opakovaní. Zvýši pritom počítaciu premennú / testuje podmienky cyklu, ako zvyčajne.
Pre pochopenie uvediem príklad, veľmi podobný predchádzajúcemu. Jediný rozdiel bude v tom, že ak užívateľ zadá nesprávne číslo (teda >= 100), bude ešte musieť zadať aj zvyšné čísla. Program teda vždy prečíta práve päť čísel.
program pokracuj; var i, cislo: integer; begin for i := 1 to 5 do begin writeln('Napiste cislo.'); readln(cislo); if cislo >= 100 then begin writeln('Zla hodnota, ale to nevadi.'); continue; // skok na dalsie opakovanie end; writeln('Spravna hodnota.'); end; end.
Príkaz continue
nie je až taký frekventovaný, ale odporúčam vám vyskúšať, ako funguje.