p°edchozφ lekce (1.16) | obsah kurzu | nßsledujφcφ lekce (1.18) |
Funkce je definovanß Φßst programu, kterß je volanß z v²razu a provßdφ urΦitΘ
v²poΦty, p°φpadn∞ akce. P°i ukonΦenφ funkce nßm vracφ po₧adovan² v²sledek, se kter²m
se ve v²razu, odkud byla funkce volßna dßle pracuje. Uve∩me si proto p°φklad deklarace
a pou₧itφ funkce v programu, kter² nßm provßdφ v²poΦet mocniny zadan²m exponentem
(53 = 5 x 5 x 5, v²sledek je 125).
Unit Funkce;
interface
implementation
Function umocni(x, y : Integer): Integer;
var k, v : Integer;
begin
v := x; {p°evezmeme zßklad}
For k := 1 to y do
v := v*x; {nßsobφme opakovan∞ zßkladem}
result := v; {p°edßme v²sledku funkce}
end;
begin
ConsoleShow;
ConsoleClear;
Writeln(umocni(2,9)); {vypφÜe hodnotu 1024}
Writeln(umocni(3,3)); {vypφÜe hodnotu 81}
Writeln(umocni(5,2)); {vypφÜe hodnotu 125}
end;
end.
Funkce se od procedury liÜφ sv²m zahßjenφm a ukonΦenφm, kdy je v²poΦet funkce
uveden klφΦov²m slovem Function. V deklaraci funkce lze navφc na rozdφl od procedury
uvΘst za seznamem p°ebφran²ch parametr∙ i typ v²sledku, kter² funkce vracφ. PoΦet
deklarovan²ch prom∞nn²ch v procedu°e musφ 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 je
mo₧nΘ uvΘst 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.
VÜimn∞te si, ₧e pokud uvedeme v deklaraci funkce prom∞nnΘ pro p°evzetφ parametr∙, jsou tyto prom∞nnΘ automaticky deklarovßny s uveden²m typem. Navφc je mo₧nΘ ve funkci deklarovat vlastnφ novΘ prom∞nnΘ, kterΘ mohou b²t pou₧ity pouze ve funkci, ve kterΘ byly deklarovßny.
DalÜφ prom∞nnß, kterß je automaticky deklarovßna je prom∞nnß pro p°edßnφ v²sledku.
Naz²vß se v₧dy Result a je typu dle deklarace funkce. Do prom∞nnΘ ulo₧φme v²slednou
hodnotu funkce, kterou chceme p°edat volanΘmu programu. Nap°φklad:
Result := v²raz;
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Θ. V²Üe uvedenou funkci je
proto mo₧nΘ takΘ zadat nßsledujφcφm zp∙sobem:
Function umocni(x, y);
var k, v;
begin
v := x; {p°evezmeme zßklad}
For k := 1 to y do
v := v*x; {nßsobφme opakovan∞ zßkladem}
result := v; {p°edßme v²sledku funkce}
end;
P°i programovßnφ funkcφ si musφte dßt pozor na to, abyste v rßmci funkce nepo₧adovali
provedenφ stejnΘ funkce. Takov²m funkcφm se °φkß rekurzivnφ volßnφ. Vyu₧φvajφ se
nap°φklad p°i v²poΦtu faktorißlu nebo znßm²ch hanojsk²ch v∞₧φ. Rekurze nejsou v systΘmu
KLONDAIK umo₧n∞ny.
p°edchozφ lekce (1.16) | obsah kurzu | nßsledujφcφ lekce (1.18) |