P10 Podprogramy

Podprogramom môže byť:

  • funkcia (vracia do volajúceho prostredia hodnotu, ktorá je vo funkcii priradená premennej s identifikátorom zhodným s názvom funkcie)
  • procedúra (nič nevracia)

 

Procedúra

  • ak sa niektorá postupnosť príkazov viackrát v programe opakuje, zlúčime tieto príkazy do jedného a dáme mu nové meno
  • (prípadne ak sa opakuje podobná postupnosť príkazov odlišujúca sa iba parametrami)
  • je to program v programe (podprogram)
  • zvyšuje prehľadnosť programu
  • začína begin a končí end;

Pozri si nasledovný program:

Program opakovaniePrikazov1;
Uses Crt;
Var i : Integer;
Begin
 textcolor(white);
 GotoXy(10,5);
 For i := 1 to 10 do
  Begin
   write(chr(3));
  End;
 GotoXy(10,7);
 For i := 1 to 10 do
  Begin
   write(chr(3));
  End;
 GotoXy(10,9);
 For i := 1 to 10 do
  Begin
   write(chr(3));
  End;
 GotoXy(10,11);
 For i := 1 to 10 do
  Begin
   write(chr(3));
  End;
 Readkey;
End.

Pri vypisovaní zvoleného znaku do riadkov používam stále rovnakú postupnosť príkazov resp. jeden príkaz:

For i := 1 to 10 do
  Begin
   write(chr(3));
  End;

Preto definujeme na začiatku procedúru (podprogram), ktorý bude po zavolaní vykonávať túto činnosť:

Program opakovaniePrikazov2;
Uses Crt;
procedure opakuj;
Var i : Integer;
begin
     textcolor(white);
     for i := 1 to 10 do
         write(chr(3));
end;
begin
GotoXy(10,5);
             opakuj;
GotoXy(10,7);
             opakuj;
GotoXy(10,9);
             opakuj;
GotoXy(10,11);
              opakuj;
 Readkey;
end.  

Procedúra s parametrom

Teraz sa pokúsime urobiť malú úpravu tohto programu - pridáme do procedúry parameter:

Program opakovaniePrikazov3;
Uses Crt;
procedure opakuj(x,y:integer); {premenne x,y = parametre resp. argumenty}
Var i : Integer;    {lokalna premenna}
begin
     gotoxy(x,y);
     textcolor(white);
     for i := 1 to 10 do
         write(chr(3));
end;
begin
     opakuj(10,5);
     opakuj(10,7);
     opakuj(10,9);
     opakuj(10,11);
 Readkey;
end. 

A teraz ešte iné ukážky procedúr s parametrom:

program procedura1;
 procedure pozdrav(s:string;i:integer);
  begin
   writeln(s);
   writeln(i);
  end;
begin
  pozdrav('caf',3);
  readln;
end.

a ešte raz:

program procedura2;
 procedure pozdrav(s:string);
 var i:integer;
  begin
   for i:=1 to 5 do
    writeln(s);
  end;
begin
  pozdrav('caf');
  readln;
end.

Funkcia

  • podprogram, ktorý ako výsledok svojej činnosti vráti hodnotu
  • definujeme ju kľúčovým slovom function a za jej názov sa uvádza typ výsledku:
    • function NazovFunkcie:typ;
  • volanie funkcie je výraz, ktorého hodnotou je výsledok získaný vykonaním funkcie

Ukážka funkcie prakticky:

program funkcie1;
var vysledok:integer;
 function Plus(i,j:integer):integer;
  begin
   Plus:=i+j;
  end;
begin
 vysledok:=Plus(1,2);
 writeln(vysledok);
  readln;
end.

Prakticky v nasledúcom programe:

Program PreponaPytagoras;
Uses Crt;
Var stranaA, stranaB : Real;
    AN : Char;
    jednotka : String;

Function PytagFcia(A:Real; B:Real) : Real;
Begin
 PytagFcia:= SQRT(A*A + B*B);
End;

Begin
     Writeln('Vypocet prepony pravouhleho trojuholnika:');
     Repeat
           Writeln;
           Write('Zadaj dlzku 1 odvesny : ');
           Readln(stranaA);
           Write('Zadaj dlzku 2 odvesny : ');
           Readln(stranaB);
           Repeat
                 Write('V akych jednotkach pocitam? : [m alebo cm] ');
                 Readln(jednotka);
           Until (jednotka = 'm') or (jednotka = 'cm');
           Writeln('Prepona = ',PytagFcia(stranaA,stranaB):10:2,' ',jednotka);
           Writeln;
           Write('Opakovat? ');
           AN := Readkey;
     Until (AN in ['N','n']);
End. 

Príklady:

  1. Napíš program na výpočet:
    1. najväčšieho spoločného deliteľa dvoch prirodzených čísel;
    2. n-tej mocniny ľubovoľného čísla;
    3. súčtu prvých n-prirodzených čísel;
    4. faktoriálu čísla;