You are on page 1of 30

Unitatea didactic 7 Abstracia n programare

Finaliti:
Dup studierea unitii didactice 7 i realizarea sarcinilor de nvare propuse, vei deveni capabili: s explicai conceptele abstraciei n programare (subalgoritm, subprogram, procedur, funcie, parametri formali, parametri actuali, metode de transmitere a parametrilor, mecanisme de transmitere a parametrilor, variabile globale, variabile locale); s elaborai proceduri i funcii; s verificai corectitudinea subprogramelor elaborate.

Modulul iniial. Tipuri elementare de date i structuri de control

Abstracia n programare
Pentru a realiza finalitile temei este necesar cunoaterea urmtoarelor noiuni i elemente primare:
algoritm liniar; structura alternativ: structura repetitiv: tipuri standard de date.

Abstracia este o operaie a gndirii care const n extragerea proprietilor generale, comune ale unui grup de obiecte, lasndu-se la o parte proprietile lor particulare. Atunci cnd se spune c ceva este concret, se are n vedere un anumit fragment al realitii. Cnd se spune c ceva este abstract, se are n vedere un element ce aparine spaiului conceptual. Abstractul este prelucrarea concretului i transformarea lui ntr-un produs nou care doar reflect proprietile concretului, dar nu mai poate avea existen. De exemplu, conceptul de linie geometric este o abstractizare a unei frontiere ce delimiteaz un obiect. Menionm, c linia geometric este definit drept un obiect abstract cu o singur dimensiune, anume lungime, pe cnd obiectele concrete, reale, sunt tridimensionale. n programare, noiunea de abstracie s-a dezvoltat odat cu dezvoltarea limbajelor de programare. Calculatorul reprezint un automat care recunoate numai irurile binare, formate din 0 i 1. Aceasta permite de a realiza relativ simplu pstrarea informaiei n calculator, dar genereaz probleme de ordin practic: fiecare comand a unei programe trebuie descris cu ajutorul cifrelor binare, care n calculatoare sunt reprezentate prin diferite niveluri ale tensiunii curentului electric. Primele programe erau scrise n limbaj main i prezentau nite iruri de cifre binare (bii). A nelege logica de lucru a unor asemenea programe era dificil, deoarece programatorul trebuie s acorde atenie la o mulime de detalii. Pentru a simplifica scrierea programelor au fost inventate mnemocodurile reprezentri simbolice ale comenzilor binare, care pot fi memorizate mai uor dect irurile formate din 0 i 1. Pentru a simplifica lucrul cu locaiile memoriei programatorii au nceput s utilizeze noiunea de variabil. Pentru traducerea mnemocodurilor n limbaj main i a denumirii variabilelor n adresele locaiilor de memorie a fost elaborat un program special, numit translator. Unul din primele mijloace de programare a fost asamblorul, care transla simbolurile unui program scris n limbajul Assembler (limbajul mnemocodurilor) n iruri binare, recunoscute de calculator. De exemplu, comanda, care semnific a ncrca n registrul 3 datele din locaia de memorie 14 poate fi citit (i memorizat) mai uor dect irul echivalent de bii.

Abstractul este prelucrarea concretului i transformarea lui ntr-un produs nou care doar reflect proprietile concretului, dar nu mai poate avea existena.

148 | Bazele programrii. Curs fundamental

Abstracia n programare. Unitatea didactic 7

Dei asamblorul a simplificat procesul de notare (codificare) a programelor, el nu a afectat modul de percepere a programului: programatorul era nevoit s perceap programul i la nivelul algoritmului de rezolvare a problemei, i la nivelul codului surs, i la nivelul subtilitilor tehnice (locaiile de memorie utilizate, modul de acces la ele etc.). Altfel spus, programatorul era nevoit s lucreze concomitent la diferite nivele de abstracie. Prin nivel de abstracie vom nelege n continuare modalitatea de ascundere a detaliilor de realizare a unei mulimi de posibiliti funcionale. Limbajul de programare este un mecanism de abstractizare. Programele scrise n limbaje de nivel superior descriu procesul de calcul la un nivel de abstracie ridicat, fapt ce permite programatorului de a face abstracie de detaliile tehnice de executare a lor. Cu ct mai nalt este nivelul de abstracie, cu att mai multe detalii devin nevzute. Abstracia n programare poate divizat n dou grupe: abstracia controlului; abstracia datelor. n viaa de zi cu zi nu putem rezolva singuri toate problemele. Astfel dac avem o defeciune la automobil, vom merge la un atelier specializat de reparaii auto. Un algoritm se gsete n aceeai situaie: pentru a rezolva problema, el poate face apel la alte programe specializate, cunoscute sub numele de subalgoritm sau subprogram. n cazul programrii structurate abstracia controlului vizeaz utilizarea sistematic a subprogramelor i structurilor de control. Prin abstracia datelor se subnelege reflectarea adecvat a datelor n structurile de date ale limbajelor de programare. Abstracia n programare se realizeaz cu ajutorul subprogramelor. De multe ori, este necesar ca o anumit secven de instruciuni s se execute n mai multe locuri n cadrul unui program, sau eventual pentru alte date. De aceea, este bine ca aceste instruciuni s fie grupate ntr-un subalgoritm, purtnd un nume. Acest subalgoritm va fi numit subprogram. Subprogramul se poate activa (lansa n execuie) la cerere, prin intermediul acestui nume. Fie, de exemplu, c e necesar s se calculeze aria total a dou loturi dreptunghiulare. Problema poate fi realizat folosind urmtorul algoritm liniar:

Prin nivel de abstracie vom nelege n continuare modalitatea de ascundere a detaliilor de realizare a unei mulimi de posibiliti funcionale.

Abstracia n programare se realizeaz cu ajutorul subprogramelor.

n cazul cnd algoritmul conine un subalgoritm el se numete algoritm principal. Menionm c divizarea algoritmilor n algoritmi principali i subalgoritmi este relativ. La rezolvarea unei alte probleme, algoritmul principal poate deveni subalgotim.

Subprogramele se realizeaz ca: proceduri; funcii.

Bazele programrii. Curs fundamental | 149

