Umíte pascalsky - 10.lekce ...

Umíte pascalsky?
10.lekce
Vytisknout  

Funkce

Jako funkce se zapisují algoritmy, jejichž provedením se vypočte hodnota určitého typu, který je uveden v hlavičce funkce jako typ funkce. Tato vypočtená hodnota se hlavnímu programu předává pomocí identifikátoru (názvu) funkce, proto se musí v těle funkce vyskytovat přiřazovací příkaz, kterým se hodnota přiřazuje identifikátoru funkce (identifikátor funkce na levé straně přiřazovacího příkazu).

Deklarace funkce má tedy tvar:

function Jméno_funkce: typ funkce;
   deklarace lokálních objektů;
begin
  příkazy;                                                                       {výpočet hodnoty}
  Jméno_funkce := vypočtená hodnota;                 {povinné přiřazení}
end;

Příklad:
function Pocitej (cislo1,cislo2:integer): integer        {funkce Pocitej má dva vstupní parametry cislo1 a cislo2}

Volání funkce - zápis funkce - se skládá pouze ze jména funkce a představuje hodnotu, která je výsledkem provedení těla funkce. Proto může být volání funkce použito vždy v nějaké konstrukci, která předepisuje, co se s výslednou funkční hodnotou provede - v příkazu přiřazení, příkazu tisku, ve výrazu apod. (ne samostatně na řádku jako volání procedury!!!)
Tedy například:
cislo := Jméno_funkce;
write{Jméno_funkce);

Příklad:
writeln(Pocitej (prvmi,druhe));        {prvni, druhe jsou skutečné parametry (globální proměnné)}

Příklad: Ukážeme si deklaraci funkce pro výpočet obsahu trojúhelníka (pomocí strany a výšky) a její vyvolání v hlavním programu.

program Ukazka_obsahu;

  var strana,vyska : real;


{Deklarace globálních proměnných}

 function Obsah:real;
  begin
    Obsah:=strana * vyska / 2;
  end;
{Deklarace funkce}
{Tělo funkce}



Begin

{Hlavní program}
  writeln('Zadejte stranu a vysku:'); {Napíše výzvu k zadání}
  readln(strana,vyska); {Načte stranu a výšku}
  if Obsah > 0 then {Vyvolá funkci a otestuje výsledek}
    writeln('Obsah trojuhelníka je ',Obsah); {Vyvolá funkci a vytiskne obsah}
End.


Ještě než přistoupíme k dalšímu příkladu, ukážeme si, jak může uživatel řídit běh programu.
Program opakovaně napíše nabídku činností, uživatel si vybere a po zadání příslušné hodnoty provede zvolenou činnost. Lze to zapsat například takto:

  var volba: integer; {Deklarace proměnné pro volbu činnosti}
Repeat
   writeln('Program umožňuje:');
   writeln('1 ... činnost1');
   writeln('2 ... činnost2');
   ...
   writeln('0 ... ukončit');
   writeln('Zadejte svoji volbu:');
   readln(volba);
   case volba of
     1: podprogram1;
     2: podprogram2;
     ...;
     0: ;
   end;
 until volba = 0;
{Program opakuje}
{Napíše nabídku činností}
{a jak je zvolit}




{Napíše výzvu k volbě}
{Podle zadané hodnoty volba}
{provede odpovídající činnost}


{Neprovede nic}

{Opakování ukončí}

Příklady:

Příklad1:
Sestavte program, který opakovaně podle volby uživatele umožňuje zadat strany obdélníka, vypočítat jeho obvod, vypočítat jeho obsah. řešte užitím procedur a funkcí.

Myšlenka (hrubý algoritmus):
Úlohu rozložíme na tři podúlohy:
Nacteni;      procedura
Obvod;        funkce
Obsah;       funkce
které nadeklarujeme formou podprogramů a pak se budou opakovaně vyvolávat podle volby uživatele v hlavním programu:

opakuj
    nabídka činnpostí
    výběr činnosti
    provedení zvolené činností (Nacteni-Obvod-Obsah)

Výsledný program by mohl vypadat takto:

program Obdelnik;

  var delka,sirka,vysledek : real;
         volba : integer;

{Deklarace globálních proměnných}

  procedure Nacteni;

{Deklarace procedury Nacteni}
   begin
    writeln('Zadejte délku a šířku obdélníka v cm:'); {Napíše výzvu k zadání}
    readln(delka,sirka);    {Načte strany}
   end;

  function Obvod : real;
   begin
   Obvod := 2 * (delka + sirka);
   end;
{Deklarace funkce Obvod}

{Výpočet a povinné přiřazení}

  function Obsah : real;
   begin
   Obsah := delka * sirka;
   end;
{Deklarace funkce Obsah}

{Výpočet a povinné přiřazení}

Begin

{Hlavní program}
 Repeat
   writeln('Program Obdelník umoznuje:');
   writeln('1 ... zadat strany');
   writeln('2 ... obvod');
   writeln('3 ... obsah');
   writeln('0 ... ukoncit');
   writeln('Zadejte svoji volbu:');
   readln(volba);
   case volba of
     1: Nacteni;
     2: writeln('Obvod obdelnika je ',Obvod, ' cm');
     3: begin
            vysledek := Obsah;
            writeln('Obsah obdelnika je ',vysledek, ' cm2');
         end;
     0: writeln('Nashledanou');
   end;
 until volba = 0;
{opakuj}
    {nabídka činností}





    {vvýběr činnosti}
    {provedení zvolené činnost}


       {pro změnu jinak,složitěji}





End.



Domácí úkol:

    Sestavte program Trojuhelnik, který opakovaně podle volby uživatele umožňuje zadat odvěsny pravoúhlého trojúhelníka, vypočítat jeho přeponu, obsah a obvod. Řešte užitím procedury Nacti, funkcí Prepona, Obsah a Obvod. .

On-line účast na řešení úkolu

Řešit úkol Prohlídka hodnocení úkolu Dotazy,připomínky

Pomocí volby Řešit můžete (po přihlášení) odeslat vaše řešení domácího úkolu (každý úkol smíte řešit jen jednou). Volbou Hodnocení si přečtete hodnocení a komentář od vyučujícího. Dotaz nebo připomínku můžete opakovaně zasílat pomocí tlačítka Dotazy, Komunikace (na levém okraji) zobrazuje příklad možné komunikace s vyučujícím.