Sunteți pe pagina 1din 30

Cuprins

1. Introducere2 2. Conceptul de subprogram 3 3. Declararea de funcie 5

Exerciii i probleme rezolvate ...7 Probleme propuse pentru rezolvare9 2.1 Apelul de funcie. Alctuirea programului cu funcie 11 Probleme rezolvate..14 Probleme propuse pentru rezolvare16 3.Proceduri..18 Probleme rezolvate..19 Probleme propuse pentru rezolvare21 3.1Apelul de procedur. Mecanismul de transfer al parametrilor la apel 23 Exerciii i probleme rezolvate25 Probleme propuse pentru rezolvare26 4. Domeniul de vizibilitate al variabilelor .32 Exerciii propuse pentru rezolvare.33 4.1.Comunicarea prin variabile globale.35 4.2.Comunicarea prin parametri35 4.2.1.Parametri valoare...35 4.2.2.Parameri variabila 36 4.2.3.Regula de ononimie...37 Exerciii propuse pentru rezolvare.38 Bibliografie..44

ntroducere
Lucrarea este elaborat n conformitate cu Curriculumul disciplinar de informatic i are drept scop nsuirea de ctre elevi a cunotinelor necesare pentru formarea culturii informaionale i dezvoltarea gndirii algoritmice. Modul de expunere a materialului este similar celui din manualele de informatic pentru clasele precedente. Mai nti se prezint noiunile de baz teoretice,urmate de un numr semnificativ de probleme rezolvate i propuse, avnd drept scop fixarea i exersarea unor cunotine de baz. Pentru a mri accesibilitatea lucrrii s-au rezolvat integral i comentat marea majoritate a problemelor, cu scopul ca elevii s dispun de un model de abordare logic i concis. Gradul de dificultate al problemelor n mod logic, crete progresiv, att n cuprinsul lucrrii, ct i n cadrul fiecrei teme. Tipurile de probleme propuse n lucrare solicit elevilor n primul rnd participarea activ, atitudinea creatoare, descoperire. Paii semnificativi care sunt inclui n structura acestei lucrri sunt: 1. Definirea termenilor problem, subproblem, program principal, subprogram, subprogram apel, apel de funcie, apel de procedur. 2. Elaborarea unei funcii i proceduri. 3. Elaborarea programelor cu funcii i proceduri. 4. Set de probleme rezolvate. Lucrarea, n mod necesar i culegerile de probleme s-au elaborat pentru completarea eficient a manualului de informatic existent. n ansamblu, materialul inclus n lucrare va contribui la obinerea urmtoarelor competene: - analiza structural a problemei; - divizarea problemelor complexe n probleme mai simple i reducerea lor la cele deja rezolvate; - utilizarea metodelor formale pentru elaborarea algoritmilor i scrierea programelor respective.
2

1. Conceptul de subprogram.
n practic, problemele sunt mult mai complexe dect cele didactice, pe care noi le rezolvm la coal. Pentru proiectarea unor aplicaii complexe, este necesar descompunerea problemei care trebuie rezolvat n subprobleme relativ independente, pentru fiecare dintre aceste subprobleme, scriindu-se module de program mai simple. Cum la orice firm se lucreaz n echip, modulele de program sunt de obicei implementate de mai muli programatori. Pentru ca programul s funcioneze, n final modulele de program trebuie asamblate. Prin urmare ntr-o etap prealabil implementrii, se face o analiz a problemei de rezolvat, se stabilete subprogramele i modulele de program care trebuie s rezolve aceste subprobleme, precum i modalitile n care acestea trebuie s comunice ntre ele. n programare des e ntlnit cazul cnd n timpul ndeplinirii unui program pe parcurs e necesar de apelat unele i aceleai calcule, dar pentru date diferite. Pentru a exclude repetarea acestor nscrieri i pentru ca programul s fie mai clar se permite ca prile ce se repet s alctuiasc un program aparte ce se poate apela de mai multe ori dup necesitate. La predarea acestei teme pentru analiz se vor propune urmtoarele 2 probleme: 1. Fie dat un patrulater convex cu lungimile celor 4 laturi i una din diagonale. S se calculeze aria acestui patrulater. Evident diagonala mparte patrulaterul n 2 triunghiuri. 2. Fie date 5 numere ntregi. De gsit elementul maximal din aceste numere. Ambele probleme pot fi descompuse n subprobleme mai simple: - n primul caz - subproblema aria triunghiului dup formula Heron.
-

n cazul al doilea subproblema maximul din 2 numere. Pentru rezolvarea ntregii probleme e necesar s se alctuiasc algoritmul

principal n care pentru rezolvarea subproblemelor se folosesc apelurile subalgoritmilor.


3

Algoritmul problemei 1.
1. 2.

Se calculeaz aria triunghiului I, care e compus din laturile a, b, c. Se calculeaz aria triunghiului al II, care e compus din laturile d, e, c. b a I e d II c

3. Se adun ariile triunghiurilor I i II.

Algoritmul problemei 2, varianta I.


1. 2. 3. 4. 5.

Se citesc datele de la tastier a, b, c, d, e. Se gsete maximul din primele dou numere a, b rezultatul va fi n m. Acest rezultat se compar cu c rezultatul va fi n m. Rezultatul dat se compar cu d cel mai mare fiind n m. Se compar m cu e i rezultatul final n m.

