Sunteți pe pagina 1din 4

Capitolul 1 Functii i proceduri

1.1 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, denumit subprogram. n limbajul PASCAL exist 2 tipuri de suprograme, i anume, funcii i proceduri:

<Suprograme>::={<Funcie>;| <Procedur>;}

AVANTAJELE UTILIZRII SUBPROGRAMELOR


realizarea codului o dat scris, un subprogram poate fi utilizat de mai multe programe; elaborarea algoritmilor prin descompunerea problemei n altele mai simple. n acest fel, rezolvm cu mult mai uor problema; reducerea numrului de erori care pot aprea la scrierea programelor; depistarea cu uurin a erorilor verificm la nceput subprogramele, apoi modul n care le-am apelat n cadrul programului.

1.2 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: 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.

1.3 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: 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 (serves pentru ntoarcerea rezultatelor din procedur n programul principal);

1.4 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 declaraiei 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.

1.5 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 subprogramul, ct i n afara lui, ele pot fi folosite pentru transmiterea datelor de prelucrat i returnarea rezultatelor.

1.6 Efectele colaterale


Destinaia unei funcii este s ntoarc ca rezultat o singur valoare. n mod obinuit, argumentele se transmit funciei prin parametr-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.

1.7 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.

1.8 Sintaxa declaratiilor si apelurilor de subprogramare


Diagrama de sintax pentru declaraia unui subprogram este : Pentru funcie:

Pentru procedur:

Apelul unui subprogram se face fie n programul principal, fie n alt subprogram. Diagrama de sintax pentru apelul unui subprogram este : Pentru funcie:

Pentru procedur: