Descărcați ca docx, pdf sau txt
Descărcați ca docx, pdf sau txt
Sunteți pe pagina 1din 9

VARIANTA 9 - SUBIECTUL 1 (30p)

Pentru itemul 1, scrieţi pe foaia de examen litera corespunzătoare răspunsului corect.

1.     Se dau variabilele a şi b de tip întreg, a memorând valoarea 4, iar b valoarea 2. Care dintre expresiile Pascal|C/C++ de mai jos are
valoarea FALSE|0? (4p.)

  Limbajul Pascal Limbajul C/C++

a.   a-b <> 0 a-b != 0

b.   a+b > a mod b+1 a+b > a%b+1

c.   a-2*b = 0 a-2*b == 0

d.   NOT (a = 2*b) !(a == 2*b)

2.  Se consideră algoritmul următor 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 [a] partea întreagă a numărului real a.

a) Ce valoare va fi afişată dacă se citeşte pentru n=1454? (6p.)

b) Scrieţi câte numere naturale formate din exact 3 cifre pot fi citite pentru variabila n astfel încat în urma executării algoritmului pentru
fiecare dintre valorile citite se va afişa valoarea 4. (4p.)

c) Scrieţi în pseudocod un algoritm echivalent cu cel dat care să conţină, în locul structurii cât timp...execută, o structură
repetitivă de alt tip. (6p.)

d) Scrieţi programul Pascal/C/C++ corespunzător algoritmului dat. (10p.)

VARIANTA 9 - SUBIECTUL 2 (30p)


Pentru itemii 1 şi 2, scrieţi pe foaia de examen litera corespunzătoare răspunsului corect.

1.       Se consideră un arbore cu 10 noduri, numerotate de la 1 la 10, şi cu vectorul "de taţi" următor: (0,1,1,1,3,3,3,4,7,7). Fii nodului 3
sunt: (4p.)

a.    5,6,7 b.    6,7 c.     5,6,8 d.    5,7

2.       Se consideră declarările următoare în care variabila x memorează informaţiile referitoare la nume, prenume si la cele 2 note ale
unui elev. Care dintre instrucţiuni calculează în variabila reală med, media aritmetică a notelor elevului ale cărui informaţii sunt
memorate in variabila x? (4p.)

Limbajul Pascal Limbajul C/C++

a. med:=(x.nota1+x.nota2)/2; med =(x.nota1+x.nota2)/2.0;

b. med:=(nota1+nota2)/2; med =(nota1+nota2)/2.0;

c. x.med:=(x.nota1+x.nota2)/2; x.med=(x.nota1+x.nota2)/2.0;

d. med:=(x,nota1+x,nota2)/2 med =(x,nota1+x,nota2)/2.0;

Scrieţi pe foaia de examen răspunsul pentru fiecare dintre cerinţele următoare.

3.       Avem un graf neorientat cu 6 noduri şi matricea de adiacenţa corespunzătoare lui:


0 1 0 0 0 1
1 0 1 0 1 1
0 1 0 1 1 1
0 0 1 0 1 0
0 1 1 1 0 1
1 1 1 0 1 0
a) Reprezentaţi graful printr-un desen. (2p)
b) Scrieţi care este numărul minim de muchii ce trebuiesc adăugate astfel încat graful să fie eulerian. (4p)

4.       În secvenţa următoare, variabilele i şi j sunt de tip integer|int, iar variabila A memorează o matrice cu 4 linii şi 4 coloane
(numerotate de la 1 la 4) cu elemente de tip integer|int.
Care este suma elementelor de pe diagonala principală a matricei A la finalul executării secvenţei? (6p.)

Limbajul Pascal Limbajul C/C++

5.       Scrieţi un program care citeşte de la tastatură un număr natural n (n<100) si apoi n cuvinte, câte unul pe linie. Cuvintele sunt
formate fiecare din minimum două litere şi maximum 20, doar litere mici ale alfabetului englez. Programul va afişa pe ecran
numărul de cuvinte care rimează cu primul cuvânt citit. Spunem că două cuvinte rimează dacă au ultimele două caractere identice.
Exemplu. Pentru cuvintele:
care
masa
mare
casa
test
lucrare
se va afişa: 2 deoarece cuvântul care rimează cu cuvintele mare si lucrare. (10p.)

VARIANTA 9 - SUBIECTUL 3 (30p)

Pentru itemul 1, scrieţi pe foaia de examen litera corespunzătoare răspunsului corect.

1.       La generarea numerelor formate cu n cifre cu elementele mulţimii {0,4,7} se utilizează un algoritm backtracking care, pentru n=2,
generează, în ordine, numerele 40, 44, 47, 70, 74, 77. Dacă n=4 şi se utilizează acelaşi algoritm, care este numărul generat
imediat după numărul 4007? (4p.)

a.     7000 b.    4040 c.   704 d.   7004


0

Scrieţi pe foaia de examen răspunsul pentru fiecare dintre cerinţele următoare.

2.       Funcţia f are definiţia următoare:

