p°edchozφ lekce (1.12) | obsah kurzu | nßsledujφcφ lekce (1.14) |
Pokud budete pot°ebovat v programu provΘst n∞jakou akci s p°edem znßm²m poΦtem
opakovßnφ, bude nejvhodn∞jÜφ pou₧φt cyklus typu For. Jednß se o cyklus, ve kterΘm je
definovßn tzv. ΦφtaΦ, kter² udßvß kolikrßt se mß cyklus jeÜt∞ provΘst. ╚φtaΦ je automaticky
systΘmem zvyÜovßn o jedniΦku. Sm∞r naΦφtßnφ m∙₧e b²t p°itom nahoru, nebo dol∙:
Unit CykFor;
interface
implementation
var
x : Integer;
begin
ConsoleClear;
For x := 1 to 10 do {cyklus nahoru}
Writeln(x);
For x := 5 downto 1 do {cyklus sm∞rem dol∙}
begin
Writeln(x*x);
Writeln(x+x);
end;
end;
end.
V uvedenΘm p°φklad∞ jsou v programu dva cykly For. Prvnφ z nich zvyÜuje stav ΦφtaΦe x
sm∞rem nahoru, druh² sm∞rem dol∙. VÜimn∞te si, ₧e ΦφtaΦ musφ b²t sice deklarovßn
jako prom∞nnß, ale p°i°azenφ poΦßteΦnφ hodnoty se provßdφ a₧ v definici cyklu.
KoneΦnß hodnota ΦφtaΦe se pro sm∞r naΦφtßnφ nahoru zadßvß za klφΦov²m slovem 'to'.
Pro sm∞r naΦφtßnφ dol∙ je urΦeno klφΦovΘ slovo 'downto'. Hodnota °φdφcφ prom∞nnΘ se
nesmφ v cyklu m∞nit. Hodnoty cyklu jsou vyhodnocovßny pouze jednou a to p°i spuÜt∞nφ
p°φkazu FOR.
Prvnφ cyklus uveden² v p°φklad∞ obsahuje pouze jeden cyklicky opakovan² p°φkaz
(Writeln) a nenφ proto nutnΘ uvßd∞t vymezenφ bloku. Pokud ale po₧adujete, aby se v
cyklu typu For opakovalo vφce p°φkaz∙, musφte je uvΘst v bloku mezi begin a end. Viz druh²
cyklus uveden² v p°φklad∞. Pozor na to, ₧e se na to Φasto zapomφnß a takovß chyba se
t∞₧ko hledß.
Pokud budete chtφt ve svΘm programu pou₧φt cyklus, jeho₧ ukonΦenφ bude zßviset na
spln∞nφ zadanΘ podmφnky, mßte mo₧nost pou₧φt cyklus typu Repeat. Vnit°nφ Φßst tohoto
cyklu se provede v₧dy minimßln∞ jednou, proto₧e podmφnka ukonΦenφ cyklu je uvedena a₧
na jeho konci:
Unit CykRepea;
interface
implementation
var
x : Integer;
begin
ConsoleClear;
x := 1;
Repeat {zaΦßtek cyklu}
Writeln(RealToStr(x/(x+1),6,3));
x := x+1; {zv²Üenφ hodnoty ΦφtaΦe}
Until x = 10; {dokud nenφ v²raz pravdiv²}
end;
end.
Jist∞ jste si vÜimli, ₧e u cyklu typu Repeat nemusφte dßvat vφce p°φkaz∙ do bloku mezi
klφΦovß slova begin a end. Je to proto, ₧e cyklus typu Repeat je ohraniΦen blokem mezi
repeat a until.
P°φkazy uvedenΘ mezi klφΦov²mi slovy Repeat a Until se provßdφ tak dlouho, dokud nenφ v²raz definovan² na konci podmφnky pravdiv². Nesmφte p°itom zapomenout na zv²Üenφ hodnoty ΦφtaΦe, p°φpadn∞ provΘst jinou akci, kterß m∙₧e mφt za nßsledek ukonΦenφ cyklu.
Jako dalÜφ cyklus m∙₧ete pou₧φt cyklus While, kter² vyhodnocuje podmφnku opakovßnφ
cyklu v₧dy na jeho poΦßtku. To umo₧≥uje, ₧e pokud nenφ podmφnka spln∞na,
neprovedou se p°φkazy uvedenΘ v bloku nßsledujφcφm za definicφ cyklu ani jednou. To
m∙₧e b²t v n∞kter²ch p°φpadech v²hodnΘ a je proto nutnΘ se p°i vlastnφm programovßnφ
rozhodnout, kter² druh cyklu mß b²t pou₧it.
Unit CykWhile;
interface
implementation
var
x : real;
begin
ConsoleClear;
x := 1;
While x < 5 do {dokud je v²raz pravdiv²}
begin
Writeln(x*3);
x := x+1; {zv²Üenφ hodnoty ΦφtaΦe}
end; {konec cyklu}
end;
end.
Pro zßpis podmφnek p°i pou₧φvßnφ cykl∙ platφ vÜe co bylo uvedeno u popisu v∞tvenφ
programu p°φkazem If. Stejn∞ tak je velmi v²hodnΘ a hlavn∞ p°ehlednΘ v textu
programu odsadit °ßdky programu uvnit° cykl∙ o t°i prßzdnΘ znaky doprava. Viz v²Üe
uvedenΘ p°φklady. Programy tφm zφskajφ na p°ehlednosti. SouΦasn∞ doporuΦujeme uvßd∞t v
programu poznßmky ve form∞ komentß°e. Jak jste si ji₧ mohli vÜimnout, poznßmky se
uvßd∞jφ ve slo₧en²ch zßvorkßch. Pokud byste na zaΦßtku °ßdku uvedli dv∞ lomφtka, byl by
text a₧ do konce °ßdku v programu ignorovßn.
P°i programovßnφ cykl∙ si musφte dßt pozor na to, aby byly v t∞le cyklu p°φkazy umo₧≥ujφcφ jeho ukonΦenφ. Pokud byste m∞li nap°φklad cyklus s definovanou podmφnkou, kterß nebude nikdy spln∞na, b∞₧el by program stßle v tomto cyklu a museli byste jej ukonΦit restartem.
V tΘto lekci jsme se zab²vali n∞kolika p°φkazy, kterΘ vÜak provßd∞ly podobnou Φinnost. P°φkazy cyklu jsou v programech velmi Φasto pou₧φvanΘ. Je vÜak nutnΘ si podle po₧adovan²ch akcφ vybrat nevhodn∞jÜφ p°φkaz pro cyklus.
p°edchozφ lekce (1.12) | obsah kurzu | nßsledujφcφ lekce (1.14) |