Sunteți pe pagina 1din 53

Tema:

Subprograme
Definiţia funcţiei

 Funcţiile –sunt subprograme care


calculează şi returnează o singură
valoare . Rezultatul funcţiei se
returnează prin numele funcţiei.
Proprietăţi
 1* Variabilele declarate în programul
principal se numesc variabile globale şi pot
fi utilizate şi în cadrul subprogramelor .
2* Subprogramele pot avea propria
secţiunea declarativă unde se pot defini
constante ,tipuri , variabile care pot fi
utilizate doar local .
 3* Parametri formali sunt parametrii
declaraţi în antetul subprogramelor , ei sunt
disponibili numai în cadrul subprogramului
dat .
 4*Parametrii actuali sunt parametrii ce
participă la apelul subprogramului .
 5* In calitate de parametrul actual poate fi o
variabilă , o expresie , un indentificator de
subprogram .
 6* Apelarea unei funcţii nu este o
instrucţiune de sine stătătoare , ea trebuie
inclusă ca operant în cadrul unei expresii .
 7* Parametri formali sunt disponibili numai
în cadrul funcţiei, numărul parametrilor
actuali trebuie să fie egali cu numărul
parametrilor formali din declaraţia
funcţiei . Fiecare parametru actual trebuie
să aibă tipul compatibil cu parametrul
formal corespunzator lui.
 8* Rezultatatul funcţiei este o unică
valoare de orice tip simplu sau string .

 9* Secţiunea instrucţiunelor din corpul


funcţiilor contine obligator ultima
instrucţiune care atribuie rezultantul
numelui funcţiei .
 10* Lista parametrilor formali poate

lipsi.
Antete corecte:
function prima (a,b:integer):integer;
function ThisOne:real;
type cifre=0..9;
function AB (z:char):cifre;
Function AC (x,y:integer;z:char):integer;
function AE(s:string):string;
type nume = array[1..5] of real ;
function AR (x:nume):real;
Problema rezolvată
 1 . S e d ă u n p o lig o n c u
8 laturi. Calculaţi aria
acestui poligon,
utilizînd o formula
deja cunoscuta. Se
presupune ca
distantele necesare
sunt cunoscute sau le
putem masura.
Program P1;
Var GF,GH,HA,AB,BC,CD,DE,EF,HF,AF,BF,CF,DF:real;
S1,S2,S3,S4,S5,S6,ST:real;
Function arie (a,b,c:real):real;
Var p:real;
Begin
P:=(a+b+c)/2;
Arie := sqrt(p*(p-a)*(p-b)*(p-c));
End;
Begin
Writeln(‘dati lungimea lat:
GF,GH,HA,AB,BC,CD,DE,EF,HF,AF,BF,CF,DF’);
Readln(GF,GH,HA,AB,BC,CD,DE,EF,HF,AF,BF,CF,DF);
S1:=arie(GF,GH,HF);
Writeln(‘arie primului triunghi =’,s1:8:2);
S2:=arie(HF,AF,HA);
Writeln(‘arie AL II -lea triunghi =’,s2:8:2);
S3:=arie(AF,AB,BF);
Writeln(‘arie AL III -lea triunghi =’,s3:8:2);
Begin
Writeln(‘dati lungimea lat:
GF,GH,HA,AB,BC,CD,DE,EF,HF,AF,BF,CF,DF);
Readln(GF,GH,HA,AB,BC,CD,DE,EF,HF,AF,BF,CF,DF);
S1:=arie(GF,GH,HF);
Writeln(‘arie primului triunghi =’,s1:8:2);
S2:=arie(HF,AF,HA);
Writeln(‘arie AL II -lea triunghi =’,s2:8:2);
S3:=arie(AF,AB,BF);
Writeln(‘arie AL III -lea triunghi =’,s3:8:2);
S4:=arie(BC,CF,BF);
Writeln(‘arie AL IV -lea triunghi =’,s4:8:2);
S5:=arie(CF,CD,DF);
Writeln(‘arie AL V -lea triunghi =’,s5:8:2);
S6:=arie(DF,EF,DE);
Writeln(‘arie AL VI -lea triunghi =’,s6:8:2);
ST:=s1+s2+s3+S4+S5+S6;
Writeln(‘arie totala =’,st:8:2);
Readln;
End.
 2. Să se definească o funcţie pentru calcularea