Modulul iniial. Tipuri elementare de date i structuri de control

Algoritm Aria_totala_1
Var S: Real A: Real B: Real S_total: Real Begin // calcularea ariei primului lot ReadReal(A) ReadReal(B) S:=A * B S_total:=S // calcularea ariei lotului 2 ReadReal(A) ReadReal(B) S:=A * B S_total:=S_total + S WriteReal(S_total) End

Fragmentul comun
ReadReal(A) ReadReal(B) S:=A * B

poate fi perfectat ca subalgoritm n felul urmtor:


Algoritm Aria_1_lot
Begin End ReadReal(A) ReadReal(B) S:=A * B Apelul procedurii const doar din numele procedurii.

Substituind n algoritmul precedent fragmentul comun cu numele subalgoritmului Aria_1_lot, algoritmul principal va cpta forma:
Algoritm Aria_totala_2
Var Begin S: Real A: Real B: Real S_total: Real

150 | Bazele programrii. Curs fundamental

Abstracia n programare. Unitatea didactic 7

// calcularea ariei primului lot Aria_1_lot S_total:=S // calcularea ariei lotului 2 Aria_1_lot S_total:=S_total + S WriteReal(S) End

Avantajele folosirii subprogramelor n general, subprogramele includ mai multe instruciuni, folosirea lor avnd ca efect reducerea dimensiunilor textului surs al programelor, prin factorizarea unor seciuni comune ale programelor. Subprogramele mai permit: sistematizarea elaborrii programelor, prin divizarea unei probleme mai complicate n probleme mai simple, tratate prin subprograme separate; scurtarea timpului de elaborare a programelor, prin utilizarea aceluiai subprogram n programe diferite; economisirea spaiului de memorie, la execuia programului. Proceduri i funcii n limbajele de programare subprogramele se realizeaz cu ajutorul procedurilor i funciilor. Utilizarea subprogramelor presupune determinarea a dou elemente eseniale: precizarea grupului de instruciuni comune; specificarea locului sau locurilor din program n care grupul de instruciuni trebuie executat. Corespunztor celor dou elemente menionate, subprogramul are 2 aspecte: aspectul ce se refera la denirea subprogramului, n partea declarativ a algoritmului prin identificarea coninutului instruciunilor comune; aspectul ce se refera la apelul subprogramului, reprezentnd instruciunile din grupul comun, care urmeaz s fie executat. Definiia i apelul unei proceduri simple Definiia unei proceduri conine: un antet; un bloc, numit i corpul procedurii. Antetul precizeaz numele procedurii, care este utilizat n program, n fiecare din apelurile acesteia.

Se consider c primul program pentru Maina analitic, proiectat de inginerul Charles Babbage n anul 1830, a fost scris de Ada Lovelace, fiica poetului englez G. Byron. Scrierea sistematic a programelor a nceput n anii 40 a secolului XX. Pe parcurs, a fost elaborat un numr enorm de programe, care rezolv diverse probleme: calculul valorilor unei funcii, rezolvarea unui sistem de ecuaii etc. Mulimea programelor elaborate este o expresie a experienei miilor de programatori care au lucrat n diverse ri. Subprogramele permit de a valorifica aceast inestimabil experien n programele moderne prin utilizarea bibliotecilor standarde de subprograme.

Bazele programrii. Curs fundamental | 151

Modulul iniial. Tipuri elementare de date i structuri de control

Corpul procedurii are o parte declarativ i una executabil. Partea declarativ este obional (poate lipsi). Se vor declara date (variabile), care pot fi utilizate n instruciunile prii executabile. Partea executabil va conine instruciunile care se vor executa la apelul procedurii.
O procedur simpl se definete n felul urmtor:
Procedure <nume> Var -> partea declarativ < variabile locale> Begin -> partea executiv < corpul procedurii> End

Procesul de creare a procedurii simple const din: stabilirea numelui procedurii; scrierea setului de instruciuni ce alctuiesc corpul procedurii n conformitate cu rolul pe care aceasta l are de ndeplinit. Apelul procedurii este foarte simplu i const doar din specicarea numelui procedurii. El trebuie inclus n partea executabil a programului, ca o instruciune de sine stttoare. Execuia apelului de procedur se face printr-un mecanizm mai complicat. Apelul provoac suspendarea execuiei procedurii curente, apelante (cea care conine apelul de procedur) i activarea procedurii apelate, adic execuia instruciunilor din corpul acesteia. La sfritul execuiei procedurii apelate, se reia execuia procedurii apelante, din punctual imediat urmtor apelului.

Procesul de creare a procedurii simple const din: stabilirea numelui procedurii; scrierea setului de instruciuni ce alctuiesc corpul procedurii n conformitate cu rolul pe care aceasta l are de ndeplinit.

Apelul procedurii este foarte simplu i const doar din specificarea numelui procedurii.

Algoritm A Var . . Begin . . . P <AR> . . . End

Procedura P Var . . Begin . . End


<AR> - adresa de revenire

Figura 7.1. Mecanismul de apel al procedurii.

152 | Bazele programrii. Curs fundamental

Abstracia n programare. Unitatea didactic 7

ntr-un algoritm pot fi declarate i apelate mai multe proceduri.


Execuia unei proceduri simple se desfoar n felul urmtor:
se memorizeaz adresa de revenire (adresa instruciunii care urmeaz dup instrucinea de apel); se aloc memorie pentru variabilele locale ale procedurii; se execut corpul procedurii; se elibereaz memoria, ocupat de variabilele locale; se reia execuia procedurii apelante, de la instruciunea imediat urmtoare apelului.