Algoritmul problemei 2, varianta II.


1. 2. 3. 4. 5.

Se citesc datele de la tastier a, b, c, d, e. Se gsete maximul din primele dou numere a, b, rezultatul va fi n m. Se gsete maximul din primele dou numere c, d, rezultatul va fi n m1. Se compar e cu m1, rezultatul va fi n m1. Se compar m cu m1, rezultatul final va fi n m1. Se observ c prima problem se reduce la subproblema determinarea ariei

triunghiului dup formula Heron, iar problema a doua la subproblema gsirii maximului din 2 numere. La nivelul limbajului de programare acest lucru se realizeaz prin folosirea de subprograme. n limbajul Pascal exist 2 tipuri de subprograme: funcii i proceduri. Vom utiliza subprogramele de tip funcie atunci cnd avem de calculat la rezultat o singur valoare. n cazul n care trebuie s obinem mai multe rezultate vom utiliza subprograme de tip procedur, sau n funcie de modul de folosire n program.
4

Orice program poate conine mai multe proceduri sau funcii. Procedurile i funciile se definesc n partea declarativ a programului principal, imediat dup declaraiile de variabile. Variabilele declarate n programul principal vor purta numele de globale. ndeplinirea programei se ncepe cu citirea datelor din programul principal, urmnd ca dup necesiti s se apeleze subprogramul. Subprogramul se ndeplinete i rezultatele sale snt transmise programului principal care continue s se ndeplineasc. Orice subprogram la rndul su poate conine subprograme. Subprogramul ca si orice program Pascal e alctuit din antet, parte declarativ si parte executabil. variabile

2. DECLARAREA DE FUNCIE
Declararea unei funcii sau proceduri const in scrierea ei efectiv. n cadrul acestei scrieri se respect, n linii mari, modalitatea de scriere a unui program. n plus, va aprea o list de parametri, prin care se realizeaz comunicarea cu exteriorul. Declaraia de funcie descris cu ajutorul unei diagrame de sintax: Declaraie de funcie
Antet de funcie ; begin instruciuni end;

Antetul funciei conine n aceast ordine: cuvntul cheie function, denumirea funciei (un identificator), lista parametrilor cu tipul lor i tipul valorii calculate de respectiva funcie. Exemple de antet de funcii: Parametrii declarai n antetul funciei poarta numele de parametri formali. Diagrama de sintax a antetului de funcie este:

Antet de funcie
Function id ( id
,

tip

tip

Dup antet urmeaz partea de declaraii. Variabilele declarate aici poart numele de variabile locale i ele nu vor fi cunoscute n exteriorul funciei. Partea de instruciuni a funciei este cuprins ntre cuvintele begin i end. Spre deosebire de programul principal, aici, dup cuvntul end nu se pune punct ci punct i virgul. Cu ajutorul instruciunilor cunoscute ale limbajului, se va programa algoritmul de rezolvare a problemei. Pentru ca valoarea calculat s poat fi transmis n programul principal (la locul n care s-a apelat respectiva funcie), vom utiliza n cadrul prii de instruciuni, identificatorul corespunztor denumirii funciei. Acesta se va comporta ca o variabila, ce apare cel puin o dat n partea stng a instruciunii de atribuire. Deci, rezultatul funciei se va pstra n numele funciei. Anumite funcii sunt deja cunoscute de limbaj, purtnd denumirea de funcii predefinite. Acestea nu mai trebuiesc declarate. Spre exemplu: calcularea valorii absolute a unui numr ntreg se execut la apelul funciei cu denumirea abs. Observaii: 1. Tipul parametrilor ct i tipul rezultatului pot fi standard sau pot fi definite anterior. Rezultatul funciei este reprezentat printr-o unic valoare ce este de un tip simplu. 2. n corpul funciei trebuie s existe cel puin o instruciune de atribuire prin care s se transmit numelui funciei valoarea rezultatului. 3. Variabilele globale, declarate n programul principal pot fi utilizate n interiorul oricrei funcii. n problemele analizate anterior vom alctui programul i funcia la subproblema de baz: Subproblema 1 - calcularea ariei unui triunghi dup formula Heron.
6

Subproblema 2 - gsirea maximului din 2 numere . O variant de rezolvare a subproblemei 1 i respectiv funcia:

* * Exerciii i probleme rezolvate * *


1.

Elaborai o funcie care returneaz lungimea cercului cu raza r, r R. temperatura exprimat n grade Fahrenheit. Amintim, c relaia dintre temperatura Celsius i temperatura Fahrenheit este dat de formula T0Fahrenheit = 9/5 t0Celsius + 32

2. Elaborai o funcie care cunoscnd temperatura n grade Celsius returneaz

3. Elaborai o funcie care returneaz numrul de caractere ce difer de spaiu dintr-un ir de caractere Pentru a folosi un identificator de tip structurat n calitate de parametru formal acest identificator e necesar de declarat n blocul de declaraii: 4. Fie dat tabloul a[1..n], unde n < 100. Alctuii o funcie ce determin elementul minim din tablou.

** Probleme propuse pentru rezolvare


1. Elaborai o funcie care returneaz maximul din trei numere ntregi.

**

2. Elaborai o funcie care returneaz media aritmetic a patru numere ntregi.


3.

Elaborai o funcie care, cunoscnd lungimile a, b, c ale celor trei laturi, returneaz perimetrul triunghiului. Se consider, c a, b, c R.

4.

Elaborai o funcie care returneaz valoarea logic true, dac numerele reale a, b, c, pot fi interpretate ca lungimile de laturi ale unui triunghi i false - n caz contrar.

5. Elaborai o funcie PASCAL care calculeaz lungimea diagonalei unui ptrat cu latura a.
6.

Elaborai o funcie care returneaz aria unui dreptunghi cu lungimile laturilor a i b, a, b R.

7.

Elaborai o funcie care calculeaz distana dintre dou puncte ce au coordonatele carteziene (x1, y1), (x2, y2), x1, y1, x2, y2 R.
7

8. Elaborai o funcie care cunoscnd temperatura n grade Kelvin, returneaz temperatura exprimat n grade Celsius. Amintim, c relaia dintre temperatura Celsius i Kelvin este dat de formula: T0Celsius = T0Kelvin + 273, 16. 9. Elaborai o funcie care cunoscnd lungimea msurat n centimetri returneaz lungimea exprimat n oli (1 ol = 2,54 cm). 10.Elaborai o funcie care returneaz cifra din poziia unitilor din scrierea unui numr ntreg. 11. Elaborai o funcie care returneaz numrul de spaii dintr-un ir de caractere.
12.

Elaborai o funcie care returneaz numrul de rdcini reale ale ecuaiei ax2+ bx + c =0 cu coeficienii reali.

13. Elaborai o funcie PASCAL care returneaz valoarea funciei logice y = (x1 x2) & (x1 x3). 14. Elaborai o funcie PASCAL care returneaz valoarea funciei logice y = (x1 x2) & (x2 x3). 15. Elaborai o funcie PASCAL care returneaz valoarea funciei y = sin (3x2 + 5x +8), x, y R. 16. Elaborai o funcie PASCAL care returneaz valoarea funciei z = ln (x2 + 2y2 +1), x, y, z R. 17.Fie dat un tablou liniar a[1..n], n<=100. Elaborai o funcie care determin:
a)

elementul minim din tablou; minim;

b) locul elementului minim din tablou, n tablou exist un singur element c) produsul elementelor negative din tablou; d) suma elementelor pozitive din tablou; 18. Fie dat un tablou bidimensional a[1..n, 1..m], n, m <= 10. Elaborai o funcie care determin: a) suma elementelor mai mici ca 10; b) numrul elementelor negative de pe diagonala principal; c) minimul elementelor din tablou; d) suma elementelor mai jos de diagonala principal;
8

e) numrul de elemente pozitive din tablou.


19. a)

Se d irul S. Determinai: cte litere diferite de m sunt n ir; cte litere de a i b sunt n ir; cte silabe de ma sunt n ir;

b) cte vocale sunt n ir;


c) d)

e) cte cuvinte sunt n textul dat; f)cte propoziii sunt n textul dat. Fiecare propoziie se termin cu (.).

2.1 APELUL DE FUNCIE. ALCTUIREA PROGRAMELOR CU FUNCII


Apel de funcie descris cu ajutorul unei diagrame de sintax: Apel de funcie

Identificator (din progr. principal)

: =

Parametri actuali Identificator (nume de funcie) (

Un apel de funcie se realizeaz din cadrul unei expresii, n particular expresia din dreapta semnului de atribuire. Parametri folosii n apelul funciei sau procedurii se numesc parametri actuali. Acetia sunt de obicei variabile sau expresii, iar lista parametrilor actuali trebuie s coincid ca numr, ordine i tip de dat cu lista parametrilor formali din declaraia de funcie. n problemele analizate anterior vom alctui un program cu funcii. n programul de mai jos se folosete funcia alctuit anterior. Putem sintetiza astfel aciunile efectuate la un apel de funcie. Pas 1. Se execut programul principal pn la primul apel de funcie. Pas 2. Execuia programului principal este ntrerupt.

Pas 3. Se pun n coresponden, de la stnga la dreapta parametrii actuali a funciei cu parametrii formali. Spunem c transferul parametrilor se execut prin valoare. Urmrii pe figur transferul prin valoare pentru datele din primul apel. Pas 4. Procesul continu cu executarea instruciunilor cuprinse n cadrul acelei funcii.

Pas 5. Se revine n programul principal. Valoarea calculat la pasul 4 apare n locul apelului funciei.

Pas 6. Se continu execuia n programul principal pn la urmtorul apel de funcie. Pas 7. Execuia programului principal este ntrerupt.

Pas 8. Valorile calculate ale parametrilor actuali sunt transferate n parametri formali corespunztor ordinii

Pas 9. Coincide cu Pas 4. Pas 10. Se revine n programul principal. Valoarea calculat la pasul 9 apare n locul apelului n S2. Pas 11. Se continu execuia n programul principal pn la sfrit.

Program Patrulater a b c d e s1 s2 s s1:=Heron(a, b, e)


10

Function Heron x y z p Heron

Program Patrulater a b c d e s1 s2 s s2:=Heron(d, e, c)

Function Heron x y z p Heron

**

Probleme rezolvate **

1. Fie date 5 numere ntregi. Elaborai un program ce determin elementul maxim. 2. Elaborai un program folosind o funcie care calculeaz media aritmetic a elementelor din tabloul A[1..n] n<=100, de numere ntregi. n funcie se calculeaz suma elementelor. 3. Elaborai un program care calculeaz suma de pe fiecare linie din tabloul bidimensional A[1..n, 1..m] unde n, m <=10. n funcie calculai suma elementelor pozitive , rezultatele de nscris ntr-un tablou liniar B.
4.

Se d irul S. Elaborai un program folosind o funcie care numr cte litere de a , b i c separat sunt n irul dat.

**

Probleme propuse pentru rezolvare


11

**

1. Se consider antetul: Care din apelurile ce urmeaz snt corecte: a) ); F a ( b) ); F 4 ( c) 4 F ) ( ; 4 3 , d) 4 F ) ( ; e) ); F a (


2.

Elaborai un program folosind o funcie care calculeaz perimetrul a trei triunghiuri cu lungimile x1, y1, z1, x2, y2, z2 i x3, y3, z3. n funcie se calculeaz perimetrul unui triunghi cu laturile a, b, c.

3. Se consider 5 numere reale. S se determine numrul mai mic, utiliznd funcia care determin numrul mai mic din trei numere. Elaborai programul.
4.

Elaborai un program folosind o funcie care calculeaz lungimea cercurilor cu razele r1, r2, r3; r1, r2, r3 R. n funcie calculai lungimea cercului.

5. Elaborai un program folosind o funcie care calculeaz perimetrul triunghiului fiind date coordonatele carteziene a trei puncte din plan ce formeaz triunghi: (x1,y1); (x2, y2); (x3, y3). n funcie calculai distana dintre dou puncte. 6. Se consider tabloul a[1..n], n<=100 de numere ntregi. Elaborai programul ce calculeaz numrul de elemente mai mare ca media aritmetic a tuturor elementelor din tabel: n funcia _1 calculai suma elementelor; n funcia _2 calculai numrul de elemente mai mari ca media aritmetic. 7. Se consider tabloul a[1..n], n<=100 de numere ntregi. Elaborai un program care calculeaz cte elemente maxime sunt n tablou. n funcia _1 determinai elementul maxim. n funcia _2 determinai de cte ori se ntlnete elementul maxim. 8. Se consider tabloul a[1..n], n<=100 de numere ntregi. Elaborai un program ce efectueaz interschimbarea dintre elementul minim i primul element. Toate elmentele snt distincte. n funcia _1 - determinarea elementului minim n funcia _2 determinai poziia elementului minim.

12

9.

Se consider tabloul t[1..n, 1..n], n<=10 de numere ntregi. Elaborai un program care calculeaz media aritmetic a elementelor de pe diagonala principal i media aritmetic de pe diagonala secundar. n funcia se determin media aritmetic.

10. Se consider tabloul t[1..n, 1..n], n<=10 de numere ntregi. Elaborai un program ce determin suma dintre sumele pe fiecare coloan. 11. Se consider tabloul t[1..n, 1..n], n<=10 de numere ntregi. Elaborai un program ce determin diferena dintre cea mai mare medie aritmetic de pe fiecare coloan i cea mai mic medie de pe fiecare linie.

3. PROCEDURI
n limbajul PASCAL, funciile sunt asemntoare funciilor din matematic. Totui, funciile prezint o anumit limitare, au ca rezultat o singur valoare. Deoarece de multe ori este necesar obinerea ca rezultat a mai multor valori, limbajul Pascal permite utilizarea unui al doilea tip de subprogram, procedur. Procedura poate s ntoarc nici unul, unul sau mai multe rezultate. Spre deosebire de funcii, procedurile furnizeaz rezultate prin intermediul parametrilor i nu prin numele asociat. Pn acum s-au folosit deja anumite proceduri predefinite, cu numr variabil de parametri, cum ar fi Read i Write. Diagrama de sintax a procedurii este urmtoarea:
antet de procedur

begin

instruciuni

Declaraie de procedur

end;

procedure

Antet de procedur

id

var

id

13

tip : )
,

