PRETESTAREA EXAMENULUI DE BACALAUREAT 2003

Probă scrisă la INFORMATICĂ (Varianta C/C++)

                                                                                                                                           VARIANTA  A


u    Toţi itemii sunt obligatorii. Fiecare item are un singur răspuns corect.

u    Se acordă câte 2 puncte pentru fiecare răspuns corect. Se acordă 10 puncte din oficiu.

u    Pentru fiecare item, completaţi pe foaia de examen răspunsul pe care-l consideraţi corect cu simbolul O, iar răspunsurile considerate greşite cu simbolul X.

 

1.      

La adresele p şi u sunt memorate primul, respectiv ultimul element al unei liste liniare simplu înlănţuite L. Orice element al listei memorează în câmpul adr adresa elementului următor. Care dintre următoarele atribuiri transformă lista L într-o listă circulară?

 

a.              

p->adr=u;

b.             

p.adr=u;

c.              

u.adr=p;

d.             

u->adr=p;

 

2.      

Cu ce expresie trebuie completată secvenţa lipsă din funcţia alăturată pentru ca f(x,2) să aibă ca rezultat suma exponenţilor factorilor primi ce intră în descompunerea lui x?

Exemplu: 135=33*51, deci calc(135,2)=4

int f(int x, int d)

{if (...) return 1;

 else if (x%d==0)

          return (1+f(x/d,d));

      else return (f(x,d+1));

}

 

a.              

x<d

b.             

x<=d

c.              

x>=d

d.             

x=1

 

3.      

Subprogramul intersch realizează interschimbarea valorilor a două variabile întregi transmise prin intermediul parametrilor formali x şi y. Antetul subprogramului este:

 

a.              

int intersch(int &x, &y)

b.             

void intersch(int x, int y)

 

c.              

void intersch(int &x, int &y)

d.             

int intersch(int x)

 

4.      

Se consideră două şiruri de caractere nume şi pren reprezentând numele şi respectiv prenumele unei persoane. Se poate obţine numele complet al persoanei (numele urmat de prenume) cu ajutorul expresiei:

 

a.              

strcpy(nume,pren)

b.             

nume+pren

c.              

strcat(nume,pren)

d.             

nume&pren

 

5.      

Se consideră un şir de caractere s şi un caracter c. Poziţia pe care se găseşte c în s este dată de rezultatul funcţiei standard:

 

a.              

strlen(s,c)

b.             

strchr(s,c)

c.              

strpos(s,c)

d.             

strcpy(s,c)

 

6.      

Care este valoarea expresiei ((12-2)*2)-(11-(2*3+1))?

 

a.              

2

b.             

-16

c.              

16

d.             

28

 

7.      

Se consideră 10 liste, orice element de listă având un câmp adr ce memorează adresa elementului următor. Ştiind că p este un vector de adrese, p[i] reprezentând adresa de început a listei Li , să se afişeze numerele de ordine ale listelor nevide.

 

a.              

for(i=0;i<10;i++)

 if (p[i]) cout<<i;

b.             

for(i=0;i<10;i++)

 if (p[i]->adr) cout<<i;

 

c.              

for(i=0;i<10;i++)

 if (!p[i]) cout<<i;

d.             

for(i=0;i<10;i++)

 if (!p[i]->adr) cout<<i;

 

8.      

Se ştie că este definit subprogramul prime ce primeşte prin doi parametri x şi y două valori întregi şi returnează numărul de numere prime din intervalul închis [x,y] numai dacă x<y. Care dintre următoarele expresii este adevărată numai dacă valoarea întreagă z (z>5) este număr prim?

 

a.              

prime(2,z) ąprime(2,z+1)

b.             

prime(2,z)ąprime(2,z-1)

 

c.              

prime(z,z)=1

d.             

prime (z-1,z)=prime(z,z+1)

 

9.      

Variabilele p şi q memorează în două câmpuri x şi y două numere întregi reprezentând coordonatele punctelor P şi respectiv Q din plan. Ştiind că distanţa dintre P şi Q se calculează cu ajutorul formulei stabiliţi care dintre expresiile următoare calculează distanţa dintre P şi Q.

 

a.              

sqrt(pow(px-qx,2)+pow(py-qy,2))

 

b.             

sqrt(pow(p.x+q.x,2)–pow(p.y+q.y,2))

 

c.              

sqrt((p.x-q.x)(p.x-q.x)+(p.y-q.y)(p.y-q.y))

 

d.             

sqrt(pow(p.x-q.x,2)+pow(p.y-q.y,2))

 

10.  

Se consideră subprogramul recursiv alăturat. Ce se afişează pe ecran la apelul scrie(21)?

void scrie( int x)

