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) |