Exemple de antet de procedur: Parametri formali din procedur pot fi de 2 tipuri: parametri valoare i parametri variabil. Parametrii ce servesc pentru transmiterea de valori din programul principal n procedur se numesc parametri valoare. Aceti parametri mai pot fi numii parametri de intrare. n cazul unui parametru valoare drept parametru actual poate fi utilizat orice expresie de tipul respectiv, n particular o constant sau o variabil. Modificarea parametrilor valoare nu se transmit n exteriorul subprogramului. Parametrii ce servesc pentru ntoarcerea rezultatelor din procedur n programul principal se numesc parametri variabil. n lista de parametri formali declararea acestor parametri este precedat de cuvntul rezervat var. n cazul unui parametru variabil drept parametri actuali pot fi utilizate numai variabile. Evident, modificrile parametrilor vor fi transmise programului apelant. Transferul prin referin const n comunicarea adresei de memorie a acestei variabile, astfel nct orice modificare ulterioar a parametrului formal se va produce de fapt asupra parametrului actual. Aceti parametri se mai numesc parametri de intrare ieire. Analizm urmtoarele probleme:

**
1 Luni 2 Mari 3 Miercuri

Probleme rezolvate

**

1. Se consider urmtoarea numerotare a zilelor sptmnii: 4 - Joi 5 - Vineri 6 Smbt 7 Duminic