factorialului şi să se calculeze cu ajutorul ei
combinări din n elemente luate cîte m.
Numerele m şi n sunt date.

Formula de calcul:

n!
C m

m!(n m)!
n
 Formula de calcul:
program p2;
var n,m,d:integer;
c:real;
function Factorial(x:integer):longint;
var i:integer; p:longint;
begin
p : =1 ;
f o r i: =1 t o x d o
p:=p*i;
factorial:=p;
end;
begin
writeln ('dati n si m');
readln (n,m);
d:=n-m;
c:=factorial(n)/(factorial(m)*factorial(d));
writeln ('combinari din ',n,' cite ',m,':',c:6:2);
readln;
end.
Subprogram cu proceduri
Procedurile sunt subprograme care pot returna unu, mai
multe sau nici un rezultat
Lista parametrilor formali e formata din parametri
valoare si parametri variabila.

Parametri valoare servesc pentru transmiterea de valori


din programul principal in procedura.
Parametri variabila servesc pentru intoarcerea
rezultatelor din procedura in programul principal.
Lista parametrilor formali poate fi vida.
Parametrii formali sunt tratati ca variabile
locale.
In cazul unui parametru valoare drept
parametru local poate servi orice expresie de
tipul respectiv, o constanta sau o variabila.
In cazul unui parametru variabila drept
parametri actuali pot fi utilizate numai variabile.
Probleme cu mai multe proceduri:
Fie date 2 tablouri liniare din n elemente.
Calculati elemenetele tabloului c,suma dintre
elemenetele corespunzatoare.

 N= 6
 A1 2 3 4 5 6
 B 7 8 9 10 11 12
 C 8 10 12 14 16 18 (suma A+B=C)
{Bloc de rezolvare}
For i=1 to n do
S=a[i]+B[i]
Algoritmul de lucru:

 Introdu n
 Introdu el. Tab A (procedura citire)

 Introdu el. Tab.B (procedura citire)

 Verificarea tab.A (procedura afisare)

 Verificare tab.B (procedura afisare)

 Calcularea elementelor tab C (procedura

suma corespunzatoare)
 Afisarea tabloului C (procedura afisare)
Program P1 ;
Const nmax=100 ;
Type vector=array[1..nmax] of integer;
Var A,B,C :vactor; I,n:byte;
Procedure citire (var x : vector);
Begin
For i:=1 to n do
Readln(x[i]) end; {citire}
Procedure afisare (x: vector);
Begin
For i:=1 to n do
Write(x[i]:3)
Writeln; end; {afisare}
Procedure sumacorespunz (A,B: vector, var C:vector);
Begin
For i:=1 to n do
C[i]:=a[i]+B[i];
End; {suma}
Begin
Write(‘n=’); readln(n);
Writeln(‘dati’,n,’elem.a tabloului A’);
Citire(A);
Writeln(‘dati’,n,’elem. A tab. B’)’
Citire(B);
Writeln(‘elementele tabloului A’);
Afisare(A);
Writeln(‘elementele tabloului B’);
Afisare (B);
Sumacorespunz(A,B,C);
Writeln(‘elementele tabloului C’);
Afisare(C);
Readln;
End.
Efecte colaterale

Prin efect colateral se intelege o atribuire (in


corpul functiei) a unei valori la o variabilitate
globala sau la un parametru formal variabil.
Program p110;
 {Efect colateral – atribuire la variabila globala}
 var a:integer;{variabila globala}
 function F(x:integer):integer;
 begin
 F:= a*x;
 A:=a+1; {atribuire defectuasa}
 End;
 begin
 A:=1;
 Writeln(F(1)); {se afisheaza 1 }
 Writeln(F(1)); {se afisheaza 2 }
 Writeln(F(1)); {se afisheaza 3 }
 Radln;
 End.