Limbajul Pascal Limbajul C/C++


a) Scrieţi valoarea care se obţine în urma apelului f(5427). (3p.)
b) Scrieţi cea mai mare valoare de 5 cifre pe care o poate avea o variabilă x, astfel încât pentru apelul f(x) să se obţină o valoare de 5 cifre identice. (3p.)

3.       Scrieţi definiţia completă a unui subprogram sub, cu patru parametri:


- v, un tablou unidimensional cu cel mult 100 de elemente numere întregi cu cel mult 5 cifre fiecare;
- n, un număr natural nenul mai mic sau egal cu 100 ce reprezintă numărul decomponente ale tabloului primit prin intermediul
parametrului v;
- a şi b, numere naturale intre 1 si 100.
Subprogramul caută primul element divizibil cu 3 in secvenţa v[a], v[a+1], ..., v[b] şi returnează poziţia acestuia, dacă există
un astfel de element sau valoarea -1 în caz contrar. (10p.)

4.       Fişierul text bac.in conţine pe prima linie două numere naturale x şi y , x<y (formate din cel mult 9 cifre fiecare), separate printr-un
spaţiu.
a) Scrieţi un program care citeşte numerele x şi y şi apoi, 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 câte dintre numerele din intervalul [x,y] au proprietatea că atât ele cât si
răsturnatele lor sunt pătrate perfecte. (8p.)
Exemplu: dacă fişierul bac.in are conţinutul: 5 1000
atunci, pe ecran se va afişa numărul 9 reprezentând numărul de valori din intervalul [5,1000] care au proprietatea cerută şi anume: 9,
121, 144, 169, 441, 484, 676, 900, 961.
b) Descrieţi în limbaj natural metoda utilizată şi explicaţi în ce constă eficienţa ei. (2p.)

VARIANTA 9 - SUBIECTUL 1 - REZOLVARE (30p)


1.         Se accesează valorile memorate în variabilele a și b folosind operatorii mod|%,-, *.
Pentru precizarea răspunsului d) se acordă 4p.

2.       a) Se compară succesiv cifrele lui n cu valoarea variabilei max iniţializată la început cu -1. Pentru a avea acces la toate cifrele lui n, se
incepe compararea cu cifra unitaţilor şi apoi se elimină acestă cifră repetând procedeul pănă când n devine 0. Variabila max va
memora cea mai mare cifră a numărului n. Pentru precizarea valorii 5 se acordă 6p.

  b) Pentru variabila n poate fi citit orice număr natural de trei cifre care are prima cifră diferită de 0. Sunt 4 valori posibile pentru prima
cifră, 5 valori posibile pentru a doua cifră şi 5 valori posibile pentru a treia cifră. În total sunt 1x5x5+4x1x5+4x5x1=65 numere care
pot fi citite pentru variabila n. Pentru precizarea valorii 65 se acordă 4p.

  c) Înlocuirea structurii cât timp n>0 execută ... presupune utilizarea unei structuri repetitive repetă - cât


timp saurepetă - până când:

Pentru alegerea unei structuri repetitive se acordă 2p., pentru testarea condiţiei de continuare sau oprire se acordă 2p, iar pentru
scrierea integrală a restului algoritmului se mai acordă 2p. - în total 6p.

  d) Pentru instrucţiunile corecte de declarare a variabilelor, de citire a datelor, de afişare a rezultatului şi de decizie se acordă câte 1p.,
pentru instrucţiunea repetitivă se acordă 3p., iar pentru celelalte atribuiri se acordă 2p. Pentru structura corectă a programului se mai
acordă 1p., în total 10p.

VARIANTA 9 - SUBIECTUL 2 - REZOLVARE (30p)

1.      Din vectorul de referinţe ascendente deducem că rădăcina arborelui este nodul 1 (tata[1]=0). Observăm că nodurile 5,6,7 sunt fii
nodului 3.

Pentru precizarea răspunsului a) se acordă 4p.

2.      Pentru răspunsul a) se acordă 4p.


3.      Într-un graf G=(X,U) se numeşte ciclu eulerian un ciclu care conţine toate muchiile grafului. Se numeşte graf eulerian un graf care conţine
un ciclu eulerian.
a)     Pentru reprezentare graf se acordă 2p.

b)    Pentru răspunsul 0 se acordă 4p.

4.      La finalul executării secvenţei date conţinutul matricei A este:


0 4 1 7
5 1 7 1
1 8 1 10
9 1 11 2
Se observă că suma elementelor de pe diagonala principală este 4 (=0+1+1+2)
Pentru scrierea numărului 4 se acordă 6p.