Elaborai o procedur, care cunoscnd numrul afieaz la ecran denumirea zilei. 2. Elaborai o procedur care afieaz la ecran tabelul de adevr a funciei logice y=x1 & x2.
14

3.

Se d tabelul A[1..n], n<=100, de numere ntregi. Elaborai o procedur care efectueaz deplasarea spre stnga cu o poziie a elementelor a[2], a[3], a[n]. Primul element va fi nscris pe ultima poziie.

4. Se d mrimea tabelar a[1..n, 1..n] de numere ntregi, unde n<=10. Elaborai o procedur ce va aduna la elementele fiecrui rnd, elementul, ce aparine acestui rnd i diagonalei principale.

**
2.

Probleme propuse pentru rezolvare

**

1. Elaborai o procedur care efectueaz interschimbarea a dou numere ntregi. Elaborai o procedur care, cunoscnd numerele reale a i b, afieaz unul din mesajele ce urmeaz: APROAPE EGAL MAI MIC MAI MARE y=x 5. Elaborai o procedur care afieaz la ecran tabelul de adevr a funciei logice y = x1 & x2. 6. Elaborai o procedur care afieaz la ecran tabelul de adevr a funciei logice y = x1 x2. 7. Se consider urmtoarea numerotare a lunilor anului: 1 ianuarie 4 aprilie 7 iulie 10 octombrie anotimpului respectiv. 8. Se d un ir de caractere. Alctuii o procedur care calculeaz numrul de vocale ntr-un ir de caractere. 9. Se consider declaraiile
15

- dac a-b 0,01 - dac a-b < -0,01 - dac a-b > 0,01.

3. Elaborai o procedur care afieaz la ecran tabelul de adevr a funciei logice

2 februarie 5 mai 8 august 11 noiembrie

3 martie 6 iunie 9 septembrie 12 decembrie

Elaborai o procedur care, cunoscnd numrul lunii, afieaz la ecran denumirea

Elaborai o procedur care: a) Determin suma elementelor de pe locurile pare i produsul celor de pe locurile impare; b) Modific elementele tabloului astfel : mrete cu 5 uniti fiecare element din tablou; c) Modific elementele tabloului astfel :fiecare element al tabloului e mrit cu valoarea primului element ; d) Determin elementul maxim i locul lui; e) Permut ciclic cu 2 poziii la dreapta toate elementele. Exemplu: n=6; Tabloul dat : 3 4 9 2 8 5 ; Tabloul dup o permutare: 5 3 4 9 2 8 ; dup doua permutare: 8 5 3 4 9 2 . 10. Se d irul S. Elaborai o procedur care: a) dup fiecare caracter din ir adaug caracterul w; b) substituie toate vocalele prin w; c) radiaz litera w din text; 11. Se consider declaraiile Elaborai o procedur care: Modific elementele tabloului n felul urmtor elementele negative le nlocuete cu - 1, iar cele pozitive cu 0 (zero);

3.1 APELUL DE PROCEDUR. MECANISMUL DE TRANSFER AL


PARAMETRILOR LA APEL

Apelul unei proceduri se execut asemntor cu cel al unei funcii. ntre parametrii actuali i parametrii formali exist aceiai coresponden. Parametrii actuali trebuie s corespund cu cei formali ca numr, ordine i tip. Apelul de procedur descris cu ajutorul unei diagrame de sintax.
identificator nume de procedur ( parametri actuali

, 16

S urmrim pas cu pas pe baza a 2 exemple simple ce se ntmpl n fiecare moment al execuiei unui program care conine un apel de procedur. Pentru identificarea aciunilor numerotm liniile programului. Exemplul 1. {1} M P r o g {2} var c , {4} P var i n r {6} i t e > h {7} ; end {15} . end Execuia ncepe astfel: prin procedur.

, f

1. Se aloc memorie pentru programul dat pentru variabile globale declarate i

Program maxim a b c

m m1 m2 Procedure max2 (x, y: integer; var max: integer) x y

2. Se introduc datele de la tastier n memorie.

Program maxim a b c d m m1 m2

Procedure max2 (x, y: integer; var max: integer); x y 17

max2(a,b,m)

3. Are loc apelul de procedur i execuia programului principal se ntrerupe.

Program maxim a3 b4 c9

d2

m 4

m1

m2

Procedure max2 x y

max2(a,b,m) 4. Are loc transferul parametrilor transferul prin valoare. Pentru parametrii modificabili (variabil) se execut aa numitul transfer prin adres (referin). 5. Urmeaz executarea instruciunilor aflate n procedur. 6. Are loc revenirea n programul principal la urmtoarea instruciune de dup apelul de procedur. 7. Se repet punctele 3, 4, 5, 6 la fiecare urmtor apel de procedur.

**

Exerciii i probleme rezolvate

**

1. Se consider declaraiile Elaborai un program care efectueaz interschimbarea dintre elementul minim al tabloului i elementul din colul stng de sus: n procedura citire introducerea tabloului; n procedura minim gsirea elementului minim i locul lui; n procedura modificare interschimbarea elementelor;
18

n procedura Tablou afiarea tabloului.

**
a)1878 b)68 c)12