Variabile locale i variabile globale. Variabilele declarate n procedur se numesc variabile locale. Ele pot fi folosite numai n aceast procedur i nu pot fi accesate n exteriorul ei. Intervalul de timp n care variabila local exist poart numele de durat de via. Variabilele declarate n algoritmul principal se numesc variabile globale. Domeniul de vizibilitate a variabilelor globale este ntregul algoritm, inclusiv procedurile algoritmului, iar domeniul de vizibilitate al variabilelor locale este numai subprogramul n care variabilele sunt definite. Observaii: 1. O variabil local exist numai n timpul execuiei procedurii n care este declarat, fiind creat la activarea procedurii, prin alocarea spaiului de memorie necesar i fiind distrus la ieirea din procedur, prin eliberarea spaiului de memorie. Acest mecanism constituie un mijloc de economisire a spaiului de memorie, fiind posibil de a pstra valorile variabilelor ale diverselor proceduri ale programului n aceeai zon de memorie. La momente diferite de timp o aceeai zon de memorie poate fi folosit pentru a pstra valorile variabilelor locale ale diversilor proceduri ale programului; 2. Variabilele locale sunt nedefinite pn la nceputul execuiei procedurii, nu sunt iniializate la apelul procedurii i nici nu-i pstreaz valoarea de la un apel la altul; 3. n corpul procedurii pot fi accesate variabilele locale ale procedurii date i variabilele globale, dac numele lor nu coincid cu numele celor locale. n cazul cnd numele variabilelor globale coincid cu numele variabilelor locale, atunci n procedur vor fi accesate cele locale, iar n afara procedurii cele globale.

O variabil local este creat automat n momentul apelului subprogramului i distrus n momentul revenirii n subprogramul apelat. Intervalul de timp n care variabila local exist poart numele de durat de via (lifetime). Domeniul de vizibilitate al variabilelor locale este numai subprogramul n care variabila este definit.

Bazele programrii. Curs fundamental | 153

Modulul iniial. Tipuri elementare de date i structuri de control

Se consider urmtorul fragment:


Algoritm A Var A: Integer B: Real C: Char Procedure P1 Var X: Natural Y: Boolean Begin ... End Procedure P2 Var A: Boolean Z: Integer Begin ... End Begin ... P1 ... P2 ... End

Variabilele A, B i C sunt variabila globale. Variabilele X i Y sunt variabile locale ale procedurii P1, iar variabilele A, Z sunt variabilele locale ale procedurii P2. n fragmentele 1, 3 i 5 ale algoritmului pot fi accesate numai variabile globale A, B i C. n corpul procedurii P1 pot fi accesate variabile locale X i Y i variabile globale A, B, C. n corpul procedurii P2, pot fi accesate variabile locale A, Z i variabilele globale B, C. Variabila global A nu poate fi accesat n procedura P2, deoarece exist variabila local A. Dup revenirea din procedura P2, accesul la variabila global A va fi restabilit. Proceduri cu parametri. Procedurile simple, fr parametri au posibiliti limitate. Deaceea, cel mai frecvent se folosesc procedurile cu parametri. Forma general a procedurilor este cea parametrizat. De obicei, procedura execut un calcul cu valorile parametrilor si de intrare i furnizeaz rezultatele prin parametrii de ieire. Procedura reprezint un subprogram, identificat printr-un nume. Procedura

154 | Bazele programrii. Curs fundamental

Abstracia n programare. Unitatea didactic 7

poate avea 0..n intrri i 0..m ieiri. nume

0 . . . n intrri
Figura 7.2. Structura procedurii

0 Procedur . . . m ieiri

O procedur cu parametri se definete n felul urmtor:


Procedure <nume> (lista parametrilor formali) Var -> partea declarativ < variabile locale> Begin -> partea executiv < corpul procedurii> End

Se recomanda ca numele procedurii sa fie sugestiv - sa sugereze functionalitatea ei. Lista parametrilor formali va conine descriirile tuturor intrrilor i a tuturor ieirilor procedurii. Numrul de parametri formali va fi egal cu suma numarului parametrilor de intrare i a numrului parametrilor de ieire. Corpul procedurii conine setul de instruciuni ce vor fi executate la apelul ei. n dependen de destinaia procedurii se elaboreaz corpul ei, presupunnd c valorile parametrilor de intrare sunt cunoscute (aceti parametri vor primi valori concrete la apelul procedurii). Procedura va calcula rezultatele, memorizndu-le n parametrii de ieire. La descrierea unui parametru formal se indic trei caracteristici: numele parametrului. Se recomand s fie sugestiv, s sugereze natura datelor; tipul de date. Se alege n dependen de natura datelor; metoda de transmitere a parametrului. Exist dou metode de transmitere a parametrilor: transmitere prin valoare; transmitere prin referin.

Parametrii formali Sunt variabile manechin, care in locul parametrilor actuali. La apelul procedurii parametrii actuali nlocuiesc parametrii formali, execuia producndu-se pentru valorile determinate de parametrii actuali.

Bazele programrii. Curs fundamental | 155

Modulul iniial. Tipuri elementare de date i structuri de control

Metodele de transmitere a parametrilor

prin valoare

prin referin

Figura 7.3. Metodele de transmitere a parametrilor formali.

Procesul de creare a unei proceduri cu parametri const din: stabilirea numelui procedurii; stabilirea parametrilor; scrierea setului de instruciuni ce alctuiesc corpul procedurii n conformitate cu rolul pe care aceasta l are de ndeplinit. Lista parametrilor formali se indic la declararea procedurii.

Procesul de creare a unei proceduri cu parametri const din: stabilirea numelui procedurii; stabilirea parametrilor; scrierea setului de instruciuni ce alctuiesc corpul procedurii n conformitate cu rolul pe care aceasta l are de ndeplinit.
Procedura cu parametri se apeleaz n felul urmtor:
<nume_procedur> (lista parametrilor actuali)

Lista parametrilor actuali se indic la apelul procedurii.

Numrul parametrilor actuali trebuie s coincid cu numrul parametrilor formali. ntre parametrii acestor dou liste trebuie s existe o coresponden poziional biunivoc: parametrului formal Pfi i va corespunde parametrul actual Pai.
Lista parametrilor formali Lista parametrilor actuali Pf1 Pa1 Pf2 Pa2 ... Pfn Pan

Parametrii actuali Parametrii dintr-un apel de procedur se numesc parametri actuali. n momentul apelului procedurii parametrul formal primete valoarea parametrului actual, care este diferit de la un apel la altul.

