Sunteți pe pagina 1din 44

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. Se calculeaz aria triunghiului I, care e compus din laturile a, b, c.
2. Se calculeaz aria triunghiului al II, care e compus din laturile d, e, c.
3. Se adun ariile triunghiurilor I i II.
b
a

c
e

II

d
Algoritmul problemei 2, varianta I.
1. Se citesc datele de la tastier a, b, c, d, e.
2. Se gsete maximul din primele dou numere a, b rezultatul va fi n m.
3. Acest rezultat se compar cu c rezultatul va fi n m.
4. Rezultatul dat se compar cu d cel mai mare fiind n m.
5. Se compar m cu e i rezultatul final n m.
Algoritmul problemei 2, varianta II.
1. Se citesc datele de la tastier a, b, c, d, e.
2. Se gsete maximul din primele dou numere a, b, rezultatul va fi n m.
3. Se gsete maximul din primele dou numere c, d, rezultatul va fi n m1.
4. Se compar e cu m1, rezultatul va fi n m1.
5. 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.
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

variabile

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.

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:
Function semn (x: real):char;
Function numr (sa, sb: string): real;
5

Function care (l: string; model: mod1): boolean


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.
Subproblema 2 - gsirea maximului din 2 numere .
O variant de rezolvare a subproblemei 1 i respectiv funcia:
Program Heron;
var x, y, z , a, p: real;
begin
write (Introdu lungimea laturilor triunghiului:);
readln (x, y, z);
p:=(x + y + z) /2;
a:= sqrt (p*(p - x)* (p - y) *(p - z));
write (Aria = , a) ;
end.
Function Heron (x, y, z : real): real;
var p: real;
begin
p:=(x + y + z) /2;
Heron:= sqrt (p*(p - x)* (p - y) *(p - z));
end;
Program Maxim2;
var x, y, z : integer;
begin
writeln (Dati 2 numere);
readln (x, y);
if x > y then z:= x else z:= y;
writeln (Cel mai mare = , z);
end.
Function Maxim2 (x, y :integer) :integer;
var z: integer;
begin
if x > y then z:= x else z:= y;
Maxim2 := z;
end;

* * Exerciii i probleme rezolvate * *


1.Elaborai o funcie care returneaz lungimea cercului cu raza r, r R.
Function lungimea (r: real) : real;
Const Pi = 3.14;
begin
lungimea:= Pi *sqr(r) ;
end;
2. Elaborai o funcie care cunoscnd temperatura n grade Celsius returneaz
temperatura exprimat n grade Fahrenheit. Amintim, c relaia dintre
temperatura Celsius i temperatura Fahrenheit este dat de formula
T0Fahrenheit = 9/5 t0Celsius + 32
Function TemperaturaF (tc: integer): real;
begin
TemperaturaF:= (9/5)* tc +32;
end;
3. Elaborai o funcie care returneaz numrul de caractere ce difer de spaiu
dintr-un ir de caractere
Function Diferite (x : string) : integer;
var k, i: integer
begin
k:= 0 ;
for i := 1 to length (x ) do
if x[i] <> then k :=k+1;
Diferite :=k;
end;
Pentru a folosi un identificator de tip structurat n calitate de parametru
formal acest identificator e necesar de declarat n blocul de declaraii:
const nmax = 10;
type vector = array [1..nmax] of integer;
Function Suma (a : vector) : integer;
4.Fie dat tabloul a[1..n], unde n < 100. Alctuii o funcie ce determin elementul
minim din tablou.
const nmax = 100;
type vector = array [1..nmax] of integer;
var a : vector;
s, n : integer;
Function Minim (a: vector): integer;
8

var m, i : integer;
begin
m := a[1] ;
for i:= 2 to n do
if a[i] <= m then m:= a[i];
Minim := m;
end;

** 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.
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.
9

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;
b) locul elementului minim din tablou, n tablou exist un singur element
minim;
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;
e) numrul de elemente pozitive din tablou.
19. Se d irul S. Determinai:
a) cte litere diferite de m sunt n ir;
b) cte vocale sunt n ir;
c) cte litere de a i b sunt n ir;
d) cte silabe de ma sunt n ir;
e) cte cuvinte sunt n textul dat;
f)cte propoziii sunt n textul dat. Fiecare propoziie se termin cu (.).
10

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)

:=

Identificator
(nume de funcie)