{if (x>1) scrie(x div 2);

 cout<<x%2;}

 

a.              

11111

b.             

01010

c.              

00000

d.             

10101

 

11.  

Variabila vf memorea adresa elementului din vârful unei stive. Fiecare element al stivei memorează într-un câmp adr adresa următorului element din stivă. Variabila q poate memora adresa oricărui element al stivei. Să se realizeze eliminarea elementului din vârful stivei. În versiunea C se utilizează free(x) în loc de delete x.

 

a.              

q->adr=vf;vf->adr=q;delete q;

b.             

q=vf;vf=vf->adr;delete vf;

 

c.              

q=vf->adr;vf=q->adr;delete q;

d.             

q=vf;vf=q->adr;delete q;

 

12.  

Se presupune că este definită o funcţie min care primeşte două valori reale prin intermediul a doi parametri şi returnează cea mai mică dintre cele două valori. Stabiliţi care dintre următoarele expresii este egală cu cea mai mare dintre valorile reale a şi b.

 

a.              

a-min(a,b)+b-min(b,a)

b.             

min(a,b)

c.              

min(a,b)-a-b

d.             

a+b–min(a,b)

 

13.  

Se consideră că variabila cap memorează adresa de început a unei liste liniare simplu înlănţuite L. Orice element al listei memorează într-un câmp numit adr adresa elementului următor. Care dintre următoarele expresii reprezintă adresa celui de-al treilea element al listei.

 

a.              

cap->adr

b.             

cap.adr

c.              

cap->adr->adr

d.             

cap.adr.adr

 

Se consideră programul pseudocod alăturat.

 

Următorii 12 itemi se referă la acest program.

Observaţie: s-a notat cu [x/y] partea întreagă a valorii raportului .

citeşte n,a {numere naturale}

esteß0

repetă

   dacă n=a atunci esteß1

   nß[n/10]

până când n=0 sau este=1

scrie este

 

14.  

Ştiind că valoarea dată a lui n este 14262, determinaţi care este valoarea dată pentru a astfel încât să se afişeze valoarea 1

 

a.              

42

b.             

14

c.              

1462

d.             

41

 

15.  

Instrucţiunea dacă n=a atunci esteß1 se scrie ca instrucţiune C/C++ astfel:

 

a.              

if (n==a) este==1

b.             

if (n=a) este=1

 

c.              

if (n==a) este=1

d.             

if (n=a)  este==1

 

16.  

Declararea variabilelor în programul C/C++ corespunzător se realizează prin secvenţa:

 

a.              

int:n,a,este;

b.             

int a,n,este

c.              

a,n,este:int;

d.             

int n,a,este;

 

17.  

Ce se afişează dacă valorile iniţiale (citite) pentru n şi a sunt 57 şi respectiv 57?

 

a.              

nu se afişează nimic

b.             

o valoare strict pozitivă

 

c.              

o valoare strict negativă

d.             

0

 

18.  

Programul afişează valoarea 1 dacă şi numai dacă:

 

a.              

a este format numai din cifre ale lui n

b.             

a are exact aceleaşi cifre ca şi n

 

c.              

a este un prefix al lui n

d.             

n este un prefix al lui a

 

19.  

Prin transformarea structurii repetă ... până când şi a condiţiei de oprire în structură cât timp corespunzătoare, algoritmul obţinut

 

a.              

nu funcţionează la fel pentru nici un set de date de intrare

 

b.             

funcţionează la fel pentru seturile de date pentru care nu ciclează infinit

 

c.              

nu funcţionează la fel pentru unele seturi de date de intrare

 

d.             

funcţionează la fel pentru orice set de date de intrare

 

20.  

Atribuirea nß[n/10] se scrie ca instrucţiune C/C++ astfel:

 

a.              

n=n:10

b.             

n%=10

c.              

n=n%10

d.             

n=n/10

 

21.  

Ce tip de instrucţiune repetitivă este folosită în program?

 

a.              

cu test iniţial

b.             

cu test final

c.              

multiplă

d.             

cu contor

 

22.  

De câte ori se execută instrucţiunea nß[n/10]dacă valorile iniţiale (citite) pentru n şi a sunt 437 şi respectiv 40?

 

a.              

4

b.             

2

c.              

3

d.             

1

 

23.  

Ştiind că valoarea dată a lui a este 37, determinaţi care este valoarea dată pentru n astfel încât să se afişeze valoarea 0.

 

a.              

370

b.             

37

c.              

3

d.             

3707

 

24.  

Stabiliţi o pereche de valori pentru n şi a astfel încât secvenţa să cicleze infinit:

 

a.              

n=0 şi aÎN*

b.             

nÎN*  şi a=0