Program p111;
{Efect colateral-atribuire la un parametru formal}
var a:integer;
function F (var x:integer): integer;
begin
F:=2*x;
x:=x+1; {atribuire defectuasa}
end; {F}
begin
a:=2;
Writeln(F(1)); {se afisheaza 4}
Writeln(F(1)); {se afisheaza 5}
Writeln(F(1)); {se afisheaza 6}
Readln;
End.
Întrebări:
1. Care din antetele de functii sunt corecte?
a) function prima ( a, b integer):integer;
b) function treia:1..10;
c) function cincea ( a, b: char) ;
d) function sasea ( s: real ) : array[1..10] of integer;
e) function a treia;
f) function ThisOne:real;
g) function Another(s:char):0..10;
h) type cifre=0..9;
function AB (z:char):cifre;
g) function AC(x,y:integer;z:char):integer;
h) function AD(x:array[1..100] of integer ):integer;
i) function AE(s:string):string;
j) type nume = array[1..5] of real ;
function AR (x:nume):real;
2.Se consideră antetul:
function F (x : real; y : integer; z : char) :boolean;
Care din apelurile ce urmează sunt corecte?
a) F (3. 18, 4, ,a’) ;
b) F (4, 4, ,4’ );
c) F (4, 4, 4);
d) F (4, 3.18, ,4’);
e) F (3 . 18, 4, 4);
f) F (‚3 . 18 ’, 4, ‚4’);
g) F (15, 21,’3’);
h) F (15,21,3).
Probleme propuse

1. Elaborati o funcţie care returnează valoarea logică true, dacă


numerele reale a,b,c pot fi interpretate ca lungimile de laturi ale
unui triunghi si false-in caz contrar.
2. Elaborati o funcţie care returnează media aritmetică a patru
numere întregi.
3. Elaborati o funcţie care returnează aria unui dreptunghi cu
lungimile laturilor a şi b, a,b € R. Elaborati o funcţie care
returnează lungimea cercului cu raza r,r € R.
4. Elaborati o funcţie care calculează distanţa dintre două puncte ce au
coordonatele carteziene(x1,y1),(x2,y2), x1,y2,x2,y2 € R.
5. Elaboraţi o funcţie care cunoscînd temperatura in grade
Kelvin,retunează temperatura exprimată in grade Celsius.Amintim
iem,că relatia dintre temperatura Celsius şi temperatura Kelvin este
dată de formula:
t0 celsius = toKelvin +273,16
 6. Se consideră 5 numere întregi. Să se determine
numărul mai mare utilizînd funcţia care determină
numărul mai mare din două numere date. Alcătuiţi
programul.

 7.Elaboraţi un program cu funcţie care calculeaza


perimetrul triunghiului fiind date coordonatele
carteziene a trei puncte din plan ce formeaza triunghi:
(X1, Z1); (X2, Y2); (X3, Y3). În functie se calculeaza
distanţa dintre doua puncte.
8. Elaboraţi un program cu funcţie care calculeaza lungimea
cercurilor cu razele r1, r2, r3, r1, r2, r3 € R. În funcţie se
calculeaza lungimea unui cerc.

9. Se considera 5 numere reale. Sa se determine numarul mic,


utilizind functia, care determina numarul ma mic din trei
numere. Alcatuiţi programul.

10. Elaborati un program cu functie care calculeaza perimetrul a


trei triunghiuri cu lungime X1, Y1, Z1, X2, Y2, Z2 si X3, Y3, Z3.
In functie se calculeaza perimetrul unui triunghi cu laturile a, b,
c.

11. Se considera tabloul A[..n], n<=100 de numere intregi. Alcatuiti


programul cu functii ce calculeaza numarul de elemente mai
mare ca media aritimetica a tuturor lementelor din tabel.
In functia 1-suma elementelor.
In functia 2-numarul de elemente mai mare ca media.
7. Se considera tabloul A[1..n],n<=100 de numere intregi.
Alcatuiti programul care calculeaza cite elemente maxime sunt
in tablou.
In functia 1-se calculeaza elementul maxim.
In functia 2- se calculeaza de cite ori se intilneste elementul
maximal.