n dependen de metoda de transmitere parametrul actual corespunztor poate fi: constant; variabil; expresie. Dac procedura se apeleaz de mai multe ori, atunci la fiecare apel parametrii formali vor conine valori diferite, n dependen de valorile parametrilor actuali. Ca i variabilele locale, parametrii formali sunt cunoscui n procedur, dar sunt necunoscui n afara acesteia. Ei se comport la fel ca i variabilele locale, cu o singur excepie: la apelul procedurii, se realizeaz iniializarea parametrilor, printr-un anumit mecanism. Astfel

156 | Bazele programrii. Curs fundamental

Abstracia n programare. Unitatea didactic 7

parametrii formali sunt definii (au valori bine precizate) la nceperea execuiei procedurii. Parametrii nu pot fi utilizai n afara procedurii n care sunt declarai.

Transmitera parametrilor prin valoare Un parametru transmis prin valoare se descrie n lista parametrilor formali n felul urmtor:
<nume_parametru>: <tip_date>

Metoda de transmitere prin valoare poate fi utilizata numai pentru parametrii de intrare.

Dac parametrii sunt transmii prin valoare atunci execuia procedurii se desfoar n felul urmtor:
se memorizeaz adresa de revenire (adresa instruciunii care urmeaz dup instrucinea de apel); se calculeaz valoarea fiecrui parametru actual; se aloc memorie pentru parametrii formali, transmii prin valoare i pentru variabilele locale ale procedurii; valorile parametrilor actuali calculate sunt atribuite parametrilor formali, iniializndu-le; se execut corpul procedurii; se elibereaz memoria, ocupat de parametrii formali, transmii prin valoare i de variabilele locale; se reia execuia procedurii apelante, de la instruciunea imediat urmtoare apelului. In cazul transmiterii parametrului prin valoare, parametrul actual corespunzator poate fi: constanta variabila expresie

n cazul transmiterii prin valoare, parametrii actuali pot fi: constante, variabile sau expresii, tipul de date al crora este compatibil cu tipul parametrului formal corespunztor. Metoda de transmitere prin valoare poate fi utilizat numai n cazul parametrilor de intrare ai procedurii. Exemplu: S se calculeze aria total a dou loturi dreptunghiulare. Rezolvare Vom elabora procedura Aria_1_lot2, care va avea la intrare cele dou dimensiuni ale dreptunghiului. Deci, procedura va avea doi parametrii (Latura1 si Latura2), transmii prin valoare. Procedura va calcula aria lotului cu dimensiunile Latura1 si Latura2 in variabila local S, care se adauga la valoarea variabilei globale S_total. Pentru calcularea ariei totale vom apela de dou ori procedura Aria_1_lot2 cu diferii parametri actuali. Pentru calcularea ariei primului lot se va apela procedura Aria_1_lot2 cu parametrii actuali A1, B1, care contin dimensiunile primului lot, iar pentru a calcula aria celui de-al doilea lot se va apela procedura Aria_1_lot2 cu parametri actuali A2, B2, care pastreaza dimensiunile celui de-al doilea lot.
Bazele programrii. Curs fundamental | 157

Modulul iniial. Tipuri elementare de date i structuri de control

Algoritm Aria_totala_3
Var A1, B1 : Real A2, B2 : Real S_total: Real Procedure Aria_1_lot2 (Latura1: Real, Latura2: Real) Var S: Real Begin S:=Latura1 * Latura2 S_total:= S_total+ S End Begin S_total:=0 ReadReal(A1) ReadReal(B1) Aria_1_lot2(A1,B1) ReadReal(A2) ReadReal(B2) Aria_1_lot2(A2,B2) WriteReal (S_total) End

Traseul executrii algoritmului Aria_total_3:


Instructiunea ReadReal(A1) ReadReal(B1) S_total:=0 Aria_1_lot2(A1,B1) S:=Latura1*Latura2 S_total:=S_total+S ReadReal(A2) ReadReal(B2) Aria_1_lot2(A2,B2) S:=Latura1*Latura2 S_total:=S_total+S WritReal(S_total) Tast. Ecran A1 B1 A2 B2 2 3 X 2 X 3 0 2 6 4 5 4 5 4 26 26 5 X 20 3 X 6 X X S_ total X Lat_1 Lat_2 S

La primul apel al procedurii Aria_1_lot2 se aloca spatiu pentru parametrii formali Latura1 si Latura2. Parametrul actual A1 se copie n parametrul formal Latura1, iar parametrul actual B1 se copie n parametrul formal Latura2. Se lanseaz procedura care calculeaz aria primului lot n variabila local S i apoi o adaug la variabila global S_total, care pn la intrare n procedur avea valoarea 0. Dup exe-

158 | Bazele programrii. Curs fundamental

Abstracia n programare. Unitatea didactic 7

cutarea corpului procedurii se elibereaza spaiul ocupat de parametrii formali si gestiunea se transmite la urmatoarea instruciune dupa apel (ReadReal(A2)). La cel de-al doilea apel al procedurii, parametrul actual A2 se copie n parametrul formal Latura1, iar parametrul actual B2 se copie n parametrul formal Latura2. ncepe a lucra procedura, care calculeaz aria celui de-al doilea lot n variabila local S i apoi o adaug la variabila global S_total, care pn la ntrare n procedur coninea valoarea ariei primului lot. Dup executarea corpului procedurii se elibereaza spaiul ocupat de parametrii formali si gestiunea se transmite la urmatoarea instruciune dupa apel (WriteReal(S_total)). Exemplu: S se aeze divizorii a dou numere naturale citite de la tastatur. Rezolvare: Vom elabora procedura Divizori, care va afia divizorii oricrui numr natural. Procedura va avea o intrare numrul natural N, divizorii cruia trebuie afiai. Deci, procedura va avea un parametru, transmis prin valoare. Corpul procedurii va conine un ciclu cu contor, unde variabila ciclului va primi valori din intervalul 1.. N (N valoarea numrului natural dat). n corpul ciclului se vor compara resturile de la mprirea numrului natural N la valorile variabilei ciclului. Dac restul este egal cu zero, nseamn c valoarea variabilei ciclului I este divizor pentru numrul N.
Algoritm Afisare_divizori
Var Numar1:Natural Numar2: Natural Procedure Divizor(N: Natural ) Var I: Natural Begin For I:=1 to N step 1 If N mod I =0 Then WriteNat(I) End End End Begin ReadNat(Numar1) Divisor(Numar1) ReadNat(Numar2) Divisor(Numar2) End