Parametri
actuali

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.
Program Patrulater;
{ Program fr funcii }
var a, b, c, d, e, s, p, s1, s2 : real;
begin
writeln (Introdu lungimile laturilor
patrulaterului si a diagonalei );
readln (a, b, c, d, e);
p: = (a + b +c) / 2;
s1: = sqrt (p*(p - a)* (p - b) *(p - c));
p: = (d + e +c) / 2;
s2: = sqrt (p*(p - d)* (p - e) *(p - c));
s: = s1 + s2;
writeln(Aria patrulaterului = ,s);
end.
n programul de mai jos se folosete funcia alctuit anterior.
Program Patrulater;
{ Program cu funcii }
var a, b, c, d, e, s, s1, s2 : real;
Function Heron (x, y, z : real) :real;
var p: real;
begin
11

p: = (x + y +z) / 2;
Heron: = sqrt (p*(p - x)* (p - y) *(p - z));

end;
begin
writeln (Introdu lungimile laturilor
patrulaterului si a diagonalei );
readln (a, b, c, d, e);
s1: = Heron (a, b, e);
s2: = Heron (d, e, c)
s: = s1 + s2;
writeln(Aria patrulaterului = ,s);
end.
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.

12

Program Patrulater
a

Function Heron

s1

Heron

s2
s
s1:=Heron(a, b, e)

Program Patrulater
a

Function Heron

s1

Heron

s2
s
s2:=Heron(d, e, c)

13

** Probleme rezolvate **
1. Fie date 5 numere ntregi. Elaborai un program ce determin elementul maxim.
Program maxim_var1;
var m,a,b,c,d,e: integer;
function max2 (x,y: integer): integer;
begin
if x>y then max2:=x else max2:=y;
end;
begin
writeln (Introdu 5 numere);
readln (a,b,c,d,e);
m:= max2(a,b);
m:= max2(c,m);
m:= max2(d,m);
m:= max2(e,m);
writeln (cel mai mare este=, m);
end.
Program maxim_var2;
var m, m1,a,b,c,d,e: integer;
function max2 (x,y: integer): integer;
begin
if x>y then max2:=x else max2:=y;
end;
begin
writeln (Introdu 5 numere);
readln (a,b,c,d,e);
m:= max2(a,b);
m1:= max2(c,d);
m1:= max2(e,m1);
m1:= max2(m,m1);
writeln (cel mai mare este=, m1);
end.
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.
Program Media;
const nmax = 100;
type vector = array [1..nmax] of integer;
var a: vector, st, n, i :integer;
Function suma (x: vector) : integer;
var s, i : integer;
14

begin
s:=0;
for i := 1 to n do
s:=s + x[I];
suma := s;
end;
begin
write (n=); readln (n);
writeln ( introdu , n , elemente);
for i:= 1 to n do
readln (a[i]);
st:= suma (a);
med:= st /n;
writeln (media tabloului=, med:4:2);
end.
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.
Program ElementeLinii;
const nmax = 10; mmax=10;
type
matrice = array [1..nmax, 1..mmax] of integer;
vector = array [1..nmax] of integer;
var
a : matrice;
b: vector;
j, i, n, m: byte;
Function Sumapoz (k: byte, x: matrice) : integer;
var j : byte;
s, p: integer;
begin
for j:= 1 to n do
if x[k, j] >0 then sp := sp + x[k, j];
Sumapoz:= sp;
end;
begin
write (n=); readln (n);
write (m=); readln (m);
writeln (Introdu , m*n ,elemente );
for i:=1 to n do
for j := 1 to m do
readln (a[i, j]);
for i := 1 to n do
b[i]:=Sumapoz (i, a);
writeln ( Sumele elementelor pozitive pe linii
sunt);
15

end.

for i:= 1 to n do
writeln ( Linia, i , Suma=, b[i]);

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.
Program Litere;
var s : string;
i, na, nb, nc:byte;
Function numarare (x: char, y: string);
var k, i : byte;
begin
k:= 0;
for i:= 1 to length (y) do
if y[i] = x then k:=k+1;
Numarare:= k;
end;
begin
writeln (Introdu sirul);
readln (s);
na:=numarare (a, s);
nb:= numarare (b, s);
nc:= numarare (c, s);
writeln ( litere de a sunt, na);
writeln (litere de b sunt , nb);
writeln (litere de c sunt , nc);
end.

**

Probleme propuse pentru rezolvare

**

1. Se consider antetul:
Function F

(x : real; y: integer; z: char) :boolean;

Care din apelurile ce urmeaz snt corecte:


a)F(3.18, 4, a);
b)F(3, 4, 4);
c)F(3, 4, 4);
d)F(3.18, 4, 4);
e)F(3.18, 4, a);

16

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

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:
Declaraie
de procedur

Antet de
procedur

antet de
procedur

begin

instruciuni

end;

var
procedure

id

id

tip

,
;

Exemple de antet de procedur:


