VARIANTA 22
Subiectul 1 (20p)
Pentru fiecare dintre itemii de la 1 la 5, scrieţi pe foaia de examen litera
corespunzătoare răspunsului corect. Fiecare răspuns corect se notează cu 4 puncte.
1. Indicați ce valori va avea variabila de tip întreg x după ce se execută următoarea
secvență de operații.
Limbajul Pascal Limbajul C/C++
x:=2021 div 100; x=2021/100;
y:=123 mod 10*3 div 8; y=123%10*3/8;
x:=x+y; x=x+y;
write(x); cout<<x; | printf("%d",x);
a. 4 b. 20 c. 21 d. 22
2. Pentru subprogramul f cu definiția următoare, indicați ce se va afișa în urma apelului
f(2).
Limbajul Pascal Limbajul C/C++
procedure f (n:integer); void f(int n)
var i:integer; {int i;
begin if(n>0)
if(n>0) then for(i=1;i<=n;i++)
for i:=1 to n do {f(n-2);
begin cout<<i<<’ ’;
f(n-2); | printf(“%d”,i);
write(i,' ') }
end }
end;
a. 1 0 b. 1 2 c. 2 0 d. 2 1
3. Utilizând metoda Backtracking se generează toate tripletele cu litere din mulțimea
{a,b,c,d,e,f}, astfel încât să nu fie două vocale alăturate. Primele triplete generate
sunt: aba, abb, abc, abd, abf,...Folosind acceași metodă se generează
toate tripletele cu litere din același interval, dar să nu conțină două consoane alăturate.
Indicați care sunt ultimele trei triplete generate.
a. fec fed fef b. fee fec fef
c. fee fed fef d. fed fee fef
4. Se
4 consideră un arbore cu rădăcină care are 2021 de noduri. Indicați numărul minim
de
.
frunze pe care îl poate avea arborele.
a. 1 b. 2 c. 2020 d. 2021
192
5. Un graf complet are 5050 muchii. Indicați numărul de noduri ale grafului.
a. 50 b. 51 c. 100 d. 101
Subiectul 2 (40p)
Scrieţi pe foaia de examen răspunsul pentru fiecare dintre cerinţele următoare.
1. Algoritmul următor este reprezentat în pseudocod.
S-a notat cu a%b restul împărţirii numărului întreg a la numărul întreg nenul b şi cu
[c] partea întreagă a numărului real c.
citeşte m,n (numere naturale nenule)
a m
b n
r a%b
┌cât timp r<>0 execută
| a b
| b r
| r a%b
└■
a m/b
b n/b
nr 0
┌cât timp a<>1 și b<>1 execută
| ┌dacă a>b atunci a a%b
| | altfel b b%a
| └■
| nr nr+1
└■
scrie nr
a) Scrieți ce valoare va fi afişată dacă se citesc valorile 195 şi 120. (6p.)
b) Pentru n=4, scrieţi o valoare care trebuie să fie introdusă pentru m astfel încât
rezultatul afişat să fie 0. (6p.)
c) Scrieţi în pseudocod un algoritm, echivalent cu cel dat, în care să se înlocuiască prima
structură cât timp...execută cu o structură repetitivă de alt tip.(6p.)
d) Scrieţi programul Pascal/C/C++ corespunzător algoritmului dat. (10p.)
Se consideră următoarele declarări, care memorează date despre un album cu melodii.
2.
Scrieți o secvență de instrucțiuni care afișează pentru primele trei melodii din album:
titlul, durata și autorul. (6p.)
193
Limbajul Pascal Limbajul C/C++
type melodie=record struct melodie
titlu:string; {char titlu[50];
durata:real; float durata;
autor:string; end; char autor[50];};
type album=record; struct album
nume:string; {char nume[50];
m:array[1..10] of melodie; melodie m[10];}
end; a;
var a:album;
Scrieți ce se afișează pe ecran în urma executării următoarei secvențe, știind că
3.
a=”informatician” și b=”informatica”.(6p.)
Limbajul Pascal Limbajul C/C++
i:=0; i=0;
while(a[i]=b[i]) while(a[i]==b[i])
begin {strcpy(a+i,a+i+1);
delete(a,i,1); strcpy(b+i,b+i+1);
delete(b,i,1); }
end; cout<<a<<' '<<b;
write(a,' ',b); | printf("%s %s",a,b);
Subiectul 3 (30p)
Scrieţi pe foaia de examen răspunsul pentru fiecare dintre cerinţele următoare.
Scrieţi definiţia completă a subprogramului sub, cu doi parametri, care primeşte prin
1.
intermediul parametrului x un număr natural de cel mult 8 cifre și furnizează prin al
doilea parametru n, numărul factorilor primi distincți din descompunerea lui x.
Exemplu: pentru x=60 valoarea returnată prin n va fi 3. În descompunerea numărului
60 sunt trei factori primi: 2, 3, și 5 (60=2*2*3*5).(10p.)
Să se construiască o matrice cu n linii şi n coloane ale cărei elemente au valori după
2.
cum urmează: elementele aflate pe diagonalele matricei vor avea valoarea -1,
elementele de pe contur, cu excepţia celor de pe diagonale, vor fi egale cu valoarea
absolută a diferenţei indicilor specifici fiecărui element, iar celelalte elementele vor
avea o valoare ce reprezintă suma celor trei elemente aflate pe linia de deasupra
elementului respectiv: cel aflat pe aceeași coloană, cel aflat pe coloana precedentă și cel
aflat pe coloana următoare. De exemplu, elementul de pe contur, aflat pe linia a doua și
coloana a cincea va fi egal cu |2-5|, iar elementul din interior aflat pe linia a doua și
coloana a treia va fi egal cu suma celor trei elemente aflate deasupra sa (1+2+3).
Scrieţi programul care citeşte de la tastatură o valoare naturală n (2≤n≤24),
construieşte matricea conform cerinţei şi o afişează pe ecran, pe linii, cu spaţii între
elementele de pe fiecare linie. (10p.)
194
Exemplu: dacă n=5, se afișează matricea:
-1 1 2 3 -1
1 -1 6 -1 3
2 6 -1 8 2
3 -1 13 -1 1
-1 3 2 1 -1
3. Fişierul de intrare [Link] conţine n (2≤n≤100000) numere naturale, de cel mult
8 cifre, separate printr-un spațiu liber.
a) Scrieţi un program care, utilizând un algoritm eficient din punct de vedere al timpului
de executare şi al spaţiului de memorie utilizat, determină şi afişează pe ecran în ordine
strict descrescătoare, separate printr-un spaţiu, toate cifrele numerelor naturale din
fişierul [Link] .(8p.)
Exemplu: dacă fişierul [Link] conţine valorile
123412 87996540 23 66543 10098 1 76 , atunci se afişează:
9 9 9 8 8 7 7 6 6 6 6 5 5 4 4 4 3 3 3 2 2 2 1 1 1 1 0 0 0
b) Descrieţi în limbaj natural algoritmul proiectat, justificând eficiența acestuia. (2p).
Observaţii:
• Toate subiectele sunt obligatorii. Se acordă 10 puncte din oficiu.
• Timpul efectiv de lucru este de 3 ore.
• În rezolvările cerute, identificatorii utilizaţi trebuie să respecte precizările din enunţ (bold), iar
în lipsa unor precizări explicite, notaţiile trebuie să corespundă cu semnificaţiile asociate
acestora (eventual în formă prescurtată).
• În programele cerute, datele de intrare se consideră corecte, validarea acestora nefiind
necesară.
195