Lekce 1.17
Deklarace a používání funkcí


předchozí lekce (1.16) obsah kurzu následující lekce (1.18)

V předchozí lekci jsme si ukázali, jak si nadefinovat vlastní příkaz ve formě procedury. Mnohdy by ale bylo výhodné, pokud by jsme mohli volat proceduru jako součást výrazu tak, aby nám vrátila procedura výsledek, se kterým byste ve výrazu dále pracovali. Něco takového je sice možné, používají se k tomu ale funkce.

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)

OZOGAN, 1 Máje 97, 460 01 Liberec
tel.,fax: (048) 52 28 338, e-mail: info@ozogan.cz