Sunteți pe pagina 1din 2

Proba E.

d) - SIMULARE
Informatică - Limbajul C/C++

• Toate subiectele sunt obligatorii. Se acordă 10 puncte din oficiu.


• Timpul de lucru efectiv este de 3 ore.
• Identificatorii utilizaţi în rezolvări 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ă). Datele de intrare se
consideră corecte, validarea lor nefiind necesară.
• În grafurile din cerințe oricare arc/muchie are extremități distincte și oricare două arce/muchii diferă prin cel puțin una
dintre extremități.
SUBIECTUL I (20 puncte)
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. Știind că n este o variabilă întreagă ce memorează un număr natural, stabiliți care dintre următoarele expresii este
egală cu zero dacă și numai dacă n este un număr nedivizibil cu 3?
a) (2 – n%3) % 2 b) (1 – n%3) * ( 2 – n%3)
c) (1 – n%3) % 2 d) (1 – n%3) + ( 2 – n%3)
2. Utilizând metoda backtracking, sunt generate în ordine lexicografică toate anagramele cuvântului mouse astfel încât
două vocale să nu fie alăturate. Să se precizeze câte anagrame se generează între soluțiile esumo și osemu.
a) 3 b) 0 c) 2 d) 1
3. Fie următorul subprogram recursiv:
int bac(int n, int k) {
if (n>0)
if (n%10==k) return 1 + bac(n/10, k+1);
else return bac(n/10, k);
else return 0;
}
Ce va afișa următoarea instrucțiune: cout<<bac(261305,0)<<' '<<bac(3215,5)?
a) 3 1 b) 1 1 c) 3 3 d) 6 4
4. Un graf orientat are 12 arce, 3 componente tare conexe, iar fiecare vârf al său are gradul interior un număr
nenul. Numărul maxim de noduri pe care le poate avea graful este:
a) 12 b) 11 c) 9 d) 8
5. Se consideră graful neorientat cu n=7 noduri, reprezentat prin următoarele liste de adiacență:
1: 7; 2: 4, 6; 3: 5; 4: 2; 5: 3; 6: 2; 7: 1;
Care este numărul de componente conexe ale grafului?
a) 1 b) 3 c) 2 d) 4

SUBIECTUL II (40 puncte)


Scrieți răspunsul pentru fiecare dintre cerințele următoare.
1. Se consideră algoritmul următor, scris în pseudocod, în care s-a notat cu [x] partea întreagă a numărului real x iar
cu x%y restul împărțirii numărului întreg x la numărul întreg nenul y.
citește n (număr natural nenul)
i ←1
nr ←0
┌cât timp i < [n/2] execută
| j←n–1
| ┌cât timp j > i execută
| | ┌dacă j % i = 0 atunci
| | | nr ← nr +1
| | └■
| | j←j–1
| └■
| i←i+1
└■
scrie nr
a) Scrieți ce valoare se va afișa dacă se citește pentru n valoarea 10. (6 p)
b) Precizați toate valorile ce se pot citi pentru n astfel încât să se afișeze, de fiecare dată, valoarea 0. (6 p)
c) Scrieți în pseudocod un algoritm echivalent cu cel dat care să utilizeze o singură structură repetitivă. (6 p)
d) Scrieți programul C/C++ corespunzător algoritmului dat. (10 p)

2. Știind că x este un tablou bidimensional cu 5 linii și 5 coloane (numerotate de la 1 la 5) și elemente de tip întreg, iar a
și i sunt variabile de tip întreg, să se precizeze care va fi conținutul tabloului după executarea secvenței de instrucțiuni
de mai jos dacă, inițial, fiecare linie a tabloului conține numerele de la 1 la 5 în această ordine, de la stânga la dreapta?
for (i=1; i<=5; i++) {
a = x[3][i];
x[3][i]= x[i][4];
x[i][4] = a;
}
unde a și i sunt variabile de tip întreg. (6 p)
3. La sfârșitul semestrului dirigintele trebuie să realizeze o situație a absențelor elevilor clasei. Pentru aceasta cere
acestora să-l ajute cu un program. Programul folosește o structură ELEV care reține numele complet al unui elev, șir de
maxim 50 de caractere, numărul de absențe motivate, numărul de absențe nemotivate, nota la purtare.
Să se scrie definiția structurii, declarațiile necesare și secvența de program care calculează nota la purtare a elevului p,
știind că acesta nu are alte abateri și că la 10 absențe nemotivate nota la purtare scade cu un punct. Dacă numărul de
absențe nemotivate depășește 49, media la purtare este 6. (6 p)

SUBIECTUL III (30 puncte)

1. Scrieți un program în C/C++ care citește un text de maxim 25 de caractere care reprezintă un text codificat în care
fiecare caracter care nu este cifră este urmat de un caracter cifră și determină și afișează pe ecran textul necodificat.
Codificarea textului s-a realizat astfel: pentru fiecare caracter care nu e literă s-a precizat caracterul și numărul de
repetări consecutive ale sale, iar pentru caracterele de tip literă s-a precizat predecesorul său urmat de numărul de
apariții consecutive. Dacă litera este ‘a’ sau ’A’, atunci predecesorul este ’z’, respectiv ’Z’. (10 p)
Exemplu: pentru textul y3#2z4*1k2 se va determina și afișa: zzz##aaaa*ll
2. Scrieți definiția completă a subprogramului bac care primește prin intermediul parametrului x un număr natural de
maxim 9 cifre, x > 1, și returnează prin intermediul celui de-al doilea parametru, y, cel mai mare divizor prim care
apare la o putere impară în descompunerea lui x în factori primi. Dacă nu există, y va furniza valoare -1.
Exemplu: dacă x=75, atunci y=5. (10 p)
3. Din fişierul BAC.TXT se citesc cel puțin 3 și cel mult 10# numere întregi din intervalul [-1000,1000], separate prin
câte un spaţiu. Scrieţi un program eficient ca timp de executare și ca spațiu de memorie, care să afişeze pe ecran, în ordine
crescătoare, trei numere din șirul dat, cu proprietatea că produsul lor este maxim.
De exemplu, dacă fişierul conţine:
-2 -3 -3 0 65 10 0 0 -25 atunci se vor afişa: -25 -3 65.
a) Descrieţi în limbaj natural algoritmul utilizat, justificând eficienţa acestuia. (2p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris la punctul a. (8p.)

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