Parametrul actual corespunztor parametrului formal transmis prin referin poate fi numai variabil.

Se recomand transmiterea parametrului de intrare prin referin n cazurile cnd el reperezint o structur de date voluminoas.

Bazele programrii. Curs fundamental | 159

Modulul iniial. Tipuri elementare de date i structuri de control

Transmiterea parametrilor prin referin Parametrii de iesire a procedurii trebuie transmii numai prin referin. Pentru ei exist un alt mecanism de transmitere a valorilor. La apelul procedurii, acest mecanism pune n coresponden fiecrui parametru actual a unui parametru formal astfel nct, pe durata execuiei procedurii, identificatorul unui parametru formal devine sinonim cu identificatorul paramtrului actual corespunztor. Datorit acestui mecanism, operaiile procedurii au efect direct asupra parametrilor actuali. Un parametru transmis prin referin se descrie n lista parametrilor formali n felul urmtor:
Var <nume_parametru>: <tip_date>

Parametrii de ieire se transmit numai prin referin

Parametrul actual corespunztor parametrului formal transmis prin referin poate fi numai variabil.

Modificrile parametrilor formali, transmii prin referin ai unei proceduri persist (se transmit programului apelant) i dup terminarea execuiei procedurii. O schimbare a parametrului formal se reflect n parametrul actual corespunztor. Parametrul actual corespunztor unui parametru formal transmis prin referin nu poate fi o expresie, ci numai o variabil de acelai tip cu parametrul formal corespunztor. Dac procedura furnizeaz rezultatele sale programului apelant, atunci acest parametru trebuie s fie transmis prin referin, iar dac parametrii reprezint date de intrare, atunci ei pot fi transmii att prin valoare, ct i prin referin. n cazul cnd parametrul de intrare reprezint o structur de date voluminoas, transmiterea lui prin referin este mai avantajoas. n acest caz, se vor utiliza mai puine resurse (nu se va aloca spaiu pentru pstrarea parametrului formal) i procesul de transmitere se va realiza mai rapid (se evit alocarea memoriei i copierea valorii parametrului actual n aceasta zon).
Dac procedura are i parametri transmii prin referin, atunci execuia procedurii se desfoar n felul urmtor:
se memorizeaz adresa de revenire (adresa instruciunii care urmeaz dup instrucinea de apel); se calculeaz valoarea fiecrui parametru actual transmis prin valoare; se aloc memorie pentru parametrii formali, transmii prin valoare i pentru variabilele locale ale procedurii; valorile parametrilor actuali calculate sunt atribuite parametrilor formali, iniializndu-le; se instaleaz corespondena dintre parametrul formal transmis prin referin i parametrul actual corespunztor (adresarea la parametrul formal va accesa zona de memorie care aparine

160 | Bazele programrii. Curs fundamental

Abstracia n programare. Unitatea didactic 7

parametrului actual); se execut corpul procedurii; se elibereaz memoria, ocupat de parametrii formali, transmii prin valoare i de variabilele locale; se reia execuia procedurii apelante, de la instruciunea imediat urmtoare apelului.

Exemplu: S se calculeze aria total a dou loturi dreptunghiulare. Rezolvare.Vom elabora procedura Aria_1_lot3, care va avea la intrare cele dou dimensiuni ale lotului, iar la ieire aria calculat. Deci, procedura are 2 intrari (dimensiunile lotului) si o iesire (aria lotului). Fie, ca cei 2 parametri de intrare se vor transmite prin valoare. Parametrul de iesire aria lotului, trebuie transmis prin referin (parametrii de ieire se transmit numai prin referin). Pentru calcularea ariei totale vom apela de dou ori procedura Aria_1_lot3 cu diferii parametri actuali.
Algoritm Aria_totala4
Var A1,B1 : Real; A2,B2 : Real; S1,S2: Real; S_total: Real; Procedure Aria_1_lot3( Latura1: Real, Latura2: Real, Var S: Real) Begin S:=Latura1 * Latura2 End Begin ReadReal(A1) ReadReal(B1) Aria_1_lot3(A1,B1,S1) ReadReal(A2) ReadReal(B2) Aria_1_lot3(A2,B2,S2) S_total:=S1+S2 WriteReal(S_total) End

La primul apel al procedurii Aria_1_lot3 se aloc spaiu pentru parametrii formali Latura1 si Latura2, deoarece ei sunt transmisi prin valoare. Parametrul actual A1 se copie n parametrul formal Latura1, iar parametrul actual B1 se copie n parametrul formal Latura2 i se instaleaz corespondena ntre parametrul actual S1 i parametrul formal S. ncepe a lucra procedura care calculeaz aria primului lot
Bazele programrii. Curs fundamental | 161

Modulul iniial. Tipuri elementare de date i structuri de control

n parametrul S care corespunde zonei de memorie ocupate de variabila global S1. Dup terminarea procedurii variabila S1 va conine aria primului lot. Spatiul ocupat de copiile parametrilor formali Latura1 si Latura2 se elibereaza, gestiunea se transmite la urmatoarea instruciune dupa cea de apel (ReadReal A2). La cel de-al doilea apel al procedurii, parametrul actual A2 se copie n parametrul formal Latura1, iar parametrul actual B2 se copie n parametrul formal Latura2 i se instaleaz corespondena ntre parametrul actual S2 i parametrul formal S. ncepe a lucra procedura care calculeaz aria celui de-al 2-lea lot n parametrul S, care corespunde zonei de memorie ocupate de variabila global S2. Dup terminarea procedurii variabila S2 va conine aria celui de-al doilea lot. La revenirea din procedur se va executa instruciunea S_total:=S1+S2. Traseul executrii algoritmului Aria_total_4:
Instructiunea ReadReal(A1) ReadReal(B1) S_total:=0 Aria_1_ lot3(A1,B1,S1) S:=Lat_1*Lat_2 ReadReal(A2) ReadReal(B2) Aria_1_ lot3(A2,B2) S:=Lat_1*Lat_2 S_tot.:=S1+S2 WritReal(S_tot) Tast. Ecr. A1 B1 A2 B2 S1 S2 S_to. Lat_1 X X X X X X X 2 2 3 3 2 6 4 5 4 5 4 20 26 26 5 SS2 Lat_2 S

