You are on page 1of 4

Testul 1

1.Precizati valorile de adeva r ale afirmatiilor de mai jos:


a) Orice subprogram recursiv trebuie sa aiba cel putin un parametru transmis prin
valoare
b) Orice subprogram recursiv se poate implementa si nerecursiv
c) Un subprogram este recursiv daca si num ai daca contine mai mult de un apel
autoapel
d) Programul principal (Pascal) sau functia main (C++) nu pot contine autoapel
R: f,a,f,a

2.La fiecare apel recursiv al unui subprogram, in segmentul de stiva sunt memorate
a) Adresa de revenire, valorile variabilelor locale si a parametrilor transmisi prin referinta
b) Adresa de revenire si valorile variabilelor globale
c) Adresa de revenire, valorile variabilelor locale si a parametrilor transmisi prin valoare
si adrese parametrilor tra nsmisi prin referinta
d) Adresa de revenire, valorile locale si a variabilelor globale
R: c)

3.Fie functia recursiva

functiona ael ( n:integer ):integer; int ael ( int n )


begin {
if n=0 then ael:=0 if ( n = =0 ) return 0
else ael:=ael ( n -1 ) + 2*n-1; else return ( ael(n -1)+2*n-1)
end; }

Precizati valoarea lui n pentru care ael (n)= 36


a) 9
b) 3
c) 15
d) 6
R: d)

4. Se considera subprogramul recursiv:

procedure test (n:integer); void test ( int n )


begin {
if n<>1 then if ( n!=1 )
begin {
write (n, ’,’); cout<<n<<”,”
if (n mod 2) then test (n div 2) if ( n%2 = =0 ) test (n/2)
else test (3*n+1); else test (3*n+1)
end }
else write (1); else cout<<1;
end;

Precizati ce va fi afisat la apelul test(10)?


a) 10,5,4,2,1
b) 10,5,16,8,4,2
c) 10,5,16,8,4,2,1
d) 5,16,8,4,2,1
R: c)

5. Fie functia recursiva:

function verif( n,k: integer): integer; int test (int n, int k)


begin {
if ( k=n ) then verif:=1 if (k= =n) return 1;
else if (n mod k=0) then verif:=0 else if ( n%k= =0 ) return 0;
else verif:=verif (n, k+1); else return test (n, k+1)
end; }

La apelul verif (n,2) valoarea functiei este 1 daca si numai daca:

a) n ∈ ℵ si n este par
b) n ∈ℵ si n este prim
c) n ∈ ℵ si n este impar
d) n ∈ ℵ si n nu este prim
R: b)

6. Fie sirul de numere definit astfel:

m, pentru n=0 si m ? ℜ
an= an , daca n este par
4
4 an-1, daca n este impar

Care este valoarea termenului a5 , daca m=2 ?

a) 5
b) 6
c) 12
d) 7
e) 2
R: a)

7. Fie urmatorul subprogram recursiv:

procedure c ( b,a: word); end;


begin end;
if ( a<= b div 2) then void c ( unsigned b, unsigned a)
begin {
if not (b mod a<>0) then write(a,’ ’); if (a <= b/2)
c (b,a+1); { if (!(b%a= = 0)) cout <<a<<” “
c (b, a+1) }
}

La apelul c (15,2), se va afisa:

a) 3515
b) 2467
c) 35
d) 135
R: c)

8. Se considera functia s: N* x N * ? N definita astfel

La apelul functiei s (3,5) unde m=1 si n=1 se va obtine


a) 12
b) 11
c) 8
d) 9
R: b)

Fie programul urmator:

program T9; # include <iostream.h>


var x,z:integer; int x,y;
procedure t( x:integer, z:integer); void t (int x, int y)
begin { if (x>0)
if x>0 then begin { x=x-1;
x:=x-1; y=y-1;
y:=y-1; t (x,y);
t (x,y); }
end; }

begin void main()


x=3;y=1; { x=3; y=1;
write (x,’’,y,’’); cout<<x<<” ”<<y<<” ”;
t (x,y); t (x,y);
writeln (x,’ ’,y,’ ’); cout<<x<<” ”<<y<<” ”<<endl;
end. }

Care este modificarea din program, astfel încât dupa executia sa se afiseze 3 1 0 1
PASCAL
a) procedure t (var x:integer; y: integer);
b) procedure t (var x:integer; var y: integer);
c) procedure t (x:integer; var y: integer);

C++
a) void t (int & x, int y);
b) void t (int & x, int & y);
c) void t (int x, int & y);
R: a)

You might also like