Procedure Sch (var x, y: real);
Procedure FindPict (n: cuvint, var b: cuvnt);
Procedure ABS (a, b, c: integer, var n: real);
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
18

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:
Procedure Heron (x, y, z: real, var sh: real);
var p: real;
begin
p:=(x+y+z)/2;
sh:=sqrt (p*(p-x)*(p-y)*(p-z));
end;
Procedura Max2 (x, y: integer, var max: integer );
begin
if x > y then max := x else max:= y;
end;

**

Probleme rezolvate

**

1. Se consider urmtoarea numerotare a zilelor sptmnii:


1 Luni

4 - Joi

2 Mari

5 - Vineri

3 Miercuri

6 Smbt

7 Duminic

Elaborai o procedur, care cunoscnd numrul afieaz la ecran denumirea zilei.


Procedure Zile (x: 1..7);
begin
case x of
1: writeln (Luni);
19

end;

2:
3:
4:
5:
6:
7:

writeln
writeln
writeln
writeln
writeln
writeln

(Marti);
(Miercuri);
(Joi);
(Vineri);
(Simbata);
(Duminica);

end;
2. Elaborai o procedur care afieaz la ecran tabelul de adevr a funciei logice
y=x1 & x2.
Procedure Tabel;
var x1, x2: boolean;
begin
for x1:= false to true do
for x2:= false to true do
Writeln (x1, and , x2 , = , x1 and x2);
End;
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.
const nmax = 100;
type vector=array [1..nmax] of integer;
Procedure Permutare (Var X: vector);
var c: integer;
i: byte;
begin
c:= x[1];
for i:=1 to n-1 do
x[i]:= x[i+1];
x[n]:=c;
end;
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.
const nmax=10;
type matrice = array[1..nmax, 1..nmax] of integer;
Procedure Modificare (var x: Matrice);
var c: integer;
i, j: byte;
20

begin
for i:= 1 to n do
begin
c:= x[i, i];
for j:= 1 to n do
x[i, j]:= x[i, j]+c;
end;
end;

** Probleme propuse pentru rezolvare

**

1. Elaborai o procedur care efectueaz interschimbarea a dou numere ntregi.


2. Elaborai o procedur care, cunoscnd numerele reale a i b, afieaz unul din
mesajele ce urmeaz:
APROAPE EGAL

- dac a-b 0,01

MAI MIC

- dac a-b < -0,01

MAI MARE

- dac a-b > 0,01.

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


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

2 februarie

3 martie

4 aprilie

5 mai

6 iunie

7 iulie

8 august

9 septembrie

10 octombrie

11 noiembrie

12 decembrie

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


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
type vector=array[1..100] of integer;
21

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
type

matrice=array[1..10,1..10] of integer;

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


PARAM ETRILOR 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
,
22

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}
Program Maxim;
{2} var a, b, c, d: integer;
{3} m2,m,m1: integer;
{4} Procedure Max2 (x, y: integer, var max: integer);
{5} begin
{6} if x > y then max:=x else max:=y;
{7} end;
{8} begin
{9} writeln (Introdu numerele);
{10} readln (a, b, c, d);
{11} Max2(a,b,m);
{12} Max2(c,d,m1);
{13} Max2(m,m1,m2)
{14} writeln (Cel mai mare din 4 =,m2);
{15} end.
Execuia ncepe astfel:
1. Se aloc memorie pentru programul dat pentru variabile globale declarate i
prin procedur.
Program maxim
a
b
c

m1

m2

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


x
y

2. Se introduc datele de la tastier n memorie.

23

Program maxim
a

m1

m2

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


x
y
3

max2(a,b,m)

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

Program maxim
a
b
c
3

m1

m2

Procedure max2
x
y
3

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

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
type matrice = array[1..10, 1..10] of integer;
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;
n procedura Tablou afiarea tabloului.
Program Interschimbare;
const nmax=10;
type matrice = array[1..nmax,1..nmax] of integer;
var a: matrice;
i, j, ll, lc, min, n:integer;
Procedure Citire (var x: matrice);
var i, j: byte;
begin
for i:= 1 to n do
for j:= 1 to n do
readln (x[i, j]);
end;
Procedure minim (x: matrice, var m, lm, cm: integer);
var i,j: byte;
begin
M:=x[1,1]; lm:=1; cm:=1;
for i:= 1 to n do
for j:= 1 to n do
if m< x[i, j] then
begin
m:= x[i, j]; lm:=I; cm:=j;
end;
end;
Procedure modificare (lm, cm: integer, var x: matrice);
var I, j: byte; c:integer;
begin
c:= x[1,1];
25

x[1,1]:= x[lm, lc];