5.      Pentru rezolvarea acestei probleme ca soluţie se propune scrierea unei funcţii care primeşte două şiruri ca parametri şi testează dacă
acestea rimează. Apoi ar trebui să numărăm pentru primul cuvânt cu ce cuvinte din şir rimează (mai exact cu câte cuvinte care sunt după el
în şir rimează).
Se pot utiliza funcţiile predefinite pentru şiruri de caractere specifice limbajului.
Pentru declararea corectă a variabilelor se acordă 2p. Pentru citirea şirului se acordă 2p. Pentru numărarea apariţiilor sufixelor de două litere
identice cu primul sufix se acordă 2p. Pentru afișarea numărului de cuvinte cu proprietatea cerută se acordă 2p.
Pentru corectitudinea globală a programului se acordă 2p - în total 10p.

Limbajul Pascal Limbajul C/C++


var s,t:string; #include <iostream>
l1,l2,k,n,i:byte; #include <cstring>
begin using namespace std;
readln(n);
readln(s); int main()
l1:=length(s); {
int n;
for i:=2 to n do begin cin >> n;
readln(t); char cuv1[21], cuv2[21];
l2:=length(t); cin >> cuv1;
if (s[l1-1]=t[l2-1]) and int s = strlen(cuv1);
(s[l1]=t[l2]) int nr = 0;
then inc(k); for(int i = 1; i < n; i++)
end; {
writeln(k); cin >> cuv2;
end. int s2 = strlen(cuv2);
if(cuv2[s2-2]==cuv1[s-2] &&
cuv2[s2-1]==cuv1[s-1])
nr++;
}
cout << nr;
return 0;
}

VARIANTA 9 - SUBIECTUL 3 - REZOLVARE (30p)

1.        Se generează în aceeasi manieră ca în exemplul din enunt.


Pentru răspunsul b) se acordă 4p.

2.      a) Se urmăresc apelurile recursive și se fac calculele:

Pentru răspunsul 4536 se acordă 3p.

  b) Cea mai mare valoare de 5 cifre pe care o poate avea o variabilă x, astfel încât pentru apelul f(x) să se obţină o valoare de 5 cifre
identice este 99999.
Pentru răspunsul 99999 se acordă 3p.

3.   Limbajul Pascal Limbajul C/C++


function sub(n,a,b:byte;v:vector):integer; int sub(int v[100], int n, int a, int b)
var i:byte;rezultat:integer; {
begin int i;
i:=a; i=a;
while (i<=b) and (v[i] mod 3 <>0) do while(i<=b && a[i]%3!=0) i++;
if i=b+1 then rezultat:= -1 if (i==b+1) return -1;
else rezultat:= i; else return i;
end; }

Pentru antet corect se acordă 2p. Pentru condiţia divizibilităţii din tabloul a se acordă 2p. Pentru folosirea corectă a structurii while se
dau 2p, iar pentru determinarea poziției se acordă 2p. Pentru corectitudinea globală a subprogramului 2p. - în total 10p.

4. b) Algoritmul de rezolvare propus parcurge toate numerele de la radical din x până la radical din y, apoi construiește răsturnatul
fiecărui pătrat perfect și verifică dacă și răsturnatul este pătrat perfect.
Eficiența algoritmului, ca timp de executare, constă în faptul că parcurgem o singură dată șirul de numere. Ca spațiu de memorie,
soluția propusă este eficientă, deoarece utilizează doar variabile simple, fără folosirea unor structuri suplimentare de date.
Pentru o descriere coerentă a metodei se acordă 1p., iar pentru justificarea eficienței, încă 1p. - în total 2p.

  a) Limbajul Pascal Limbajul C/C++


var f:text; #include <iostream>
a,b,x,y,r,i,k:longint; #include <fstream>
begin #include <cmath>
assign(f,'bac.in');reset(f); using namespace std;
read(f,x,y); ifstream f("bac.in");
k:=0; int main()
a:=x; {
x:=trunc(sqrt(a)); int a,b, x,y,i,r,k=0;
if x*x<a then inc(x); f>>x>>y;
y:=trunc(sqrt(y)); a=x;
for i:=x to y do begin x=(int)sqrt(a);
a:=i*i; if (x*x<a) x++;
r:=0; y=(int)sqrt(y);
while a>0 do begin for(i=x;i<=y;i++)
r:=r*10+a mod 10; {
a:=a div 10 a=i*i;
end; r=0;
b:=trunc(sqrt(r)); while(a>0)
if (x<=b) and (b<=y) and (b*b=r) {
then k:=k+1; r=r*10+a%10;
end; a=a/10;
writeln(k); }
close(f); b=(int)sqrt(r);
end. if (x<=b && b<=y && b*b==r) k++;
}
cout<<k;
f.close();
return 0;
}

Se acordă 1p. pentru operaţiile cu fişiere (declarare, nume corect şi deschidere pentru citire), încă 1p. pentru citirea tuturor numerelor
din fişier, 1p. pentru un algoritm principial corect, încă 1p. pentru determinarea valorii cerute, 1p. pentru afişarea ei, 1p. pentru
corectitudinea formală (declararea variabilelor, structura programului, sintaxa instrucţiunilor, etc.).
Se acordă 1p. pentru alegerea unui algoritm eficient ca timp de executare şi 1p. pentru utilizarea eficientă a memoriei. - în total 8p.

S-ar putea să vă placă și