c.              

n=0 şi a=0

d.             

nu există

 

25.  

Ce se afişează dacă valorile iniţiale (citite) pentru n şi a sunt 507 şi respectiv 57?

 

a.              

1

b.             

2

c.              

nimic

d.             

0

 

26.  

În orice graf neorientat cu n noduri notate 1, 2, ..., n, cu m muchii şi cu gradele nodurilor notate d(1), d(2), ..., d(n) există relaţia:

 

a.              

d(1)=d(2)=...=d(n)

b.             

d(1)+d(2)+...+d(n)=2m

 

c.              

d(1)+d(2)+...+d(n)=m

d.             

d(1)+d(2)+...+d(n)=m+n

 

27.  

Considerând un graf neorientat având nodurile notate cu 1, 2, 3, 4, 5, corespunzător liniilor matricei de adiacenţă date, stabiliţi dacă nodurile 1 şi 3:

0 0 0 0 0

0 0 0 1 1

0 0 0 0 0

0 1 0 0 1

0 1 0 1 0

 

a.              

sunt noduri izolate

b.             

sunt conectate printr-un lanţ

 

c.              

aparţin aceleiaşi componente conexe

d.             

sunt noduri adiacente

 

28.  

Se consideră un graf neorientat cu 7 noduri şi 3 muchii. Numărul de componente conexe din care poate fi format graful este:

 

a.              

exact 4

b.             

cel puţin 5

c.              

4 sau 5

d.             

3 sau 4

 

29.  

Se consideră un graf orientat cu 6 noduri etichetate cu numere de la 1 la 6 şi 6 arce astfel încât există un arc de la fiecare nod cu eticheta i către un nod cu eticheta i*2 dacă există un astfel de nod sau către nodul cu eticheta i –1 în caz contrar. Care este lungimea maximă a unui drum în graf? (lungimea drumului=numărul arce)

 

a.              

2

b.             

4

c.              

Ą

d.             

3

 

30.  

Considerând un graf orientat având matricea de adiacenţă alturată, stabiliţi câte dintre nodurile grafului au gradul interior (intern) egal cu gradul exterior (extern):

0 1 0 1 0

0 0 0 0 1

0 1 0 0 0

0 1 1 0 0

0 1 0 1 0

 

a.              

2

b.             

1

c.              

3

d.             

0

 

31.  

Se consideră un arbore cu următoarele proprietăţi: rădăcina este nodul 1 (considerat de nivel 1) şi fiecare nod  i  (cu 1Ł i Ł 3) aflat pe nivelul j are ca descendenţi nodurile i+j şi i+2*j. Nodurile i cu (cu  i > 3) sunt noduri terminale (frunze). Stabiliţi care dintre vectorii următori este vectorul de taţi (sau de predecesori) corespunzător arborelui:

 

a.              

0 1 1 2 2 3 3

b.             

0 1 1 2 3 2 3

 

c.              

0 –1 1 –1 –1 1 1

d.             

0 1 2 2 1 3 3

 

32.  

Orice graf neorientat cu n noduri şi n–1 muchii

 

a.              

este aciclic şi neconex

b.             

este conex şi conţine un ciclu

 

c.              

este conex dacă  şi numai dacă este aciclic

d.             

este un arbore

 

33.  

Orice graf neorientat cu n noduri are o matrice de adiacenţă cu următoarea proprietate:

 

a.              

are suma elementelor egală cu n

b.             

este simetrică faţă de diagonala secundară

 

c.              

este simetrică faţă de diagonala principală

d.             

este formată numai din valorile 0, 1 şi –1

 

34.  

Care dintre următoarele matrice poate fi matricea de adiacenţă a grafului din figura alăturată?

 

a.              

1 1 0 1

1 1 0 1

0 0 1 1

1 1 1 1

b.             

0 1 1 1

1 0 0 0

1 0 1 0

1 0 1 0

c.              

0 1 0 1

1 0 1 0

0 1 0 1

1 0 1 0

d.             

0 1 0 1

1 0 0 1

0 0 0 1

1 1 1 0

 

35.  

Se consideră graful neorientat având nodurile notate cu 1, 2, 3, 4, 5, corespunzător liniilor matricei de adiacenţă alăturate. Stabiliţi care dintre următoarele propoziţii este adevărată.

0 0 1 0 0

0 0 0 1 1

1 0 0 0 0

0 1 0 0 1

0 1 0 1 0

 

a.              

orice muchie s-ar elimina graful devine aciclic

b.             

graful este aciclic

 

c.              

orice nouă muchie s-ar adăuga graful devine conex

d.             

graful este conex

 