8. Se considera tabloul A[1..n], n<=100 de numere intregi


diferite. Alcatuiti programul cu functii ce efectueaza
interschimbarea dintre elementul minim si primul element.
In functia 1-gasirea elementului minim
In functia 2-se calculeaza locul elementului minim.

9. Se considera tabloul T[1..n, 1..n], n<=10 de numere intregi. Sa


se scrie un program cu functii care calculeaza media aritimetica
a elementelor de pe diagonala principala si suma elementelor de
pe diagonala sucundara.
 10. Se considera tabloul T[1..n, 1..n] n<=10 de numere intregi. De
alcatuit programul de aflare a diferentei dintre cea mai mare
medie aritimetica de pe fiecare coloana.

 11. Se considera tabloul T[1..n, 1..n],n<=10 de numere intregi. De


aflat suma maxima dupa fiecare coloana.

 12. Elaboraţi o procedură care afişeaza la ecran rădăcina ecuaţiei


ax+b=0. Dacă există o infinitate de rădacini, se afişează mesajul
INFINIT. Dacă rădăcini nu există, se afişează mesajul NU
EXISTĂ.

 13 Elaboraţi o funcţie care,cunoscînd lungimile a,b,c ale celor trei


laturi, returnează perimetrul triunghiului. Se consideră, că a,b,c
€ R.
 14.Se consideră următoarea numerelor a zilelor
saptămînii:
 1→luni,2→marţi,3→miercuri,4→joi,5→vineri,
6→sîmbată,7→duminică
 Elaboraţi o procedura care,cunoscînd numarul,afişaza pe
ecran denumirea zilei.
 15.Elaborati o functie care returneaza minimuml doua
numere întregi a şi b , utilizînd urmatoare formula:
Min(a,b)=

a  b  / a  b/
2
 16.Elaboraţi o procedură care, cunoscînd numerele reale a şi b,
afişaza la ecran unul din mesagele care urmează:
APROAPE AGAL-dacă /A-B/ ;
MAI MIC -dacă a-b < -0,01;
MAI MARE -dacă a-b > 0,01;

 17.Elaboraţi o funcţie care returneaza numărul de rădacini reale


ale ecuaţiei
Ax2 + bx +c=0 cu coificienţi reali.

18. Elaboraţi o procedura care afişeaza la ecran tabelul de adevar a


funcţiei lgice y=x1& x2.
 19.Să se definească o funcţie pentru calcularea factorialului şi să se
calculeze cu ajutorul ei combinării din n elemente luate cîte m .
Numerele naturale m şi n sînt date.

 20. Fiind date numerele naturale a,b,c să se determine cel mai mare
divizor comun al acestor numere.

 21.Definind funcţia-putere, să se calculeze valoarea expresiei


 S=1+0,52+0,54+0,56+0,58.

 22.Se dau numerele naturale a,b,c,d.Să se determine pentru fiecare 3


dintre cele patru numere ,dacă ele pot fi lungimile laturilor unui
triunghi. Dacă răspunsul este afirmativ , să se calculeze :

a) perimetrul triunghiului respectiv ;


b) aria triunghiului respectiv.
 23.Să se definească functiile max(a,b) şi min(a,b) , care
returnează repectiv cel mai mare şi cel mai mic dintre numerele
reale a şi b, apoi să se calculeze valoarea expresiei:
 a) S=max(min(a1,a2), max(a3,a4))+min(max(a5 ,a6), min(a7,a8)),
unde a1,a2, ... a8 sînt reale date;

b) T=min(a ,a )+min (a ,a ) + ... +min(a ,a )+max (a ,a )+max(a ,a )


+ ... + max(a ,a), unde a1,a2 ... ,a10 sînt numere reale date.
24.Se dau numerele reale pozitive a,b,c, care sunt lungimile
laturilor unui triunghi sa se calculeze lungimile medianelor
triunghiului.
 Indicatie Lungimea mediamei corespunzătoare laturii de
lungimea a se calculează cu ajutorul formulei ma=0,5 de scris
radical şi formula 2 b2+2c2-c2.

 25. Se dau numerele reale pozitive a,b,c care sunt lungimile