x[lm, lc]:=c;

end;
Procedure Tablou ;
var i, j: byte;
begin
for i:= 1 to n do
begin
for j:=1 to n do
write (a[i, j]: 3);
writeln;
end;
end;
begin
write ( Introdu dimensiunea tabloului);
readln (n);
writeln (Introdu, n*n, elemente);
citire (a);
writeln (Ati introdus);
Tablou;
Minim (a, min, ll, lc);
Modificare (ll, lc, a);
writeln (Tabloul modificat);
Tablou;
end.

**

Probleme propuse pentru rezolvare

1. Ce va tipari urmatorul program:


Program test;
var x,y:integer;
procedure guess(a:integer; var b:integer);
begin
a:=a+5;
b:=b+a;
end;
{guess}
begin
x:=1; y:=2;
guess(x,y); write(x,y);
guess(x,x); writeln(x,y);
end.
{test}
a)1878
b)68
26

**

c)12
d)nici un raspuns
2. Ce va tipari programul urmator?
program test;
var a,b:integer;
procedure p(x:integer; var y:integer);
begin
x:=2*x; a:=x+y; y:=x-1;
end;
begin
a:=4; b:=2;
p(a,b); writeln(a, ,b);
end.
a) 87

b)82

c)107

d)nici un raspuns anterior nu este corect


3. Ce va afisa urmatorul program :
Program t1;
var x,y:integer;
procedure p(a:integer; var b:integer);
begin
a:=a+3;
b:=b+a;
end;
begin
x:=0; y:=0;
p(x,y); write(x,y);
p(y,x); write(x,y);
p(x,x); write(x,y);
p(y,y); write(x,y);
end.
a)0363153159
b)0363036369
c)0303163169
d)0003153159
4.Ce va afisa programul :
Program t2;
27

type vec:array[1..2]of real;


var a:vec; i:integer
procedure p(var k:integer; var x:real);
begin
k:=2; x:=0;
end;
begin
a[1]:=1; a[2]:=2;
for i:= 1 to n do
begin
p(i,a[i]); writeln(a[1]:4:1,a[2]:4:1)
end;
end.
a)1.0 3.1
b)1.0 2.0
c)0.0 2.0
d)1.0 0.0
5. Fie dat programul:
Program t6;
var a,d:integer;
procedure p(var b,c:integer);
BEGIN

b:=1; c:=b+1;
end;
BEGIN

a:=1; d:=0;
p(a,d); write(a,d);
end.
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:
Program t11;
var a:integer;
procedure p(var x:integer);
28

BEGIN

end;

x:=x+1;

x:=x+a;

BEGIN

a:=5;
p(a);
p(a);
end.

writeln(a);
writeln(a);

7. Ce va afisa urmatorul program:


Program t13;
var x,y:integer;
procedure p(a:integer; var b:integer);
BEGIN

end;

a:=a+1;

b:=b+a;

BEGIN

x:=0;

y:=0;

p(x,y); write(x,y);
p(y,y); write(x,y);
end.
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:
type vector=array[1..100] of integer;
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:
type vector=array[1..100] of integer;
Elaborai un program care modific elementele tabloului astfel: elementele de pe
locurile impare se nlocuiesc cu 100.
n procedura citire introducerea tabloului;
29

n procedura modificare modificarea tabloului;


11. Se consider declaraiile:
type vector=array[1..100] of integer;
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:
type vector=array[1..100] of integer;
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:
type vector=array[1..100] of integer;
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:
type vector=array[1..100] of integer;
Elaborai un program care modific elementele n felul urmtor elementele
maxime se nlocuiesc cu suma elementelor pozitive.
15. Se consider declaraiile:
type matrice=array[1..10,1..10] of integer;
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:
type matrice=array[1..10,1..10] of integer;

30

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

31

4. DOMENIUL DE VIZIBILITATE A VARI ABILELOR


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

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

33

**

Program main;
var a,b:integer;
procedure p1( var x:real);
var c:char;
function f(y:char):char;
var d:integer;
begin bloc1
end;
begin bloc2
end;
procedure p2;
var d:integer;
begin bloc3
end;
beginbloc4
end.
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:
Program main;
procedure p1;
function f:integer;
begin
bloc1
end;
BEGIN

bloc2
end;
procedure p2;
BEGIN

bloc3
end;
BEGIN

bloc4
end.
Care din urmatoarele asertiuni sint adevarate ?
34

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.

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

35

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:
g(3, 13, 7), g(7, j, 8+7 div 3)
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.
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

36

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.


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