SS1

Tehnologia elaborrrii unei proceduri:


se alege un nume sugestiv n calitate de nume al procedurii; se identific parametrii de intrare i cei de ieire. Pentru fiecare parametru identificat se alege un nume sugestiv i tipul de date al parametrului n dependen de natura datelor; se alege metoda de transmitere a parametrilor. Parametrii de intrare pot fi transmii att prin valoare, ct i prin referin. Dac parametrul de intrare reprezint o structura voluminoas, va fi mai raional transmiterea lui prin referin. Parametrii de ieire pot fi transmii numai prin referin; se descrie lista parametrilor formali ai procedurii care va conine descrierile tuturor parametrilor de intrare i a celor de ieire. Pen-

162 | Bazele programrii. Curs fundamental

Abstracia n programare. Unitatea didactic 7

tru fiecare parametru formali se indic trei caracteristici: numele, tipul de date i metoda de tansmitere a parametrului; se elaboreaz corpul procedurii, presupunnd c valorile parametrilor de intrare sunt cunoscute (ei vor primi valori concrete n momentul apelului procedurii n dependen de valorile parametrilor actuali corespunztori).

Funcii n limbajele de programare subprogramele pot fi realizate i ca funcii. Deosebirea ntre proceduri i funcii const n numrul valorilor calculate i returnate n punctele din care s-a fcut apelul: procedura calculeaz oricte valori (g. 7.2); funcia calculeaz ntotdeauna o singur valoare (g. 7.4). nume
0 . . . n

Funcie ieiri
Figura 7.4. Structura funciei

intrri

O funcie este un subprogram care are 0...n intrari, calculeaz i ntoarce ca rezultat o singur valoare.
Forma general a definiiei unei funcii este urmtoarea:
Function <nume_funcie> (lista_parametri_formali): tip_rezultat Var < variabile locale> begin <corpul funciei> End

Se recomand ca numele funciei s fie un identificator sugestiv care s indice destinaia funciei. Lista parametrilor formali conine descrierea tuturor parametrilor de intrare. Lista parametrilor formali are sintaxa identic celei de la procedur. Pentru ecare parametru formal se indic 3 caracteristici: numele tipul de date metoda de transmitere
Bazele programrii. Curs fundamental | 163

Modulul iniial. Tipuri elementare de date i structuri de control

Se recomand ca numele parametrului s sugereze esena datelor respective. Tipul de date a parametrului se alege n dependen de natura datelor. Parametrii functiei pot fi transmii att prin valoare, ct i prin referin. Dac parametrul formal reperezint o structur de date voluminoas, transmiterea lui prin referin ar fi mai optimal (n ceea ce privete resursele de memorie utilizat, durata de execuie). Rezultatul calculat de o funcie este de tip elementar sau String specificat n antet. Rezultatul calculat de funcie se ntoarce programului apelant cu ajutorul operatorului Return <expresie> Apelul funciei se face chiar n expresia care utilizeaz valoarea calculat de funcie, ntr-o form foarte apropiat de scrierea uzual a formulelor n matematic. Apelul funciei poate s apar n orice expresie, ca operand care are tipul rezultatului funciei. Funciile sunt tratate ca i variabile. Ele pot folosite n cadrul: expresiilor aritmetice i logice; n cadrul apelului altor funcii pe post de parametri actuali; n cadrul instruciunilor Return.
Sintaxa apelului unei funcii este urmtoarea:
... < nume_funcie >(lista_parametri_actuali)

Funciile sunt tratate ca i variabile. Ele pot fi folosite n cadrul: expresiilor aritmetice i logice; n cadrul apelului altor funcii pe post de parametri actuali; n cadrul instruciunilor Return.

Efectul funciei se manifest atunci cnd la evaluarea expresiei este necesar valoarea operandului reprezentat de apelul de funcie. n acest moment, evaluarea expresiei este suspendat temporar i se realizeaz urmtoarele aciuni:
Mecanismul de apel al unei funcii:
se face transferul parametrilor actuali funciei: se calculeaz valoarea fiecrui parametru actual transmis prin valoare; se aloc memorie pentru parametrii formali, transmii prin valoare i pentru variabilele locale ale funciei; valorile parametrilor actuali calculate sunt atribuite parametrilor formali, iniializndu-le; se instaleaz corespondena dintre parametrul formal transmis prin referin i parametrul actual corespunztor (adresarea la parametrul formal va accesa zona de memorie care aparine parametrului actual); se execut corpul funciei; ca urmare este calculat valoarea funciei; aceast valoare este chiar valoarea operandului, folosit n continuare la reluarea evalurii expresiei ce conine apelul funciei.

164 | Bazele programrii. Curs fundamental

Abstracia n programare. Unitatea didactic 7

Exemplu: S se calculeze S=max(a,b,c)+max(d,e,f) Rezolvare: Vom elabora funcia Max care are la intrare 3 numere ntregi, de ex. N1, N1, N3. Corpul funciei determin valoara maxim dintre numerele N1, N2, N3. Deci, funcia va avea 3 intrri 3 parametri formali, transmii prin valoare.
Algoritm Suma_max
Var A,B,C,D,E,F: Integer S: Integer Function Max(N1:Integer, N2: Integer, N3: Integer): Integer Var N_max: Integer Begin If N1>N2 Then N_max:=N1 Else N_max:=N2 End If N3>N_max Then N_max:=N3 End Return N_max End Begin ReadInt(A) ReadInt(B) ReadInt(C) ReadInt(D) ReadInt(E) ReadInt(F) S:=Max(A,B,C)+Max(D,E,F) WriteInt(S) End

