Sunteți pe pagina 1din 8

CAPITOLUL

Funcii i proceduri

Subprograme Funcii Proceduri Domenii de vizibilitate Comunicarea prin variabile globale Efecte colaterale Recursia

Subprograme
O problem complex poate fi rezolvat prin divizarea ei ntr-un set de pri mai mici. Pentru fiecare parte se scrie o anumit secven de instruciuni, denumi t subprogram.
n limbajul PASCAL exist 2 tipuri de suprograme, i anume, funcii i proceduri: <Suprograme>::={<Funcie>;| <Procedur>;}

Interaciunea ntre program i subprogram

Funcii
Funciile sunt subprograme care calculeaz i returneaz o valoare. Limbajul PASCAL conine un set de funcii predefinite, cunoscute oricrui program : sin, cos, eof etc. n completare, programul poate defini funcii proprii, care se apeleaz n acelai mod ca funciile-standart. Prin urmare, conceptul de funcie extinde noiunea de expresie PASCAL. Textul PASCAL al unei declaraii de funcie are forma:

Function f(x1, x2, ..., xn ) : tr; D; begin ...

f : = e; ... end;

f- numele funciei; (x1, x2, ..., xn )- lista opional de paremetri formali reprezintnd argumentele funciei; tr- tipul rezultatului; acesta trebuie s fie numele unui tip simplu sau tip referin. Antetul este urmat de corpul funciei, format din declaraiile locale opionale D i instruciunea compus begin ... end. Numele f al funciei apare cel puin o dat n partea stng a unei instruciuni de atribuire care se execut: f:=e. Ultima valoare atribuit lui f va fi introdus n programul principal.

Proceduri
Procedurile snt subprograme care efectueaz prelucrarea datelor comunicate n momentul apelului. Limbajul conine procedurile predefinite read, readln,write, writeln .a. n completare, programatorul poate defini proceduri proprii, care se apeleaz n acelai mod ca procedurile-standart. Prin urmare, conceptul de procedur extinde noiunea de instruciune PASCAL.

Forma general a textului unei declaraii de procedur este: Procedure p(x1, x2, ..., xn ) ; D; begin ... end;
p- numele procedurii; (x1, x2, ..., xn ) lista opional de parametri formali; n corpul procedurii snt incluse: D- declaraiile locale( opionale) grupate dup aceleai reguli ca n cazul funciilor; Begin...end- instruciune compus; ea nu conine 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: Parametri-valoare v1, v2, ..., vk:tp ( servesc pentru transmiterea de valori din programul principal n
procedur);

Parametri-variabil var v1, v2, ..., vk:tp


procedur n programul principal);

(serves pentru ntoarcerea rezultatelor din

Domenii de vizibilitate
Corpul unui program sau subprogram se numete bloc. Deoarece subprogramele snt incluse n programul principal i pot conine la rndul lor alte subprograme, rezult c blocurile pot fi imbricate(incluse unul n altul). Aceast imbricare de blocuri este denumit structur de bloc a programului PASCAL.
Prin Domeniul de vizibilitate al unei declaraii se nelege textul de program, n care numele introdus desemneaz obiectul specificat de declaraia n studiu. Domeniul de vizibilitate ncepe imediat dup terminarea declaraiei i se sfrete o dat cu textul blocului respectiv. Domeniul de vizibilitate al unei declaraii inclus acoper domeniul de vizibilitate al declaraiei ce implic acelai nume din blocul exterior. Cunoaterea domeniilor de vizibilitate ale declaraiilor este necesar pentru determinarea obiectului curent desemnat de un nume. De exemplu, identificatorul c din instruciunea c:=chr(d) desemneaz o variabil de tip char.

Comunicarea prin variabile globale


Orice variabil este local n subprogramul n care a fost declarat. O variabil este global relativ la un subprogram atunci cnd ea se declar n programul sau subprogramul ce l cuprinde fr s fie redeclarat n subprogram, ct i n afara lui, ele pot fi folosite pentru transmiterea datelor de prelucrat i returnarea rezultatelor.

Efectele colaterale
Destinaia unei funcii este s ntoarc ca rezultat o singur valoare. n mod obinuit, argumentele se transmit funciei prin parametru-valoare, iar rezultatul calculat se returneaz n locul de apel prin numele funciei. n completare, limbajul PASCAL permite transmiterea argumentelor prin variabile globale i parametri-variabil. Prin efect colateral se nelege o atribuire( n corpul funciei) a unei valori la o variabil global sau la un parametru formal variabil. Efectele colaterale pot influena n mod neateptat execuia unui program i complic procesele de depanare.

Recursia
Recursia se definete ca o situaie n care un subprogram se autoapeleaz fie direct, fie prin intermediul altei funcii sau proceduri. Subprogramul care se autoapeleaz se numete recursiv. La orice apel de subprogram, n memoria calculatorului vor fi depuse urmtoarele informaii:
Valorile curente ale parametrilor transmii prin valoare; Locaiile(adresele) parametrilor-variabil; Adresa return, adic adresa instruciunii ce urmeaz dup apel.

Recursia este deosebit de util n cazurile n care elaborarea unor algoritmi nerecursivi este foarte complicat: translarea programelor PASCAL, n limbajul cod-main, grafica pe calculator, recunoaterea formelor .a.

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