TESTUL 2

   1. Care este rezultatul execuţiei subprogramului de mai jos:

 function verif (n:integer): integer;                    int verif (int n)
 begin                                                   {
    if n>1 then                                          if (n>0)
 if v[n]<verific (n-1) then                                    if (v[n-1]<verif (n-2))
                        verif:=verif (n-1)                                        return verif (n-2);
                          else                                                 else return v[n-1];
                        verif:= v[n]                           else return v[0];
    else verific:= v[1]                                  }
 end;

     a)   Determină câte elemente din vector sunt mai mari decât n
     b)   Verifică dacă toate elementele din vector sun mai mici sau egale cu n
     c)   Calculează maximul elementelor vectorului v
     d)   Calculează minimul elementelor vectorului v
                                                                                                        R: c)
   2. Fie subprogramul de tip funcţie, recursiv:

function verific (n :integer) : boolean;                 int verific ( int n)
begin                                                    {if (n<=1) if (v[1]>=0) return 1
if n<=1 then verific:=(v[1]>=0)                                         else return 0
           else verific:=(v[n]>0)or verific (n-1)          else if (v[n]>=0)||(verific (n-1)= =1) return 1
end;                                                                    else return 0;
                                                         }

       a)   Determină câte elemente din vectorul v sunt strict pozitive
       b)   Verifică dacă vectorul v cu n componente au numai elemente strict pozitive
       c)   Verifică dacă vectorul v cu n componente are cel puţin un element pozitiv
       d)   Determină câte elemente din vectorul v sunt negative
                                                                                                        R: c)

   3. Fie subprogramele
   procedure inv (n:byte);
   begin                                                   void inv (char n)
     write (n);                                            { printf (“%d”,n)
     if n>1 then inv (n-1)                                   if (n>1) inv (n-1);
   end;                                                    }

   procedure direct (n:byte);                              void direct (char n)
   begin                                                   {if (n>1) direct(n-1);
     if n>1 then direct (n-1);                               printf (“%d”,n);
     write (n);                                            }
   end;
Precizaţi ce se va tipări dacă n=4 ?
        a) 4 3 2 1 2 3 4
        b) 4 3 2 2 3 4
        c) 4 3 2 1 1 2 3 4
        d) 4 3 2 1 0 0 1 2 3 4
                                                                                                     R : c)

 4. Fie subprogramul de mai jos :

 function test (k :integer) : integer;                      int test (int k)
 begin                                                      {
    if k<3 then test:=1                                       if (k<3) return 1;
       else test:= test (k-1)+test (k-2)+1;                      else return test (k-1)+ test (k-2)+1;
 end;
                                                            }

        Ce valoare are test (test (4)) ?

        a)   1
        b)   5
        c)   4
        d)   9
                                                                                                         R: d)


6.      Completaţi funcţia de mai jos cu instrucţiunile necesare pentru a calcula numărul apariţiilor
        unui element X într-un vector v cu n componente:

 function ap (x,k :integer): integer;                       int ap (int x, int k)
 begin                                                      { if (k = =0) return f)
   if k=0 then ap:= f)                                        else { if (v[k]= =x) return d)
       else if v[k]=x then ap:= d)                               else return a)
              else ap:=a)                                                }
 end;
                                                            }

        a)   ap (x, k-1)
        b)   ap (x,k-2)+ ap (x,k-1)
        c)   ap (x,k)
        d)   1+ ap (x,k-1)
        e)   1
        f)   0
7.    Fie funcţia recursivă:

function test (n:integer):integer;                     int test (int n)
begin                                                  {
  if n>=12 then test:=n-1                                if (n>=12) return n-1
            else test:=test(test(n+2))                        else return test (test(n+2))
end;                                                   }


Ce valoare au test(8) ?

     a)    13
     b)    8
     c)    11
     d)    niciuna din a,b,c nu e variata corecta
                                                                                                   R: c)


8.    Fie funcţia recursivă:

function ael (n,k : integer):integer;                  int ael ( int n, int k)
begin                                                  {
   if k>(n div 2) then ael:= 0                          if (k>n/2) return 0
                  else if n mod k=0 then ael:=1               else if (n%k= =0) return 1
                                      else                             else return ael (n, k+1);
ael:=ael(n,k+1);                                       }
end;

Ce valoare are funcţia ael (10,3) ?
 a) 1
 b) 0
 c) programul ciclează
 d) există erori de compilare
                                                                                                   R: a)
9.    Se consideră funcţia recursivă:

function ael2 (n:integer): integer;                    int ael2 (int n)
begin                                                  { if (!(n%2)) return n/2;
if n mod 2=0 then ael2= n div 2                               else return ael2 (ael2 (3*n+1))
             else ael2:= ael2 (ael2 (3*n+1))           }