laturelui unui triunghi sâ se calculeze înăltimile unui triunghi.
 IndicatieSâ se utilizeze formula A=ha*a/2,unde A este aria
triunghiului,iar ha inaltimea corespunyatoare laturii a.
26. Se da o multime de puncte in plan. Sa se calculeze cea mai mica
distanta dintre oricare 2 puncte posibile.

27.a. Sa se descrie o functie care va returna valoarea true;daca


numarul natural dat este prim,altfel-valoarea false.
b.utiliyind functia din a. Sa se afiseye toti divizorii primi ai
numarului natural dat n.

 28.Se consideră 5 numere întregi. Să se determine numărul mai


mare utilizînd funcţia care determină numărul mai mare din două
numere date. Alcătuiţi programul.

 29.Elaboraţi un program cu funcţie care calculeaza perimetrul


triunghiului fiind date coordonatele carteziene a trei puncte din
plan ce formeaza triunghi: (X1, Z1); (X2, Y2); (X3, Y3). În functie
se calculeaza distanţa dintre doua puncte.
 30.Elaboraţi un program cu funcţie care calculeaza
lungimea cercurilor u razele r1, r2, r3, r1, r2, r3 € R. În
funcţie se calculeaza lungimea unui cerc.

31.Se considera 5 numere reale.Sa se determine numarul


mic,utilizind functia,care determina numarul ma mic
din trei numere.Alcatuiti programul.
32.Se considera tabloul A[..n],n<=100 de numere intregi.Alcatuiti
programul cu functii ce calculeaza numarul de elemente mai mare
ca media aritimetica a tuturor lementelor din tabel.
In functia 1-suma elementelor
In functia 2-numarul de elemente mai mare ca media.

33.Se considera tabloul A[1..n],n<=100 de numere intregi.Alcatuiti


programul care calculeaza cite elemente maxime sunt in tablou.
In functia 1-se calculeaza elementul maxim.
In functia 2- se calculeaza de cite ori se intilneste elementul
maximal.
34.Se considera tabloul A[1..n],n<=100 de nemere intregi.Alcatuiti
programul cu functii ce efectueaza interschimbarea dintre
elementul minim si primul element.
In functia 1-gasirea elementului minim
In functia 2-se calculeaza locul elementului minim.

35. Se considera tabloul T[1..n, 1..n],n<=10 de numere intregi.Sa


se scrie un program cu functii care calculeaza media aritimetica a
elementelor de pe diagonala principala si suma elementelor de pe
diagonala sucundara.
36. Se considera tabloul T[1..n, 1..n],n<=10 de numere
intregi.De aflat suma maxima dupa fiecare coloana.

37. Se considera tabloul T[1..n, 1..n] n<=10 de numere


intregi. De alcatuit programul de aflare a diferentei
dintre cea mai mare medie aritimetica de pe fiecare
coloana.
 38. Elaboraţi o procedură care afişează la ecran tabelul
de adevăr a funcţiei logice
y = x1  x2

39. Se consideră următoarea 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
Elaboraţi o procedură care, cunoscînd numărul linii,
afişaza la ecran denumirea anotimpului respectiv.
 22. Elaboraţi o functie PASCAL care returnează
valoarea funcţiei logice
y = (x1  x2 ) & (x1 x3).

 22. Elaboraţi o funcţie PASCAL care returnează


valoarea funcţiei logice
y = (x1  x2 ) & (x2 x3).
 23. Elaboraţi o funcţie PASCAL care returnează
valoarea funcţiei
y = sin(3x2 – 5x + 8), x, y, z  R.

 24. Elaboraţi o funcţie PASCAL care returnează


valoarea funcţiei
z = 1n (x2 + 2y2 + 1), x, y, z  R.
 1.Elaboraţi o funcţie care calculează:

a) aria triunghiului
b) lungimea segmentului
c) Lungimea cercului
d) aria cercului
e)aria dreptunghiului
 2. Elaboraţi o funcţie care calculează:

