Co je to cyklus? Cyklus je něco pořád dokola se
opakujícího (lat. cyklus = koloběh (nebo tak něco :)).
Takže cyklus v Pascalu je nějaká část kódu, která se bude
vykonávat pořád dokola. Pascal obsahuje 3 druhy cyklů:
for prom := ? to ? do něco
while podmínka do něco
repeat until podmínka
Cyklus FOR
Jak vidíte, zápis cyklu for vypadá trochu zmateně :). Předvedu na příkladu:
var i: integer;
begin
for i := 1 to 10 do writeln(i);
end.
Pokud tento prográmek spustíte, vypíše se vám:
1
2
3
…
10
Cyklus for funguje tak, že přiřadí do proměnné hodnotu,
vykoná příkaz který je za "
do", zvedne hodnotu proměnné
o 1 a znovu vykoná příkaz za do. Takto se to pořád opakuje,
dokud je hodnota proměnné (v našem případě "i") menší než
hodnota uvedená za "
to". Pokud chcete, aby šel cyklus "shora dolů",
použijte místo "to" "
downto". Příklad:
var i: integer;
begin
for i := 10 downto 1 do writeln(i);
end.
Vypíše:
10
9
8
…
1
Cyklus WHILE
Cyklus while, funguje jako normální podmínka "if", s
tím rozdílem, že místo "then" se uvádí "
do" a příkaz
za "do" se provádí pořád opakovaně, dokud podmínka platí.
Příklad:
var i: integer;
begin
i := 1;
while i < 50 do begin (* dokud je "i" menší než 50 *)
writeln(i);
i := i + 5;
end;
end.
Chápete? Doufám že jo :).
Cyklus REPEAT UNTIL
Cyklus "
repeat until podmínka" funguje na stejném principu,
jako cyklus while s tím rozdílem, že se opakuje do té doby, dokud
podmínka uvedená za until NEPLATÍ:
var i: integer;
begin
i := 1;
repeat
writeln(i);
i := i + 5;
until i > 50; (* dokud "i" není větší než 50 *)
end.
Teď si možná říkáte, k čemu existují 2 cykly, se stejnou funkcí, lišící
se pouze zadáním podmínky? Rozdíl je v tom, že cyklus "repeat" se
vždy vykoná alespoň jednou, kdežto cyklus "while" se vykoná pouze
pokud na začátku podmínka platí:
var i: integer;
begin
i := 1;
repeat
writeln('Until probehlo');
until i = 1;
while i <> 1 do
writeln('While probehlo');
end.
Tento program vypíše pouze "Until probehlo".
V souvislosti s cykly se musím ještě zmínit
o příkazu "
break", který běh cyklu ukončí. Př.:
var i: integer;
begin
for i := 1 to 10 do begin
if i = 6 then break; (* když je i 6, cyklus se ukončí *)
writeln(i);
end;
end.
A opříkazu continue, který poskočí k dalšímu průběhu cyklu:
var i: integer;
begin
for i := 1 to 10 do begin
if i = 6 then continue; (* když je i 6, cyklus se přeskočí *)
writeln(i);
end;
end.
Tento cyklus vypíše čísla od 1 do 10 kromě šestky.
Kub@z