Program P;
var x,z,y:integer;
Procedure Q(y:integer; var z:integer);
begin
x:=x+1;
y:=y+2;
z:=z+3;
writeln(x,y,z)
{1,2,3}
end;{Q}
begin
x:=0; y:=0; z:=0;
writeln(x,y,z);
{0,0,0}
Q(x,y);
writeln(x,y,z)
{1,3,0}
end.{P}
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:
program test;
var x,y:integer;
procedure proc(x:integer; var y:integer);
begin
x:=10; y:=20
end;
begin
x:=1; y:=2;
proc(x,y); writeln(x, ,y);
end.
38

a)1 20
b)1 2
c)10 20
d)nici un raspuns anterior nu este corect
2. Ce valoare afiseaza programul urmator?
Program test;
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);
writeln (z);
end.
a) 7 b) 0 c)5

3. Ce va tipari urmatorul program?


program test;
type t= (bine, rau, potrivit);
var a:integer; b:t;
procedure p (a:t);
begin
if a<5 then writeln (nu e bine)
else
writeln (e bine);
end;
begin
a:=7;
p(rau);
end.
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?
39

Program Test;
var a,b,c,d: integer;
procedure p (var b:integer; c:integer);
var d: integer;
begin
a:=5; b:=6; c:=7; d:=8;
writeln (a,b,c,d);
end;
begin
a:=1; b:=2; c:=3; d:=4;
p (a,b); writeln (a,b,c,d);
end.
a) 5678

b) 6638

c) 6678

1234

6634

6234

d)nici un raspuns anterior nu este corect.


5. Ce va afisa programul urmator?
Program print;
var x, y: char;
procedure p (x: integer);
const y=true;
begin
writeln (x, ,y) end;
procedure q;
var x: char;
begin
x:=succ (y); y:=*; writeln (x, ,y)
end;
begin
x:=a; y:=5;
p(8); writeln (x, ,y)
end.
6. Ce va afisa urmatorul program?
Program print;
Var a,b,c,d: integer;
Procedure P (var b: integer; c: integer);
Var d: integer;
Begin
a:=5; b:=6; c:=7; d:=8;
writeln (a,b,c,d)
end;
40

begin
a:=1; b:=2; c:=3; d:=4;
P(a,b); writeln (a,b,c,d)
End.
7. Ce va afisa programul :
Program t3;
Var a,b,c,d:integer;
Procedure p(var b:integer; c:integer);
BEGIN
a:=2*a; b:=2*b; c:=2*c; d:=2*d;
writeln(a,b,c,d);
end;
begin
a:=1 ; b:=1; c:=1; d:=1;
p(a,b); write(a,b,c,d);
p(c,d);write(a,b,c,d);
end.
a)4122

b)4422

c)4422

d)4122

4412

4112

4112

4112

8244

8244

4244

8244

8124

8124

8128

8128

8. Fie dat programul:


Program t7;
var a,b:integer;
procedure p(a:integer;var x:integer);
begin
x:=2*a;
end;
begin
a:=10;b:=15;
{apelul procedurii p}
end.
Determinati care din urmatoarele apeluri sint corecte si calculati valorile
variabilelor a si b pentru fiecare apel corect.
(1)

p(b,b)

(3)
41

p(a+1,b)

(2)

p(5,a,b)

(4)

p(a,b+1)

9. Fie dat programul:


Program t6;
Var a,d:integer;
Procedure p(var b,c:integer);
BEGIN
B:=1; c:=b+1;
End;
BEGIN
A:=1; d:=0;
P(a,d); write(a,d);
End.
Ce va afisa programul dat n cazul nlocuirii antetului de procedura p cu fiecare din
declaratiile ce urmeaz :
a)procedure
b)procedure
c)procedure
d)procedure

p(var b,c:integer);
p(b,c:integer);
p(b:integer; var c:integer);
p(var b:integer; c:integer);

10. Fie dat programul. Ce va afisa urmatorul program:


program t9;
var a,b:integer;
procedure p(x:integer; var y:integer);
BEGIN

x:=x+1; y:=y+1;
end;
begin
a:=5; b:=5;
p(a,b); writeln(a,b);
p(a,b); writeln(a,b);
end.
11. Fie dat programul. Ce va afisa urmatorul program:
Program t10;
var x,y,z:integer;
procedure p(var a,b:integer);
var z:integer;
BEGIN

z:=a; a:=b; b:=z;


end;
procedure q(var a,b:integer);
42

BEGIN

z:=a; a:=b; b:=z;


end;
BEGIN

end.

x:=1; y:=2; z:=3;


p(x,y); writeln(x,y,z);
x:=1; y:=2; z:=3;
q(x,y); writeln(x,y,z);

43

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.

44

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