end;

      1.      Care este valoarea funcţiei ael2 (7) ?
           a) 1
           b) 11
           c) 13
d) programul se blochează
                                                 R: c)
2. De câte ori este apelată funcţia ael2 (7) ?
  a) 17
  b) 7
  c) 13
  d) nu intră în execuţie
                                                 R: b)

Test ii

  • 1.
    TESTUL 2 1. Care este rezultatul execuţiei subprogramului de mai jos: function verif (n:integer): integer; int verif (int n) begin { if n>1 then if (n>0) if v[n]<verific (n-1) then if (v[n-1]<verif (n-2)) verif:=verif (n-1) return verif (n-2); else else return v[n-1]; verif:= v[n] else return v[0]; else verific:= v[1] } end; a) Determină câte elemente din vector sunt mai mari decât n b) Verifică dacă toate elementele din vector sun mai mici sau egale cu n c) Calculează maximul elementelor vectorului v d) Calculează minimul elementelor vectorului v R: c) 2. Fie subprogramul de tip funcţie, recursiv: function verific (n :integer) : boolean; int verific ( int n) begin {if (n<=1) if (v[1]>=0) return 1 if n<=1 then verific:=(v[1]>=0) else return 0 else verific:=(v[n]>0)or verific (n-1) else if (v[n]>=0)||(verific (n-1)= =1) return 1 end; else return 0; } a) Determină câte elemente din vectorul v sunt strict pozitive b) Verifică dacă vectorul v cu n componente au numai elemente strict pozitive c) Verifică dacă vectorul v cu n componente are cel puţin un element pozitiv d) Determină câte elemente din vectorul v sunt negative R: c) 3. Fie subprogramele procedure inv (n:byte); begin void inv (char n) write (n); { printf (“%d”,n) if n>1 then inv (n-1) if (n>1) inv (n-1); end; } procedure direct (n:byte); void direct (char n) begin {if (n>1) direct(n-1); if n>1 then direct (n-1); printf (“%d”,n); write (n); } end;
  • 2.
    Precizaţi ce seva tipări dacă n=4 ? a) 4 3 2 1 2 3 4 b) 4 3 2 2 3 4 c) 4 3 2 1 1 2 3 4 d) 4 3 2 1 0 0 1 2 3 4 R : c) 4. Fie subprogramul de mai jos : function test (k :integer) : integer; int test (int k) begin { if k<3 then test:=1 if (k<3) return 1; else test:= test (k-1)+test (k-2)+1; else return test (k-1)+ test (k-2)+1; end; } Ce valoare are test (test (4)) ? a) 1 b) 5 c) 4 d) 9 R: d) 6. Completaţi funcţia de mai jos cu instrucţiunile necesare pentru a calcula numărul apariţiilor unui element X într-un vector v cu n componente: function ap (x,k :integer): integer; int ap (int x, int k) begin { if (k = =0) return f) if k=0 then ap:= f) else { if (v[k]= =x) return d) else if v[k]=x then ap:= d) else return a) else ap:=a) } end; } a) ap (x, k-1) b) ap (x,k-2)+ ap (x,k-1) c) ap (x,k) d) 1+ ap (x,k-1) e) 1 f) 0
  • 3.
    7. Fie funcţia recursivă: function test (n:integer):integer; int test (int n) begin { if n>=12 then test:=n-1 if (n>=12) return n-1 else test:=test(test(n+2)) else return test (test(n+2)) end; } Ce valoare au test(8) ? a) 13 b) 8 c) 11 d) niciuna din a,b,c nu e variata corecta R: c) 8. Fie funcţia recursivă: function ael (n,k : integer):integer; int ael ( int n, int k) begin { if k>(n div 2) then ael:= 0 if (k>n/2) return 0 else if n mod k=0 then ael:=1 else if (n%k= =0) return 1 else else return ael (n, k+1); ael:=ael(n,k+1); } end; Ce valoare are funcţia ael (10,3) ? a) 1 b) 0 c) programul ciclează d) există erori de compilare R: a) 9. Se consideră funcţia recursivă: function ael2 (n:integer): integer; int ael2 (int n) begin { if (!(n%2)) return n/2; if n mod 2=0 then ael2= n div 2 else return ael2 (ael2 (3*n+1)) else ael2:= ael2 (ael2 (3*n+1)) } end; 1. Care este valoarea funcţiei ael2 (7) ? a) 1 b) 11 c) 13
  • 4.
    d) programul seblochează R: c) 2. De câte ori este apelată funcţia ael2 (7) ? a) 17 b) 7 c) 13 d) nu intră în execuţie R: b)