Sunteți pe pagina 1din 2

1

SUBPROGRAME
SUBPROGRAM = ansamblu format din tipuri de date, variabile şi instrucţiuni scrise în vederea unei anumite
prelucrări şi care poate fi utilizat doar dacă este apelat dintr-un program sau dintr-un alt subprogram.
Subprogramele pot fi:
• standard (predefinite) sau
• nestandard (utilizator)

O funcţie este alcătuită din:


• Antet = linia de definire - conţine numele funcţiei, tipul rezultatului şi lista parametrilor formali
(dacă există)
• Corpul funcţiei

Sintaxa antetului:
• Tip_rezultat nume (lista parametrilor formali)
Tip_rezultat poate fi: un tip standard, o adresă a unui tip definit anterior, o structură de tip articol.
Dacă este omis se consideră implicit ca fiind tipul int. sau
• void nume(lista parametrilor formali)
Fiecare parametru are forma: tip nume, unde tip poate fi orice tip de dată cu excepţia tablourilor.
O funcţie returnează un rezultat la întâlnirea instrucţiunii return, care are forma return expresie.
VARIABILELE pot fi: locale, globale şi dinamice.
Variabilele globale se declară în afara corpului oricărei funcţii şi pot fi utilizate de toate funcţiile care
urmează declaraţiei respective. La declarare acestea sunt iniţializate automat cu 0. Ele au alocat spaţiu
în tot timpul execuţiei programului.
Variabilele locale sunt declarate în corpul funcţiilor. Clasa de memorare este segmentul de stivă. Ele
sunt vizibile doar la nivelul blocului în care au fost declarate. Durata de viaţă este egală cu durata
execuţiei blocului respectiv.
Rezolvarea conflictelor dintre numele variabilelor se rezolvă prin accesarea variabilei cu vizibilitatea
cea mai mică.
PARAMETRII care se găsesc în antetul unei funcţii se numesc parametri formali, iar cei din instrucţiunea
de apel, parametri actuali. Transmiterea parametrilor se poate realiza:
• prin valoare când nu ne interesează valoarea finală reţinută de parametrul efectiv;
• prin referinţă (adresă) când ne interesează ca, la revenirea în subprogramul apelant, variabila transmisă să
reţină valoarea obţinută în urma apelului funcţiei.
OBSERVAŢII:
• când declararea unei funcţii nu este însoţită de corpul său, aceasta se numeşte prototip;
• tipul parametrilor formali trebuie să coincidă sau să fie compatibil cu tipul parametrilor actuali;
• la apelul unei funcţii se salvează pe stivă: adresa de revenire, variabilele sale locale şi parametrii transmişi
prin valoare;
• nu se salvează pe stivă parametrii transmişi prin adresă, ci doar adresele lor;
• după încheierea execuţiei funcţiei apelate, se revine în blocul apelant, restaurându-se în ordine inversă
valorile salvate pe stivă.
Probleme propuse
1. O funcţie este total caracterizată de:
a) numele, tipul şi numărul parametrilor
b) prototip şi felul parametrilor
c) definiţie şi corpul său
d) lista parametrilor formali şi de valoarea returnată
2. Dacă funcţia f are următorul prototip:
tip f(lista parametri) atunci tip poate fi:
1. vector
2. structură
3. întreg, real sau caracter
4. pointer spre un tip definit anterior
5. 5. tablou bidimensional
2
a) 1,2, 5 b) 2, 3, 4 c) 1,2, 3 d)1,2,3,4,5
3. Parametrii folosiţi la definiţia unui subprogram se numesc:
a) globali b) formali c) locali d) actuali
4. Care dintre următoarele afirmaţii este adevărată?
a) O funcţie se defineşte şi apelează doar atunci când există o secvenţă de instrucţiuni care se
repetă de mai multe ori
b) O funcţie întoarce obligatoriu o valoare
c) La apelul unei funcţii compilatorul efectuează înlocuirea parametrilor formali cu cei actuali
d) O funcţie trebuie să conţină obligatoriu parametri
5. Ce verifică următoarea funcţie?
int f(int n)
{int d=2,k=l;
while(d<=n/2&&k)
{ k=k &&(n%d); d+=l;}
return(k && n>=2);}
a) dacă n este par b) dacă n este pătrat perfect
b) dacă n are doar divizori primi d)dacă n este prim
6. Ce valori se vor afişa în urma execuţiei programului?
int n,a=l;
int f(int n)
{ return (n++)+a+2;}
int main()
{int a=10;
int m=f(a); cout<<n<<" "«m; return 0; }
a) O 14 b)1 13 c) O 13 d) 1 14
7. Se consideră programul:
f(int a,int b,int c)
{a=++b; c=a+=2;
return a+b+c/3;}
int main()
{int a,b,c;
a=b=c=l;
cout<<f (a,b,c); return 0; }

8. Vectorul a declarat prin int a[]={1 ,2,3,4,5,6} este transmis ca parametru funcţie modif(). Care va fi
componenţa vectorului a în urma apelului funcţiei modif() definită astfel?
void modif(int v[])
{for(int i=0;i<5;i++)
for(int j=i+l;j<6; j++)
{ int aux;
if(v[i]%2==0&&v[j]%2)
{ aux=v[i] ;v[i]=v[j] ; v[j]=aux; } }}
a) {1,3,5,4,2,6} b) {1,3,5,2,4,6} c) {4,2,6,1, 3,5} d) {2,6,4,3,5,1}
9.Care sunt valorile afişate de programul următor?
int a=l,b=2,c=3;
void f(void)
{
int a=100; int b=a-t-c;
c+=a+b; cout <<a<<” “<<b<<” “<<c<<”\n”;
}
int main ( )
{ f(); cout <<a<<” “<<b<<” “<<c<<”\n”; return 0; }
a)100 103 206 1 2 206
b) 100 103 206 100 103 206
c) 1 4 7 1 2 7 d) 1 4 7 1 2 3

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