Probleme propuse pentru rezolvare

**

1. Ce va tipari urmatorul program:

d)nici un raspuns 2. Ce va tipari programul urmator? a) 87 b)82 c)107 d)nici un raspuns anterior nu este corect 3. Ce va afisa urmatorul program : a)0363153159 b)0363036369 c)0303163169 d)0003153159 4.Ce va afisa programul : a)1.0 3.1 b)1.0 2.0 c)0.0 2.0 d)1.0 0.0 Ce va afisa programul dat n cazul nlocuirii antetului de procedura p cu fiecare din declaratiile ce urmeaz : a)procedure p(var b,c:integer); b)procedure p(b,c:integer); c)procedure p(b:integer; var c:integer); d)procedure p(var b:integer; c:integer); 6. Ce va afia urmtorul program:
19

7. Ce va afisa urmatorul program: 8. Elaborai programul. Fie date segmentele a, b, c i d. Pentru orice triplet din aceste segmente din care se poate construi triungi, determinai aria acestui triungi. (Elaborai procedura, aria (x,y,z) ce determin aria triunghiului cu laturile x, y, z dac astfel de triunghi exist). 9. Se consider declaraiile: Elaborai un program folosind proceduri care modific elementele tabloului astfel: adaug la fiecare element de pe locurile pare numrul z. n procedura citire introducerea tabloului; n procedura modificare modificarea tabloului; n procedura tablou afiarea tabloului. 10. Se consider declaraiile: Elaborai un program care modific elementele tabloului astfel: elementele de pe locurile impare se nlocuiesc cu 100. n procedura citire introducerea tabloului; n procedura modificare modificarea tabloului; 11. Se consider declaraiile: Elaborai un program care modific elementele pozitive cu media aritmetic a tuturor elementelor. n procedura citire citirea tabloului; n procedura medie calcularea mediei aritmetice a tabloului. 12. Se consider declaraiile: Elaborai un program care modific elementele tabloului n felul urmtor: elementele negative se nlocuiesc cu elementul maximal din tablou. n procedura citire citirea tabloului; n procedura maxim gsirea elementului maximal din tablou; n procedura modificare modificarea elementelor; n procedura nou afiarea tabloului nou. 13. Se consider declaraiile:
20

Elaborai un program care modific elementele n felul urmtor: elementele mai mici ca 10 se nlocuiesc cu suma elementelor din tablou, iar cele mai mari ca 10 cu produsul tuturor elementelor. 14. Se consider declaraiile: Elaborai un program care modific elementele n felul urmtor elementele maxime se nlocuiesc cu suma elementelor pozitive. 15. Se consider declaraiile: Elaborai un program care modific elementele n felul urmtor: elementele de pe diagonala secundar s fie nlocuite cu zero iar cele mai sus de ea cu 1. 16. Se consider declaraiile: Elaborai un program folosind proceduri care efectueaz interschimbarea n opus a elementelor situate deasupra diagonalei principale. 17. Se d tabloul a[1..n], n<=100. Elaborai un program de permutare ciclic a elementelor tabloului cu k poziii la dreapta. De exemplu pentru tabloul a cu elementele: 5 0 9 7 3 6 4 8 i k=3 n rezultat vom obine tabloul A: 6 4 8 5 0 9 -7 3 18. Se d tabloul a[1..10,1..10]. Elaborai un program cu proceduri care afl diferena dintre cea mai mare medie aritmetic de pe fiecare linie i cea mai mic medie aritmetic de pe fiecare coloan. 19. Se d tabloul a[1..n,1..m]. Elaborai un program ce va determina n cte rnduri exist mcar un element egal cu zero. 20. Se d mrimea tabloului a[1..n,1..m], n, m <=10. Elaborai un program cu proceduri care va completa mrimea tabelar b[1..n,1..m], calculnd elementele dup formula b[i, j]=a[i, j]*a[i, i]. 21. Se d mrimea tabelar a[1..n,1..m], n, m<=10. Elaborai un program care va determina elementele maximale de pe fiecare linie i va calcula suma elementelor de pe perimetrul tabloului. 22. Se consider mrimea tabloului a[1..n], n<=100 de numere reale, unde N este un numr par. Elaborai un program care:
21

schimb cu locurile elementele a[1] i a[2], a[3] i a[4], . . . , a[n-1] i a[n] apoi adun la elementele din partea stng a primului element maxim din tabel valoarea R, iar la cele din partea dreapt valoarea t. Toate elementele maxime rmn fr modificri. Intrare: numrul N, elementele tabloului a,valorile R i T se citesc de la tastier. Ieire: locurile modificate n conformitate cu punctele a) i b) se vor afia pe ecran.

4. DOMENIUL DE VIZIBILITATE A VARIABILELOR


Utiliznd observaia c un subprogram poate fi definit i n interiorul unui alt subprogram , se pot descrie dou modaliti de structurare a unui program Pascal PASCAL.

antet program declaraii globale antet subprogram_1 declaraii locale 1 instruciune compus 1 antet subprogram_2 declaraii locale 2 instruciune compus 2