Variabilei globale S i se atribuie valoarea unei expresii cu doi operanzi. Operanzii reprezint apeluri de funcii. nainte de a executa adunarea se calculeaz valoarea primului operand, care suspend calculul expresiei i face apelul funciei Max cu parametrii actuali (A, B, C) care determin valoarea maxim dintre valorile A, B, C. Funcia returneaz n locul apelului funciei Max(A, B, C) valoarea calculat de funcie. Apoi se calculeaz cel de-al doilea operand prin apelul funciei Max cu parametrii actuali (D, E, F), care determin
Bazele programrii. Curs fundamental | 165

Modulul iniial. Tipuri elementare de date i structuri de control

valoarea maxim dintre valorile D, E, F i o returneaz n punctul apelului. Apoi se va relua calculul sumei suspendate, adunndu-se valorile celor doi operanzi calculai.
Tehnologia elaborrrii unei funcii:
se alege un nume sugestiv n calitate de nume al funciei; se identific parametrii de intrare. Pentru fiecare parametru identificat se alege un nume sugestiv i tipul de date al parametrului n dependen de natura datelor; se alege metoda de transmitere a parametrilor. Parametrii funciei pot fi transmii att prin valoare, ct i prin referin. Dac parametrul de intrare reprezinta o structur voluminoas, va fi mai raional transmiterea lui prin referin. se descrie lista parametrilor formali ai funciei care va conine descrierile tuturor parametrilor de intrare. se determin tipul de date al rezultatului funciei; se elaboreaz corpul funciei, presupunnd c valorile parametrilor de intrare sunt cunoscute (ei vor primi valori concrete n momentul apelului funciei n dependen de valorile parametrilor actuali corespunztori).

Observaii 1. Intrrile ntr-un subporgram i rezultatele furnizate de acesta constituie interfaa lui. Utilizatorul subprogramului trebuie s neleag numai aceast interfa, fr a fi preocupat de detaliile de realizare efectiv a subprogramului. n schimb, programatorul care proiecteaz i implementeaz subprogramele este preocupat att de realizarea interfeei, ct i de modul de implementare efectiv a operaiilor pe care subprogramul le va efectua n momentul apelului. 2. Prin delimitarea n algoritm a corpului subprogramului i a apelului lui, limbajul de programare de nivel superior realizeaz doua metode importante de abstracie: abstracia prin parametrizare; abstracia prin specificare. 3. Abstracia prin parametrizare permite, folosind parametrii subprogramului, de a prezenta un set practic nelimitat de calcule printr-un singur subprogram. Subprogramul, n acest caz, este abstracia tuturor seturilor de calcul. Fie, de exemplu, c la elaborarea unei programe apare necesitatea de sortare a componentelor unui vector. Pentru a realiza sortarea se elaboreaz o procedur P. Dac la elaborarea de mai departe a programei apare necesitatea de sortare a

166 | Bazele programrii. Curs fundamental

Abstracia n programare. Unitatea didactic 7

componentelor altui vector, programatorul va folosi aceeai procedur P. Utilizarea abstraciei prin parametrizare generalizeaz procedura de sortare i o face mai universal. 4. Abstracia prin specificare permite de a face abstracie de la procesul de calcul descris n corpul procedurii i a cunoate numai ce realizeaz procedura respectiv. Acest lucru poate fi realizat prin specificarea (descrierea verbal) a operaiilor de calcul pe care le realizeaz procedura. 5. Abstracia prin specificare permite unui programator s transmit altui programator unele rezultate ale activitii sale profesionale. Elabornd un subprogram, programatorul trebuie numai s descrie aciunile pe care le realizeaz subprogramul i s indice precis valorile pe care le poate primi i returna subprogramul. Dac subprogramul i specificaia lui este transmis unui coleg, atunci ultimul face abstracia de la realizarea ei concret; pentru a o folosi n programele sale, este de ajuns cunoaterea specificaiei. Practica programrii: 1. n realizarea unui subprogram este necesar evitarea utilizrii variabilelor globale. Prin aceasta, subprogramul va cpta un caracter general i poate fi considerat o operaie abstract ce se efectueaz asupra parametrilor i furnizeaz rezultate, care pot fi folosite n cadrul programului.

Sarcini pentru nvarea independent: 1. Indic, prin ncercuirea numrului coloanei, funcia care permite introducerea a trei numere ntregi i calculeaz suma lor.
1 Function S():Integer Var N1:Integer N2:Integer N3:Integer R: Integer Begin ReadInt(N1) ReadInt(N2) ReadInt(N3) R:=N1+N2+N3 Return R End 2 Function S (N1:Integer, N2:Integer, N3:Integer):Integer Begin ReadInt(N1) ReadInt(N2) ReadInt(N3) R:=N1+N2+N3 Return R End 3 4

Function S (N1:Integer, N2:Integer, N3:Integer):Integer Begin R:=N1+N2+N3 Return R End

Nici un rspuns nu este correct

Bazele programrii. Curs fundamental | 167

Modulul iniial. Tipuri elementare de date i structuri de control

2. Se consider urmatorul fragment: Var A, B: Integer Procedure Suma Var A: Integer Begin A:=2 B:=A+B End Begin A:=1 B:=2 Suma WriteNat(A) WriteNat(B) End Indic, n spaiul rezervat, ce se va aa pe ecran n rezultatul executrii acestui algoritm ___________________________ 3. Se consider urmatorul fragment: Var Y: Integer; Function F(var Y: Integer): Integer; Begin Y:=Y+1 Return Y End Begin Y:=6; WriteInt(Y+ F(Y)+Y) End Indic, n spaiul rezervat, ce va aa acest algoritm _________ 4. Se consider urmtoarele declaraii: Var X, Y: Real M: Integer Next: Char Procedure Test (A, B:Integer, Var C, D:Real, Var Z:Char) Indic, prin ncercuirea numrului coloanei, instruciunea de apel procedural scris correct.
1 2 3 4 Test(M, 5, Y, X, Next) Test(M, 10, 35, X, E) Test(M, 19, Y, X) Rspunsuri corecte nu snt

168 | Bazele programrii. Curs fundamental

Abstracia n programare. Unitatea didactic 7

