Sunteți pe pagina 1din 27

FUNCŢII ŞI PROCEDURI

Drept exemplu la tema “Funcţii şi proceduri” servesc următoarele aplicaţii elaborate în


sistemul de operare “Microsft PowerPoint” care au la bază drept scop uşurarea lucrului
profesorului la predarea temelor la ”Informatică” şi anume la tema “funcţii şi proceduri“.
Subprograme
E cunoscut faptul că o problemă complexă poate fi rezolvată prin divizarea ei într-un
set de părţi mai mici (subprobleme). Pentru fiecare parte se scrie o anumită secvenţă de
instrucţiuni, denumită subprogram. Problema în ansamblu se rezolvă cu ajutorul programului
principal, în care pentru rezolvarea subproblemelor se folosesc apelurile subprogramelor
respective. Cînd în programul principal se întîlneşte un apel, execuţia continuă cu prima
instrucţiune din programul apelat. Cînd se termină executarea instrucţiunilor din subprogram, se
revine la instrucţiunea imediat următoare apelului din programul principal.
în limbajul PASCAL există două tipuri de subprograme, şi anume, funcţii şi proceduri:
<Subprograme> ::= { <Funcţie>\ \ <Procedură>\ }
Funcţiile sînt subprograme care calculează şi returnează o valoare. Limbajul PASCAL
conţine un set de funcţii predefinite, cunoscute oricărui program: sin, cos, eof etc. In completare,
programatorul poate defini funcţii proprii, care se apelează în acelaşi mod ca funcţiile-standard.
Prin urmare, conceptul de funcţie extinde noţiunea de expresie PASCAL.
Procedurile sînt subprograme care efectuează prelucrarea datelor comunicate în
momentul apelului. Limbajul conţine procedurile predefinite read, readln, write, writeln ş.a.,
studiate în capitolele precedente. In completare, programatorul poate defini proceduri proprii,
care se apelează în acelaşi mod ca procedurile-standard. Prin urmare, conceptul de procedură
extinde noţiunea de instrucţiune PASCAL.
Subprogramele se definesc, în întregime, în partea declarativă a unui program .
Evident, apelurile de funcţii şi proceduri se includ în partea executabilă a programului.
Un subprogram poate fi apelat chiar de el însuşi, caz în care apelul este recursiv.

Funcţii
Textul PASCAL al unei declaraţii de funcţie are forma:
function ƒ(x1; x2 …..; xn): tr ;
D;
begin
... ƒ :=e; ...
end;

Prima linie este antetul funcţiei, format din: ƒ— numele funcţiei;


(x1; x2 ...; xn) — lista opţională de parametri formali reprezentând argumentele funcţiei;
tr — tipul rezultatului; acesta trebuie să fie numele unui tip simplu sau tip referinţă.
Antetul este urmat de corpul funcţiei format din declaraţiile locale opţionale D şi
instrucţiunea compusă
begin ... end.
Declaraţiile locale sînt grupate în secţiunile (eventual vide)
label, const, type, var, function/ procedure.
Numele ƒ al funcţiei apare cel puţin o dată în partea stîngă a unei instrucţiuni de
atribuire care se execută: ƒ: =e. Ultima valoare atribuită lui ƒ va fi întoarsă în programul
principal.
În mod obişnuit, un parametru formal din lista (x1; x2 ...; xn) are forma:
(υ1 , υ2 ….., υk ) : tp
unde (υ1 , υ2 ….., υk ) sînt identificatori , iar tp este un nume de tip.
Utilizarea funcţiei ƒ se specifică printr-un apel de forma:
ƒ (a1 , a2 ..., an)
unde (a1 , a2 ..., an) este lista de parametri actuali. De obicei,
parametrii actuali sînt expresii, valorile cărora sînt comunicate funcţiei. Corespondenţa între un
parametru actual şi parametrul formal se face prin poziţia ocupată de aceştia în cele două liste.
Parametrul actual trebuie să fie compatibil din punct de vedere al atribuirii cu tipul parametrului
formal.
Funcţia putere are doi parametri formali : x de tip real şi n de tipul natural. Funcţia
returnează o valoare de tip real. În corpul funcţiei sînt declarate variabile locale p şi i.
La execuţia apelului Puterea(a,b)valorile3.0şi2 ale parametrilor actuali a,b se transmit
parametrilor formali , respectiv , x şi n. De menţionat că tipul lui a coincide cu tipul lui x şi
tipul lui b coincide cu tipul lui n.
În cazul apelului Puterea(s,t) tipul parametrilor actuali s,t nu coincide cu tipul
parametrilor formali, respectiv, x şi n . Totuşi , apelul este corect întrucît tipurile respective sînt
compatibile din punct de vedere al atribuirii .

În aplicaţiile date au loc vizualizarea efectuării pas cu pas a schimbării informaţiei în


