Sunteți pe pagina 1din 52

Tema:

Subprograme
Definiia funciei

Funciile sunt subprograme care


calculeaz i returneaz o singur
valoare . Rezultatul funciei se
returneaz prin numele funciei.
Proprieti
1* Variabilele declarate n programul
principal se numesc variabile globale i pot
fi utilizate i n cadrul subprogramelor .
2* Subprogramele pot avea propria
seciunea declarativ unde se pot defini
constante ,tipuri , variabile care pot fi
utilizate doar local .
3* Parametri formali sunt parametrii
declarai 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 funcii nu este o
instruciune de sine stttoare , ea trebuie
inclus ca operant n cadrul unei expresii .
7* Parametri formali sunt disponibili numai
n cadrul funciei, numrul parametrilor
actuali trebuie s fie egali cu numrul
parametrilor formali din declaraia
funciei . Fiecare parametru actual trebuie
s aib tipul compatibil cu parametrul
formal corespunzator lui.
8* Rezultatatul funciei este o unic
valoare de orice tip simplu sau string .

9* Seciunea instruciunelor din corpul


funciilor contine obligator ultima
instruciune care atribuie rezultantul
numelui funciei .
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. Se d un poligon cu
8 laturi. Calculai aria
acestui poligon,
utiliznd 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 funcie pentru calcularea
factorialului i s se calculeze cu ajutorul ei
combinri din n elemente luate cte m.
Numerele m i n sunt date.

Formula de calcul:

n!
C m
n
m!(n m)!
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;
for i:=1 to x do
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
A 1 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.
ntrebri:
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 funcie 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 funcie care returneaz media aritmetic a patru
numere ntregi.
3. Elaborati o funcie care returneaz aria unui dreptunghi cu
lungimile laturilor a i b, a,b R. Elaborati o funcie care
returneaz lungimea cercului cu raza r,r R.
4. Elaborati o funcie care calculeaz distana dintre dou puncte ce au
coordonatele carteziene(x1,y1),(x2,y2), x1,y2,x2,y2 R.
5. Elaborai o funcie care cunoscnd 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
numrul mai mare utiliznd funcia care determin
numrul mai mare din dou numere date. Alctuii
programul.

7.Elaborai un program cu funcie 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
distana dintre doua puncte.
8. Elaborai un program cu funcie care calculeaza lungimea
cercurilor cu razele r1, r2, r3, r1, r2, r3 R. n funcie 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. Alcatuii 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. Elaborai o procedur care afieaza la ecran rdcina ecuaiei


ax+b=0. Dac exist o infinitate de rdacini, se afieaz mesajul
INFINIT. Dac rdcini nu exist, se afieaz mesajul NU
EXIST.

13 Elaborai o funcie care,cunoscnd lungimile a,b,c ale celor trei


laturi, returneaz perimetrul triunghiului. Se consider, c a,b,c
R.
14.Se consider urmtoarea numerelor a zilelor
saptmnii:
1luni,2mari,3miercuri,4joi,5vineri,
6smbat,7duminic
Elaborai o procedura care,cunoscnd numarul,afiaza pe
ecran denumirea zilei.
15.Elaborati o functie care returneaza minimuml doua
numere ntregi a i b , utiliznd urmatoare formula:
Min(a,b)=

a b /a b/
2
16.Elaborai o procedur care, cunoscnd numerele reale a i b,
afiaza 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.Elaborai o funcie care returneaza numrul de rdacini reale


ale ecuaiei
Ax2 + bx +c=0 cu coificieni reali.

18. Elaborai o procedura care afieaza la ecran tabelul de adevar a


funciei lgice y=x1& x2.
19.S se defineasc o funcie pentru calcularea factorialului i s se
calculeze cu ajutorul ei combinrii din n elemente luate cte m .
Numerele naturale m i n snt date.

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

21.Definind funcia-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 rspunsul 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 snt 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 snt 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 corespunztoare 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 nltimile 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 numrul mai


mare utiliznd funcia care determin numrul mai mare din dou
numere date. Alctuii programul.

29.Elaborai un program cu funcie 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 distana dintre doua puncte.
30.Elaborai un program cu funcie care calculeaza
lungimea cercurilor u razele r1, r2, r3, r1, r2, r3 R. n
funcie 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. Elaborai o procedur care afieaz la ecran tabelul
de adevr a funciei logice
y = x1 x2

39. 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 linii,
afiaza la ecran denumirea anotimpului respectiv.
22. Elaborai o functie PASCAL care returneaz
valoarea funciei logice
y = (x1 x2 ) & (x1 x3).

22. Elaborai o funcie PASCAL care returneaz


valoarea funciei logice
y = (x1 x2 ) & (x2 x3).
23. Elaborai o funcie PASCAL care returneaz
valoarea funciei
y = sin(3x2 5x + 8), x, y, z R.

24. Elaborai o funcie PASCAL care returneaz


valoarea funciei
z = 1n (x2 + 2y2 + 1), x, y, z R.
1.Elaborai o funcie care calculeaz:

a) aria triunghiului
b) lungimea segmentului
c) Lungimea cercului
d) aria cercului
e)aria dreptunghiului
2. Elaborai o funcie 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) numrul de vocale ntr-un ir de caractere;
e) numrul de consoane ntr-un ir de caractere;
f) rdcina ecuaiei ax + b = 0;
Se consider declaraiile:

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 snt 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 ). Argumentai rspunsul
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 (bb) ; 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 (bb) ; 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 (bb) ; writeln (=a a b= b);
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.
4122 b) 4422 c) 4422 d) 4122
4412 4112 4112 4112
8244 8244 4244 8244
8124 8124 8128 8128

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