Stránky neboli dlhú dobu aktualizované. Môžu obsahovať nepresné alebo neaktuálne informácie.
Hľadanie
Rozšírené vyhľadávanie
TOP 7 - stránky
Napaľovacie programy - 108 571x
Free Pascal - Úvod - 66 114x
Lazarus - Kreslenie - 47 641x
Free Pascal - Začiatky - 44 953x
Free Pascal - Podmienky - 37 276x
Free Pascal - Cykly - 36 517x
Internetové prehliadače - 36 438x
Nové v diskusii
Free Pascal - Cykly - štvrtok 31.3.
Lazarus - Začíname - piatok 25.3.
Anketa - streda 2.3.
Navigácia: Programovanie > Free Pascal - Procedúry a funkcie

Free Pascal - Procedúry a funkcie

Užitočnosť týchto pojmov sa prejaví, ak si chceme zapamätať určitý súbor príkazov. Najprv si ho zadefinujeme a potom ho môžeme vykonávať pomocou názvu procedúry alebo funkcie. Väčší program sa dá takto rozdeliť na menšie časti.

Procedúry

Procedúry sme už používali a zistili sme, že to nie je nič ťažké. Napríklad aj známy writeln je procedúrou.

writeln('ano');

Poďme si však vytvoriť svoju vlastnú. Procedúra sa deklaruje ešte pred blokom begin - end. (s bodkou). Vykonávame ju napísaním jej názvu (nezabudnime na bodkočiarku).

program nazov_programu;
 {deklaracia procedury}
procedure moja_procedura;
begin
 prikazy_procedury;
end;
 {samotny program}
begin
 moja_procedura;
end.

Naša sa bude volať meno a jej úlohou sa stane zistiť a vypísať vaše meno. Uznávam, že to nie je vôbec praktický príklad, ale poslúži nám.

program mena;
var
 text_mena: string;
// deklaracia procedury
procedure meno;
begin
 writeln('Zadajte meno.');
 readln(text_mena);
 writeln('Volate sa ',text_mena,'.');
end;
// samotny program
begin
 meno;
 writeln('Skusime to este raz.');
 meno;
end.

Procedúry môžu mať aj tzv. parametre. Sú to premenné, ktoré musíme funkcii dodať pri každom jej vykonávaní a vždy môžu byť iné. Píšeme ich do zátvorky za názov procedúry. Ak je parametrov viac, pri deklarácii ich oddeľujeme bodkočiarkami, pri vykonávaní čiarkami (poznáte z writeln).

Teraz náš príklad zmeníme, aby bez zisťovania vypísal dve rôzne mená.

program mena2;
// deklaracia procedury
procedure meno
 (poradie: integer; text_mena: string);
begin
 writeln(poradie,'. meno je ',text_mena,'.');
end;
// samotny program
begin
 meno(1,'Jano');
 meno(2,'Peto');
end.

Funkcie

Funkcia sa od procedúry líši tým, že okrem vykonania sady príkazov vráti nejakú hodnotu. Deklaruje sa kľúčovým slovom function. Hodnotu, ktorá sa má vrátiť, určuje špeciálna premenná Result. Aby ste ju mohli vo Free Pascale používať bez jej manuálnej deklarácie, treba zapnúť kompatibilitu s Delphi. Kliknite na menu Options / Compiler a zaškrtnite políčko Delphi compatibility (ak už nie je zaškrtnuté).

Free Pascal - kompatibilita

Existuje aj iný spôsob - deklarovať premennú Result bežným spôsobom v časti var. Teraz sa ale pozrime na príklad (kompatibilita je už zapnutá).

program mocniny;
 // deklaracia funkcie
function mocnina
 (zaklad, exponent: integer): integer;
var
 c, vysledok: integer;
begin
 vysledok := 1;
 for c := 1 to exponent do
  vysledok := vysledok * zaklad;
 Result := vysledok;
end;
// samotny program
begin
 writeln(mocnina(10,2));
 readln;
end.

Všimnite si, že časť var sa môže nachádzať priamo v deklarácii funkcie. Tieto premenné budú prístupné len pre aktuálnu funkciu a po jej ukončení zaniknú.

Nakoniec ešte spomeniem tretí spôsob vrátenia hodnoty, asi jediný použiteľný v starom Turbo Pascale. Jednoducho priradíme výsledok premennej, ktorej názov je zhodný s názvom funkcie.

function Funkcia;
begin
 Funkcia := 10;
end;

Rekurzívne funkcie

Nasledujúci text nie je pre úplných začiatočníkov, ale aj tí si ho môžu prečítať.

Rekurzívna funkcia je taká, ktorá volá samú seba. Samozrejme, že nie vždy - vtedy by nastal nekonečný cyklus. Takto nejako môže vyzerať rekurzívna funkcia:

function rekurzia(...): ...;
begin
 if ... then
  Result := ... rekurzia(...)
 else
  Result := ...;
end;

Príklad

Výpočet faktoriálu je asi najznámejší príklad na rekurzívne funkcie. Skúste miesto bodiek v predchádzajúcom texte doplniť časti kódu. Výsledkom má byť funkcia na výpočet faktoriálu čísla zadaného ako jej parameter. Číslo získame od užívateľa - z klávesnice.

Ak ste zabudli, čo je faktoriál, stručne vám to pripomeniem: napr. pre číslo 4 ho vypočítame ako 4*3*2*1.

Ešte jedna (veľmi dôležitá) pomôcka: Pre faktoriál (zapisuje sa výkričníkom) platí:

n! = n*(n-1)!

Ak ste na riešenie neprišli, nezúfajte, je tu: faktor.pas.

Počítať faktoriál týmto spôsobom nie je veľmi efektívne, ale je to výborná ukážka rekurzívnych funkcií. Musím vás tiež upozorniť, že faktoriál veľmi rýchlo rastie a najväčšie číslo, ktoré môžete dosadiť za parameter, je v našom prípade 12.

Hodnotenie
1 2 3 4 5 (ako v škole)
Priemerná známka: 2,68
Diskusia k tejto stránke
Prejsť do diskusie»
2005-2012, Matúš Sulír, matus.sulir (zav) gmail bodka com. Gen.: 0,0478 s. Valid XHTML, CSS.