p°edchozφ lekce (1.15) | obsah kurzu | nßsledujφcφ lekce (1.17) |
Procedury jsou volßny z hlavnφho programu, vykonajφ p°φkazy zadanΘ ve svΘm t∞le
procedury a po jejφm ukonΦenφ p°edajφ vykonßvßnφ programu zp∞t do hlavnφho
programu. Procedury jsou v programu oznaΦeny klφΦov²m slovem Procedure, za
kter²m nßsleduje mo₧nß deklarace pou₧φvan²ch prom∞nn²ch a hlavn∞ blok p°φkaz∙
procedury vymezen² klφΦov²mi slovy begin a end. Ka₧dß procedura musφ b²t
pojmenovßna. V programu se p°itom nesmφ vyskytovat vφce procedur se stejn²m
jmΘnem. Nßsleduje p°φklad jednoduchΘ procedury:
Unit proc;
interface
implementation
var a, b : Integer;
Procedure nadpis;
begin
Writeln('**************************');
Writeln('* poΦφtß systΘm KLONDAIK *');
Writeln('**************************');
end;
begin
ConsoleShow;
ConsoleClear;
a:= 20; b:=10;
nadpis;
Writeln('souΦet :'+IntToStr(a+b));
nadpis;
Writeln('rozdφl :'+IntToStr(a-b));
nadpis;
Writeln('nßsobek:'+IntToStr(a*b));
end;
end.
V programu jsme definovali proceduru se jmΘnem nadpis, kterß v₧dy mezi v²poΦty
vypφÜe t°i °ßdky nadpisu. V hlavnφ procedu°e ji₧ potom staΦφ zadat volßnφ procedury
nadpis. SystΘm p°i ka₧dΘm volßnφ procedury vypφÜe t°i °ßdky nadpisu. Tφm jsme uÜet°ili
mφsto a program je takΘ p°ehledn∞jÜφ.
Jist∞ budete souhlasit s tφm, ₧e mo₧nost pou₧φvßnφ procedur je zajφmavß vlastnost
systΘmu, ₧e by ale byla jeÜt∞ zajφmav∞jÜφ, pokud by procedura dokßzala pracovat s
r∙zn²mi vstupnφmi hodnotami. To je takΘ mo₧nΘ, musφme vÜak ve volßnφ procedury i v
jejφ deklaraci uvΘst seznam parametr∙ a upravit p°φkazy uvnit° procedury tak, aby
dokßzaly s prom∞nn²mi parametry pracovat. Pokud byste nap°φklad pot°ebovali
nakreslit do grafickΘho v²stupnφho okna na zadanou pozici Φtverec s dΘlkou hrany 20
bod∙, mohli byste pou₧φt nßsledujφcφ p°φklad:
Unit Ctverce;
interface
implementation
var k : Integer;
Procedure ctverec(x : Integer; y : Integer);
begin
Rectangle(x, y, x+20, y+20);
end;
Begin
ImageShow;
ImageInit(100,100);
ImageBrushColor(clYellow);
Rectangle(5, 5, 95, 95);
ImageBrushColor(clRed);
For k:= 10 to 70 do
begin
if (k=10)or(k=40)or(k=70) then
begin
ctverec(10, k);
ctverec(40, k);
ctverec(70, k);
end;
end;
end;
end.
Procedura ctverec je volßna se dv∞mi parametry uveden²mi v zßvorce,
odd∞len²mi Φßrkou. Procedura mß ve svΘ definici deklarovßny prom∞nnΘ x a y, kterΘ se
dßle v procedu°e pou₧φvajφ. Do uveden²ch prom∞nn²ch se p°evedou hodnoty zadanΘ ve
volßnφ procedury. Procedura potom se zadan²mi hodnotami pracuje. Tak je umo₧n∞no
p°edßvat procedu°e ke zpracovßnφ vstupnφ hodnoty.
Pokud mß procedura pracovat s p°edßvan²mi parametry, je nutnΘ v deklaraci
procedury uvΘst za jejφm jmΘnem v zßvorce seznam pou₧it²ch prom∞nn²ch. PoΦet
deklarovan²ch prom∞nn²ch v procedu°e musφ p°itom v₧dy odpovφdat poΦtu p°edßvan²ch
parametr∙ ve volßnφ procedury. V seznamu se uvßdφ jmΘno prom∞nnΘ a za dvojteΦkou jejφ
typ. Pokud pou₧φvß procedura vφce parametr∙, jsou parametry od sebe odd∞leny
st°ednφkem. Jestli₧e jsou parametry stejnΘho typu, je mo₧nΘ uvΘst v deklaraci procedury
jejich v²Φet odd∞len² Φßrkami, za poslednφm parametrem v²Φtu potom uvΘst jejich typ.
Jsou proto mo₧nΘ nßsledujφ dva zp∙soby zßpisu:
Procedure tisk(x : Integer; y : Integer, s: String);
Procedure tisk(x,y : Integer; s: String);
Jak ji₧ bylo uvedeno d°φve, je uvßd∞nφ typu prom∞nnΘ v deklaracφch pouze doporuΦeno,
nenφ vÜak bezpodmφneΦn∞ vy₧adovßno. Proto je mo₧nΘ uvΘst v deklaraci procedury pouze
seznam p°edßvan²ch parametr∙ bez uvedenφ typu prom∞nnΘ:
Procedure tisk(x, y, s);
Zkuste nynφ upravit proceduru ctverec i jejφ volßnφ tak, abyste mohli zadßvat ve volßnφ
procedury i dΘlku strany Φtverce. Musφte proto p°idat do volßnφ procedury dalÜφ
parametr. Stejn∞ tak budete muset p°idat parametr do deklarace procedury. Parametr
potom pou₧ijete pro zadßnφ dΘlky hrany Φtverce.
P°i programovßnφ procedur si musφte dßt pozor na to, abyste v rßmci procedury nepo₧adovali provedenφ stejnΘ procedury. Takov²m procedurßm se °φkß rekurzivnφ volßnφ. Rekurze nejsou v jazyce KLONDAIK umo₧n∞ny.
Pomocφ deklarace procedur dosßhnete toho, ₧e si m∙₧ete definovat svΘ vlastnφ p°φkazy. Je p°itom mo₧nΘ volanΘ procedu°e zadßvat p°edßvanΘ parametry. Nenφ ale mo₧nΘ, aby procedura vracela zp∞t v²sledek provedenφ procedury. To vßm umo₧nφ a₧ funkce, kterΘ budou probrßny v nßsledujφcφ lekci.
p°edchozφ lekce (1.15) | obsah kurzu | nßsledujφcφ lekce (1.17) |