Data: august 2021
Profil: Matematica-Informatica
Limbaj: C++
Tutoriale Recomandate:
- Cum iei cat mai multe puncte la Bacalaureatul de Informatica
- Functii si parametrii in C++
- Despre recursivitate in informatica
- Siruri de caractere in C++
- Citirea si scrierea din fisiere text in limbajul C++
- Tipul struct in C++ | Teorie si probleme rezolvate
Subiectul I.
1. Variabilele x și y sunt de tip real (x != -2). Indicați o expresie C/C++corespunzătoare expresiei aritmetice alăturate.
a. (x + y / 5 + x – y / 2) / x + 2
b. (x + y) / 5 + (x – y) / 2 / (x + 2)
c. ((x + y) / 5 + (x – y) / 2) / x + 2
d. ((x + y) / 5 + (x – y) / 2) / (x + 2)
—–
2. Subprogramul f este definit alăturat. Indicați valoarea lui f(1234).
int f(int n) { if (n!=0) return (n % 2) * (n % 10) + f(n / 10); return 0; }
a. 0
b. 4
c. 6
d. 10
—–
3. Utilizând metoda backtracking se generează toate numerele formate din cifre distincte, cifre a căror sumă să fie 6. Primele patru soluții generate sunt, în această ordine: 1023, 1032, 105 și 1203. Indicați cea de a șasea soluție generată.
a. 1230
b. 132
c. 123
d. 15
—–
4. Unui arbore cu 10 noduri i se adaugă o muchie, cu extremitățile în două dintre nodurile sale. Indicați numărul ciclurilor elementare pe care le conține graful obținut.
a. 0
b. 1
c. 9
d. 10
—–
5. Un graf neorientat are 21 de noduri, numerotate de la 1 la 21; pentru oricare două noduri distincte ale sale, numerotate cu i, respectiv cu j, există muchia [i, j] dacă și numai dacă ultima cifră a lui i este egală cu ultima cifră a lui j. Indicați numărul valorilor nule din matricea de adiacență a grafului.
a. 2 * 21 – 102
b. 212 – 11
c. 212 – 2 * 12
d. 2 * 212 – 13
—–
Subiectul II.
1. S-a notat cu a % b restul împărțirii numărului natural a la numărul natural nenul b.
citește n, x, y (numere naturale nenule, x ≤ n, y ≤ n) ok <- 0 pentru i <- 1, n execută --- daca (i % x = 0 și i % y != 0) sau (i % x != 0 și i % y != 0) atunci ------ scrie i, ' ' ------ ok <- 1 dacă ok = 0 atunci --- scrie 0
a) Scrieți ce se afișează în urma executării algoritmului dacă se citesc, în această ordine, numerele 15, 3, 4.
—–
b) Scrieți două seturi distincte de date de intrare, astfel încât, în urma executării algoritmului, pentru fiecare dintre acestea să se afișeze valoarea 0.
—–
c) Scrieţi programul C/C++ corespunzător algoritmului dat.
—–
d) Scrieți în pseudocod un algoritm echivalent cu cel dat, înlocuind structura pentru…execută cu o structură repetitivă cu test inițial.
—–
2. Variabila s poate memora un șir de cel mult 20 de caractere, variabila aux este de tip char, iar celelalte variabile sunt de tip întreg. Scrieți șirul memorat prin intermediul variabilei s în urma executării secvenței alăturate.
strcpy(s, "ROMANIA"); i = strlen(s) - 1; for(j = 3; j >= 0; j--) { aux = s[i]; s[i] = s[i - j]; s[i - j] = aux; i = i - j; }
—–
3. Variabila a memorează datele personale ale fiecăruia dintre cei 30 de angajați (codul numeric personal – CNP, anul nașterii) și venitul lunar al acestuia. Scrieți o secvență de instrucțiuni în urma executării căreia pentru primul angajat să se inițializeze anul nașterii cu valoarea 2000, iar venitul cu valoarea 4000.
struct date { char CNP[14]; int anNastere; }; struct angajat { struct date dp; int venit; } a[30];
—–
Subiectul III.
1. Un număr natural n se numește cub perfect dacă există un număr natural b, astfel încât n = b3. Subprogramul cuburi are un singur parametru, n, prin care primește un număr natural (n ∈ [1,103]). Subprogramul afișează pe ecran, separate prin câte un spațiu, în ordine descrescătoare, primele n cuburi perfecte nenule.
Scrieți definiția completă a subprogramului.
Exemplu: dacă n = 5 atunci, după apel, se afișează pe ecran numerele
125 64 27 8 1
—–
2. Scrieți un program C/C++ care citește de la tastatură două numere naturale din intervalul [2, 102], k și n, și construiește în memorie un tablou bidimensional cu n linii și n coloane, astfel încât parcurgând diagonala principală, de sus în jos, să se obțină un șir strict crescător format din primii n multipli naturali nenuli ai lui k și parcurgând fiecare linie a sa, de la stânga la dreapta, să se obțină câte un șir strict crescător de numere naturale consecutive. Programul afișează pe ecran tabloul obținut, fiecare linie a tabloului pe câte o linie a ecranului, elementele de pe aceeași linie fiind separate prin câte un spațiu.
Exemplu: pentru k = 3 și n = 4 se obține tabloul de mai jos
—–
3. Numim pereche asemenea (x, y) două numere naturale cu cel puțin două cifre, x și y, cu proprietatea
că ultimele două cifre ale lui x sunt egale cu ultimele două cifre ale lui y, dispuse eventual în altă ordine.
Fișierul numere.in conține numere naturale din intervalul [10,105]: pe prima linie două numere na și
nb, pe a doua linie un șir A de na numere, iar pe a treia linie un șir B de nb numere. Numerele aflate pe
aceeași linie a fișierului sunt separate prin câte un spațiu.
Se cere să se afișeze pe ecran numărul de perechi asemenea (x, y), cu proprietatea că x este un
termen al șirului A, iar y este un termen al șirului B. Proiectați un algoritm eficient din punctul de vedere
al timpului de executare.
Exemplu: dacă fișierul conține numerele
9 7
112 20 42 112 5013 824 10012 55 155
402 1024 321 521 57 6542 255
se afișează pe ecran numărul
13
deoarece sunt 13 perechi asemenea: (112, 321), (112, 521), (20, 402), (42, 1024), (42, 6542),
(112, 321), (112, 521), (824, 1024), (824, 6542), (10012, 321), (10012, 521), (55, 255),
(155, 255).
a. Descrieți în limbaj natural algoritmul proiectat, justificând eficiența acestuia.
b. Scrieți programul C/C++ corespunzător algoritmului proiectat.
—–