În următorii 10 itemi se consideră: r, i, x şi y variabile întregi, a şi b variabile reale, iar v un vector cu 100 de componente reale. În secvenţele pseudocod s-a notat cu x%y restul împărţirii întregi a lui x la y şi cu [x/y] partea întreagă a valorii raportului numerelor x şi y.

 

36.  

Ce valoare trebuie să aibă iniţial variabila n astfel încât ca urmare a executării algoritmului alăturat să se afişeze 360?

pentru i=1,5 execută

  nßn*i

sfârşit pentru

scrie n

 

a.              

0

b.             

2

c.              

1

d.             

3

 

37.  

Care dintre programele următoare şi afişează numai numere prime?

 

a.              

pentru i=2,100 execută

   y=2

   cât timp i%y=0 execută y=y+1

   dacă y=i atunci scrie y

sfârşit pentru

b.             

pentru i=2,100 execută

  y=1

  cât timp i%yą0 execută y=y+1

  dacă y=i atunci scrie y

sfârşit pentru

 

c.              

pentru i=2,100 execută

   y=1

   repetă y=y+1 până când i%y=0

   dacă y=i atunci scrie y

sfârşit pentru

d.             

y=2

pentru i=2,100 execută

  cât timp i%yą0 execută y=y+1

  dacă y=i atunci scrie y

sfârşit pentru

 

38.  

Stabiliţi care dintre următoarele expresii este adevărată dacă şi numai dacă x este număr natural impar

 

a.              

(x>0) || (x % 2!=0)

b.             

(x>=0) && (x/2=1)

 

c.              

(x>0) && (x % 2=1)

d.             

(x>=0) || (x % 2!=0)

 

39.  

Stabiliţi care dintre următoarele expresii este adevărată dacă şi numai dacă x aparţine intervalului închis [a,b]

 

a.              

(x>a) && (x<b)

b.             

(x>=a) || (x<=b)

 

c.              

(x<a) && (x>b)

d.             

!((x<a) || (x>b))

 

40.  

Să se completeze secvenţa lipsă (marcată prin puncte de suspensie) din algoritmul alăturat astfel încât acesta să determine şi să memoreze în variabila x cea mai mare cifră ce apare în scrierea numărului natural r.

x ß 0

cât timp r>0 execută

  y ß r % 10

  dacă x<y atunci x ß y

  ...

sfârşit cât timp

 

a.              

rß(r-x)/10

b.             

rß(r-y)/10

c.              

rßr % 10

d.             

yß [y/10]

 

41.  

Variabila r, iniţial egală cu 0, va memora, la finalul executării algoritmului alăturat, numărul de valori distincte existente în vectorul v. Care este valoarea sau expresia  care trebuie plasată în locul punctelor de suspensie?

pentru x=1,100 execută

  aßvx ; iß1

  pentru y=1,... execută

    dacă vy=a atunci iß0

  sfârşit pentru

  rßr+i

sfârşit pentru

 

a.              

nu există

b.             

100

c.              

x

d.             

x-1  

 

42.  

Pentru ordonarea descrescătoare a valorilor celor 100 de componente ale vectorului v, ordonare realizată prin metoda bulelor, nu sunt necesare mai mult de

 

a.              

9701 comparări

b.             

4950 comparări

c.              

9900 comparări

d.             

100 comparări

 

43.  

Se consideră secvenţa alăturată care determină cel mai mare divizor comun al numerelor memorate în variabilele x şi y. Ce valoare trebuie afişată la sfârşitul structurii repetitive?

repetă

   rßx % y

   xßy

   yßr

până când r=0

 

a.              

x%y

b.             

x

c.              

r

d.             

y

 

44.  

Ştiind că variabila r memorează iniţial valoarea 0, stabiliţi ce reprezintă valoarea memorată de aceasta după încheierea secvenţei alăturate:

pentru i=1,y-1 execută

    dacă i%x=0 atunci rßr+1

sfârşit pentru

a.              

numărul de multipli ai lui y mai mici decât x

b.             

numărul de divizori ai lui y mai mici decât x

 

c.              

numărul de divizori ai lui x mai mici decât y

d.             

numărul de multipli ai lui x mai mici decât y

 

45.  

Ştiind că valoarea iniţială a variabilei y este 0, stabiliţi care dintre secvenţele următoare afişează şirul  0 1 3 6 10 15 21 28 36 45 55 ?

 

a.              

pentru i=1,10 execută

  scrie y

  y=y+i

sfârşit pentru

b.             

pentru i=1,11 execută

   scrie y+i

sfârşit pentru

 

c.              

pentru i=1,10 execută

  y=y+i

  scrie y

sfârşit pentru

d.             

pentru i=1,11 execută

  scrie y

  y=y+i

sfârşit pentru