sistemul de operare .
În prima aplicaţie ce ţine “de funcţii” se vede clar cum are loc un astfel de proces, adică
cu toate declarările , apelările şi la sfîrşit rezultatul.
În continuare urmează copia ecranelor în timpul execuţiei aplicaţiei Func.pps
are loc înscrierea rezultatului , care vine cu F în variabila t
Se demonstrază, că drept parametric ai funcţiei, în acest caz (lipseşte VAR) pot fi
şi constante.
La primul pas are loc apelarea funcţiei şi anume parametrii valoare a şi b se
transmit mărimilor c şi d.
Proceduri
Forma generală a textului unei declaraţii de procedură este:
procedure p(x1; x2 …..; xn): tr ;
D;
begin
...
end;
În antetul procedurii apar :
p- numele procedurii;
(x1; x2 …..; xn) – lista obţională de parametri formali;
În corpul procedurii sînt incluse:
D – declaraţiile locale (opţionale) grupate după aceleaşi reguli ca şi în cazul funcţiilor ;
Begin ... end – instrucţiune compusă ; ea nu conţine vreo atribuire asupra numelui procedurii .
Procedura poate să întoarcă mai multe rezultate , dar nu prin numele ei, ci prin variabile
desemnate special (cu prefixul var) în lista de parametri formali.
Parametrii din listă introduşi prin declaraţii de forma :
(υ1 , υ2 ….., υk ) : tp
se numesc parametri–valoare. Aceştea servesc pentru transmiterea de valori din programul
principal în procedură.
Parametri formali întroduşi în listă prin declaraţii de forma :
var υ1 , υ2 ….., υk : tp
Se numesc parametri–variabilă şi servesc pentru întoarcerea rezultatelor din procedură în
programul principal .
Activarea unei proceduri se face printr-un apel de forma
p(a1 ,..., an )
unde (a1 ,..., an ) este lista de parametri actuali . Spre deosebire de funcţie , apelul de procedură
este o instrucţiune ; acesta se inserează în programul principal în locul în care sunt dorite
efectele produse de execuţia procedurii .
în cazul unui parametru–valoare drept parametru actual poate fi utilizată orice expresie
de tipul respectiv , în particular o constantă sau o variabilă . Modificările parametrilor – valoare
nu se transmit în exteriorul subprogramului .
În cazul unui parametru–variabilă drept parametri actuali pot fi utilizate numai
variabile .Evident , modificările parametrilor în studiu vor fi transmise programului apelant .
5.4 Parametri formali funcţie/procedură
În completare a parametrii-valoare şi parametri variabilă , limbajul PASCAL permite
utilizarea parametrilor-funcţie şi parametrilor-procedură.
Specificarea unui parametru formal funcţie-procedură are forma antetului acestei funcţii-
proceduri .De exemplu , în declaraţia :
procedure Q (function F (x : real): real , i : integer);
begin
....
end;
apare ca parametru-funcţie antetul function F (x : real) : real.
Un apel al procedurii Q ar putea fi
Q (F1, j) ,
Unde F1 este numele unei funcţii cunoscute în locul apelului.
În Turbo PASCAL parametrii-funcţie/procedură se declară explicit ca aparţinînd unui tip
procedural.
Tipul procedural se defineşte cu ajutorul cuvîntului - cheie type.
Definiţia respectivă specifică numele şi tipul parametrilor formali ai unui subprogram . În
cazul funcţiilor se indică şi tipul valorii returnate .
Exemplu:
type TF = function (x : real) : real ;
TP = procedure (i,j : integer ) ;
var v :TF ;
p : TP ;
Mulţimea valorilor tipului TF este format din denumirile tuturor funcţiilor PASCAL de o
variabilă reală cu rezultate reale . Mulţimea valorilor tipului TP este formată din
denumirile tuturor procedurilor PASCAL de două variabile întregi. Menţionăm că la definirea
tipurilor procedurale nu apare nici un fel de nume de funcţie/procedură. Asupra variabililor de tip
procedural pot fi efectuate atribuiri. De exemplu , în prezenţa declaraţiilor :
function F1(x : real ) : real ;
begin
....
end;
procedure P1(m,n : integer);
begin
....
end;
atribuirile v:=F1 p:=P1 sunt corecte.
Folosirea tipurilor procedurale simplifică declararea parametrilor formali
funcţie/procedură. Un astfel de parametru se specifică acum ca un caz particular de parametru-
valoare printr-un nume urmat de un tip procedural . Parametru actual corespunzător va fi un
nume de funcţie/procedură de tip compatibil celui procedural .

Respectiv în continuare urmeză deasemenea o aplicaţie în Microsoft Power Point la


capitolul proceduri, la fel cu toate declarările, apelările şi afişările care le conţine, ţi deci toate se
observă în aplicaţia proc.pps
Se transmite valoarea variabilei A pentru variabila locală C şi adresa variabilei b
pentru variabila D
Când se revine la programul principal se “uită” de variabilele locale din
procedură”. Se vede că A va avea aceiaşi valoare, iar B primeşte acea valoare,
care s-a obţinut în timpul îndeplinirii procedurii pentru D.

Atragem atenţia, că în timpul apelului procedurii trebuie să ţinem cont care


variabilă are şi care nu are înainte cuvântul rezervat VAR. Pentru cele care au nu
putem scrie în lista de apel CONSTANTE, pentru celelalte – se permite.
În continuare V-mm analiza careva exemple, pe baza cărăra se va înţelege principiul de lucru a
procedurilor şi apelurile lor.
A luat sfârşit primul apel al procedurii. Atragem atenţia, că valoarea lui Y a devenit egală cu 3,
fiindcă în timpul apelului a fost transmisă adresa pentru B, deci operaţiile cu B au avut loc în
acea locaţie de memorie, unde se păstrează şi valoarea lui Y.
Atragem atenţia, că valoarea lui A devine egală cu 3, adică i se transmite valoarea lui Y, iar
pentru B se transmite adresa lui X, care are valoarea 0.

S-ar putea să vă placă și