NOŢIUNEA DE SUBPROGRAM
Prin subprogram vom înţelege un ansamblu alcătuit din tipuri de date, variabile şi instrucţiuni scrise învederea unei anumite prelucrări (calcule, citiri, scrieri) şi care poate fi utilizat (rulat) doar dacă este apelat de un program sau de alt subprogram.
Proceduri:
Procedurile sînt subprograme care efectuează prelucrarea datelor comunicate în momentul apelului. Limbajul conține procedurile predefinite read, readln,write, writeln ș.a. În completare, programatorul poate defini proceduri proprii, care se apelează în același mod ca procedurile-standart. Prin urmare, conceptul de procedură extinde noțiunea de instrucțiune PASCAL.
Forma generală a textului unei declarații de procedură este:
p- numele procedurii;
(x1, x2, ..., xn ) –lista opțională de parametri formali;
În corpul procedurii sînt incluse:
D- declarațiile locale( opționale) grupate după aceleași reguli ca î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:
- 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);
Diagrama de sintaxa:
Functii:
Funcțiile sunt 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. În completare, programul poate defini funcții proprii, care se apelează în același mod ca funcțiile-standart. Prin urmare, conceptul de funcție extinde noțiunea de expresie PASCAL.
Textul PASCAL al unei declarații de funcție are forma:
f- numele funcției;
(x1, x2, ..., xn )- lista opțională de paremetri formali reprezintî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.
Numele f al funcției apare cel puțin o datî în partea stîngă a unei instrucțiuni de atribuire care se execută: f:=e. Ultima valoare atribuită lui f va fi introdusă în programul principal.
Diagrama de sintaxa:
Domenii de vizibilitate
Corpul unui program sau subprogram se numește bloc. Deoarece subprogramele sînt incluse în programul principal și pot conține la rîndul 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 declarații se înțelege textul de program, în care numele introdus desemnează obiectul specificat de declarația în studiu. Domeniul de vizibilitate începe imediat dupî terminarea declarației și se sfîrșește o dată cu textul blocului respectiv.Domeniul de vizibilitate al unei declarației inclus acoperă domeniul de vizibilitate al declarației ce implică același nume din blocul exterior.
Cunoașterea domeniilor de vizibilitate ale declarațiilor este necesară pentru determinarea obiectului curent desemnat de un nume.
De exemplu, identificatorul c din instrucțiunea 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 cînd ea se declară în programul sau subprogramul ce îl cuprinde fără să fie redeclarată în subprogramul, cît și în afara lui, ele pot fi folosite pentru transmiterea datelor de prelucrat și returnarea rezultatelor.
Parametrii actuali trebuie să corespundă cu parametrii formali ca număr, ordine şi tip.
Transferul parametrilor se face în funcţie de modul de declarare a acestora, şi anume:
- parametrii transmişi prin valoare;
- parametrii transmişi prin adresă(referinţă).
Parametrii transmişi prin valoare sunt parametrii de intrare. În acest caz subprogramul apelant transmite spre subprogram valoarea parametrului actual, iar orice modificare a acestei valori pe parcursul subprogramului, se va pierde la sfârşitul subprogramului, astfel încât la revenire vom avea aceeaşi valoare ca şi la apel.
Parametrii transmişi prin adresă se evidenţiază prin existenţa cuvântului rezervat VAR înaintea declarării parametrului. În acest caz subprogramul apelant transmite spre subprogram valoarea parametrului actual, iar orice modificare a acestei valori pe parcursul subprogramului, se va reţine la sfârşitul subprogramului, astfel încât la revenire vom avea o altă valoare, nu cea de la apel.
Deoarece un subprogram poate fi definit şi în interiorul unui alt subprogram, putem descrie două modalităţi de structurare a unui program Pascal, folosind :
- dezvoltarea ascendentă
- dezvoltarea descendentă a programului.