. antet subprogram_N declaraii locale N instruciune compus N


22

Instruciune compus

n acest caz am definit fiecare subprogram relativ independent de celelalte, ceea ce conduce, potrivit principiului general c orice entitate Pascal care este utilizat trebuie s fie cunoscut, deci definit, n momentul utilizrii , la observaia urmtoare: din subprogramul k pot fi apelate toate subprogramele anterioare (subprogramul_1 . . . subprogramul_k deci inclusiv i el nsui). Aceast modalitate de definire a subprogramelor pot fi utilizate i combinat. O variant ar fi cazul cnd subprogramele ce sunt incluse n programul principal pot conine la rndul lor alte subprograme. Apare ns o nou problem: unde sunt vizibile variabilele, n ce parte a programului sunt recunoscute, n care din subprogramele definite se pot utiliza ele? Ce nseamn domeniu de divizibilitate a variabilelor? Prin domeniu de vizibilitate a unei variabile nelegem zona de program n care variabila este recunoscut i se pot efectua cu ea operaii. ntr-un sens mai larg, domeniu de divizibilitate a unui identificator este totalitatea zonelor din program n care acest identificator este cunoscut. Regulile de vizibilitate sunt: o variabil este vizibil n tot programul din momentul declarrii ei o variabil local este recunoscut din momentul declarrii ei, este vizibil numai n interiorul subprogramului n care este definit, deci i n interiorul subprogramelor definite n acest subprogram; variabila local este invizibil (nerecunoscut) n exteriorul subprogramului n care este declarat. Analiznd acest mod de structurare a unui subprogram Pascal descrise anterior, se poate spune: n primul caz, numit dezvoltare ascendent a programului, variabilele globale sunt vizibile din momentul declarrii lor n toate subprogramele n care nu exist variabile locale cu acelai nume; variabilele locale sunt vizibile din momentul declarrii lor numai n interiorul programului n care au fost declarate.
23

n cel de-al doilea caz, numit dezvoltare descendent a programului, variabilele globale sunt recunoscute n acelai mod; n schimb variabilele locale sunt vizibile din momentul declarrii lor, att n interiorul subprogramlui n care au fost declarate, ct i n toate subprogramele declarate n subprogramul respectiv.

**

Exerciii propuse pentru rezolvare

**

1.Structura bloc a unui program este ilustrat mai jos: Program main; var a,b:integer; Care din urmatoarele asertiuni sunt adevarate ? a) n bloc1 sunt vizibile variabilele a,b,c(char), d,x,y b) n bloc2 sunt vizibile variabilele a,b,x,c(char)

c) n bloc3 sunt vizibile variabilele a,b,c(char)


d) n bloc4 sunt vizibile variabilele a,b,x,y 2.Structura bloc a unui program este ilustrat mai jos: Care din urmatoarele asertiuni sint adevarate ? a)programul principal poate apela p1,p2 si f b)procedura p1 poate apela p1 si f c)procedura p2 poate apela p1 si p2 d)functia f poate apela p1,p2 si f

4.1 Comunicarea prin variabile globale


Un identificator global, relativ o procedur, este declarat n afara ei ntr-un program funcie/procedur ce o cuprinde, fr a fi redeclarat n ea. El este cunoscut n procedur cu semnificaia dobndit n afara ei, constituind astfel un mijloc de comunicare de la locul de apel la procedura apelat. Comunicarea n sens invers este de asemenea asigurat: efectele asupra unui obiect global referit n procedur/funcie devin cunoscute n afara acesteia. Acest efect se numete efect colateral.
24

4.2 Comunicarea prin parametri


O list de identificatori locali ai funciei/proceduri specificai n antetul acesteia drept parametri formali, este pus n coresponden biunivoc cu o list de parametri actuali specificat n apel. Corespondena se realizeaz ntre parametrii din aceiai poziie n cele dou liste, cei actuali avnd tipuri identice cu cei formali corespunztori. La execuia apelului, valorile parametrilor actuali sunt substituite parametrilor formali. Exist patru feluri de parametri formali: - parametri valoare - parametri variabil - parametri funcie - parametri procedur

4.2.1 Paramteri valoare


Parametri valoare reprezint mijlocul comun n Pascal pentru comunicarea datelor de la locul de apel spre funcia/procedura apelat. Un astfel de parametru se declar n antetul funciei/proceduri prin numele su urmat de specificaia de tip. De exemplu: procedure g(n:integer; x,y:real). Parametru actual corespunztor este o expresie a crei valoare are tipul celui formal. Exemplu: apelurile urmtoare sunt corecte: Substituia implicat de parametri valoare are loc conceptual astfel: la apelul funciei/proceduri: se aloc spaiu pentru parametrul formal, se evalueaz expresia parametrului actual i valoarea rezultat se depune n acest spaiu drept valoare curent a parametrului formal. Aceasta capt de acum statut de variabil local. El poate fi referit n funcie/procedur, valoarea sa poate fi modificat aici, fr vreun efect n afara ei. Valoarea dobndit de parametrul formal se pierde la revenirea n program.
25

Observaii: 1. Aceast substituie a parametrilor formali valoare este cunoscut sub numele de transmitere prin valoare. 2. Fiierele sau variabilele structurate cu componente fiiere nu pot fi parametri actuali valoare.