a) Suma numerelor reale a, b, c, d;


 b) media numerelor întregi i, j, k, m;
c) minimumul din numerele a, b, c, d;
 d) numărul de vocale într-un şir de caractere;
 e) numărul de consoane într-un şir de caractere;
 f) rădăcina ecuaţiei ax + b = 0;
 Se consideră declaraţiile:

Var k, m, n : integer ;
a, b, c : real ;
procedure P(i: integer; var j :integer;
x : real; var y : real );
begin
{...}
end.
 Care din apelurile ce unmează sînt corecte?

 a) P (k, m, a, b) ;
 b) P (3, m, a, b) ;
 c) P (k, 3, a, b) ;
 d) P ( m, n, a, b) ;
 e) P ( m, k, 6. 1, b);
 f) P ( n , m, 6, b) ;
 g) P (n, m, 6, 20 ) ;
 h) P ( a, m, b, c ) ;
 i) P (i, i, i, i ) ;
 j) P ( a, a, a ,a ). Argumentaţi răspunsul
Executii in proceduri
1. Program P1;
var : a,b : integer ;
procedure P ( x: integer , var y : integer );
begin
x:=x+1;
y:=y+x ; writeln ( ’a=’ ‚a ‚’b=’ ‚y);
end;
begin
a:=5;
b:=0;
P (a,b) ; writeln (’=a’ ‚a ‚’b=’ ‚b);
P (a,b) ; writeln (’=a’ ‚a ‚’b=’ ‚b);
P (a+2,b) ; writeln (’=a’ ‚a ‚’b=’ ‚b);
P (b,a); writeln (’=a’ ‚a ‚’b=’ ‚b);
P (a,a) ; writeln (’=a’ ‚a ‚’b=’ ‚b);
P (b‚b) ; writeln (’=a’ ‚a ‚’b=’ ‚b);
end.
2. Program P2;
var : a,b : integer ;
procedure P (var x: integer ;y : integer );
begin
x:=x+1;
y:=y+x ; writeln ( ’a=’ ‚a ‚’b=’ ‚y);
end;
begin
a:=5;
b:=0;
P (a,b) ; writeln (’=a’ ‚a ‚’b=’ ‚b);
P (a,b) ; writeln (’=a’ ‚a ‚’b=’ ‚b);
P (a+2,b) ; writeln (’=a’ ‚a ‚’b=’ ‚b);
P (b,a); writeln (’=a’ ‚a ‚’b=’ ‚b);
P (a,a) ; writeln (’=a’ ‚a ‚’b=’ ‚b);
P (b‚b) ; writeln (’=a’ ‚a ‚’b=’ ‚b);
end.
3. Program P3;
var : a,b : integer ;
procedure P (x: integer ;y : integer );
begin
x:=x+1;
y:=y+x ; writeln ( ’a=’ ‚a ‚’b=’ ‚y);
end;
begin
a:=5;
b:=0;
P (a,b) ; writeln (’=a’ ‚a ‚’b=’ ‚b);
P (a,b) ; writeln (’=a’ ‚a ‚’b=’ ‚b);
P (a+2,b) ; writeln (’=a’ ‚a ‚’b=’ ‚b);
P (b,a); writeln (’=a’ ‚a ‚’b=’ ‚b);
P (a,a) ; writeln (’=a’ ‚a ‚’b=’ ‚b);
P (b‚b) ; writeln (’=a’ ‚a ‚’b=’ ‚b);
end.
4. Program P1;
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.
Raspunsuri posibile:
a)0363153159
b)0363036369
c)0303163169
d)0003153159
 1.Determinati ce va tipari urmatorul program:

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)5 6 7 8 B)6 6 3 8 C)5 6 7 8 D)nici un raspuns corect


1234 6634 6234
2. Program T3;
var a,b,c,d:interer;
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:=a; d:=1;
P(a,b); writeln (a,b,c,d);
P(c,d); writeln (a,b,c,d);
End.
412 2 b) 4 4 2 2 c) 4422 d) 4 1 2 2
441 2 4112 4112 4112
824 4 8244 4244 8244
812 4 8124 8128 8128

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