5. Se consider urmtorul algoritm: Algoritm a1 Var X, Y, Z: Integer Procedure Suma (X,Y,Z:integer) Begin Z:=X+Y End Begin X:=1 Y:=2 Z:=0 Suma(X,Y,Z) Suma(Y,Z,X) Suma(Z,X,Y) WriteInt(Z) End Indic, n spaiul rezervat, ce valoare aeaz urmtorul algoritm ________. 6. Se consider urmtorul algoritm: Var R: Natural ProcedureP1(A: Natural,B: Natural, var C: Natural) Begin While A<>B Do If A>B Then A:=A-B Else B:=B-A End End C:=A End Begin R:=0 P1(14,35,R) WriteNat(R) End Indic, n spaiul rezervat, ce va aa pe ecran acest algoritm _______
Bazele programrii. Curs fundamental | 169

Modulul iniial. Tipuri elementare de date i structuri de control

7. Se consider urmtorul algoritm: Var R: Natural ProcedureP1(A: Natural,B: Natural, C: Natural) begin While A<>B Do If A>B Then A:=A-B Else B:=B-A End End C:=A End Begin R:=0 P1(4,3,R) WriteNat(R) End Indic, n spaiul rezervat, ce va aa pe ecran acest algoritm __ 8. Se consider urmtorul algoritm: Var R: Natural functionP1(A: Natural,B: Natural):Natural begin While A<>B Do If A>B Then A:=A-B Else B:=B-A End End Return A End Begin R:=P1(5,7) WriteNat(R) End Indic, n spaiul rezervat, ce va aa pe ecran acest algoritm __

170 | Bazele programrii. Curs fundamental

Abstracia n programare. Unitatea didactic 7

9. Se consider urmtorul algoritm: Var R: Natural Procedure P2(N: Natural) Var X:Natural Begin X:=0 While N>0 Do X:=X+N mod 10 N:=N div 10 End If N=X Then WriteString( Este palindrom) Else WriteString(Nu) End End Begin P2(121) End Indic, n spaiul rezervat, ce va aa pe ecran acest algoritm __ 10. Se consider urmtoarea procedur: Procedure P1 (F1:Char, F2:Char, Var F3:Char,Var F4:Char) Var X: Char Begin F2:=2 F3:=3 X:=F1 F1:=F4 WriteChar(F1) WriteChar(F2) WriteChar(F3) WriteChar(F4) End Indic, n spaiul rezervat, toi parametrii formali, transmii prin valoare ______. Indic, n spaiul rezervat, toi parametrii formali, transmii prin referin _____.
Bazele programrii. Curs fundamental | 171

Modulul iniial. Tipuri elementare de date i structuri de control

11. Se consider urmtorul algoritm: Var A: Char B: Char C: Char D: Char Procedure P1 (F1:Char, F2:Char, Var F3:Char,Var F4:Char) Var X: Char Begin F2:=2 F3:=3 X:=F1 F1:=F4 WriteChar(F1) WriteChar(F2) WriteChar(F3) WriteChar(F4) End Begin A:=A B:=B C:=C D:=D P1(A,B,C,D) WriteChar(A) WriteChar(B) WriteChar(C) WriteChar(D) End Indic, n spaiul rezervat, ce va aa acest algoritm ___ 12. Se consider urmtorul algoritm: Var V1: Natural V2: Natural V3: Natural V4: Natural Procedure P1(Var F1: Natural, Var F2: Natural, Var F3: Natural, Var F4: Natural) Var Begin

172 | Bazele programrii. Curs fundamental

Abstracia n programare. Unitatea didactic 7

X: Natural F2:=F1 F3:=F4 X:=F1+F2 F3:=F3+1 F4:=X+F2 WriteNat(F1) WriteNat(F2) WriteNat(F3) WriteNat(F4) Writeln End Begin V1:=1 V2:=2 V3:=3 V4:=4 P1(V1,V2,V3,V4) WriteNat(V1) WriteNat(V2) WriteNat(V3) WriteNat(V4) End Indic, n spaiul rezervat, toi parametrii procedurii transmii prin valoare ____. Indic, n spaiul rezervat, toi parametrii procedurii transmii prin referin ____. Indic, n spaiul rezervat, ce se va aa pe ecran n rezultatul executrii acestui algoritm ____. 13. Se consider urmtoarea funcie: Function F1(P: Integer): Integer Begin Return (P+1) End Indic, n spaiul rezervat, ce valoare va returna apelul F1(3) ___.

Bazele programrii. Curs fundamental | 173

Modulul iniial. Tipuri elementare de date i structuri de control

Probleme 1. Scriei o procedur care calculeaz suma i produsul a dou numere reale. 2. Scriei o procedur care determin suma divizorilor unui numr natural. 3. Scriei o procedur care determin numrul divizorilor unui numr natural. 4. Scriei o funcie logic care determin dac un character este cifr. 5. Scriei o funcie logic care determin dac un character este vocal. 6. Scriei o funcie logic care determin dac un numr natural este par. 7. Scriei o funcie logic care determin dac un numr natural este prim. List de verificare: Ai finalizat studierea unitii didactice 1. Dac ai parcurs integral ai ai neles coninutul unitii didactice, ai rezolvat sarcinile propuse pentru nvare independent, atunci autoevaluai-v, rspunznd la urmtoarele ntrebri:
Suntei capabili s: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. identificai elementele unei proceduri explicai mecanismul de apel al procedurii explicai mecanismul de apel al funciei explicai mecanismul transmiterii parametrilor prin valoare trasai un algoritm liniar explicai mecanismul transmiterii parametrilor prin referin determinai lista parametrilor formali ai procedurii determinai lista parametrilor actuali ai procedurii determinai lista parametrilor formali ai funciei determinai domeniul de vizibilitate a variabilelor globale determinai domeniul de vizibilitate a variabilelor locale elaborai proceduri elaborai funcii explicai particularitile funciilor exprimai procedura printr-o funcie echivalent exprimai funcia printr-o procedur echivalent DA NU

174 | Bazele programrii. Curs fundamental

Abstracia n programare. Unitatea didactic 7

Pentru notie
_______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________
Bazele programrii. Curs fundamental | 175

Modulul iniial. Tipuri elementare de date i structuri de control

_______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ _______________________________________________________ 176 | Bazele programrii. Curs fundamental

You might also like