4.2.2 Parametri variabil


Parametri variabil reprezint mijlocul principal de recuperare a rezultatelor din procedura apelat.Parametrul formal se declar n antet i are n fa cuvntul cheie var. Exemplu: Procedure s(x:real; var y, z: integer) unde x parametru valoare y,z parametri variabil Parametru actual corespunztor unui parametru formal variabil este un identificator de variabil (simpl, component a unui tablou, a unei nregistrri, sau a unei combinaii a acestora). Substituia implicat de parametri variabil const n scrierea locaiei parametrului actual cu parametru formal corespunztor, astfel nct, pe durata apelului, orice referire la parametru formal este de fapt o referire la parametru actual respectiv. Astfel, o atribuire asupra parametrului formal devine cunoscut n afara procedurii prin schimbarea valorii parametrului actual. Observaii: 1. Acest mod de substituie este cunoscut i sub numele de transmitere prin referin(adres). Toate calculele de adrese se fac la intrarea n procedur.

4.2.3 Regula de omonimie.

26

Deseori n program apare urmtoarea situaie: o variabil local are acelai nume ca al unei variabile globale. Este permis astfel de declaraie? Ce se ntmpl n astfel de cazuri? Regula de omonimie: n interiorul unui subprogram, variabilele locale au prioritate fa de variabilele omonime declarate n exteriorul subprogramului (variabilele globale sau cele locale unui subprogram conine definiia subprogramului respectiv). Prin urmare, n cazul n care n interiorul unui subprogram am declarat o variabil local cu acelai nume ca al unei variabile globale, variabila local ascunde temporar (pe parcursul execuiei blocului n care este declarat) variabila global cu acelai nume. Este bine s folosim variabilele omonime? Rspunsul nu este foarte simplu. Pe de o parte, prin folosirea unei astfel de variabile locale, subprogramul se nelege, eventual mai uor, pe de alt parte, se pot face uor confuzii ntre variabilele globale i cele locale. Exemplu: Programul urmtor ilustreaz comunicarea prin variabile globale, parametri valoare i prin parametri variabil. Relativ la procedura Q, identificatorul x este global, y este parametru valoare iar z parametru variabil. n program x, y, z primesc valorile 0 care sunt afiate 0, 0, 0. Prin execuia apelului Q(x, y), variabilele desemnate prin identificatorii x (global) primete valoarea 1, y (din procedur ca parametru valoare) primete valoarea 2, i z (din procedur ca parametru variabil) primete valoarea 3. Ca rezultat n procedur variabilile x,y,z au valorile 1 2 3. La revenirea n program, variabila cu nume x (global) pstreaz valoarea 1 dobndit n provedur; variabila y (global) obine valoarea 3, iar z (global) are valoarea 0. Valorile lui x, y, z din program sunt afiate 1 3 0.

** Exerciii propuse pentru rezolvare **


1. Ce va tipari urmatorul program: a)1 20
27

b)1 2 c)10 20 d)nici un raspuns anterior nu este corect 2. Ce valoare afiseaza programul urmator? a) 7 b) 0 c)5

3. Ce va tipari urmatorul program? a) e bine b)nu e bine c)programul are erori de sintaxa d) nici un raspuns anterior nu este corect 4. Determini ce va tipri urmtorul program? a) 5678 1234 b) 6638 6634 c) 6678 6234

d)nici un raspuns anterior nu este corect. 5. Ce va afisa programul urmator? end. 6. Ce va afisa urmatorul program? 7. Ce va afisa programul : end. a)4122 4412 8244 8124 b)4422 4112 8244 8124 c)4422 4112 4244 8128 d)4122 4112 8244 8128

8. Fie dat programul: Determinati care din urmatoarele apeluri sint corecte si calculati valorile variabilelor a si b pentru fiecare apel corect.
28

9. Fie dat programul: Ce va afisa programul dat n cazul nlocuirii antetului de procedura p cu fiecare din declaratiile ce urmeaz : 10. Fie dat programul. Ce va afisa urmatorul program: 11. Fie dat programul. Ce va afisa urmatorul program:

29

BIBLIOGRAFIA:
1. BAC 2002,2003. Teste la informatic, Lyceum 2. A.Grimalschi. Informatica.Limbajul Pascal. Chiinu 1999. Manual cl IX-XII. 3. T.Blnescu. S.Gavril . a. Pascal i Turbo Pascal. Vol. I, II. Editura tehnica Bucureti,1992. 4. Manualul nceptorului n programare Pascal. Cluj-Napoca 19955. I.Creang-Andrunache. Informatica probleme Pascal. Ed.Paragon, Chiinu 2001. 6. Em.Cerchez. Informatica, manual cl X. ,Polirom ,Romnia 2000. 7. Eu.Kalisz. Iniiere n Turbo Pascal, Ed.Teora 1998. 8. Fl.Munteanu. Programarea calculatoarelor cl X-XII Editura didactic i pedagogic Bucureti 1998. 9. Ion Ftu. Teste gril de programare n limbajele Pascal i C. Editura didactic i pedagogic Bucureti 1995. 10... . 1987 11.... . 1989. 12.. . . 1987.

30