test i

4
Testul 1 1.Precizaţi valorile de adevăr ale afirmaţiilor de mai jos: a) Orice subprogram recursiv trebuie sa aibă cel puţin un parametru transmis prin valoare b) Orice subprogram recursiv se poate implementa si nerecursiv c) Un subprogram este recursiv daca si numai daca conţine mai mult de un apel autoapel d) Programul principal (Pascal) sau funcţia main (C++) nu pot conţine 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 transmişi prin referinţă b) Adresa de revenire si valorile variabilelor globale c) Adresa de revenire, valorile variabilelor locale si a parametrilor transmişi prin valoare si adrese parametrilor transmişi prin referinţa d) Adresa de revenire, valorile locale si a variabilelor globale R: c) 3.Fie funcţia recursivă functiona ael ( n:integer ):integer; begin if n=0 then ael:=0 else ael:=ael ( n-1 ) + 2*n-1; end; int ael ( int n ) { if ( n = =0 ) return 0 else return ( ael(n-1)+2*n-1) } Precizaţi valoarea lui n pentru care ael (n)= 36 a) 9 b) 3 c) 15 d) 6 R: d) 4. Se consideră subprogramul recursiv: procedure test (n:integer); begin if n<>1 then begin write (n, ’,’); if (n mod 2) then test (n div 2) else test (3*n+1); end else write (1); end; void test ( int n ) { if ( n!=1 ) { cout<<n<<”,” if ( n%2 = =0 ) test (n/2) else test (3*n+1) } else cout<<1; Precizaţi ce va fi afişat la apelul test(10)?

Upload: natashcka

Post on 13-Jun-2015

585 views

Category:

Education


8 download

TRANSCRIPT

Page 1: Test i

Testul 1

1.Precizaţi valorile de adevăr ale afirmaţiilor de mai jos: a) Orice subprogram recursiv trebuie sa aibă cel puţin un parametru transmis prin

valoare b) Orice subprogram recursiv se poate implementa si nerecursiv c) Un subprogram este recursiv daca si numai daca conţine mai mult de un apel

autoapel d) Programul principal (Pascal) sau funcţia main (C++) nu pot conţine 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 transmişi prin referinţă b) Adresa de revenire si valorile variabilelor globale c) Adresa de revenire, valorile variabilelor locale si a parametrilor transmişi prin valoare

si adrese parametrilor transmişi prin referinţa d) Adresa de revenire, valorile locale si a variabilelor globale

R: c)

3.Fie funcţia recursivă functiona ael ( n:integer ):integer; begin if n=0 then ael:=0

else ael:=ael ( n-1 ) + 2*n-1; end;

int ael ( int n ) { if ( n = =0 ) return 0 else return ( ael(n-1)+2*n-1) }

Precizaţi valoarea lui n pentru care ael (n)= 36

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

R: d)

4. Se consideră subprogramul recursiv:

procedure test (n:integer); begin if n<>1 then begin write (n, ’,’); if (n mod 2) then test (n div 2) else test (3*n+1);

end else write (1); end;

void test ( int n ) { if ( n!=1 ) { cout<<n<<”,” if ( n%2 = =0 ) test (n/2) else test (3*n+1) } else cout<<1;

Precizaţi ce va fi afişat la apelul test(10)?

Page 2: Test i

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 funcţia recursiva:

function verif( n,k: integer): integer; begin if ( k=n ) then verif:=1 else if (n mod k=0) then verif:=0 else verif:=verif (n, k+1);

end;

int test (int n, int k) { if (k= =n) return 1; else if ( n%k= =0 ) return 0; else return test (n, k+1) }

La apelul verif (n,2) valoarea funcţiei este 1 dacă şi numai dacă:

a) ÀÎn şi n este par b) ÀÎn şi n este prim c) ÀÎn şi n este impar d) ÀÎn şi n nu este prim

R: b)

6. Fie şirul de numere definit astfel:

m, pentru n=0 şi mЄÂ

an= 4na

, dacă n este par

4 an-1, dacă n este impar Care este valoarea termenului a5 , dacă m=2 ?

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

R: a)

7. Fie următorul subprogram recursiv: procedure c ( b,a: word); begin if ( a<= b div 2) then

begin if not (b mod a<>0) then write(a,’ ’);

c (b,a+1);

end; end; void c ( unsigned b, unsigned a) { if (a <= b/2) { if (!(b%a= = 0)) cout <<a<<” “

Page 3: Test i

c (b, a+1) }

}

La apelul c (15,2), se va afişa:

a) 3 5 1 5 b) 2 4 6 7 c) 3 5 d) 1 3 5

R: c)

8. Se considera funcţia s: N* x N* → N definită astfel

La apelul funcţiei s (3,5) unde m=1 şi n=1 se va obţine a) 12 b) 11 c) 8 d) 9

R: b)

Fie programul următor: program T9; var x,z:integer; procedure t( x:integer, z:integer); begin if x>0 then begin x:=x-1; y:=y-1; t (x,y); end; begin x=3;y=1; write (x,’’,y,’’); t (x,y); writeln (x,’ ’,y,’ ’); end.

# include <iostream.h> int x,y; void t (int x, int y) { if (x>0) { x=x-1; y=y-1; t (x,y); } } void main() { x=3; y=1; cout<<x<<” ”<<y<<” ”; t (x,y); cout<<x<<” ”<<y<<” ”<<endl; }

Care este modificarea din program, astfel încât după execuţia să se afişeze 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++

Page 4: Test i

a) void t (int & x, int y); b) void t (int & x, int & y); c) void t (int x, int & y);

R: a)