Documente Academic
Documente Profesional
Documente Cultură
Bacalaureat
specializarea matematică-informatică
2022-12
PROBLEME DE INFORMATICĂ
date la bacalaureat
la specializarea matematică-informatică
ı̂n
2022-12-27
Dedication
( in ascending order! )
1
https://www.femalefirst.co.uk/books/carol-lynne-fighter-1034048.html
2
https://otiliaromea.bandcamp.com/track/dor-de-el
3
https://en.wikipedia.org/wiki/To_be,_or_not_to_be
4
https://www.youtube.com/watch?v=eMtcDkSh7fU
ii
Prefaţă
Stilul acestor cărţi este ... ca şi cum aş vorbi cu nepoţii mei (şi chiar cu mine ı̂nsumi!) ... ı̂ncercând
ı̂mpreună să găsim o rezolvare cât mai bună pentru o problemă dată la olimpiadă.
Ideea, de a scrie aceste culegeri de probleme date la olimpiadele de informatică, a apărut acum
câţiva ani când am ı̂ntrebat un student (care nu reuşea să rezolve nişte probleme foarte simple):
”Ce te faci dacă un elev, care ştie că eşti student şi că studiezi şi informatică, te roagă, din când ı̂n
când, să-l ajuţi să rezolve câte o problemă de informatică dată la gimnaziu la olimpiadă, sau pur
şi simplu ca temă de casă, şi tu, aproape de fiecare dată, nu ı̂l poţi ajuta? Eu cred că nu este prea
bine şi poate că ... te faci ... de râs!” Pe vremea mea (!), când eram elev de gimnaziu, un student
era ca un fel de ... zeu! Cu trecerea anilor am ı̂nţeles că nu este chiar aşa! Şi ı̂ncă ceva: nu am
reuşit să ı̂nţeleg de ce, atunci când cineva nu poate să rezolve corect o problemă de informatică
de clasa a 6-a, dată la olimpiada de informatică sau ca temă de casă, foloseşte această scuză: ”eu
nu am făcut informatică ı̂n liceu!” şi acest cineva este ”zeul” sau ”zeiţa” despre care vorbeam!.
5
Sunt convins că este important să studiem cu atenţie cât mai multe probleme rezolvate! . Cred
că sunt utile şi primele versiuni ale acestor cărţi ... ı̂n care sunt prezentate numai enunţurile şi
indicaţiile ”oficiale” de rezolvare. Acestea se găsesc ı̂n multe locuri; aici ı̂ncerc să le pun pe ”toate
la un loc”! Fiecare urcă spre vârf ... cât poate! Sunt multe poteci care duc spre vârf iar această
carte este ... una dintre ele!
Limbajul de programare se alege ı̂n funcţie de problema pe care o avem de rezolvat. Cu nişte
ani ı̂n urmă alegerea era mai simplă: dacă era o problemă de calcul se alegea Fortran iar dacă era
o problemă de prelucrarea masivă a datelor atunci se alegea Cobol. Acum alegerea este ceva mai
6 7
dificilă! :-) Vezi, de exemplu, IOI2020 şi IOI2019 , IOI2015 .
Cred că, de cele mai multe ori, este foarte greu să gândim ”simplu” şi să nu ”ne complicăm”
atunci când cautăm o rezolvare pentru o problemă dată la olimpiadă. Acesta este motivul pentru
care vom analiza cu foarte mare atenţie atât exemplele date ı̂n enunţurile problemelor cât şi
”restricţiile” care apar acolo (ele sigur ”ascund” ceva interesant din punct de vedere al algoritmului
8
de rezolvare!) .
Am ı̂nceput câteva cărţi (pentru clasele de liceu) cu mai mulţi ani ı̂n urmă, pentru perioada
2000-2007 ([29] - [33]), cu anii ı̂n ordine crescătoare!). A urmat o pauză de câţiva ani (destul de
mulţi!). Am observat că acele cursuri s-au ”ı̂mprăştiat” un pic ”pe net” ([48] - [56])! Încerc acum
să ajung acolo unde am rămas ... plecând mereu din prezent ... până când nu va mai fi posibil ...
aşa că, de această dată, anii sunt ı̂n ordine ... descrescătoare! :-)
”Codurile sursă” sunt cele ”oficiale” (publicate pe site-urile olimpiadelor) sau publicate pe alte
site-uri (dacă mi s-a părut că sunt utile şi se poate ı̂nvăţa câte ceva din ele).
Pentru liceu perioada acoperită este de ”azi” (până când va exista acest ”azi” pentru mine!)
până ı̂n anul 2000 (aveam deja perioada 2000-2007!).
Pentru gimnaziu perioada acoperită este de ”azi” până ı̂n anul 2010 (nu am prea mult timp
9
disponibil şi, oricum, calculatoarele folosite la olimpiade ı̂nainte de 2010 erau ceva mai ’slabe’ şi
iii
11
depăşeşte pragul ”exascale”! (1.102 Exaflop/s). ”Peta” a fost depăşit ı̂n 2008, ”tera” ı̂n 1997,
12
”giga” ı̂n 1972. . Pentru ce a fost mai ı̂nainte, vezi https://en.wikipedia.org/wiki/Li
st_of_fastest_computers.
13
O mică observaţie: ı̂n 2017 a fost prima ediţie a olimpiadei EJOI ı̂n Bulgaria şi ... tot
14
ı̂n Bulgaria a fost şi prima ediţie a olimpiadei IOI ı̂n 1989. Dar ... prima ediţie a olimpiadei
15
IMO (International Mathematical Olympiad) a fost ı̂n România ı̂n 1959. Tot ı̂n România s-au
ţinut ediţiile din anii 1960, 1969, 1978, 1999 şi 2018. Prima ediţie a olimpiadei BOI (Balkan
Olympiad in Informatics) a fost ı̂n România ı̂n 1993 la Constanţa. Prima ediţie a olimpiadei
CEOI (Central-European Olympiad in Informatics) a fost ı̂n România ı̂n 1994 la Cluj-Napoca.
Revenind la ... “culegerile noastre” ... mai departe, probabil, va urma completarea unor
informaţii ı̂n ”Rezolvări detaliate” ... pentru unele probleme numai (tot din cauza lipsei timpului
necesar pentru toate!). Prioritate vor avea problemele de gimnaziu (nu pentru că sunt mai ’uşoare’
ci pentru că ... elevii de liceu se descurcă şi singuri!). Acum, ı̂n martie 2022, am ı̂nceput şi
redactarea unei culegeri de probleme date la bacalaureat ı̂n ultimii câţiva ani (câţi voi putea!).
Îmi aduc aminte că exista o interesantă vorbă de duh printre programatorii din generaţia mea:
”nu se trage cu tunul ı̂ntr-o muscă” . Sensul este: nu se scrie un cod complicat dacă se
poate scrie un cod simplu şi clar! Asta ı̂ncerc eu ı̂n ”Rezolvări detaliate”.
Vom ı̂ncerca, ı̂mpreună, şi câteva probleme de ... IOI ... dar asta este o treabă ... nu prea
uşoară! Cred totuşi că este mai bine să prezint numai enunţuri ale problemelor date la IOI ı̂n
ultimii câţiva ani! (asta aşa, ca să vedem cum sunt problemele la acest nivel!). Cei care ajung
acolo sau vor să ajungă acolo (la IOI) sigur nu au nevoie de ajutorul meu! Se descurcă singuri!
”ALGORITMI utili la olimpiadele de informatică”, separat pentru gimnaziu şi liceu, sper să
fie de folos, aşa cum cred că sunt [1] - [28], [34] - [47], [57] - [83], ... şi multe alte cărţi şi site-uri!.
Ar fi interesant să descoperim noi ı̂nşine cât mai mulţi algoritmi ... ı̂n loc să-i ı̂nvăţăm pur şi
simplu!
O altă mică observaţie: ce am strâns şi am scris ı̂n aceste cărţi
se adresează celor interesaţi de aceste teme! Nu cârcotaşilor! Sunt
evidente sursele ”de pe net” (şi locurile ı̂n care au fost folosite) aşa
că nu sunt necesare ”ghilimele anti-plagiat”, referinţe şi precizări
suplimentare la fiecare pas!
Şi un ultim gând: criticile şi sfaturile sunt utile dacă au valoare!
Dacă sunt numai aşa ... cum critică lumea la un meci de fotbal ...
sau cum, pe bancă ı̂n parc, ”ı̂şi dă cu părerea” despre rezolvarea
problemelor economice ale ţării ... atunci ... !!!
16
”I’m only responsible for what I say, not for what you understand.”
Adrese interesante (rezultatele elevilor români):
https://stats.ioinformatics.org/halloffame/
https://stats.ioinformatics.org/tasks/
http://stats.ioinformatics.org/results/ROU
Adresele acestor cursuri:
https://www.scribd.com/user/550183580/Adrian-Răbâea
https://www.scribd.com/user/552245048/Adi-Rabaea
https://drive.google.com/drive/folders/1hC5PZuslCdS95sl37SW46H-qy59GRDGZ
Adrese utile (programe şcolare):
http://programe.ise.ro/Portals/1/Curriculum/Progr_Lic/TH/Informatica_teoretic_vocatio
nal_intensiv_clasa%20a%20IX-a.pdf
http://programe.ise.ro/Portals/1/Curriculum/Progr_Lic/TH/Informatica_teoretic_vocatio
nal_intensiv_clasa%20a%20X_a.pdf
http://programe.ise.ro/Portals/1/Curriculum/Progr_Lic/TH/Informatica_teoretic_vocatio
nal_intensiv_clasa%20a%20XI-a.pdf
17
”I want to thank God most of all because without God I wouldn’t be able to do any of this.”
Adrian R.
17
I.d.k.: ”I don’t know who the author is.”
v
Despre autor
18
nume: Răbâea Aurel-Adrian, 18.03.1953 - ...
vi
Cuprins
Prefaţă iii
Cuprins vii
Lista programelor xx
I Enunţuri 1
1 BAC 2022 2
1.1 Sesiunea - Simulare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Sesiunea specială . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 Sesiunea iunie - iulie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4 Sesiunea de toamnă . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2 BAC 2021 12
2.1 Sesiunea specială . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Sesiunea iunie - iulie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3 Sesiunea de toamnă . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3 BAC 2020 20
3.1 Sesiunea specială . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.1.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.1.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.1.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
vii
3.2 Sesiunea iunie - iulie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.3 Sesiunea de toamnă . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.3.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.3.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.3.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4 BAC 2019 28
4.1 Sesiunea specială . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.1.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.1.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.1.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.2 Sesiunea iunie - iulie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.2.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.2.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.2.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.3 Sesiunea de toamnă . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.3.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.3.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.3.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5 BAC 2018 35
5.1 Sesiunea specială . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.1.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.1.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.1.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2 Sesiunea iunie - iulie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.2.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.2.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.2.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.3 Sesiunea de toamnă . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.3.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.3.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.3.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6 BAC 2017 44
6.1 Sesiunea specială . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.1.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.1.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.1.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.2 Sesiunea iunie - iulie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.2.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.2.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.2.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.3 Sesiunea de toamnă . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.3.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.3.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.3.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
7 BAC 2016 53
7.1 Sesiunea specială . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
7.1.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
7.1.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.1.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
7.2 Sesiunea iunie - iulie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
7.2.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
7.2.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
7.2.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.3 Sesiunea de toamnă . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.3.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.3.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.3.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
8 BAC 2015 61
8.1 Sesiunea specială . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
8.1.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
8.1.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
8.1.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
8.2 Sesiunea iunie - iulie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
8.2.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
8.2.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
8.2.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
8.3 Sesiunea de toamnă . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
8.3.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
8.3.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
8.3.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
9 BAC 2014 69
9.1 Sesiunea specială . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
9.1.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
9.1.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
9.1.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
9.2 Sesiunea iunie - iulie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
9.2.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
9.2.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
9.2.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
9.3 Sesiunea de toamnă . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
9.3.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
9.3.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
9.3.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
10 BAC 2013 77
10.1 Sesiunea specială . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
10.1.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
10.1.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
10.1.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
10.2 Sesiunea iunie - iulie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
10.2.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
10.2.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
10.2.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
10.3 Sesiunea de toamnă . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
10.3.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
10.3.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
10.3.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
11 BAC 2012 85
11.1 Sesiunea specială . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
11.1.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
11.1.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
11.1.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
11.2 Sesiunea iunie - iulie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
11.2.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
11.2.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
11.2.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
11.3 Sesiunea de toamnă . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
11.3.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
11.3.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
11.3.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
12 BAC 2011 93
12.1 Sesiunea specială . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
12.1.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
12.1.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
12.1.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
12.2 Sesiunea iunie - iulie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
12.2.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
12.2.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
12.2.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
12.3 Sesiunea de toamnă . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
12.3.1 Subiectul I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
12.3.2 Subiectul al II-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
12.3.3 Subiectul al III-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Index 316
Bibliografie 317
2.1 2021bac-s1-II-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 2021bac-s1-III-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3 2021bac-s2-II-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4 2021bac-s3-II-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
xvii
29.202020bac-s3-II-3-rd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
29.212020bac-s3-III-2-rd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
xix
Lista programelor
xx
29.1.12 2020-mai-III-1.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
29.1.13 2020-mai-III-2-v1.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
29.1.14 2020-mai-III-2-v2.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
29.1.15 2020-mai-III-2-v3.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
29.1.16 2020-mai-III-3.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
29.2.1 2020-iunie-II-1a.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
29.2.2 2020-iunie-II-1b.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
29.2.3 2020-iunie-II-1d.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
29.2.4 2020-iunie-II-2.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
29.2.5 2020-iunie-II-3.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
29.2.6 2020-iunie-III-1.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
29.2.7 2020-iunie-III-2.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
29.2.8 2020-iun-III-3-v1.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
29.2.9 2020-iun-III-3-v2.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
29.3.1 2020-august-I-2.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
29.3.2 2020-august-II-1a.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
29.3.3 2020-august-II-1b.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
29.3.4 2020-august-II-1d.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
29.3.5 2020-august-II-2-v1.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
29.3.6 2020-august-II-2-v2.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
29.3.7 2020-august-II-2-v3.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
29.3.8 2020-august-II-3.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
29.3.9 2020-august-III-1.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
29.3.10 2020-august-III-2 v1.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
29.3.11 2020-august-III-2 v2.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
29.3.12 2020-august-III-3.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
30.1.1 2019-s0-I-2.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Part I
Enunţuri
1
Capitolul 1
BAC 2022
1.1.1 Subiectul I
Pentru fiecare dintre itemii de la 1 la 5, scrieţi pe foaia de examen litera core-
spunzătoare răspunsului corect. Fiecare răspuns corect se notează cu 4 puncte.
Problema 1
Variabila x este de tip ı̂ntreg. Indicaţi o expresie care are valoarea 1 dacă şi numai dacă expresia
C/C++ alăturată are valoarea 1. (4p.) x¡=3 —— x¿30
Problema 2
Subprogramul f este definit
alăturat.
Ştiind că variabila x
memorează un tablou unidimensional cu elementele (7,1,2,5,4), ı̂n această ordine, numerotate
de la 0 la 4, indicaţi valoarea f(0,4,x).
a. 2 b. 3 c. 4 d. 5
Problema 3
Un sport se desfăşoară pe o pistă ı̂ngheţată, cu o echipă alcătuită din 4 jucători, care sunt,
ı̂n această ordine, lider, secund, vice-skip şi skip. Lotul este format din jucătorii din mulţimea
{Alin, Bogdan, Cristian, Răzvan, Ştefan, Valentin}; Cristian poate fi doar lider, Alin
şi Valentin pot fi doar lider sau secund, Bogdan poate fi doar secund, iar ceilalţi doi jucători pot
fi doar vice-skip sau skip. Două echipe sunt distincte dacă există cel puţin un rol care, ı̂n cele
două echipe, este atribuit unor jucători diferiţi.
Pentru antrenamente, s-au format echipe ı̂n toate formulele posibile, primele şase soluţii gen-
erate fiind, ı̂n această ordine: {Alin, Bogdan, Răzvan, Ştefan}, {Alin, Bogdan, Ştefan,
2
CAPITOLUL 1. BAC 2022 1.1. SESIUNEA - SIMULARE 3
Problema 4
struct recensamant
Variabila oras, declarată alăturat, memorează unele date obţinute ı̂n
{ char nume[21];
urma recensământului populaţiei ı̂n 100 dintre oraşele ţării. Ştiind că
int nrLocuitori;
densitatea unui oraş este egală cu raportul dintre numărul de locuitori
float suprafata;
şi suprafaţa acestuia (exprimată ı̂n km2), indicaţi o expresie a cărei
} oras[100];
valoare este egală cu densitatea primului oraş.
a. oras[0].nrLocuitori/oras[0].suprafata b. oras.nrLocuitori[0]/oras.suprafata[0]
c. nrLocuitori[0].oras/suprafata[0].oras d. nrLocuitori.oras[0]/suprafata.oras[0]
Problema 5
Un graf neorientat complet are 4 noduri. Indicaţi o valoare care NU poate fi numărul de muchii
ale unui subgraf al acestui graf.
a. 0 b. 1 c. 2 d. 3
Problema 2
Într-un arbore cu rădăcină un nod se află pe nivelul x dacă lanţul elementar care are o extremitate
ı̂n nodul respectiv şi cealaltă extremitate ı̂n rădăcina arborelui are lungimea x. Pe nivelul 0 se află
un singur nod (rădăcina). Un arbore cu rădăcină are 10 noduri şi este reprezentat prin vectorul
de ”taţi” (10,5,5,10,0,10,9,2,5,2). Enumeraţi trei dintre frunzele situate ı̂n arbore pe
niveluri impare. (6p.)
Problema 3
Într-o seră se folosesc vase pătrate, care conţin câte o singură floare (lalea, frezie sau narcisă).
Vasele sunt aşezate pe trei rânduri şi sunt aliniate ca ı̂n exemplu. Patru flori de acelaşi tip
formează un romb dacă vasele ı̂n care se află sunt dispuse ı̂n jurul unui alt vas, cu care fiecare are
ı̂n comun câte o latură.
Variabilele j şi ok sunt ı̂ntregi, iar variabila a este un tablou bidimensional cu 3 linii şi 15
coloane, cu elemente de tip char, ı̂n care fiecare linie, ı̂n ordine, memorează succesiunea de flori
aflate pe un rând al serei, notându-se cu L lalelele, cu F freziile şi cu N narcisele. Fiecare linie a
CAPITOLUL 1. BAC 2022 1.2. SESIUNEA SPECIALĂ 4
tabloului corespunde, ı̂n ordine, unui rând de vase din seră. Liniile şi coloanele sunt numerotate
ı̂ncepând de la 0.
Scrieţi secvenţa C/C++ de mai jos, ı̂nlocuind punctele de suspensie astfel ı̂ncât, ı̂n urma
executării secvenţei obţinute, variabila ok să aibă valoarea 1 dacă florile formează cel puţin un
romb, sau valoarea 0 ı̂n caz contrar.
Exemplu: În urma executării secvenţei pentru tabloul de mai jos, ok=1
(sunt evidenţiate 4 romburi). 6p.
Problema 2
Un text, de cel mult 250 de caractere, reprezintă o listă cu date de identificare ale invitaţilor la o
petrecere; fiecare invitat are un prenume şi un nume, care apar ı̂n listă ı̂n această ordine, urmate
de simbolul ; (punct şi virgulă), ca ı̂n exemplu. Numele şi prenumele sunt formate din câte un
singur cuvânt, compus din litere mari ale alfabetului englez, şi sunt separate printr-un spaţiu.
Scrieţi un program C/C++ care citeşte de la tastatură un text de tipul precizat mai sus apoi,
de pe rândul următor, un cuvânt, x, şi afişează pe ecran, separate prin câte un spaţiu, numele
tuturor invitaţilor care au prenumele x, ca ı̂n exemplu, sau mesajul NU dacă nu există astfel de
invitaţi.
Exemplu: dacă lista este DAN MARIS; DANILA PREPELEAC; DAN POPA; EDANA
DAN; şi cuvântul x este DAN se afişează pe ecran MARIS POPA (10p.)
Problema 3
Se citeşte de la tastatură un număr natural, n (n " 1, 10 ), şi se cere să se scrie ı̂n fişierul text
9
p
bac.txt cel mai mare număr natural p cu proprietatea că numărul 45 este divizor al numărului
obţinut prin evaluarea produsului 1 2 3 ... n.
Proiectaţi un algoritm eficient din punctul de vedere al timpului de executare şi al memoriei
utilizate.
2
Exemplu: dacă n 14, fişierul conţine numărul 2 (45 2025 este divizor al lui 1 2 3 ... 14
= 87 178 291 200)
a. Descrieţi ı̂n limbaj natural algoritmul proiectat, justificând eficienţa acestuia. (2p.)
b. Scrieţi programul C/C++ corespunzător algoritmului proiectat. (8p.)
1.2.1 Subiectul I
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.
CAPITOLUL 1. BAC 2022 1.2. SESIUNEA SPECIALĂ 5
Problema 1
Indicaţi expresia C/C++ cu valoarea 2022.
a. 4044/4/2 b. 4044/(4*2) c. 1011*1+1 d. 1011*(1+1)
Problema 3
Utilizând metoda backtracking, se generează toate posibilităţile de a expune câte trei maşini
produse ı̂n România, din gama Dacia, din mulţimea Dokker (negru), Duster (negru), Lodgy (gri),
Logan (alb), Sandero (roşu), astfel ı̂ncât să nu fie expuse simultan două maşini de aceeaşi culoare,
Sandero să NU apară pe prima poziţie, iar Logan să NU fie ı̂nainte de Dokker sau Duster. Două
soluţii sunt distincte dacă au cel puţin o maşină diferită sau dacă ordinea maşinilor este diferită.
Primele cinci soluţii generate sunt, ı̂n această ordine (Dokker, Lodgy, Logan), (Dokker, Lodgy,
Sandero), (Dokker, Logan, Lodgy), (Dokker, Logan, Sandero), (Dokker, Sandero, Lodgy). Indicaţi
penultima soluţie, ı̂n ordinea generării acestora.
a. Logan, Lodgy, Sandero b. Logan, Sandero, Lodgy
c. Lodgy, Dokker, Logan d. Lodgy, Logan, Dokker
Problema 4
Variabilele s şi d permit memorarea câte unui şir cu maximum strcpy(s,"info@rocnee.eu");
50 de caractere. Indicaţi şirul memorat prin intermediul vari- s[strlen(s)-3]=’\0’;
strcpy(d,strchr(s,’@’)+1);
abilei d ı̂n urma executării secvenţei alăturate.
a. inf@r b. info@ c. rocnee d. rocnu
Problema 5
ı̂ntr-un arbore cu 7 noduri, numerotate de la 1 la 7, nodul 1 este rădăcină şi pentru orice nod
numerotat cu i (i[1,7]), dacă se notează cu F(i) numărul de descendenţi direcţi (fii) ai săi, atunci
F(i)=0, dacă i este frunză, altfel F(i)=i+1. Indicaţi numărul maxim de fraţi ai nodului 7.
a. 4 b. 3 c. 2 d. 1
Problema 2
Un graf neorientat cu 6 noduri, numerotate de la 1 la 6, are muchiile [1,2], [1,3], [1,4], [1,5], [2,3],
[2,4], [2,5], [3,5], [4,6], [5,6]. Scrieţi mulţimea muchiilor unui subgraf al acestui graf, care să fie
complet şi să aibă un număr maxim de noduri. (6p.)
CAPITOLUL 1. BAC 2022 1.2. SESIUNEA SPECIALĂ 6
Problema 3
struct sala
Pentru o sală de spectacole se memorează următoarele informaţii speci-
{ int nrLocuri;
fice: numărul de locuri disponibile şi preţul biletului pentru un loc. int pret;
Variabilele i şi s sunt ı̂ntregi, iar variabila t memorează informaţiile } t[15];
specifice pentru fiecare dintre cele 15 săli de spectacole dintr-un oraş.
Scrieţi o secvenţă de instrucţiuni ı̂n urma executării căreia variabila s să memoreze suma totală
obţinută ı̂n urma vânzării biletelor pentru un festival de teatru care s-ar desfăşura simultan ı̂n
toate sălile, iar acestea ar fi ocupate complet. (6p.)
n şi 2 & x $ y
2 2
x şi y, prin care furnizează câte un număr natural cu proprietatea că x y
sau valoarea 0, prin fiecare dintre aceştia, dacă nu există două astfel de numere. Dacă sunt
mai multe astfel de valori, se furnizează cele corespunzătoare unei valori minime a lui x.
Problema 2
Suprafaţa unei scene a fost ı̂mpărţită ı̂n zone dispuse ca elementele unui tablou bidimensional cu
număr egal de linii şi coloane. Fiecare instrument are alocată o zonă şi este identificat printr-
un număr natural. Dirijorul hotărăşte eliminarea tuturor instrumentelor plasate pe diagonala
principală a tabloului şi rearanjarea celor păstrate, prin deplasarea unora dintre acestea cu câte
o poziţie spre stânga, astfel ı̂ncât să nu existe zone intermediare libere, ca ı̂n exemplu. Scrieţi un
program C/C++ care citeşte de la tastatură numere naturale din intervalul [2,102], şi anume n şi
elementele unui tablou bidimensional cu n linii şi n coloane, reprezentând numerele de identificare
ale instrumentelor, ı̂n ordinea plasării lor iniţiale pe scenă. Programul modifică apoi tabloul ı̂n
memorie corespunzător hotărârii dirijorului şi 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.
Problema 3
Numim secvenţă progresivă a unui şir crescător de numere naturale un subşir al acestuia, format
din termeni aflaţi pe poziţii consecutive ı̂n şirul dat, cu proprietatea că fiecare termen apare ı̂n
subşir de un număr de ori egal cu valoarea sa. Lungimea secvenţei este egală cu numărul de
termeni ai acesteia.
Fişierul bac.txt conţine un şir crescător de cel mult 106 numere naturale din intervalul [1,106],
astfel ı̂ncât orice termen al şirului apare de un număr de ori cel mult egal cu valoarea sa. Numerele
sunt separate prin câte un spaţiu.
Se cere să se afişeze pe ecran lungimea maximă a unei secvenţe progresive din şirul aflat ı̂n
fişier. Proiectaţi un algoritm eficient din punctul de vedere al timpului de executare şi al memoriei
utilizate.
Exemplu: dacă fişierul conţine numerele 1 2 2 3 4 4 4 4 6 6 6 6 6 6 7 7 7 8 8 8 8 8 8 8 8 atunci
pe ecran se afişează valoarea 10.
a. Descrieţi ı̂n limbaj natural algoritmul proiectat, justificând eficienţa acestuia. (2p.)
b. Scrieţi programul C/C++ corespunzător algoritmului proiectat. (8p.)
CAPITOLUL 1. BAC 2022 1.3. SESIUNEA IUNIE - IULIE 7
1.3.1 Subiectul I
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.
Problema 1
Indicaţi valoarea expresiei C/C++ alăturate.
a. 0 b. 0.55 c. 10 d. 55
struct produs
Problema 2 { char denumire[50];
Variabilele x şi valoare sunt declarate alăturat. Indicaţi o instrucţiune float cantitate, pret;
de atribuire corectă din punctul de vedere sintactic. } x;
float valoare;
a. x=("apa minerala",10,2.5); b. x.produs.pret=2.5;
c. x.denumire[5]= "Borsec"; d. valoare=2*x.cantitate*x.pret;
Problema 3
La o sală de sport se organizează antrenamente pentru sporturi din mulţimea tenis, fotbal, volei,
handbal, baschet, astfel ı̂ncât o persoană poate opta pentru un pachet de antrenamente pentru
două sau trei sporturi, dar nu poate alege fotbal şi baschet ı̂n acelaşi pachet. Utilizând metoda
backtracking se generează toate posibilităţile unei persoane de a opta pentru un pachet de antre-
namente ı̂n cadrul sălii de sport. Două pachete sunt distincte dacă diferă prin cel puţin un sport
ales. Primele cinci soluţii generate sunt, ı̂n această ordine: tenis, fotbal, tenis, fotbal, volei, tenis,
fotbal, handbal, tenis, volei, tenis, volei, handbal. Indicaţi soluţia generată imediat după fotbal,
handbal.
a. {volei, handbal} b. {fotbal, handbal, baschet}
c. {handbal, baschet} d. {volei, handbal, baschet}
Problema 4
Un graf neorientat cu 6 noduri, numerotate de la 1 la 6, are muchiile [1,2], [1,3], [2,3], [4,6]. Indicaţi
numărul de componente conexe ale acestuia.
a. 1 b. 3 c. 5 d. 6
Problema 5
ı̂ntr-un arbore cu rădăcină un nod se află pe nivelul n dacă lanţul elementar care are o extremitate
ı̂n nodul respectiv şi cealaltă extremitate ı̂n rădăcina arborelui are lungimea n. Pe nivelul 0 se află
un singur nod (rădăcina). Un arbore cu rădăcină are 12 noduri, numerotate de la 1 la 12, şi este
reprezentat prin vectorul de taţi (2,4,2,0,4,4,x,6,x,x,y,y). Indicaţi un set de valori pe care le pot
avea x şi y, ştiind că pe ultimul nivel există cinci noduri frunză şi că un singur nod este numerotat
cu o valoare egală cu numărul său de descendenţi direcţi (fii) de tip frunză.
Problema 3
Variabilele s şi id permit accesul la câte un şir de maximum 50 de caractere, şirul accesat prin
id fiind iniţial vid, iar cel accesat prin s memorând, ı̂n această ordine, separate printr-un spaţiu,
prenumele şi numele unei persoane, fiecare fiind format numai din litere ale alfabetului englez.
Scrieţi o secvenţă de instrucţiuni C/C++ astfel ı̂ncât, ı̂n urma executării acesteia, şirul accesat prin
id să memoreze numele persoanei menţionate, urmat de 2022. Declaraţi corespunzător eventualele
alte variabile utilizate. Exemplu: dacă şirul accesat prin variabila s este Ana Popescu atunci şirul
accesat prin variabila id este Popescu2022 (6p.)
Problema 2
Pentru prevenirea eroziunii la Marea Neagră, autorităţile au hotărât ı̂nnisiparea unei plaje. Plaja
a fost ı̂mpărţită ı̂n parcele de formă pătrată cu latura de 1 metru, dispuse ca elementele unui
tablou bidimensional, reţinându-se nivelul fiecărei parcele, măsurat ı̂n metri, de la nivelul mării.
ı̂nnisiparea se realizează doar pe acele parcele care au nivelul strict mai mic decât al celei mai
joase dintre parcelele vecine cu ea, adăugând nisip, astfel ı̂ncât cele două să aibă acelaşi nivel.
Două parcele sunt vecine dacă au o latură comună. Scrieţi un program C/C++ care citeşte
2
de la tastatură două numere naturale din intervalul 2, 10 , m şi n, apoi elementele unui tablou
bidimensional cu m linii şi n coloane, numere naturale din intervalul [1,10], reprezentând nivelurile
parcelelor, ı̂n ordinea dispunerii acestora pe plajă.
Programul afişează pe ecran cantitatea totală de nisip adăugată,
măsurată ı̂n metri cubi.
Exemplu: pentru m=5, n=4 şi tabloul alăturat, se vor ı̂nnisipa
parcelele marcate, pentru a fi aduse la nivelul parcelelor vecine core-
spunzătoare, şi se va afişa valoarea 7 (1+3+1+2).
CAPITOLUL 1. BAC 2022 1.4. SESIUNEA DE TOAMNĂ 9
Problema 3
Fişierul bac.txt conţine numere naturale din intervalul [1,109], astfel: pe prima linie două numere,
x şi y (x¡y), iar pe a doua linie un şir de cel mult 106 numere, ordonate crescător. 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 valori distincte din şirul aflat pe a doua linie a fişierului care aparţin intervalului
[x,y]. Proiectaţi un algoritm eficient din punctul de vedere al timpului de executare şi al memoriei
utilizate.
Exemplu: dacă fişierul are
conţinutul alăturat, pe ecran se
afişează 6
a. Descrieţi ı̂n limbaj natural algoritmul proiectat, justificând eficienţa acestuia. (2p.)
b. Scrieţi programul C/C++ corespunzător algoritmului proiectat. (8p.)
1.4.1 Subiectul I
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.
Problema 1
Variabila x este de tip ı̂ntreg. Indicaţi o expresie care are valoarea 1 dacă şi
numai dacă expresia C/C++ alăturată are valoarea 1.
Problema 2
Subprogramul f este definit incomplet, alăturat. Indicaţi
o expresie cu care pot fi ı̂nlocuite punctele de suspensie
pentru ca f(n,3) să aibă valoarea 1 pentru orice număr
prim n (n " 2, 10 ) şi valoarea 0 ı̂n caz contrar.
4
Problema 3
Utilizând metoda backtracking, se generează toate posibilităţile de a forma platouri de câte trei
fructe distincte din mulţimea {măr, gutuie, prună, caisă, piersică}, astfel ı̂ncât pe acelaşi platou
nu se află o gutuie şi o piersică simultan. Două platouri sunt distincte dacă ele conţin cel puţin un
fruct diferit. Primele patru soluţii generate sunt, ı̂n această ordine, (măr, gutuie, prună), (măr,
gutuie, caisă), (măr, prună, caisă), (măr, prună, piersică).
Indicaţi soluţia generată imediat după (gutuie, prună, caisă).
a. (caisă, piersică, măr) b. (gutuie, prună, piersică)
c. (mar, caisă, piersică) d. (prună, caisă, piersică)
Problema 4
Variabila j este de tip ı̂ntreg, iar variabila A memorează un tablou bidimensional cu 100 de linii
şi 100 de coloane, numerotate de la 0 la 99. Indicaţi valoarea variabilei j, dacă elementul A[20][j]
se află pe diagonala secundară a tabloului.
a. 20 b. 49 c. 79 d. 80
CAPITOLUL 1. BAC 2022 1.4. SESIUNEA DE TOAMNĂ 10
Problema 5
Un graf neorientat are 7 noduri, numerotate de la 1 la 7, şi 8 muchii, dintre care şase sunt: [1,2],
[2,4], [2,7], [3,4], [4,5], [4,6]. ştiind că unul dintre lanţurile elementare care au lungimea maximă
este 1, 2, 7, 5, 4, 6, indicaţi care ar putea fi celelalte două muchii ale grafului.
a. [1,4] şi [4,7] b. [1,4] şi [5,7] c. [2,5] şi [4,7] d. [3,6] şi [5,7]
Problema 2
Un arbore cu 9 noduri, numerotate de la 1 la 9, are muchiile [1,8], [2,3], [2,5], [2,7], [4,5], [5,6],
[5,8], [8,9]. Scrieţi două noduri care pot fi alese drept rădăcină, astfel ı̂ncât nodul 5 să aibă doi
fraţi. (6p.)
Problema 3
struct meteo
Variabila x, declarată alăturat, memorează simultan un an calendaristic
{ int an, temperatura;
şi temperatura medie a aerului, măsurată ı̂n grade Celsius, ı̂nregistrată } x;
ı̂n Bucureşti ı̂n anul respectiv.
Scrieţi o secvenţă de instrucţiuni ı̂n urma executării căreia să se afişeze pe ecran mesajul
o
CALDUROS dacă temperatura menţionată a fost strict mai mare decât 11 C, mesajul RACOROS
o
dacă temperatura menţionată a fost strict mai mică decât 10 C, sau mesajul NORMAL ı̂n orice
alt caz. (6p.)
p, prin care primeşte un număr natural reprezentând poziţia unei cifre a numărului n (0 & p).
Poziţiile cifrelor sunt numerotate de la dreapta la stânga, astfel: cifra unităţilor este pe
poziţia 0, cifra zecilor este pe poziţia 1 ş.a.m.d.
Subprogramul transformă numărul n, ı̂nlocuind cifra de pe poziţia p cu cifra x, şi furnizează
numărul obţinut tot prin parametrul n. Scrieţi definiţia completă a subprogramului.
Exemplu: dacă n=12587, x=6 şi p=3, după apel, n=16587. (10p.)
Problema 2
Se consideră o vocală oarecare a alfabetului englez, notată cu v, şi o consoană oarecare a alfabetului
englez, notată cu c. Litera v se numeşte vocală prietenă a lui c dacă ı̂n şirul literelor alfabetului
englez, ordonat lexicografic, v ı̂l precede pe c, iar ı̂ntre v şi c nu există nicio vocală. Se consideră
vocale literele a, e, i, o, u.
Exemplu: e este vocală prietenă pentru consoanele f, g şi h, dar nu este vocală prietenă pentru
consoanele d şi j.
CAPITOLUL 1. BAC 2022 1.4. SESIUNEA DE TOAMNĂ 11
Un elev vrea să transmită unui prieten o parolă, codificată. Parola este formată dintr-un singur
cuvânt de cel mult 50 de caractere, litere mici ale alfabetului englez, cel puţin una fiind consoană.
Codificarea se face prin ı̂nlocuirea fiecărei consoane cu vocala sa prietenă, ca ı̂n exemplu.
Scrieţi un program C/C++ care citeşte de la tastatură un cuvânt, reprezentând o parolă de
tipul precizat şi determină, ı̂n memorie, forma codificată a acesteia. Programul afişează pe ecran
parola codificată obţinută.
Exemplu: pentru parola rame se afişează oaie, iar pentru parola sport se afişează ooooo (10p.)
Problema 3
Numim secvenţă paritară a unui şir de numere naturale un subşir al acestuia, format din
termeni cu aceeaşi paritate, aflaţi pe poziţii consecutive ı̂n şirul dat. Lungimea secvenţei este
egală cu numărul de termeni ai acesteia.
6
Fişierul bac.txt conţine un şir de cel puţin două şi cel mult 10 numere naturale din intervalul
9
0, 10 . Numerele sunt separate prin câte un spaţiu, iar ı̂n şir există cel puţin doi termeni cu
aceeaşi paritate pe poziţii consecutive.
Se cere să se afişeze pe ecran numărul secvenţelor paritare de lungime maximă din şirul aflat
ı̂n fişier, precum şi această lungime maximă. Numerele afişate sunt separate printr-un spaţiu.
Proiectaţi un algoritm eficient din punctul de vedere al timpului de executare şi al memoriei
utilizate.
Exemplu: dacă fişierul conţine numerele
2 3 5 1 7 9 8 4 4 11 15 17 21 11 6 11 15 17 21 11 6 5 2 6 4 0 16
atunci pe ecran se afişează valorile 4 5
a. Descrieţi ı̂n limbaj natural algoritmul proiectat, justificând eficienţa acestuia. (2p.)
b. Scrieţi programul C/C++ corespunzător algoritmului proiectat. (8p.)
Capitolul 2
BAC 2021
2.1.1 Subiectul I
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.
Problema 1
Variabila x este de tip ı̂ntreg şi memorează un număr nenul. Indicaţi expresia C/C++ cu valoarea
1 dacă 2021 este divizor al lui x.
a. x/(x/2021)==0 b.x/(x%2021)==0 c.x%(x/2021)==0 d. x%(x\%2021)==0
Problema 2
Utilizând metoda backtracking se generează toate valorile naturale formate cu cifre ale numărului
2021 şi care sunt strict mai mici decât acesta. Primele 12 soluţii generate sunt, ı̂n această ordine,
0, 1, 10, 100, 1000, 1001, 1002, 101, 1010, 1011, 1012, 102. Indicaţi două soluţii care se generează
pe poziţii consecutive, ı̂n această ordine.
a. 2002, 2020 b. 2020, 21 c. 122, 1221 d. 21, 22
Problema 4
Un arbore cu 11 noduri, numerotate de la 1 la 11, este reprezentat prin vectorul de ”taţi”
(9,3,4,6,4,8,6,0,4,4,4). Indicaţi numărul de descendenţi direcţi (”fii”) ai nodului 4.
a. 2 b. 3 c. 5 d. 6
12
CAPITOLUL 2. BAC 2021 2.1. SESIUNEA SPECIALĂ 13
Problema 5
Indicaţi numărul de noduri ale unui graf neorientat, complet, cu 210 muchii.
a. 14 b. 15 c. 20 d. 21
Problema 2
Subprogramul f este definit alăturat.
Scrieţi ce valori au f(2), respectiv f(21). (6p.)
Problema 3 strcpy(x,"bac2021");
Variabila i este de tip ı̂ntreg, iar variabila x permite cout<<x+3<<endl; | printf("\%s\n",x+3);
for(i=0;i<strlen(x);i++)
memorarea unui şir cu cel mult 100 de caractere.
if(strchr("0123456789",x[i])==0)
Scrieţi ce se afişează ı̂n urma executării secvenţei cout<<x[i]<<’!’; | printf("\%c! ",x[i]);
alăturate. (6p.)
Problema 2
Scrieţi un program C/C++ care citeşte de la tastatură numere naturale: n (n"[2,20]), k (k"[2,n])
9
şi n n numere din intervalul [0,10 ], elemente ale unui tablou bidimensional cu n linii şi n coloane.
Programul transformă tabloul ı̂n memorie, interschimbând şirul elementelor situate pe linia a k-a,
ı̂n stânga diagonalei principale, parcurse de la stânga la dreapta, cu şirul elementelor situate pe
coloana a k-a, deasupra diagonalei principale, parcurse de sus ı̂n jos, ca ı̂n exemplu. Elementele
CAPITOLUL 2. BAC 2021 2.2. SESIUNEA IUNIE - IULIE 14
tabloului obţinut sunt afişate pe ecran, fiecare linie pe câte o linie a ecranului, cu elementele
fiecărei linii separate prin câte un spaţiu.
Problema 3
Se consideră şirul 1, 3, 7, 13, 21, 31, 43 ... definit astfel: f0 1, iar fn fn1 2 n, dacă n ' 1
(unde n este un număr natural).
Se citesc de la tastatură două numere naturale din intervalul [1,10 ], x şi y (x $ y), reprezentând
9
doi termeni aflaţi pe poziţii consecutive ı̂n şirul dat, şi se cere să se scrie ı̂n fişierul text bac.out,
separaţi prin câte un spaţiu, toţi termenii şirului mai mici sau egali cu y, ı̂n ordine inversă a
apariţiei lor ı̂n şir.
Proiectaţi un algoritm eficient din punctul de vedere al spaţiului de memorie şi al timpului de
executare.
Exemplu: dacă x 21 şi y 31, fişierul conţine valorile
31 21 13 7 3 1
a. Descrieţi ı̂n limbaj natural algoritmul proiectat, justificând eficienţa acestuia. (2p.)
b. Scrieţi programul C/C++ corespunzător algoritmului proiectat. (8p.)
2.2.1 Subiectul I
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.
Problema 1
Indicaţi o expresie C/C++ care are valoarea 1 dacă şi numai dacă valorile variabilelor ı̂ntregi x şi
y sunt numere pare.
Problema 3
Variabila m memorează elementele unui tablou bidimensional cu 100 de linii şi 100 de coloane,
numerotate de la 0 la 99. Indicaţi expresia C/C++ prin care poate fi accesat un element aflat pe
diagonala secundară a tabloului.
Problema 4
Un graf neorientat are 6 noduri, numerotate de la 1 la 6, şi muchiile [1,2], [1,3], [2,3], [3,4], [3,5],
[4,5], [5,6]. Indicaţi un ciclu elementar al acestui graf.
Problema 5
Într-un arbore cu rădăcină un nod se află pe nivelul x dacă lanţul elementar care are o extremitate
ı̂n nodul respectiv şi cealaltă extremitate ı̂n rădăcina arborelui are lungimea x. Pe nivelul 0 se
află un singur nod (rădăcina).
Într-un arbore cu rădăcină toate nodurile de pe acelaşi nivel au un număr egal de ”fii” şi nu
există două niveluri diferite cu acelaşi număr de noduri. Indicaţi numărul minim de noduri de pe
nivelul 3.
a. 12 b. 9 c. 8 d. 5
Problema 2
Utilizând metoda bactracking se generează toate grupurile de cel puţin două păsări cântătoare din
mulţimea cinteză, ciocârlie, mierlă, privighetoare, scatiu, astfel ı̂ncât mierla şi privighetoarea să
nu fie ı̂n acelaşi grup. Două grupuri diferă prin cel puţin o pasăre. Primele patru soluţii generate
sunt, ı̂n această ordine: (cinteză, ciocârlie), (cinteză, ciocârlie, mierlă), (cinteză, ciocârlie, mierlă,
scatiu), (cinteză, ciocârlie, privighetoare). Scrieţi următoarele două soluţii generate imediat după
(ciocârlie, privighetoare, scatiu). (6p.)
a s, prin care furnizează suma divizorilor primi ai lui n care apar la o putere impară ı̂n
descompunerea ı̂n factori primi a acestuia.
Scrieţi definiţia completă a subprogramului.
Exemple: pentru n 360, după apel s 7 (360 23 32 51, deci s 2 5),
iar pentru n 16, după apel s 0. (10p.)
Problema 2
Scrieţi un program C/C++ care citeşte de la tastatură două numere naturale n şi k, apoi n
cuvinte, separate prin ¡Enter¿. Fiecare cuvânt este format din cel mult 10 caractere, numai litere
mici ale alfabetului englez, iar numerele citite sunt din intervalul [1,20]. 5 2
Programul afişează pe ecran, pe linii separate, primele k cuvinte dintre cele citite norii
cumulus
pentru care ultima literă este o vocală, sau doar mesajul nu exista dacă nu există k
pluteau
astfel de cuvinte. Se consideră vocale literele a, e, i, o, u. pe
Exemplu: dacă se citesc datele alăturate, se afişează pe ecran: cer
norii
pluteau (10p.)
Problema 3
Numărul natural a se numeşte sufix al numărului natural b dacă a este egal cu b sau dacă b se
poate obţine din a prin alipirea la stânga a unor noi cifre.
Fişierul bac.txt conţine pe prima linie un număr natural x (x " 100, 999), iar pe a doua
5 9
linie un şir de cel mult 10 numere naturale din intervalul 0, 10 . Numerele din şir sunt separate
prin câte un spaţiu.
Se cere să se afişeze pe ecran ultimii doi termeni ai şirului, aflaţi pe poziţii consecutive ı̂n
acesta, care ı̂l au drept sufix pe numărul x. Numerele sunt afişate ı̂n ordinea ı̂n care apar ı̂n şir,
separate printr-un spaţiu, iar dacă nu există doi astfel de termeni, se afişează pe ecran mesajul nu
exista. Proiectaţi un algoritm eficient din punctul de vedere al memoriei utilizate şi al timpului
de executare.
Exemplu: dacă fişierul conţine 210
numerele alăturate, atunci pe 3445 210 893210 1245 1210 3210 15210 67120 20210 12
ecran se afişează 3210 15210
a. Descrieţi ı̂n limbaj natural algoritmul proiectat, justificând eficienţa acestuia. (2p.)
b. Scrieţi programul C/C++ corespunzător algoritmului proiectat. (8p.)
a 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ă.
a În grafurile din cerinţe oricare muchie are extremităţi distincte şi oricare două muchii diferă
prin cel puţin una dintre extremităţi.
2.3.1 Subiectul I
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.
CAPITOLUL 2. BAC 2021 2.3. SESIUNEA DE TOAMNĂ 17
Problema 1
Variabilele x şi y sunt de tip real (x j 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)
Problema 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ă.
Problema 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
Problema 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.
Problema 2
Variabila s poate memora un şir de cel mult 20 strcpy(s,"ROMANIA");
i=strlen(s)-1;
de caractere, variabila aux este de tip char, iar
for(j=3;j>=0;j--)
celelalte variabile sunt de tip ı̂ntreg.
{ aux=s[i]; s[i]=s[i-j]; s[i-j]=aux;
Scrieţi şirul memorat prin intermediul vari- i=i-j;
abilei s ı̂n urma executării secvenţei alăturate. }
(6p.)
Problema 2
Scrieţi un program C/C++ care citeşte de la tastatură două numere naturale din intervalul
2
2, 10 , 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
(10p.)
Problema 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.
5
Fişierul numere.in conţine numere naturale din intervalul 10, 10 : 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.
a. Descrieţi ı̂n limbaj natural algoritmul proiectat, justificând eficienţa acestuia. (2p.)
b. Scrieţi programul C/C++ corespunzător algoritmului proiectat. (8p.)
Capitolul 3
BAC 2020
3.1.1 Subiectul I
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.
Problema 1
Indicaţi valoarea expresiei C/C++ alăturate. 3+5.0/2+2
a. 2 b. 5 c. 6 d. 7.5
Problema 3
Utilizând metoda backtracking se generează toate variantele prin care patru persoane pot plăti o
consumaţie totală de 200 de lei ı̂n următoarele condiţii:
a fiecare plăteşte o sumă nenulă, divizibilă cu 10;
a primul plăteşte mai mult decât al doilea, al doilea mai mult decât al treilea, iar acesta mai
mult decât al patrulea.
O soluţie constă ı̂n patru valori, reprezentând, ı̂n ordine, sumele plătite de fiecare dintre cele
patru persoane. Primele patru soluţii generate sunt, ı̂n această ordine: (70, 60, 40, 30), (70, 60,
50, 20), (80, 50, 40, 30), (80, 60, 40, 20). Indicaţi cea de a şasea soluţie, ı̂n ordinea generării
acestora.
20
CAPITOLUL 3. BAC 2020 3.1. SESIUNEA SPECIALĂ 21
Problema 4
Un arbore cu 10 noduri, numerotate de la 1 la 10, este reprezentat prin vectorul de ”taţi”
(7,5,6,5,7,0,6,3,3,8). Indicaţi numărul de noduri ”frunză” ale acestui arbore.
a. 2 b. 3 c. 5 d. 6
Problema 5 0 1 0 1 1
1 0 1 0 0
Un graf neorientat cu 5 noduri este reprezentat prin matricea de adiacenţă alăturată.
0 1 0 1 0
Indicaţi numărul grafurilor parţiale conexe ale acestuia care sunt diferite de graful 1 0 1 0 0
dat. 1 0 0 0 0
a. 4 b. 6 c. 8 d. 30
Problema 2
Variabila c memorează, pentru un calculator, capacitatea memoriei (interne şi externe), măsurată
ı̂n GB, şi o literă, corespunzătoare tipului monitorului acestuia. ştiind că expresiile C/C++ de
mai jos au ca valori litera corespunzătoare tipul monitorului şi două numere naturale din inter-
6
valul 1, 10 , reprezentând capacitatea memoriei interne, respectiv capacitatea memoriei externe
a calculatorului, scrieţi definiţia unei structuri cu eticheta calculator, care permite memorarea
datelor despre un calculator, şi declaraţi corespunzător variabila c.
c.monitor c.memorie.interna c.memorie.externa (6p.)
Problema 3
Variabilele i şi j sunt de tip ı̂ntreg, iar variabila a memorează un
tablou bidimensional cu 9 linii şi 9 coloane, numerotate de la 0 la
8, având iniţial toate elementele egale cu simbolul egal (=). Scrieţi
secvenţa de mai jos, ı̂nlocuind punctele de suspensie, astfel ı̂ncât,
ı̂n urma executării secvenţei obţinute, variabila a să memoreze
tabloul alăturat.
for(i=0;i<9;i++)
for(j=0;j<9;j++)
.................. (6p.)
CAPITOLUL 3. BAC 2020 3.2. SESIUNEA IUNIE - IULIE 22
Problema 2
Numim rotire spre stânga a unui cuvânt format din cel puţin trei litere operaţia prin care prima
sa literă se mută la final, iar toate celelalte litere se mută cu o poziţie spre stânga.
Exemplu: ı̂n urma rotirii spre stânga a cuvântului ilumina se obţine cuvântul luminai.
Un text are cel mult 100 de caractere, iar cuvintele sale sunt formate din litere mici ale
alfabetului englez şi sunt separate prin câte un spaţiu. Scrieţi un program C/C++ care citeşte
de la tastatură un text de tipul menţionat mai sus şi ı̂l transformă ı̂n memorie prin rotirea spre
stânga a fiecărui cuvânt al său format din cel puţin trei litere, ca ı̂n exemplu. Programul afişează
pe ecran textul obţinut sau mesajul nu exista, dacă ı̂n text nu există niciun cuvânt de cel puţin
trei litere.
Exemplu: pentru textul: un palc mic de scolarite ilumina sala
se afişează pe ecran: un alcp icm de colarites luminai alas (10p.)
Problema 3
Un şir finit se numeşte palindromic dacă parcurgându-l termen cu termen, de la stânga la dreapta
sau de la dreapta la stânga se obţine acelaşi şir de valori.
Exemplu: şirul 12, 13, 16, 13, 12 este palindromic.
6 3
Fişierul bac.in conţine un şir de cel mult 10 numere naturale din intervalul 1, 10 , separate
prin câte un spaţiu. Se cere să se afişeze pe ecran mesajul DA, dacă numerele din şir pot fi
rearanjate, astfel ı̂ncât să formeze un şir palindromic, sau mesajul NU ı̂n caz contrar. Proiectaţi
un algoritm eficient din punctul de vedere al timpului de executare.
Exemplu: dacă fişierul conţine numerele 100 30 100 30 500 30 30 se afişează pe ecran DA
a. Descrieţi ı̂n limbaj natural algoritmul proiectat, justificând eficienţa acestuia. (2p.)
b. Scrieţi programul C/C++ corespunzător algoritmului proiectat. (8p.)
3.2.1 Subiectul I
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.
Problema 1
Variabila x este de tip ı̂ntreg şi poate memora un număr din intervalul [1000,2000].
(x-999)%1000
Indicaţi valoarea minimă pe care o poate avea expresia C/C++ alăturată.
a. 0 b. 2 c. 999 d. 1000
CAPITOLUL 3. BAC 2020 3.2. SESIUNEA IUNIE - IULIE 23
Problema 3
Utilizând metoda backtracking, se generează toate meniurile care cuprind câte patru feluri dis-
tincte de mâncare din mulţimea {aperitiv, desert, legume, paste, salată, supă}, fiecare
meniu respectând următoarele condiţii:
a dacă există aperitiv, este servit primul;
a dacă există desert, este servit ultimul;
a NU sunt servite legume şi salată ı̂n acelaşi meniu;
a dacă există paste şi supă ı̂n acelaşi meniu, pastele NU sunt servite ı̂nainte de supă.
Două meniuri sunt distincte dacă diferă prin cel puţin un fel de mâncare sau prin ordinea
servirii acestora. Primele cinci meniuri generate sunt, ı̂n această ordine: (aperitiv, legume,
paste, desert), (aperitiv, legume, supă, desert), (aperitiv, legume, supă,
paste), (aperitiv, paste, legume, desert), (aperitiv, paste, salată, desert).
Indicaţi al şaselea meniu generat.
a. (aperitiv, salată, paste, desert) b. (aperitiv, salată, supă, desert)
c. (aperitiv, salată, supă, paste) d. (aperitiv, supă, legume, desert)
Problema 4
Un graf orientat cu 5 vârfuri, numerotate de la 1 la 5, este reprezentat alăturat.
Indicaţi numărul de componente tare conexe ale grafului.
a. 1 b. 2 c. 3 d. 4
Problema 5
Un arbore cu rădăcină are 20 de noduri, dintre care 10 noduri de tip ”frunză”. Indicaţi numărul
maxim de noduri care au acelaşi ”tată” ı̂n acest arbore.
a. 5 b. 7 c. 10 d. 15
Problema 2
Variabila c memorează date specifice unui cerc: coordonatele reale (abscisa şi ordonata), ı̂n planul
xOy, ale centrului cercului, precum şi lungimea razei acestuia. ştiind că expresiile C/C++ de
mai jos au ca valori numere reale reprezentând datele specifice ale unui cerc, scrieţi definiţia unei
structuri cu eticheta figura, care permite memorarea datelor precizate, şi declaraţi corespunzător
variabila c.
c.centru.x c.centru.y c.raza (6p.)
Problema 3
a b c d e f g
Variabilele i şi j sunt de tip ı̂ntreg, iar variabila m memorează un tablou bidi- + a b c d e f
mensional cu 7 linii şi 7 coloane, numerotate de la 0 la 6, cu elemente de tip char. + + a b c d e
Iniţial, fiecare element memorează caracterul *. Fără a utiliza alte variabile, + + + a b c d
scrieţi secvenţa de instrucţiuni de mai jos, ı̂nlocuind punctele de suspensie astfel + + + + a b c
ı̂ncât, ı̂n urma executării secvenţei obţinute, variabila m să memoreze tabloul + + + + + a b
alăturat. + + + + + + a
for(i=0;i<7;i++)
for(j=0;j<7;j++)
.................. (6p.)
Problema 2
Numim citat ı̂ntr-un text o secvenţă de caractere din acel text care ı̂ncepe cu un caracter ¡ şi se
termină cu un caracter ¿, celelalte caractere ale secvenţei fiind diferite de ¡ şi ¿.
Un text de cel mult 100 de caractere (litere mici ale alfabetului englez, spaţii şi caracterele ¡
şi ¿) conţine cel puţin un citat. Textul nu conţine alte caractere ¡ şi ¿ decât cele care mărginesc
citatele, şi oricare două citate nu au nici caractere ¡ şi ¿ şi nici alte caractere ı̂n comun.
Scrieţi un program C/C++ care citeşte de la tastatură un text de tipul precizat şi ı̂l transformă
ı̂n memorie prin ı̂nlocuirea tuturor literelor mici cuprinse ı̂n citate cu literele mari corespunzătoare,
celelalte rămânând nemodificate, ca ı̂n exemplu. Programul afişează pe ecran textul obţinut.
Exemplu: pentru textul
mai bine sa fii un <om de valoare> decat un <om de succes>
se afişează mai bine sa fii un <OM DE VALOARE> decat un <OM DE SUCCES> (10p.)
Problema 3
Se numeşte vârf ı̂ntr-un şir de numere naturale un termen al şirului care este strict mai mare decât
fiecare dintre cei doi termeni vecini cu el, aflaţi ı̂n şir pe poziţia din stânga, respectiv din dreapta
sa.
6 9
Fişierul bac.in conţine un şir de cel mult 10 numere naturale din intervalul 0, 10 , separate
prin câte un spaţiu. Se cere să se afişeze pe ecran vârful din şirul aflat ı̂n fişier pentru care
valoarea absolută a diferenţei dintre cei doi vecini ai săi este minimă. Dacă există mai multe astfel
de numere, se afişează cel mai mare dintre ele, iar dacă nu există niciun vârf, se afişează pe ecran
mesajul nu exista. Proiectaţi un algoritm eficient din punctul de vedere al timpului de executare
şi al spaţiului de memorie utilizat.
Exemplu: dacă fişierul conţine şirul 2 7 10 5 6 2 1 3 20 17 9 11 7 3 10 6 2
se afişează pe ecran 11
a. Descrieţi ı̂n limbaj natural algoritmul proiectat, justificând eficienţa acestuia. (2p.)
b. Scrieţi programul C/C++ corespunzător algoritmului proiectat. (8p.)
CAPITOLUL 3. BAC 2020 3.3. SESIUNEA DE TOAMNĂ 25
3.3.1 Subiectul I
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.
Problema 1
Variabila x este de tip ı̂ntreg şi poate memora un număr natural din intervalul x%2020
9
0, 10 . Indicaţi valoarea maximă pe care o poate avea expresia C/C++ alăturată.
a. 20.2 b. 2019 c. 2020 d. 495049
Problema 2
void f(int x)
Subprogramul f este definit alăturat. {
Indicaţi apelul ı̂n urma căruia simbolul * se afişează de trei ori. cout<<"*";
if(x>5) f((x+1)/2);
a. f(30); b. f(21); c. f(17); d. f(8); }
Problema 3
Utilizând metoda backtracking se generează toate modalităţile de a prepara o băutură din câte
3 sau 4 tipuri de fructe distincte din mulţimea {căpşune, mere, pepene, pere, portocale}.
Primele patru soluţii generate sunt, ı̂n această ordine: (căpşune, mere, pepene), (căpşune,
mere, pepene, pere), (căpşune, mere, pepene, portocale), (căpşune, mere, pere).
Indicaţi cea de a şasea soluţie generată.
a. (pepene, pere, portocale) b. (mere, pepene, pere, portocale)
c. (căpşune, mere, portocale) d. (căpşune, mere, pere, pepene)
Problema 4
Un arbore cu 9 noduri, numerotate de la 1 la 9, este reprezentat prin vectorul de ”taţi”
(8,6,4,2,3,0,4,2,7). Indicaţi un ”frate” al nodului 4.
a. 1 b. 2 c. 7 d. 8
Problema 5
Un graf neorientat eulerian cu 5 noduri are un nod cu gradul 4. Indicaţi numărul minim de muchii
ale grafului.
a. 4 b. 6 c. 8 d. 10
Problema 2
Variabila p memorează simultan, pentru fiecare dintre cele 20 de tipuri de procesoare dintr-un
depozit, următoarele date: producătorul (o literă mare a alfabetului englez), frecvenţa procesorului
(număr natural) şi preţul produsului (număr real). Ştiind că expresiile C/C++ de mai jos au ca
valori producătorul primului procesor, respectiv frecvenţa şi preţul acestuia, scrieţi definiţia unei
structuri cu eticheta procesor, care permite memorarea datelor despre un procesor, şi declaraţi
corespunzător variabila p.
p[0].producator p[0].frecventa p[0].pret (6p.)
Problema 3
Variabilele i, j şi k sunt de tip ı̂ntreg, iar variabila a memorează un tablou bidimensional cu 6 linii
şi 4 coloane, numerotate ı̂ncepând de la 0, cu elemente numere naturale din intervalul [0,50].
Scrieţi o secvenţă de instrucţiuni ı̂n urma executării căreia să se rearanjeze elementele pare
situate pe coloana a 3-a a tabloului, astfel ı̂ncât acestea să fie ordonate crescător, de sus ı̂n jos, ı̂n
cadrul aceleiaşi coloane, iar celelalte elemente ale tabloului să ı̂şi păstreze poziţiile, ca ı̂n exemplu.
sau -1, dacă nu există cel puţin k astfel de numere ı̂n acest interval.
Scrieţi definiţia completă a subprogramului.
Exemplu: dacă a=27, b=50 şi k=3, atunci subprogramul returnează 34. (10p.)
Problema 2
Două cuvinte distincte se numesc ı̂n oglindă dacă fiecare dintre ele se obţine prin citirea literelor
celuilalt de la dreapta la stânga.
Exemplu: animate şi etamina sunt ı̂n oglindă, iar pentru cuvântul reper nu există un cuvânt
cu care să fie ı̂n oglindă.
Se consideră un text cu cel mult 100 de caractere, ı̂n care cuvintele sunt formate din litere mici
ale alfabetului englez şi sunt separate prin câte un spaţiu. Scrieţi un program C/C++ care citeşte
de la tastatură un text de tipul menţionat mai sus şi ı̂l transformă ı̂n memorie, ı̂nlocuind fiecare
cuvânt cu număr impar de litere cu acel cuvânt cu care el este ı̂n oglindă, dacă acesta există, ca
ı̂n exemplu.
Programul afişează pe ecran textul obţinut sau mesajul nu exista, dacă ı̂n text nu s-a ı̂nlocuit
niciun cuvânt.
Exemplu:
pentru textul: era o selectie reper de desene animate prezenta
se obţine textul: are o selectie reper de desene etamina prezenta
iar pentru textul: un reper pentru desene
se afişează pe ecran mesajul: nu exista (10p.)
CAPITOLUL 3. BAC 2020 3.3. SESIUNEA DE TOAMNĂ 27
Problema 3
6 9
Fişierul bac.txt conţine un şir de cel mult 10 numere naturale din intervalul 0, 10 , separate
prin câte un spaţiu.
Se cere să se afişeze pe ecran, separate printr-un spaţiu, două numere naturale a şi b (a $ b),
astfel ı̂ncât oricare termen al şirului care are exact două cifre să aparţină intervalului a, b, iar
valoarea expresiei b a să fie minimă. Dacă şirul nu are niciun termen de două cifre, pe ecran se
afişează mesajul nu exista. Proiectaţi un algoritm eficient din punctul de vedere al timpului de
executare şi al spaţiului de memorie utilizat.
Exemplu: dacă fişierul conţine valorile 7 2 40 5 11 15 10 122 18 350
se afişează pe ecran numerele 9 41.
a. Descrieţi ı̂n limbaj natural algoritmul proiectat, justificând eficienţa acestuia. (2p.)
b. Scrieţi programul C/C++ corespunzător algoritmului proiectat. (8p.)
Capitolul 4
BAC 2019
a 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ă.
a Î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.
4.1.1 Subiectul I
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.
Problema 1
|
Variabilele x şi y sunt ı̂ntregi. Indicaţi expresia C/C++ echivalentă cu cea | (x<3)&&(y>=5)
alăturată. |
a. !((x<3)||(y>=5)) b. !(x>=3)&&(y<5)
c. !(!(x<3)||!(y>=5)) d. !((x>=3)&&(y<5))
Problema 2
Subprogramul f este incomplet definit alăturat. | void f(int m, int n, int d)
| { if(n%d==0 && m%d==0)
Indicaţi expresia cu care pot fi ı̂nlocuite punctele de
| cout<<d; | printf("%d",d);
suspensie, astfel ı̂ncât, ı̂n urma apelului de mai jos, să se | else f(.........);
afişeze cel mai mare divizor comun al numerelor nenule | }
memorate ı̂n variabilele ı̂ntregi x şi y.
Problema 3
Utilizând metoda backtracking, se generează toate băuturile obţinute amestecând sucurile a cel
puţin două fructe distincte din mulţimea {afine, caise, lămâi, mere, pere}.
Primele cinci soluţii obţinute sunt, ı̂n această ordine:
(afine, caise), (afine, caise, lămâi), (afine, caise, lămâi, mere),
(afine, caise, lămâi, mere, pere) şi (afine, caise, lămâi, pere).
A şasea soluţie este:
a. (afine, caise, mere) b. (afine, caise, mere, pere)
c. (afine, mere, pere) d. (afine, lămâi, mere, pere)
28
CAPITOLUL 4. BAC 2019 4.1. SESIUNEA SPECIALĂ 29
Problema 4
Indicaţi un lanţ elementar ı̂n graful neorientat cu 5 noduri, numerotate
de la 1 la 5, reprezentat alăturat.
Problema 5
Indicaţi valorile ce pot reprezenta numărul de fii ai fiecăruia dintre cele şase noduri ale unui arbore
cu rădăcină.
a. 0,0,0,1,2,3 b. 0,0,0,0,2,3 c. 0,0,0,3,3,3 d. 1,1,1,1,1,1
Problema 2
Variabila e, declarată alăturat, memorează informaţii despre un
eveniment din anul 2019 (numărul de ordine şi data desfăşurării
sale), iar variabila d memorează o dată calendaristică din acelaşi
an. Scrieţi o expresie care are valoarea 1 dacă şi numai dacă data
memorată ı̂n variabila d este anterioară datei desfăşurării eveni-
mentului corespunzător variabilei e. (6p.)
Problema 3
Variabilele i şi j sunt de tip ı̂ntreg, iar variabila a memorează un tablou bidi-
mensional cu 5 linii şi 5 coloane, numerotate de la 1 la 5, având iniţial toate
elementele nule. Fără a utiliza alte variabile decât cele menţionate, scrieţi
secvenţa de instrucţiuni de mai jos, ı̂nlocuind punctele de suspensie astfel ı̂ncât,
ı̂n urma executării secvenţei obţinute, variabila a să memoreze tabloul alăturat.
for(i=1;i<=5;i++)
for(j=1;j<=5;j++)
.................. (6p.)
sunt egale ı̂ntre ele sau valoarea 0 ı̂n caz contrar. Scrieţi definiţia completă a subprogramului.
Exemplu: dacă n=7727470 sau n=7240 atunci subprogramul returnează 1, iar dacă
n=7921470 atunci subprogramul returnează 0. (10p.)
CAPITOLUL 4. BAC 2019 4.2. SESIUNEA IUNIE - IULIE 30
Problema 2
Într-un text cu cel mult 100 de caractere cuvintele sunt formate numai din litere mari şi mici ale
alfabetului englez şi sunt separate prin câte un spaţiu.
Scrieţi un program C/C++ care citeşte de la tastatură un text de tipul precizat, apoi un număr
natural, n (n " 1, 10 ), şi afişează pe ecran, pe linii separate, cuvintele din text care au exact n
2
litere.
Cuvintele sunt afişate ı̂n ordinea apariţiei lor ı̂n text, iar dacă nu există niciun astfel de cuvânt,
se afişează pe ecran mesajul nu exista.
Exemplu: dacă se citeşte textul Fat Frumos este cel mai viteaz iar n=6, se afişează pe
ecran:
Frumos
viteaz (10p.)
Problema 3
Şirul f este definit astfel: f1 x; f2 y; f3 z; fi fi1 fi2 fi3 , unde x, y, z şi i sunt
numere naturale nenule, i % 3.
De exemplu, dacă x 1, y 2 şi z 4 şirul este: 1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, ...
Se citesc de la tastatură un număr natural, n (n " 1, 10 ), apoi trei numere naturale din
4
2
intervalul 1, 10 , x, y şi z, reprezentând, ı̂n această ordine, primii trei termeni ai şirului precizat
mai sus. Se cere să se scrie ı̂n fişierul bac.txt primii n termeni ai şirului, separaţi prin câte un
spaţiu, ı̂n ordine inversă a apariţiei lor ı̂n şir.
Proiectaţi un algoritm eficient din punctul de vedere al timpului de executare şi al spaţiului
de memorie utilizat.
Exemplu: dacă n 10, x 1, y 2 şi z 4 fişierul conţine numerele: 14 13 11 10 8 7 5 4 2 1
a) Descrieţi ı̂n limbaj natural algoritmul proiectat, justificând eficienţa acestuia. (2p.)
b) Scrieţi programul C/C++ corespunzător algoritmului proiectat. (8p.)
4.2.1 Subiectul I
Problema 1
Indicaţi numerele pe care le pot memora variabilele ı̂ntregi x şi y, astfel
ı̂ncât valoarea expresiei C/C++ alăturate să fie 1.
Problema 2
Subprogramul f este definit alăturat. Valoarea lui
f(6) este:
a. 6 b. 5 c. 2 d. 1
CAPITOLUL 4. BAC 2019 4.2. SESIUNEA IUNIE - IULIE 31
Problema 3
Variabila x este de tip char şi memorează o literă mică a alfabetului englez. Indicaţi expresia
C/C++ care are valoare nenulă dacă şi numai dacă litera memorată ı̂n variabila x este o vocală.
Se consideră vocale literele a, e, i, o, u.
a. strcmp(x,"aeiou")==0
b. strchr("aeiou",x)
c. ’a’<=x && x<=’u’
d. x==a || x==e || x==i || x==o || x==u
Problema 4
Utilizând metoda backtracking, se generează, ı̂n ordine strict descrescătoare, toate numerele nat-
urale de câte patru cifre distincte din mulţimea {0, 1, 2, 3, 4, 5}. Primele şase numere generate
sunt, ı̂n această ordine: 5432, 5431, 5430, 5423, 5421, 5420. Al şaptelea număr generat este:
Problema 5
Un graf neorientat are 20 de noduri şi 10 muchii. Numărul maxim de componente conexe pe care
le poate avea acest graf este:
a. 5 b. 10 c. 16 d. 20
Problema 2
Un graf orientat cu 6 vârfuri, numerotate de la 1 la 6, are arcele (1,2), (1,4), (2,5), (2,6), (3,5),
(4,1), (5,1), (6,5). Scrieţi un drum elementar de lungime maximă din graful dat. (6p.)
Problema 3
Variabila fig, declarată alăturat, memorează lungimea razei unui
cerc şi coordonatele centrului acestuia, ı̂n sistemul de coordonate
xOy. Scrieţi o secvenţă de instrucţiuni prin care se iniţializează
variabila fig, astfel ı̂ncât cercul corespunzător acesteia să aibă
raza 1 şi centrul ı̂n originea sistemului de coordonate. (6p.)
CAPITOLUL 4. BAC 2019 4.3. SESIUNEA DE TOAMNĂ 32
Problema 2
Un tablou bidimensional cu număr impar de coloane este numit simetric faţă de coloana din mijloc
dacă, pe fiecare linie a tabloului, elementele dispuse simetric faţă de elementul din mijloc al liniei
respective au valori egale.
Scrieţi un program C/C++ care citeşte de la tastatură două numere
naturale din intervalul [3,21], m şi n (n impar), şi elementele unui tablou
4
bidimensional cu m linii şi n coloane, numere naturale din intervalul 0, 10 .
Programul afişează pe ecran mesajul DA, dacă tabloul este simetric faţă de
coloana din mijloc, sau mesajul NU ı̂n caz contrar.
Exemplu: pentru m=4, n=5 şi tabloul alăturat, se afişează pe ecran DA (10p.)
Problema 3
Un termen al unui şir de numere se numeşte vârf local al acestuia dacă nu există niciun alt termen
mai mare sau egal cu el care să ı̂l preceadă ı̂n şir sau dacă este egal cu termenul vecin anterior,
iar acesta este vârf local.
6
Fişierul bac.txt conţine un şir format din cel puţin două şi cel mult 10 numere naturale
3
din intervalul 0, 10 , separate prin câte un spaţiu. Se cere să se afişeze pe ecran, separate prin
câte un spaţiu, toate vârfurile locale ale şirului aflat ı̂n fişier. Proiectaţi un algoritm eficient din
punctul de vedere al timpului de executare şi al spaţiului de memorie utilizat.
Exemplu: dacă fişierul conţine numerele 7 4 9 10 10 10 8 10 10 8 30 se afişează pe ecran 7 9
10 10 10 30
a) Descrieţi ı̂n limbaj natural algoritmul proiectat, justificând eficienţa acestuia. (2p.)
b) Scrieţi programul C/C++ corespunzător algoritmului proiectat. (8p.)
4.3.1 Subiectul I
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.
Problema 1
O expresie C/C++ care are valoarea 0 este:
a. ’m’<’n’ b. ’m’==’M’
c. ’M’==’m’+’N’-’n’ d. ’N’==’M’+1
CAPITOLUL 4. BAC 2019 4.3. SESIUNEA DE TOAMNĂ 33
Problema 2
Subprogramul f este definit alăturat. Indicaţi ce se
afişează ı̂n urma apelului de mai jos.
f(75,30);
a. 75 30 45 b. 75 45 15 c. 75 45 15 15 d. 75 30 45 15
Problema 3
Utilizând metoda backtracking, se generează toate torturile formate din trei straturi de tipuri
distincte de cremă din mulţimea {caramel, ciocolată, frişcă, nuci, vanilie}. Ultimul
strat este de frişcă sau de vanilie, iar aceste tipuri de cremă nu pot apărea pe primele două straturi.
Două torturi cu straturi din aceleaşi tipuri de cremă sunt diferite dacă acestea sunt dispuse ı̂n altă
ordine. Primele patru soluţii generate sunt, ı̂n această ordine: (caramel, ciocolată, frişcă),
(caramel, ciocolată, vanilie), (caramel, nuci, frişcă), (caramel, nuci, vanilie).
A cincea soluţie este:
a. (ciocolată, caramel, frişcă) b. (ciocolată, nuci, frişcă)
c. (nuci, caramel, vanilie) d. (nuci, ciocolată, vanilie)
Problema 4
Numărul de noduri ale unui arbore cu 4 muchii este:
a. 2 b. 3 c. 4 d. 5
Problema 5
Valorile care pot reprezenta gradele nodurilor unui graf neorientat, cu 6 noduri, sunt:
a. 1,0,0,2,2,2 b. 2,2,3,4,0,3 c. 2,2,5,5,0,1 d. 6,5,4,3,2,1
Problema 2
Fiind date două şiruri de caractere a şi b, ı̂l numim pe a sufix al lui b dacă a este egal cu b sau
dacă b se poate obţine din a prin alipirea la stânga a unor noi caractere.
Variabilele a şi b pot memora câte un şir cu cel mult 20 de caractere. Scrieţi o secvenţă de
instrucţiuni ı̂n urma executării căreia variabila a să memoreze un sufix al lui b format din trei
caractere, sau şirul nedeterminat, dacă nu există un astfel de sufix.
Exemplu: dacă b memorează şirul centaur, atunci a memorează şirul aur, iar dacă b mem-
orează şirul au, atunci a memorează şirul nedeterminat. (6p.)
CAPITOLUL 4. BAC 2019 4.3. SESIUNEA DE TOAMNĂ 34
Problema 3
În declarările alăturate, variabila p memorează coordonatele
unui punct ı̂n sistemul de coordonate xOy, iar variabila c mem-
orează datele caracteristice ale unui cerc: lungimea razei şi co-
ordonatele centrului său. Scrieţi o expresie care are valoarea 1
dacă şi numai dacă punctul corespunzător variabilei p coincide
cu centrul cercului corespunzător variabilei c. (6p.)
Problema 2
Numim pătrat de dimensiune m al unui tablou bidimensional tabloul obţinut din acesta păstrând
doar elementele aflate pe primele m linii şi pe primele m coloane ale sale.
Scrieţi un program C/C++ care citeşte de la tastatură un număr natural, n (n " 2, 20),
apoi elementele unui tablou bidimensional cu n linii şi n coloane, numere naturale din intervalul
4
0, 10 .
Programul determină un pătrat de dimensiune maximă al tabloului citit, cu
toate elementele egale, şi afişează pe ecran valoarea acestei dimensiuni.
Exemplu: pentru n=5 şi tabloul alăturat, se afişează pe ecran 3. (10p.)
Problema 3
6
Fişierul bac.txt conţine un şir de cel puţin două şi cel mult 10 numere naturale din intervalul
3
0, 10 , separate prin câte un spaţiu. şirul are cel puţin un termen par şi cel puţin un termen
impar. Se cere să se afişeze pe ecran termenii şirului, separaţi prin câte un spaţiu, astfel ı̂ncât
toţi cei impari să apară ı̂naintea tuturor celor pari, şi atât subşirul format din cei impari, cât şi
subşirul format din cei pari, să fie ı̂n ordine crescătoare, ca ı̂n exemplu. Proiectaţi un algoritm
eficient din punctul de vedere al timpului de executare.
Exemplu: dacă fişierul conţine numerele 12 2 3 1 2 5 se afişează pe ecran: 1 3 5 2 2 12
a) Descrieţi ı̂n limbaj natural algoritmul proiectat, justificând eficienţa acestuia. (2p.)
b) Scrieţi programul C/C++ corespunzător algoritmului proiectat. (8p.)
Capitolul 5
BAC 2018
5.1.1 Subiectul I
Pentru itemul 1, scrieţi pe foaia de examen litera corespunzătoare răspunsului corect.
Problema 1
|
Variabila x este de tip ı̂ntreg. Indicaţi o expresie care are valoarea 1 dacă şi | x<=3 || x>10
numai dacă expresia C/C++ alăturată are valoarea 1. (4p.) |
Problema 2
Algoritmul alăturat este reprezentat ı̂n pseudocod.
S-a notat cu a%b restul ı̂mpărţirii numărului natural a la
numărul natural nenul b şi cu [a] partea ı̂ntreagă a numărului
real a.
a) Scrieţi valoarea afişată dacă se citesc, ı̂n această ordine,
numerele 5, 3, 9, 206, 200, 80, 24. (6p.)
b) Dacă pentru variabila n se citeşte numărul 4, iar pentru
variabila a se citeşte numărul 2, scrieţi un set de numere dis-
tincte din intervalul [10,99] care pot fi citite ı̂n continuare astfel
ı̂ncât, ı̂n urma executării algoritmului, să se afişeze valoarea 4.
(4p.)
c) Scrieţi ı̂n pseudocod un algoritm echivalent cu cel dat,
ı̂nlocuind adecvat prima structură cât timp...execută cu o
structură de tip pentru...execută. (6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului
dat. (10p.)
Problema 1
Un arbore cu 9 noduri, numerotate de la 1 la 9, este reprezentat prin vectorul de ”taţi” (3, 3, 0,
5, 2, 5, 2, 5, 8). Descendenţii direcţi (”fii”) ai nodului cu eticheta 5 sunt: (4p.)
a. 2 7 b. 2 8 c. 3 3 0 d. 4 6 8
35
CAPITOLUL 5. BAC 2018 5.1. SESIUNEA SPECIALĂ 36
Problema 2
Numărul de noduri ale unui graf neorientat fără cicluri, cu 26 de muchii şi 12 componente conexe
este: (4p.)
a. 18 b. 28 c. 38 d. 48
Problema 3
Variabila d, declarată alăturat, memorează ı̂n câmpul mic cel mai mic di-
2
vizor, strict mai mare decât 1, al numărului natural din intervalul 2, 10 ,
memorat ı̂n câmpul nr.
Scrieţi o secvenţă de instrucţiuni ı̂n urma executării căreia, pentru numărul memorat ı̂n câmpul
nr al variabilei d, se afişează pe ecran mesajul prim, dacă numărul este prim, mesajul patrat dacă
numărul este pătratul unui număr prim, sau două numere naturale, separate printr-un spaţiu,
reprezentând cel mai mic şi cel mai mare dintre divizorii proprii pozitivi ai săi. Divizorii proprii
pozitivi ai unui număr sunt divizori pozitivi diferiţi de 1 şi de el ı̂nsuşi.
Exemplu: dacă ı̂n câmpul nr se memorează numărul 12, iar ı̂n câmpul mic se memorează
numărul 2, se afişează pe ecran
26
iar dacă ı̂n câmpul nr se memorează numărul 9, iar ı̂n câmpul mic se memorează numărul 3, se
afişează pe ecran mesajul
patrat (6p.)
Problema 4
Variabilele i şi j sunt de tip ı̂ntreg, iar variabila a memorează un tablou
bidimensional cu 9 linii şi 9 coloane, numerotate de la 1 la 9, având
iniţial toate elementele nule.
Fără a utiliza alte variabile, scrieţi secvenţa de instrucţiuni de mai
jos, ı̂nlocuind punctele de suspensie astfel ı̂ncât, ı̂n urma executării
secvenţei obţinute, variabila a să memoreze tabloul alăturat.
for(i=1;i<=9;i++)
for(j=1;j<=9;j++)
.................. (6p.)
Problema 5
Un text are cel mult 100 de caractere şi este format din cuvinte, numere naturale şi spaţii.
Cuvintele sunt formate numai din litere mici ale alfabetului englez. Cuvintele şi numerele sunt
separate prin câte un spaţiu, ca ı̂n exemplu.
Scrieţi un program C/C++ care citeşte de la tastatură un text de tipul menţionat mai sus şi
afişează pe ecran numărul din text care ı̂ncepe cu cea mai mare cifră, ca ı̂n exemplu. Dacă există
mai multe astfel de numere, se afişează doar unul dintre acestea, iar dacă textul nu conţine niciun
număr, se afişează pe ecran mesajul nu exista.
Exemplu: pentru textul
am 190 de nuci si 70 de castane
se afişează
70 (10p.)
CAPITOLUL 5. BAC 2018 5.1. SESIUNEA SPECIALĂ 37
Problema 1
Subprogramele f1 şi f2 sunt definite mai jos.
Cel mai mare divizor comun al lui 30 şi 50 se obţine ı̂n urma apelului: (4p.)
Problema 2
Utilizând metoda backtracking, se generează toate posibilităţile de a forma cutii cu bomboane de
tipuri distincte din mulţimea {fondante, caramele, dropsuri, acadele}.
ı̂ntr-o cutie sunt cel puţin două tipuri de bomboane, dar nu pot fi şi dropsuri şi acadele simultan.
Două cutii sunt distincte dacă ele conţin cel puţin un tip diferit de bomboane.
Primele patru soluţii generate sunt, ı̂n această ordine, (fondante, caramele), (fondante,
caramele, dropsuri), (fondante, caramele, acadele), (fondante,dropsuri).
Scrieţi a cincea şi a şasea soluţie, ı̂n ordinea generării acestora. (6p.)
Problema 3
Un număr natural este numit echilibrat dacă suma cifrelor sale de pe poziţii pare este un număr par,
iar suma cifrelor sale de pe poziţii impare este un număr impar. Poziţiile cifrelor sunt numerotate
de la dreapta la stânga, astfel: cifra unităţilor este pe poziţia 0, cifra zecilor este pe poziţia 1
ş.a.m.d.
Subprogramul echilibrat are un singur parametru, n, prin care primeşte un număr natural
(" 10, 10 ). Subprogramul returnează valoarea 1 dacă n este echilibrat sau valoarea 0 ı̂n caz
9
contrar.
Scrieţi definiţia completă a subprogramului.
Exemplu: dacă n=25163912, subprogramul returnează valoarea 1, iar dacă n=11211, subpro-
gramul returnează valoarea 0. (10p.)
Problema 4
Numim secvenţă ı̂ncadrată a unui şir de numere naturale un subşir al acestuia, format din ter-
meni aflaţi pe poziţii consecutive ı̂n şirul dat, subşir care ı̂ncepe şi se termină cu aceeaşi valoare.
Lungimea secvenţei este egală cu numărul de termeni ai acesteia.
6
Fişierul bac.txt conţine un şir de cel puţin două şi cel mult 10 numere naturale din intervalul
[0, 9]. Numerele sunt separate prin câte un spaţiu. ı̂n şir există cel puţin doi termeni egali.
Se cere să se determine secvenţele ı̂ncadrate din acest şir care au lungime maximă şi să se
afişeze pe prima linie a ecranului lungimea maximă determinată, iar pe următoarea linie, pentru
fiecare astfel de secvenţă, valoarea primului său termen. Numerele de pe a doua linie sunt afişate
ı̂n ordine strict crescătoare, separate prin câte un spaţiu.
Proiectaţi un algoritm eficient din punctul de vedere al timpului de executare.
Exemplu: dacă fişierul bac.txt conţine numerele
CAPITOLUL 5. BAC 2018 5.2. SESIUNEA IUNIE - IULIE 38
5.2.1 Subiectul I
Pentru itemul 1, scrieţi pe foaia de examen litera corespunzătoare răspunsului corect.
Problema 1
Variabilele x şi y sunt de tip ı̂ntreg şi memorează câte un număr natural
nenul. O expresie echivalentă cu cea alăturată poate fi: (4p.)
Problema 2
Algoritmul alăturat este reprezentat ı̂n pseudocod
S-a notat cu a%b restul ı̂mpărţirii numărului natural a la
numărul natural nenul b şi cu [a] partea ı̂ntreagă a numărului
real a.
a) Scrieţi numărul afişat dacă se citeşte valoarea 2018. (6p.)
3
b) Scrieţi patru numere distincte din intervalul 10, 10 care
pot fi citite astfel ı̂ncât, ı̂n urma executării algoritmului, pentru
fiecare dintre acestea, să se afişeze valoarea 100. (4p.)
c) Scrieţi ı̂n pseudocod un algoritm echivalent cu cel dat,
ı̂nlocuind adecvat structura pentru...execută cu o atribuire.
(6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului dat.
(10p.)
Problema 1
În declararea alăturată, variabila m memorează, pentru fiecare dintre
cele 20 de medicamente dintr-o farmacie, preţul, precum şi date despre
substanţa activă specifică: doza şi codul acesteia. O expresie a cărei
valoare reprezintă codul substanţei active specifice din primul medica-
ment este: (4p.)
a. m[0].cod.substanta b. m[0].substanta.cod
c. m.cod.substanta[0] d. m.substanta.cod[0]
CAPITOLUL 5. BAC 2018 5.2. SESIUNEA IUNIE - IULIE 39
Problema 2
Într-un graf orientat cel puţin două vârfuri au gradul intern 2, cel puţin un vârf are gradul intern
3 şi cel puţin un vârf are gradul extern 3. Numărul minim de vârfuri ale grafului este: (4p.)
a. 3 b. 4 c. 5 d. 6
Problema 3
Un arbore are 9 noduri, numerotate de la 1 la 9, şi muchiile [1,2], [1,6], [1,8], [1,9], [2,3], [2,7],
[4,5], [5,7]. Scrieţi trei noduri care ar putea fi alese drept rădăcină astfel ı̂ncât nodul 2 să aibă un
număr minim de descendenţi. (6p.)
Problema 4
Variabilele i şi j sunt de tip ı̂ntreg, iar variabila a memorează un tablou
bidimensional cu 9 linii şi 9 coloane, numerotate de la 0 la 8, având
iniţial toate elementele egale cu -1.
Fără a utiliza alte variabile, scrieţi secvenţa de instrucţiuni de mai
jos, ı̂nlocuind punctele de suspensie astfel ı̂ncât, ı̂n urma executării
secvenţei obţinute, variabila a să memoreze tabloul alăturat.
for(i=0;i<9;i++)
for(j=0;j<9;j++)
.................. (6p.)
Problema 5
Fiind dat un cuvânt s, format numai din litere, şi un cod c, de aceeaşi lungime cu s, format numai
din cifre, numim codificare a lui s pe baza codului c operaţia de construire a unui nou şir, ı̂n care
iniţial se copiază prima literă din s, apoi, parcurgând de la stânga la dreapta restul şirului s, se
adaugă litera curentă la ı̂nceputul noului şir, dacă cifra corespunzătoare de pe aceeaşi poziţie ı̂n c
este pară, sau la finalul noului şir, ı̂n caz contrar.
Exemplu: dacă şirul s este etalon, iar codul este 025843 se obţine cuvântul oltean (iniţial
şirul conţine litera e, apoi se adaugă, ı̂n ordinea parcurgerii lui s, literele t, l şi o la ı̂nceput, iar
restul literelor la final).
Scrieţi un program C/C++ care citeşte de la tastatură două cuvinte, notate cu s şi c, fiecare
2
având cel mult 10 caractere, s fiind format doar din litere mici ale alfabetului englez, iar c fiind
format doar din cifre. După primul cuvânt se tastează Enter. Programul construieşte ı̂n memorie
şi afişează pe ecran cuvântul obţinut prin codificarea lui s pe baza lui c, dacă cele două cuvinte
au aceeaşi lungime, sau mesajul cod incorect, ı̂n caz contrar.
Problema 1
O companie organizează cursuri de programare ı̂n limbaje din mulţimea {PHP, Java, Python,
C#, SQL}, astfel ı̂ncât o persoană poate opta pentru un curs ı̂n care se studiază un număr par de
limbaje, dar nu poate alege Java şi Python ı̂n acelaşi curs.
Utilizând metoda backtracking se generează toate posibilităţile unei persoane de a opta pentru
un curs ı̂n cadrul ofertei companiei. Două cursuri sunt distincte dacă diferă prin cel puţin un limbaj
CAPITOLUL 5. BAC 2018 5.3. SESIUNEA DE TOAMNĂ 40
sau prin ordinea ı̂n care se studiază limbajele. Primele cinci soluţii generate sunt, ı̂n această or-
dine: (PHP, Java), (PHP, Java, C#, SQL), (PHP, Java, SQL, C#), (PHP, Python), (PHP,
Python, C#, SQL).
Soluţia generată imediat după (Java, PHP, SQL, C#) este: (4p.)
Problema 2
Subprogramul f este definit alăturat. Scrieţi trei valori
naturale pe care le poate avea variabila ı̂ntreagă x astfel
ı̂ncât, ı̂n urma apelului de mai jos, pentru fiecare dintre
acestea, să NU se afişeze niciun caracter *
f(’e’,x); (6p.)
Problema 3
Subprogramul resturi are patru parametri, n, x, y şi r, prin care primeşte câte un număr natural
9
din intervalul 1, 10 , r¡x¡y¡n. Subprogramul returnează numărul de valori naturale din intervalul
[1,n] pentru care atât restul ı̂mpărţirii la x, cât şi restul ı̂mpărţirii la y, sunt egale cu r.
Scrieţi definiţia completă a subprogramului.
Exemplu: pentru n=200, x=5, y=14 şi r=2, subprogramul returnează numărul 3 (pentru
numerele 2, 72 şi 142 atât restul ı̂mpărţirii la 5, cât şi restul ı̂mpărţirii la 14, este 2). (10p.)
Problema 4
Numim secvenţă neuniformă a unui şir de numere naturale un subşir al acestuia, format din
termeni aflaţi pe poziţii consecutive ı̂n şirul dat, cu proprietatea că oricare trei termeni aflaţi pe
poziţii consecutive sunt diferiţi. Lungimea secvenţei este egală cu numărul de termeni ai acesteia.
6
Fişierul bac.txt conţine un şir de cel mult 10 numere naturale din intervalul [0,9].
Numerele sunt separate prin câte un spaţiu, iar ı̂n şir există cel puţin trei termeni diferiţi pe
poziţii consecutive.
Se cere să se afişeze pe ecran lungimea maximă a unei secvenţe neuniforme a şirului aflat ı̂n
fişier. Proiectaţi un algoritm eficient din punctul de vedere al timpului de executare şi al memoriei
utilizate.
Exemplu: dacă fişierul bac.txt conţine numerele
7713775333789
atunci pe ecran se afişează valoarea 4
a) Descrieţi ı̂n limbaj natural algoritmul proiectat, justificând eficienţa acestuia. (2p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris. (8p.)
5.3.1 Subiectul I
Pentru itemul 1, scrieţi pe foaia de examen litera corespunzătoare răspunsului corect.
Problema 1
Variabilele x, y şi z sunt de tip ı̂ntreg şi memorează câte un număr
natural nenul. Dacă expresia C/C++ alăturată are valoarea 1, indicaţi
şirul crescător format cu valorile acestor variabile, ı̂n ordinea precizată
mai jos. (4p.)
a. x, y, z b. y, z, x c. z, x, y d. z, y, x
CAPITOLUL 5. BAC 2018 5.3. SESIUNEA DE TOAMNĂ 41
Problema 2
Algoritmul alăturat este reprezentat ı̂n pseudocod.
S-a notat cu a%b restul ı̂mpărţirii numărului natural a la numărul
natural nenul b şi cu [a] partea ı̂ntreagă a numărului real a.
a) Scrieţi numărul afişat dacă se citeşte valoarea 10523. (6p.)
b) Scrieţi patru numere ı̂ntregi care pot fi citite astfel ı̂ncât, ı̂n
urma executării algoritmului, pentru fiecare dintre acestea, să se afişeze
numărul 722. (4p.)
c) Scrieţi ı̂n pseudocod un algoritm echivalent cu cel dat, ı̂nlocuind
adecvat structura repetă...până când cu o structură repetitivă cu
test iniţial. (6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului dat. (10p.)
Pentru fiecare dintre itemii 1 şi 2 scrieţi pe foaia de examen litera corespunzătoare
răspunsului corect.
Problema 1
Expresia strlen(”2018”) are valoarea: (4p.)
a. 4 b. 5 c. 6 d. 7
Problema 2
Un graf orientat este complet dacă pentru oricare două vârfuri i şi j ale sale există fie ambele arce
(i,j) şi (j,i), fie doar unul dintre acestea.
Un graf orientat are 5 vârfuri şi 20 de arce. Pentru a obţine un graf parţial al său cu două
componente tare conexe, fiecare dintre acestea fiind grafuri complete, unul cu 3 vârfuri, iar celălalt
cu 2 vârfuri, numărul minim de arce care pot fi eliminate este: (4p.)
a. 2 b. 3 c. 6 d. 10
Problema 3
În declararea alăturată, câmpurile cat şi rest memorează câtul, re-
spectiv restul ı̂mpărţirii a două numere naturale nenule.
Scrieţi o secvenţă de instrucţiuni ı̂n urma executării căreia se memo-
rează ı̂n variabila rezultat câtul şi restul ı̂mpărţirii ı̂ntregi a numărului 2018 la numărul natural
memorat ı̂n variabila x, dacă acesta este nenul, sau se afişează pe ecran mesajul impartire
nepermisa, ı̂n caz contrar. (6p.)
Problema 4
Un arbore cu 8 noduri, numerotate de la 1 la 8, este reprezentat prin matricea
de adiacenţă alăturată.
Scrieţi trei noduri care pot fi alese drept rădăcină astfel ı̂ncât fiecare nod
să admită cel mult doi descendenţi direcţi (fii). (6p.)
CAPITOLUL 5. BAC 2018 5.3. SESIUNEA DE TOAMNĂ 42
Problema 5
Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (n " 2, 10 ) şi un şir
2
4
de n numere naturale din intervalul 0, 10 şi construieşte ı̂n memorie un tablou bidimensional cu
n linii şi n coloane, numerotate ı̂ncepând de la 0, astfel ı̂ncât parcurgând orice coloană numerotată
cu un număr par, de jos ı̂n sus, sau orice coloană numerotată cu un număr impar, de sus ı̂n jos,
se obţine şirul citit, ca ı̂n exemplu.
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.
Problema 1
Subprogramul f este definit alăturat. Indicaţi ce se
afişează ı̂n urma apelului de mai jos.
f(7);
(4p.)
a. 10 b. 010 c. 101 d. 1010
Problema 2
Utilizând metoda backtracking, se generează toate posibilităţile de a forma seturi de câte 5 instru-
mente de scris distincte din mulţimea {stilou, pană, toc, creion, pensulă}, astfel ı̂ncât ı̂n
fiecare set creionul precede stiloul şi pana. Două seturi sunt distincte dacă instrumentele sunt
dispuse ı̂n altă ordine.
Primele cinci soluţii generate sunt, ı̂n această ordine,
(toc, creion, stilou, pană, pensulă),
(toc, creion, stilou, pensulă, pană),
(toc, creion, pană, stilou, pensulă),
(toc, creion, pană, pensulă, stilou),
(toc, creion, pensulă, stilou, pană).
Scrieţi cea de a şasea şi cea de a şaptea soluţie, ı̂n ordinea generării acestora. (6p.)
Problema 3
Subprogramul interval are un singur parametru, n, prin care primeşte un număr natural (n "
6
3, 10 ). Subprogramul returnează cel mai mic număr natural x (n¡x) care NU este prim, cu
proprietatea că ı̂n intervalul [n,x] există un singur număr prim.
Scrieţi definiţia completă a subprogramului.
Exemplu: dacă n=8, subprogramul returnează numărul 12.
CAPITOLUL 5. BAC 2018 5.3. SESIUNEA DE TOAMNĂ 43
Problema 4
Primii termeni ai şirului definit alăturat (unde n
este un număr natural nenul) sunt:
0, 3, 8, 15, 24, 35, 48, 63, 80 ....
9
Se citesc de la tastatură două numere naturale din intervalul 0, 10 , x şi y, reprezentând
valorile a doi termeni aflaţi pe poziţii consecutive ı̂n şirul dat (x¡y), şi se cere să se scrie ı̂n
fişierul text bac.txt, ı̂n ordine strict descrescătoare, separaţi prin câte un spaţiu, toţi termenii
şirului mai mici sau egali cu y.
Proiectaţi un algoritm eficient din punctul de vedere al timpului de executare şi al memoriei
utilizate.
Exemplu: dacă se citesc numerele
48 63
fişierul bac.txt conţine numerele
63 48 35 24 15 8 3 0
a) Descrieţi ı̂n limbaj natural algoritmul proiectat, justificând eficienţa acestuia. (2p.)
b) Scrieţi programul C/C++ corespunzător algoritmului proiectat. (8p.)
Capitolul 6
BAC 2017
6.1.1 Subiectul I
Problema 1
Indicaţi expresia C/C++ care are valoarea 1 dacă şi numai dacă numărul natural memorat ı̂n
variabila ı̂ntreagă x are exact trei cifre. (4p.)
a. x/1000==0 && x/100!=0 b. x/1000==0 || x/100!=0
c. x%1000==0 && x%100!=0 d. x%1000==0 || x%100!=0
Problema 2
Se consideră algoritmul alăturat, reprezentat ı̂n pseudocod. S-a
notat cu a%b restul ı̂mpărţirii numărului natural a la numărul
natural nenul b.
a) Scrieţi valoarea afişată dacă se citesc, ı̂n această ordine,
numerele 7, 4. (6p.)
b) Scrieţi patru seturi de date de intrare, numere naturale
din intervalul [2,9], care pot fi citite astfel ı̂ncât, ı̂n urma exe-
cutării algoritmului, pentru fiecare dintre acestea, să se afişeze
valoarea 7. (4p.)
c) Scrieţi ı̂n pseudocod un algoritm echivalent cu cel dat,
ı̂nlocuind adecvat structura cât timp...execută cu o structură
repetitivă cu test final. (6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului
dat. (10p.)
Problema 1
Un arbore cu 9 noduri, numerotate de la 1 la 9, este reprezentat prin vectorul de ”taţi”
(5,4,6,0,3,2,6,9,7). Rădăcina arborelui este: (4p.)
a. 1 b. 4 c. 6 d. 8
44
CAPITOLUL 6. BAC 2017 6.1. SESIUNEA SPECIALĂ 45
Problema 2
Într-un graf neorientat două cicluri sunt disjuncte dacă nu au niciun nod
comun.
Pentru graful neorientat cu 9 noduri, reprezentat alăturat, se construieşte
o mulţime formată din cicluri elementare, cu proprietatea că oricare două
dintre acestea sunt disjuncte.
Numărul maxim de cicluri dintr-o astfel de mulţime este: (4p.)
a. 1 b. 2 c. 3 d. 4
Problema 3
Variabila p memorează simultan numărul de vârfuri ale unui poligon (număr natural din intervalul
2
3, 10 ) şi coordonatele vârfurilor acestuia (abscisa şi ordonata) ı̂n sistemul de coordonate xOy
(numere reale).
Ştiind că expresiile C/C++ de mai jos au ca valori numărul de vârfuri ale unui poligon,
abscisa, respectiv ordonata primului său vârf, scrieţi definiţia unei structuri cu eticheta poligon,
care permite memorarea datelor despre un poligon, şi declaraţi corespunzător variabila p.
p.numar
p.varf[0].x
p.varf[0].y (6p.)
Problema 4
Problema 5
Se consideră un text cu cel mult 100 de caractere, ı̂n care cuvintele sunt formate din litere mari
ale alfabetului englez şi sunt separate prin câte un spaţiu.
Scrieţi un program C/C++ care citeşte de la tastatură un text de tipul menţionat mai sus şi
afişează pe ecran, pe câte un rând, cuvintele care cuprind cel puţin o notă muzicală. Dacă nu
există astfel de cuvinte, se afişează pe ecran mesajul nu exista.
Notele muzicale sunt DO, RE, MI, FA, SOL, LA, SI.
CAPITOLUL 6. BAC 2017 6.1. SESIUNEA SPECIALĂ 46
Problema 1
Utilizând metoda backtracking se generează, ı̂n ordine crescătoare, toate numerele naturale pare
cu trei cifre, cu proprietatea că nu există două cifre egale alăturate şi suma cifrelor este 10. Primele
cinci numere generate sunt, ı̂n această ordine: 136, 154, 172, 190, 208. Al şaselea număr generat
este: (4p.)
Problema 2
Subprogramul f este definit alăturat. Scrieţi ce se
afişează ı̂n urma apelului de mai jos.
f(4); (6p.)
Problema 3
Subprogramul identice are doi parametri, a şi b, prin care primeşte câte un număr natural
(10 & a & b & 10 ). Subprogramul afişează pe ecran toate numerele naturale din intervalul [a,b]
6
care au toate cifrele identice. Numerele afişate sunt separate prin câte un spaţiu, iar dacă nu
există astfel de numere, se afişează pe ecran mesajul nu exista.
Scrieţi definiţia completă a subprogramului.
Exemplu: pentru a=700 şi b=1500 se afişează pe ecran
777 888 999 1111. (10p.)
Problema 4
Numim inserare a unui şir A ı̂ntr-un şir B introducerea, ı̂ntre două elemente ale şirului B, a tuturor
elementelor lui A, pe poziţii consecutive, ı̂n ordinea ı̂n care apar ı̂n A.
6
Fişierul bac.in conţine numere naturale din intervalul 1, 10 : pe prima linie numerele m
şi n, iar pe fiecare dintre următoarele două linii câte un şir de m, respectiv de n numere ı̂ntregi
ordonate strict crescător. Numerele aflate pe aceeaşi linie a fişierului sunt separate prin câte un
spaţiu, iar numerotarea elementelor ı̂n şiruri ı̂ncepe de la 1.
Se cere să se afişeze pe ecran poziţia din al doilea şir ı̂ncepând de la care poate fi inserat primul
şir, astfel ı̂ncât şirul obţinut să fie strict crescător. Dacă nu există o astfel de poziţie, se afişează
pe ecran mesajul imposibil.
Proiectaţi un algoritm eficient din punctul de vedere al spaţiului de memorie utilizat şi al
timpului de executare.
Exemplu: dacă fişierul conţine numerele
46
15 16 17 19
7 10 12 20 30 40
se poate obţine şirul 7, 10, 12, 15, 16, 17, 19, 20, 30, 40 şi se afişează pe ecran 4 iar dacă fişierul
conţine numerele
46
15 16 17 19
7 14 18 20 30 40
sau numerele
46
1234
7 15 18 20 30 40
se afişează pe ecran mesajul imposibil
a) Descrieţi ı̂n limbaj natural algoritmul proiectat, justificând eficienţa acestuia. (2p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris. (8p.)
CAPITOLUL 6. BAC 2017 6.2. SESIUNEA IUNIE - IULIE 47
6.2.1 Subiectul I
Problema 1
Indicaţi o expresie C/C++ care are valoarea 1 dacă şi numai dacă numărul natural memorat ı̂n
variabila ı̂ntreagă x are exact o cifră. (4p.)
Problema 2
Pentru fiecare dintre itemii 1 şi 2 scrieţi pe foaia de examen litera corespunzătoare
răspunsului corect.
Problema 1
a. vidi b. vidi,vici c. 2 d. 6
Problema 2
Se consideră un graf neorientat cu 7 noduri şi 21 de muchii. Indicaţi numărul minim de muchii
care pot fi eliminate, astfel ı̂ncât graful parţial obţinut să aibă două componente conexe, cu cel
puţin două noduri fiecare. (4p.)
a. 6 b. 8 c. 10 d. 12
CAPITOLUL 6. BAC 2017 6.2. SESIUNEA IUNIE - IULIE 48
Problema 3
În declararea alăturată, variabila x memorează numele
unui elev şi cele două medii semestriale obţinute de
acesta la informatică.
Scrieţi o secvenţă de instrucţiuni C/C++ ı̂n urma executării căreia să se afişeze pe ecran prima
literă a numelui şi, pe linia următoare, media anuală la informatică a acestui elev. (6p.)
Exemplu: dacă elevul are numele Popescu, iar cele două medii sunt sunt 9, respectiv 10, se
afişează pe ecran
P
9.5
Problema 4
Într-un graf orientat două circuite sunt distincte dacă ele diferă prin cel puţin un arc.
Scrieţi matricea de adiacenţă a unui graf orientat cu 5 vârfuri şi 6 arce, care are două circuite
elementare distincte. (6p.)
Problema 5
Scrieţi un program C/C++ care citeşte de la tastatură două numere naturale din intervalul [3,50],
n şi m, şi elementele unui tablou bidimensional cu n linii şi m coloane, numere naturale din
4
intervalul 0, 10 .
Programul modifică ı̂n memorie tabloul dat, atribuind valoarea elementului aflat pe ultima
linie şi pe ultima coloană a tabloului fiecărui element aflat pe conturul acestuia (pe prima linie,
ultima linie, prima coloană, ultima coloană), apoi afişează pe ecran tabloul modificat, câte o linie
a tabloului pe câte o linie a ecranului, elementele fiecărei linii fiind separate prin câte un spaţiu.
Problema 1
Utilizând metoda backtracking se generează, ı̂n ordine strict crescătoare, toate numerele de trei
cifre din mulţimea 1, 2, 5, 7, 8, numere cu proprietatea că au cel mult două cifre impare.
Primele şapte numere generate sunt, ı̂n această ordine: 112, 118, 121, 122, 125, 127, 128.
Al optulea număr generat este: (4p.)
Problema 2
Subprogramul f este definit alăturat. Scrieţi valorile f(3,9) şi
f(1,1000). (6p.)
Problema 3
Subprogramul duplicare are un singur parametru, n, prin care primeşte un număr natural (n "
4
1, 10 ). Subprogramul furnizează, prin acelaşi parametru, numărul obţinut din n prin inserarea,
după fiecare cifră pară din scrierea lui, a unei cifre egale cu jumătate din aceasta.
Scrieţi definiţia completă a subprogramului.
Exemplu: dacă n=2380 după apel, n=2138400, iar dacă n=35 după apel, n=35. (10p.)
Problema 4
Numim secvenţă pară ı̂ntr-un şir o succesiune de termeni ai şirului cu proprietatea că sunt numere
pare şi că se află pe poziţii consecutive ı̂n şir; orice secvenţă are cel puţin doi termeni şi este
maximală ı̂n raport cu proprietatea precizată (dacă i se adaugă un alt termen, secvenţa ı̂şi pierde
această proprietate). Lungimea secvenţei este egală cu numărul termenilor săi.
6 9
Fişierul bac.txt conţine un şir de cel mult 10 numere naturale din intervalul 0, 10 . Nu-
merele din şir sunt separate prin câte un spaţiu.
Se cere să se afişeze pe ecran numărul de secvenţe pare de lungime maximă din şir.
Proiectaţi un algoritm eficient din punctul de vedere al spaţiului de memorie utilizat şi al
timpului de executare.
Exemplu: dacă fişierul bac.txt conţine valorile
1 2 3 4 6 10 2 8 5 7 9 4 6 10 121 20 4 11 10 2 5 2 6 8 10 16
se afişează pe ecran numărul 2.
a) Descrieţi ı̂n limbaj natural algoritmul proiectat, justificând eficienţa acestuia. (2p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris. (8p.)
6.3.1 Subiectul I
Pentru itemul 1, scrieţi pe foaia de examen litera corespunzătoare răspunsului corect.
Problema 1
Expresia C/C++ alăturată are valoarea: 3+7/4+3
a. 1 b. 5.5 c. 7 d. 7.75
(4p.)
CAPITOLUL 6. BAC 2017 6.3. SESIUNEA DE TOAMNĂ 50
Problema 2
Se consideră algoritmul alăturat, reprezentat ı̂n pseudocod.
S-a notat cu a%b restul ı̂mpărţirii numărului natural
a la numărul natural nenul b şi cu [c] partea ı̂ntreagă a
numărului real c.
a) Scrieţi ce se afişează dacă se citesc, ı̂n această ordine,
numerele 4, 5, 24, 3, 45. (6p.)
b) Dacă primul număr citit este 3, scrieţi un set de nu-
mere distincte care pot fi citite ı̂n continuare, astfel ı̂ncât, ı̂n
urma executării algoritmului, să se afişeze valoarea 1. (4p.)
c) Scrieţi ı̂n pseudocod un algoritm echivalent cu cel dat,
ı̂nlocuind adecvat prima structură cât timp...execută cu o
structură de tip pentru...execută. (6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului
dat. (10p.)
Problema 1
În declararea alăturată, ı̂n câmpurile s şi d ale structurii sunt memorate ex-
tremitatea stângă, respectiv dreaptă ale fiecăruia dintre cele 20 de intervale
ı̂nchise. O expresie C/C++ a cărei valoare este extremitatea stângă a primu-
lui interval este: (4p.)
Problema 2
Într-un arbore cu 50 de noduri, numerotate de la 1 la 50, rădăcina este nodul 1, iar tatăl oricărui
alt nod i al său este nodul numerotat cu [i/2]. Lungimea lanţului cu o extremitate ı̂n nodul 14 şi
cealaltă extremitate ı̂n nodul 47 este: (4p.)
a. 5 b. 8 c. 16 d. 33
Problema 3
Un graf neorientat cu 4 noduri, numerotate de la 1 la 4, este reprezentat prin matricea
de adiacenţă alăturată. Scrieţi mulţimea nodurilor şi mulţimea muchiilor unui subgraf
al acestui graf, diferit de el ı̂nsuşi, ı̂n care cel puţin un nod să aibă gradul 1 şi cel puţin
un nod să aibă gradul 2. (6p.)
Problema 4
În secvenţa alăturată variabilele n şi i sunt de tip ı̂ntreg, iar
variabila s permite memorarea unui cuvânt, şir de cel mult 20
de caractere.
Cuvintele citite sunt formate din litere mici ale alfabetului englez şi sunt
separate prin Enter.
Fără a utiliza alte variabile, scrieţi secvenţa ı̂nlocuind punctele de suspensie
astfel ı̂ncât, ı̂n urma executării secvenţei obţinute, variabila n să memoreze
numărul de cuvinte citite pentru care subşirul format din ultimele trei caractere
ale lor coincide cu şirul are, iar acesta NU mai apare pe alte poziţii ı̂n cuvânt.
Exemplu: dacă se citesc cuvintele alăturate, variabila n are valoarea 3. (6p.)
CAPITOLUL 6. BAC 2017 6.3. SESIUNEA DE TOAMNĂ 51
Problema 5
Scrieţi un program C/C++ care citeşte de la tastatură un număr natural par n (" 2, 50) şi
elementele unui tablou bidimensional cu n linii şi n coloane, numere reale, apoi transformă tabloul
ı̂n memorie, inserând o linie nouă, la mijlocul său, valoarea fiecărui element al acesteia fiind egală
cu media aritmetică a elementelor aflate pe coloana corespunzătoare lui ı̂n tabloul citit. Tabloul
obţinut se afişează pe ecran, câte o linie a tabloului pe câte o linie a ecranului, elementele fiecărei
linii fiind separate prin câte un spaţiu.
Problema 1
a. 0 b. 4 c. 6 d. 10
Problema 2
Fiind date o mulţime finită şi un set de perechi de forma (i,j), unde i şi j sunt elemente ale mulţimii,
se numeşte şir sortat topologic asociat mulţimii un şir format din toate elementele mulţimii, astfel
ı̂ncât pentru orice pereche (i,j) dintre cele date, elementul i să se găsească ı̂naintea lui j ı̂n şir.
Utilizând metoda backtracking, se generează toate şirurile sortate topologic ale mulţimii 1, 2,
3, 4, 5, 6, având ı̂n vedere perechile (4,6), (3,4), (3,1), (2,5). Primele trei soluţii generate sunt, ı̂n
această ordine: (2,3,1,4,5,6), (2,3,1,4,6,5), (2,3,1,5,4,6).
Scrieţi cea de a patra şi cea de a cincea soluţie, ı̂n ordinea generării acestora. (6p.)
Problema 3
Subprogramul triplete are trei parametri, a, b şi c, prin care primeşte câte un număr natural
4
din intervalul 0, 10 (a¡b). Subprogramul afişează pe ecran toate tripletele de numere naturale,
x, y şi z, soluţii ale ecuaţiei x+y+z=c, cu proprietatea că a & x & y & z & b.
Fiecare triplet afişat este ı̂ncadrat ı̂ntre acolade, iar numerele x, y şi z sunt afişate ı̂n această
ordine, separate prin câte o virgulă. Dacă nu există niciun triplet cu proprietatea cerută, se
afişează mesajul nu exista.
Scrieţi definiţia completă a subprogramului.
Exemplu: dacă a=2, b=4 şi c=8, se afişează pe ecran tripletele
{2,2,4}{2,3,3}
iar dacă a=5, b=8, c=8 se afişează pe ecran mesajul
nu exista. (10p.)
CAPITOLUL 6. BAC 2017 6.3. SESIUNEA DE TOAMNĂ 52
Problema 4
Un şir de numere este o progresie aritmetică de raţie r dacă oricare termen al său, cu excepţia
primului, se obţine din cel care ı̂l precede, prin adunarea la acesta a numărului r.
Exemplu: şirul 12, 14, 16, 18, 20 este o progresie de raţie 2.
6 3
Fişierul bac.in conţine un şir de cel mult 10 numere naturale din intervalul 0, 10 , separate
prin câte un spaţiu.
Se cere să se verifice dacă există un număr natural r, astfel ı̂ncât toate numerele distincte din
şir să poată fi rearanjate, pentru a forma o progresie aritmetică de raţie r. Se afişează pe ecran
numărul r, sau mesajul NU, dacă nu există un astfel de număr.
Proiectaţi un algoritm eficient din punctul de vedere al timpului de executare.
Exemplu: dacă fişierul conţine numerele
180 30 80 280 130 330 230 30 30 330 80
se afişează pe ecran
50
a) Descrieţi ı̂n limbaj natural algoritmul proiectat, justificând eficienţa acestuia. (2p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris. (8p.)
Capitolul 7
BAC 2016
7.1.1 Subiectul I
Problema 1
3
Variabilele x, y şi z sunt de tip ı̂ntreg şi memorează numere naturale din intervalul 1, 10 . Indicaţi
o expresie C/C++ care are valoarea 1 dacă şi numai dacă valoarea variabilei x este strict mai mare
decât valoarea oricăreia dintre variabilele y şi z. (4p.)
Problema 2
Se consideră algoritmul alăturat, reprezentat ı̂n pseudocod.
S-a notat cu a%b restul ı̂mpărţirii numărului natural
a la numărul natural nenul b şi cu [c] partea ı̂ntreagă a
numărului real c.
a) Scrieţi valoarea afişată ı̂n urma executării algoritmu-
lui dacă se citeşte numărul 81112337. (6p.)
b) Scrieţi numărul de valori din intervalul [10000,99999]
care să ı̂nceapă cu cifra 1, care pot fi citite pentru vari-
abila n, astfel ı̂ncât, ı̂n urma executării algoritmului, pentru
fiecare dintre acestea, să se afişeze valoarea 4. (4p.)
c) Scrieţi ı̂n pseudocod un algoritm echivalent cu cel dat,
ı̂nlocuind structura cât timp...execută cu o structură
repetitivă de alt tip. (6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului
dat. (10p.)
53
CAPITOLUL 7. BAC 2016 7.1. SESIUNEA SPECIALĂ 54
Pentru fiecare dintre itemii 1 şi 2 scrieţi pe foaia de examen litera corespunzătoare
răspunsului corect.
Problema 1
Variabilele i şi j sunt de tip ı̂ntreg, iar variabila m memorează un tablou bidimensional cu 5 linii şi
5 coloane, numerotate de la 0 la 4, cu elemente numere ı̂ntregi. O expresie C/C++ a cărei valoare
este egală cu produsul dintre primul element de pe linia i şi ultimul element de pe coloana j din
acest tablou este: (4p.)
a. m[0,i]*m[j,4] b. m(0,i)*m(j,4)
c. m(i)(0)*m(4)(j) d. m[i][0]*m[4][j]
Problema 2
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: (4p.)
a. 12 b. 11 c. 9 d. 8
Problema 3
Un arbore cu 8 noduri, numerotate de la 1 la 8, este reprezentat prin următorul vector de ”taţi”
(3, 0, 2, 5, 2, 5, 1, 5). Determinaţi cel mai lung lanţ elementar care are o extremitate ı̂n rădăcină
şi enumeraţi nodurile sale, ı̂n ordinea apariţiei ı̂n acesta. (6p.)
Problema 4
Variabilele i şi s sunt ı̂ntregi, iar variabila p memorează, pen-
tru fiecare dintre cele 20 de zone de parcare ale unui oraş,
numărul de locuri ı̂nchiriate pe parcursul orei curente, pre-
cum şi preţul practicat de zona respectivă pentru ı̂nchirierea
unui loc pentru o oră.
Fără a utiliza alte variabile decât cele menţionate, scrieţi o secvenţă de instrucţiuni ı̂n urma
executării căreia variabila s să memoreze suma totală obţinută ı̂n urma ı̂nchirierii locurilor de
parcare din oraş pe parcursul orei curente. (6p.)
Problema 5
Scrieţi un program C/C++ care citeşte de la tastatură, ı̂n această ordine, un număr
natural n, apoi n cuvinte, separate prin Enter, urmate de un număr natural k.
Numerele citite sunt din intervalul [1,20], iar fiecare cuvânt este format din cel mult
20 de caractere, numai litere mici ale alfabetului englez. Cel puţin unul dintre cuvinte
are k litere.
Programul construieşte ı̂n memorie, apoi afişează pe ecran, un şir care să cuprindă
cuvintele citite, separate prin câte un spaţiu, astfel ı̂ncât toate cele care au k litere
să ocupe primele poziţii, iar celelalte să se regăsească ı̂n continuarea acestora, ı̂ntr-o
ordine oarecare.
Exemplu: dacă se citesc, ı̂n această ordine, datele alăturate, unul dintre şirurile obţinute
poate fi:
am un de cires mai (10p.)
CAPITOLUL 7. BAC 2016 7.2. SESIUNEA IUNIE - IULIE 55
Problema 1
Subprogramul f este definit alăturat. Indicaţi cea
mai mare valoare din intervalul [20,25] pe care o
poate avea variabila ı̂ntreagă x, astfel ı̂ncât, ı̂n urma
apelului de mai jos, să se afişeze numerele 2 4 16.
f(x,1); (4p.)
a. 21 b. 22 c. 23 d. 24
Problema 2
Utilizând metoda backtracking se generează, ı̂n ordine lexicografică, toate şirurile de câte 6 cifre
din mulţimea {0,1} cu proprietatea că au cel mult două cifre cu valori egale pe poziţii consecutive.
Primele 5 soluţii generate sunt, ı̂n această ordine: 001001, 001010, 001011, 001100, 001101. Scrieţi
a 7-a şi a 8-a soluţie, ı̂n ordinea generării acestora. (6p.)
Problema 3
Subprogramul minDivPrim are un singur parametru, n, prin care primeşte un număr natural
(n " 2, 10 ). Subprogramul returnează cel mai mic număr natural care are aceiaşi divizori primi
9
ca n.
Scrieţi definiţia completă a subprogramului.
Exemplu: dacă n=75, subprogramul returnează numărul 15, iar dacă n=7, subprogramul
returnează numărul 7. (10p.)
Problema 4
Se consideră şirul 1, -1, 2 ... definit astfel: f1 1, f2 1, iar fn 1 2 fn1 fn2 , dacă n ' 3
(unde n este un număr natural).
Se citeşte de la tastatură un număr natural, n (n " 1, 10 ), şi se cere să se scrie ı̂n fişierul
9
text bac.out, separaţi prin câte un spaţiu, primii n termeni ai şirului, ı̂n ordine inversă apariţiei
lor ı̂n acesta.
Pentru determinarea şi afişarea numerelor cerute se utilizează un algoritm eficient din punctul
de vedere al spaţiului de memorie şi al timpului de executare.
Exemplu: dacă n=3, fişierul conţine valorile
2 -1 1
a) Descrieţi ı̂n limbaj natural algoritmul utilizat, justificând eficienţa acestuia. (4p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris. (6p.)
7.2.1 Subiectul I
Pentru itemul 1, scrieţi pe foaia de examen litera corespunzătoare răspunsului corect.
Problema 1
Variabila x este de tip ı̂ntreg. Indicaţi o expresie C/C++ care are valoarea 1 dacă şi numai dacă
valoarea variabilei x are exact trei cifre. (4p.)
Problema 2
Se consideră algoritmul alăturat, reprezentat ı̂n pseu-
docod.
S-a notat cu a%b restul ı̂mpărţirii numărului natural
a la numărul natural nenul b.
a) Scrieţi valorile afişate ı̂n urma executării algorit-
mului dacă se citesc, ı̂n această ordine, numerele 11, 30
şi 7. (6p.)
b) Scrieţi un set de valori care pot fi citite pentru
variabilele m, n şi x, astfel ı̂ncât, ı̂n urma executării al-
goritmului, să se afişeze două numere egale. (4p.)
c) Scrieţi ı̂n pseudocod un algoritm echivalent cu cel
dat, ı̂nlocuind structura cât timp...execută cu o structură
repetitivă de alt tip. (6p.)
d) Scrieţi programul C/C++ corespunzător algorit-
mului dat. (10p.)
Pentru fiecare dintre itemii 1 şi 2 scrieţi pe foaia de examen litera corespunzătoare
răspunsului corect.
Problema 1
În declararea alăturată, variabila m memorează anul fabricaţiei
şi marca unei maşini. Indicaţi o expresie C/C++ care are val-
oarea 1 dacă şi numai dacă maşina a fost fabricată ı̂nainte de
anul 1950. (4p.)
a. m.an_fabricatie<1950 b. m.masina.an_fabricatie.m<1950
c. m(an_fabricatie)<1950 d. masina(an_fabricatie)<1950
Problema 2
Matricea de adiacenţă a unui graf neorientat cu 5 noduri are 6 elemente nenule. Numărul minim
de componente conexe ale grafului este: (4p.)
a. 1 b. 2 c. 3 d. 5
Problema 3
Un arbore cu 8 noduri, numerotate de la 1 la 8, are drept rădăcină nodul numerotat cu 7 şi
muchiile [1,7], [2,5], [3,5], [3,6], [4,7], [5,7], [5,8]. Enumeraţi nodurile care sunt descendenţi direcţi
(”fii”) ai nodului 5. (6p.)
Problema 4
În secvenţa de instrucţiuni de mai jos variabilele s1 şi s2 memorează câte un şir cu cel mult 20 de
caractere. Scrieţi ce se afişează pe ecran ı̂n urma executării secvenţei. (6p.)
strcpy(s1,"informatica");
cout<<strlen(s1); | printf("%d",strlen(s1));
strcpy(s2,"mate");
strcat(s2,strstr(s1,"ma"));
cout<<s2; | printf("%s",s2);
CAPITOLUL 7. BAC 2016 7.2. SESIUNEA IUNIE - IULIE 57
Problema 5
Scrieţi un program C/C++ care citeşte de la tastatură un număr natural, n (n " 2
2, 10 ), şi
construieşte ı̂n memorie un tablou bidimensional, cu n linii şi n coloane, astfel:
prima coloană conţine, ı̂n ordine strict crescătoare, numerele naturale din intervalul [1,n];
oricare alt element este obţinut prin ı̂nsumarea celor două elemente vecine cu el, aflate pe
coloana anterioară, unul pe aceeaşi linie cu el, iar celălalt pe linia următoare, ca ı̂n exemplu.
Programul afişează pe ecran tabloul obţinut, fiecare linie a tabloului pe câte o linie a ecranului,
elementele fiecărei linii fiind separate prin câte un spaţiu.
Exemplu: pentru n=4 pe ecran se afişează: (10p.)
Problema 1
Subprogramul f este definit alăturat. Indicaţi ce se afişează
ı̂n urma apelului de mai jos.
f(2016); (4p.)
Problema 2
Având la dispoziţie cinci tipuri de prăjituri, cu pere, cu mure, cu afine, cu fragi, cu zmeură,
se utilizează metoda backtracking pentru a obţine toate posibilităţile de a forma platouri cu câte
trei tipuri de prăjituri diferite, ştiind că ı̂n cadrul unui platou nu contează ordinea de aşezare a
prăjiturilor şi că prăjiturile cu mure nu vor fi plasate pe acelaşi platou cu prăjiturile cu fragi.
Primele patru soluţii obţinute sunt, ı̂n această ordine: (pere, mure, afine), (pere, mure,
zmeură), (pere, afine, fragi), (pere, afine, zmeură).
Scrieţi cea de a cincea şi cea de a şasea soluţie, ı̂n ordinea obţinerii lor. (6p.)
Problema 3
Subprogramul cifreImpare are un singur parametru, n, prin care primeşte un număr natural
cu toate cifrele nenule (n " 1, 10 ). Subprogramul returnează numărul obţinut prin eliminarea
9
tuturor cifrelor impare din n, respectiv -1 dacă nu există astfel de cifre sau dacă toate cifrele lui
n sunt impare.
Scrieţi definiţia completă a subprogramului.
Exemplu: dacă n=23541 subprogramul returnează 24, iar dacă n=28 subprogramul re-
turnează -1. (10p.)
CAPITOLUL 7. BAC 2016 7.3. SESIUNEA DE TOAMNĂ 58
Problema 4
Fişierul numere.in conţine pe prima linie un număr natural n (n " 2, 10 ), iar pe a doua linie un
9
9
şir de cel mult 10 numere naturale din intervalul 1, n. Numerele din şir sunt ordonate crescător
şi sunt separate prin câte un spaţiu.
Se cere să se determine valorile naturale distincte din intervalul [1,n] care NU se găsesc ı̂n şirul
menţionat mai sus. Valorile determinate se afişează pe ecran ı̂n ordine strict crescătoare, separate
prin câte un spaţiu. Dacă nu există astfel de valori, se afişează pe ecran mesajul Nu exista.
Pentru determinarea valorilor cerute se utilizează un algoritm eficient din punctul de vedere
al memoriei şi al timpului de executare.
Exemplu: dacă fişierul conţine numerele
10
3448
se afişează pe ecran valorile
1 2 5 6 7 9 10
a) Descrieţi ı̂n limbaj natural algoritmul utilizat, justificând eficienţa acestuia. (4p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris. (6p.)
7.3.1 Subiectul I
Problema 1
Variabilele x şi y sunt de tip real. Expresia C/C++ alăturată este echiva-
lentă cu expresia: (4p.)
Problema 2
Se consideră algoritmul alăturat, reprezentat ı̂n
pseudocod.
S-a notat cu a%b restul ı̂mpărţirii numărului natural
a la numărul natural nenul b şi cu [c] partea ı̂ntreagă a
numărului real c.
a) Scrieţi valoarea afişată ı̂n urma executării algoritmu-
lui dacă se citeşte numărul 12. (6p.)
b) Scrieţi cel mai mic şi cel mai mare număr care pot
fi citite, astfel ı̂ncât, pentru fiecare dintre acestea, valoarea
afişată să fie 16. (4p.)
c) Scrieţi ı̂n pseudocod un algoritm echivalent cu cel
dat, ı̂nlocuind structura pentru...execută cu o structură
repetitivă cu test final. (6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului
dat. (10p.)
CAPITOLUL 7. BAC 2016 7.3. SESIUNEA DE TOAMNĂ 59
Pentru fiecare dintre itemii 1 şi 2 scrieţi pe foaia de examen litera corespunzătoare
răspunsului corect.
Problema 1
Problema 2
Matricea de adiacenţă a unui graf neorientat cu 7 noduri are 10 elemente nenule. Numărul maxim
de componente conexe ale grafului este: (4p.)
a. 2 b. 3 c. 4 d. 5
Problema 3
În secvenţa de instrucţiuni de mai jos variabilele s1 şi s2 memorează câte un şir cu cel mult 20 de
caractere. Scrieţi ce se afişează pe ecran ı̂n urma executării secvenţei. (6p.)
strcpy(s1,"bacalaureat");
cout<<strlen(s1); | printf("%d",strlen(s1));
strcpy(s2,s1+5); s2[3]=’\0’;
cout<<s2; | printf("%s",s2);
Problema 4
Într-un graf orientat cu 7 vârfuri, numerotate de la 1 la 7, pentru oricare două vârfuri ale sale i şi
j există arcul (i,j) fie dacă j este divizor al lui i (i j j), fie dacă i şi j au aceeaşi paritate, iar i¡j.
Enumeraţi vârfurile pentru care gradul interior este mai mare sau egal cu cel exterior. (6p.)
Problema 5
2
Scrieţi un program C/C++ care citeşte de la tastatură numere naturale din intervalul 3, 10 , ı̂n
această ordine: n şi m, apoi elementele unui tablou bidimensional cu n linii şi m coloane, iar la
final un număr x.
Programul afişează pe ecran mesajul DA, dacă există cel puţin un element egal
cu x aflat pe conturul tabloului (format din prima linie, ultima linie, prima
coloană şi ultima coloană), sau mesajul NU ı̂n caz contrar.
Exemplu: pentru n=4, m=5, tabloul alăturat şi x=12, se afişează pe
ecran mesajul DA. (10p.)
CAPITOLUL 7. BAC 2016 7.3. SESIUNEA DE TOAMNĂ 60
Problema 1
Problema 2
Utilizând metoda bactracking se generează ı̂n ordine lexicografică toate şirurile de 5 litere distincte
din mulţimea C, A, R, T, E, astfel ı̂ncât ı̂n fiecare şir litera T precede litera A. Primele trei soluţii
generate sunt, ı̂n această ordine: CERTA, CETAR, CETRA. Scrieţi cea de a patra şi cea de a
cincea soluţie, ı̂n ordinea generării acestora. (6p.)
Problema 3
Subprogramul duplicare are doi parametri:
n, prin care primeşte un număr natural (n " 1, 10 );
4
d, prin care furnizează numărul obţinut prin duplicarea fiecărei cifre pare a lui n sau -1 dacă
acesta nu are nicio cifră pară.
Problema 4
6 9
Fişierul bac.txt conţine un şir de cel mult 10 numere naturale distincte din intervalul 0, 10 .
Numerele din şir sunt separate prin câte un spaţiu.
Se cere să se determine cei mai mari doi termeni pari din şir care sunt precedaţi de doar trei
termeni impari. Termenii determinaţi se afişează pe ecran, ı̂n ordine strict crescătoare, separaţi
printr-un spaţiu, iar dacă ı̂n şir nu există doi astfel de termeni, se afişează pe ecran mesajul Nu
exista.
Pentru determinarea termenilor ceruţi se utilizează un algoritm eficient din punctul de vedere
al spaţiului de memorie şi al timpului de executare.
Exemplu: dacă fişierul conţine numerele
4 3 5 312 27 30 14 212 11 15 17 400
se afişează pe ecran numerele
30 212
(4 este precedat de 0 numere impare, 312 este precedat de 2 numere impare, 30, 14 şi 212 sunt
precedate de 3 numere impare, iar 400 este precedat de 6 numere impare; dintre numerele 30, 14
şi 212 cele mai mari sunt 30 şi 212).
a) Descrieţi ı̂n limbaj natural algoritmul utilizat, justificând eficienţa acestuia. (4p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris. (6p.)
Capitolul 8
BAC 2015
8.1.1 Subiectul I
Pentru itemul 1, scrieţi pe foaia de examen litera corespunzătoare răspunsului corect.
Problema 1
Expresia C/C++ alăturată are valoarea: (4p.)
a. 4 b. 8 c. 9 d. 14
Problema 2
Se consideră algoritmul alăturat, reprezentat ı̂n pseu-
docod.
S-a notat cu a%b restul ı̂mpărţirii numărului natural a la
numărul natural nenul b şi cu [c] partea ı̂ntreagă a numărului real
c.
a) Scrieţi valoarea afişată dacă se citesc, ı̂n această ordine, nu-
merele 997 şi 1005. (6p.)
b) Dacă pentru m se citeşte numărul 54321, scrieţi cel mai mare
număr care poate fi citit pentru n astfel ı̂ncât, ı̂n urma executării
algoritmului, valoarea afişată să fie 0. (4p.)
c) Scrieţi ı̂n pseudocod un algoritm, echivalent cu cel dat,
ı̂nlocuind structura pentru...execută cu o structură de tip cât
timp...execută. (6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului dat.
(10p.)
Pentru fiecare dintre itemii 1 şi 2 scrieţi pe foaia de examen litera corespunzătoare
răspunsului corect.
Problema 1
În declarările alăturate, variabilele A şi B memorează coordonatele câte unui
punct ı̂n sistemul de coordonate xOy. Indicaţi expresia care are valoarea 1 dacă
şi numai dacă cele două puncte coincid. (4p.)
a. A[x]==B[x] && A[y]==B[y] b. A.x==B.x && A.y==B.y
c. x[A]==x[B] && y[A]==y[B] d. x.A==x.B && y.A==y.B
61
CAPITOLUL 8. BAC 2015 8.1. SESIUNEA SPECIALĂ 62
Problema 2
a. 2 b. 3 c. 4 d. 5
Problema 3
Un arbore cu 8 noduri, numerotate de la 1 la 8, este reprezentat prin vectorul de ”taţi”
(4,4,0,3,6,3,2,7). Scrieţi un lanţ elementar care are o extremitate ı̂n rădăcina arborelui şi cealaltă
extremitate ı̂n una dintre frunzele acestuia. (6p.)
Problema 4
Variabilele i şi j sunt de tip ı̂ntreg, iar variabila a memorează un tablou bidimensional cu 5 linii şi
5 coloane, numerotate de la 1 la 5, având iniţial toate elementele nule.
Fără a utiliza alte variabile decât cele menţionate, scrieţi secvenţa de
instrucţiuni de mai jos, ı̂nlocuind punctele de suspensie astfel ı̂ncât, ı̂n urma
executării secvenţei obţinute, variabila a să memoreze tabloul alăturat. (6p.)
for(i=1;i<=5;i++)
for(j=1;j<=5;j++)
..................
Problema 5
Se consideră un text cu cel mult 100 de caractere, ı̂n care cuvintele sunt formate numai din litere
mari şi mici ale alfabetului englez şi sunt separate prin câte un spaţiu. Textul reprezintă numele
unei instituţii sau al unei organizaţii.
Scrieţi un program C/C++ care citeşte de la tastatură un text de tipul precizat şi construieşte
ı̂n memorie, apoi afişează pe ecran, un şir de caractere ce reprezintă acronimul corespunzător
numelui citit. Acronimul este format din primul caracter al fiecărui cuvânt al numelui care ı̂ncepe
cu majusculă.
Exemplu: dacă şirul citit este
Universitatea de Arte Plastice BUCURESTI
se va obţine şirul
UAPB (10p.)
Problema 1
Utilizând metoda backtracking, se generează toate şiragurile formate din câte 5 pietre distincte din
mulţimea {opal, rubin, safir, smarald, topaz}. Două şiraguri sunt distincte dacă pietrele
sunt dispuse ı̂n altă ordine.
Primele patru soluţii obţinute sunt, ı̂n această ordine: (opal, rubin, safir,
smarald, topaz), (opal, rubin, safir, topaz, smarald), (opal, rubin, smarald,
safir, topaz) şi (opal, rubin, smarald, topaz, safir).
Indicaţi soluţia care trebuie eliminată din enumerarea următoare, astfel ı̂ncât cele rămase
să apară ı̂n ordinea generării lor, pe poziţii consecutive: (smarald, safir, opal, topaz,
rubin) (smarald, safir, topaz, opal, rubin) (smarald, safir, topaz, rubin,
opal) (smarald, topaz, opal, rubin, safir). (4p.)
a. (smarald, safir, opal, topaz, rubin) b. (smarald, safir, topaz, opal, rubin)
c. (smarald, safir, topaz, rubin, opal) d. (smarald, topaz, opal, rubin, safir)
CAPITOLUL 8. BAC 2015 8.2. SESIUNEA IUNIE - IULIE 63
Problema 2
Subprogramul F este definit alăturat. Scrieţi
ce se afişează ı̂n urma apelului de mai jos.
F(154678,3); (6p.)
Problema 3
Subprogramul DivImpar are doi parametri, a şi b, prin care primeşte două numere naturale din
5
intervalul 1, 10 . Subprogramul returnează cel mai mare divizor comun impar al numerelor a şi
b.
Scrieţi definiţia completă a subprogramului.
Exemplu: dacă a=30 şi b=60, subprogramul returnează valoarea 15. (10p.)
Problema 4
9
Fişierul date.in conţine un şir de cel mult un milion de numere naturale din intervalul 0, 10 ,
separate prin câte un spaţiu. şirul are cel puţin doi termeni pari şi cel puţin doi termeni impari.
Se cere să se afişeze pe ecran mesajul DA dacă şirul aflat ı̂n fişier are un subşir ordonat crescător,
format din toţi termenii pari ai săi, şi un subşir ordonat descrescător, format din toţi termenii
impari ai săi. Dacă nu există două astfel de subşiruri, programul afişează pe ecran mesajul NU.
Pentru verificarea proprietăţii cerute utilizaţi un algoritm eficient din punctul de vedere al
timpului de executare şi al memoriei necesare.
Exemplu: dacă fişierul date.in conţine numerele
7252438
se afişează pe ecran mesajul
DA
iar dacă fişierul conţine numerele
5272438
se afişează pe ecran mesajul
NU
a) Descrieţi ı̂n limbaj natural algoritmul utilizat, justificând eficienţa acestuia. (4p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris. (6p.)
8.2.1 Subiectul I
Problema 1
Variabila ı̂ntreagă x memorează un număr natural cu cel puţin patru cifre nenule distincte. Ex-
presia C/C++ a cărei valoare este egală cu cifra sutelor acestui număr este: (4p.)
Problema 2
Se consideră algoritmul alăturat, reprezentat ı̂n pseu-
docod.
S-a notat cu a%b restul ı̂mpărţirii numărului natural a la
numărul natural nenul b şi cu [c] partea ı̂ntreagă a numărului
real c.
a) Scrieţi valoarea afişată dacă se citesc, ı̂n această ordine,
numerele 7 şi 2. (6p.)
b) Dacă pentru variabila k se citeşte numărul 5, scrieţi cea
mai mică şi cea mai mare valoare care pot fi citite pentru vari-
abila n astfel ı̂ncât, ı̂n urma executării algoritmului, pentru
fiecare dintre acestea, valoarea afişată să fie 3. (4p.)
c) Scrieţi ı̂n pseudocod un algoritm, echivalent cu cel dat,
ı̂nlocuind prima structură cât timp...execută cu o structură
repetitivă de tip pentru...execută. (6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului
dat. (10p.)
Pentru fiecare dintre itemii 1 şi 2 scrieţi pe foaia de examen litera corespunzătoare
răspunsului corect.
Problema 1
Variabila c, declarată alăturat, memorează titlul şi preţul unei cărţi. Ex-
presia C/C++ a cărei valoare reprezintă preţul cărţii respective majorat
cu 50% este: (4p.)
a. c.pret*3/2 b. pret.c*3/2 c. c(pret)*3/2 d. pret[c]*3/2
Problema 2
Un arbore cu 37 de noduri, numerotate de la 1 la 37, are ca rădăcină nodul numerotat cu 1,Ó iar
tatăl fiecărui nod i (i " 2, 37) este numerotat cu partea ı̂ntreagă a rădăcinii pătrate a lui i ([ i]).
Numărul de frunze ale arborelui este: (4p.)
a. 36 b. 31 c. 21 d. 6
Problema 3
Un graf neorientat cu 8 noduri, numerotate de la 1 la 8, are muchiile [1,2], [1,6], [4,6], [3,6], [6,5],
[5,3], [3,4], [7,8], [8,2]. Enumeraţi trei noduri care nu aparţin niciunui ciclu ı̂n acest graf. (6p.)
Problema 4
Fiind date două şiruri de caractere a şi b, ı̂l numim pe a prefix al lui b dacă a este egal cu b sau
dacă b se poate obţine din a prin alipirea la dreapta a unor noi caractere.
Variabilele a şi b pot memora câte un şir cu cel mult 20 de caractere. ştiind că variabila b a
fost iniţializată cu un şir format dintr-un număr par de caractere, scrieţi o secvenţă de instrucţiuni
ı̂n urma executării căreia variabila a să memoreze un prefix al lui b a cărui lungime să fie jumătate
din lungimea lui b.
Exemplu: dacă b memorează şirul aurari, atunci a memorează şirul aur. (6p.)
CAPITOLUL 8. BAC 2015 8.2. SESIUNEA IUNIE - IULIE 65
Problema 5
Scrieţi un program C/C++ care citeşte de la tastatură un număr natural, n (n " 2, 20), apoi n
4
numere naturale din intervalul 0, 10 , reprezentând, de la stânga la dreapta, ı̂n această ordine,
valorile elementelor aflate pe prima linie a unui tablou bidimensional cu n linii şi n coloane.
Programul construieşte ı̂n memorie tabloul, iniţializând celelalte elemente, astfel ı̂ncât fiecare linie
să se obţină prin permutarea circulară a elementelor liniei anterioare, de la stânga spre dreapta,
cu o poziţie, ca ı̂n exemplu.
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: dacă se citesc numerele n=4, apoi 1, 1, 3, 2, se obţine tabloul alăturat.
(10p.)
Problema 1
Utilizând metoda backtracking, se generează toate numerele naturale din intervalul [100,999] care
au suma cifrelor egală cu 5. Primele cinci soluţii obţinute sunt, ı̂n această ordine 104, 113, 122, 131,
140. Utilizând acelaşi algoritm, se generează toate numerele naturale din intervalul [1000,9999]
care au suma cifrelor egală cu 6. Al treilea număr generat este: (4p.)
Problema 2
Subprogramul F este definit alăturat. Scrieţi ce se afişează
ı̂n urma apelului de mai jos.
F(’d’); (6p.)
Problema 3
Şirul lui Fibonacci (1, 1, 2, 3, 5, 8, 13, 21,) se defineşte
astfel:
f1 1, f2 1şifi fi1 fi2 pentru orice număr natural i, i ' 3.
Subprogramul Fibo are un singur parametru, n, prin care primeşte un număr natural (n "
1, 30). Subprogramul returnează al n-lea termen impar al şirului lui Fibonacci.
Scrieţi definiţia completă a subprogramului.
Exemplu: dacă n=6, subprogramul returnează numărul 21. (10p.)
Problema 4
2
Fişierul bac.txt conţine un şir de cel mult un milion de numere naturale din intervalul 0, 10 ,
separate prin câte un spaţiu.
Se cere să se determine toate perechile distincte formate din termeni ai şirului aflat ı̂n fişier, x
şi y (y x ' 2), astfel ı̂ncât să nu existe niciun termen al şirului care să aparţină intervalului x, y .
Numerele din fiecare pereche sunt afişate pe câte o linie a ecranului, ı̂n ordine strict crescătoare,
separate printr-un spaţiu, iar dacă nu există nicio astfel de pereche, se afişează pe ecran mesajul nu
exista. Pentru determinarea numerelor cerute utilizaţi un algoritm eficient din punctul de vedere
al timpului de executare.
Exemplu: dacă fişierul conţine numerele
5 9 0 8 10 11 12 13 15 14 6 7 40 10 0 0 5 41 95 7
atunci pe ecran se afişează, nu neapărat ı̂n această ordine, perechile
05
15 40
41 95
a) Descrieţi ı̂n limbaj natural algoritmul utilizat, justificând eficienţa acestuia. (4p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris. (6p.)
CAPITOLUL 8. BAC 2015 8.3. SESIUNEA DE TOAMNĂ 66
8.3.1 Subiectul I
Problema 1
Indicaţi expresia C/C++ care are valoarea 1 dacă şi numai dacă numărul natural memorat ı̂n
variabila ı̂ntreagă n este divizibil cu 2, dar NU şi cu 5. (4p.)
a. !((n%2==1) || (n%5==0)) b. (n%2==0) && (n%5==0)
c. (n%10==0) || (n%5!=0) d. (n%10==0) && (n%2==0)
Problema 2
Problema 1
Variabila z, declarată alăturat, memorează partea reală şi partea imaginară a
unui număr complex. Expresia care are valoarea egală cu pătratul modulului
acestui număr (suma dintre pătratul părţii reale şi pătratul părţii imaginare)
este: (4p.)
a. complex(re)*complex(re)+complex(im)*complex(im)
b. complex.z(re)*complex.z(re)+complex.z(im)*complex.z(im)
c. re.z*re.z+im.z*im.z
d. z.re*z.re+z.im*z.im
CAPITOLUL 8. BAC 2015 8.3. SESIUNEA DE TOAMNĂ 67
Problema 2
Numărul maxim de muchii ale unui graf neorientat, cu 100 de noduri, care nu conţine niciun ciclu,
este: (4p.)
a. 50 b. 99 c. 100 d. 4950
Problema 3
Problema 4
Variabilele i şi j sunt de tip ı̂ntreg, iar variabila a memorează un tablou bidimensional cu 5 linii şi
5 coloane, numerotate de la 1 la 5, având iniţial toate elementele nule.
Fără a utiliza alte variabile decât cele menţionate, scrieţi secvenţa de
instrucţiuni de mai jos, ı̂nlocuind punctele de suspensie astfel ı̂ncât, ı̂n urma
executării secvenţei obţinute, variabila a să memoreze tabloul alăturat.
for(i=1;i<=5;i++)
for(j=1;j<=5;j++)
.................. (6p.)
Problema 5
Se consideră un cuvânt format din cel puţin două şi cel mult 100 de caractere, numai litere mici
ale alfabetului englez.
Scrieţi un program C/C++ care citeşte de la tastatură un cuvânt de tipul precizat şi afişează
pe ecran mesajul DA ı̂n cazul ı̂n care cuvântul conţine doar consoane şi, eventual, vocala i, sau
mesajul NU ı̂n caz contrar.
Exemplu: pentru cuvântul inscriptibil sau cuvântul brr
se afişează mesajul
DA
iar pentru cuvântul inestimabil sau cuvântul iii
se afişează mesajul
NU (10p.)
Problema 1
Utilizând metoda backtracking, se generează toate parfumurile formate prin amestecarea a câte
3 esenţe distincte din mulţimea {ambră, cedru, iris, mosc, santal}. Primele patru soluţii
obţinute sunt, ı̂n această ordine: (ambră, cedru, iris), (ambră, cedru, mosc), (ambră,
cedru, santal) şi (ambră, iris, mosc). Indicaţi submulţimea care trebuie eliminată din
enumerarea următoare, astfel ı̂ncât soluţiile rămase să apară ı̂n ordinea generării lor: (ambră,
mosc, santal), (cedru, mosc, santal), (cedru, iris, mosc), (cedru, iris, santal).
(4p.)
Problema 2
Subprogramul F este definit alăturat. Scrieţi instrucţiunea prin
care se poate apela subprogramul pentru a afişa, ı̂n ordine strict
descrescătoare, toţi divizorii pozitivi proprii ai numărului 2015 (di-
vizori naturali diferiţi de 1 şi de 2015). (6p.)
Problema 3
Subprogramul NrPrime are un singur parametru, n, prin care
primeşte un număr natural (n " 0, 10 ). Subprogramul returnează numărul de cifre prime
9
ale lui n.
Scrieţi definiţia completă a subprogramului.
Exemplu: dacă n=1233405, atunci subprogramul returnează valoarea 4. (10p.)
Problema 4
Fişierul BAC.TXT conţine pe prima linie un număr natural, n (n " 2, 5000), şi pe a doua linie
un şir de 2 n numere naturale din intervalul [0,5]. 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 valoarea obţinută ı̂nsumând toate produsele de forma x y, unde
x şi y sunt numere de paritate diferită, x fiind printre primii n termeni ai şirului aflat ı̂n fişier,
iar y printre ultimii n termeni ai acestui şir. Dacă nu există niciun astfel de produs, valoarea
cerută este nulă. Pentru determinarea numărului cerut utilizaţi un algoritm eficient din punctul
de vedere al timpului de executare şi al memoriei necesare.
Exemplu: dacă fişierul are conţinutul de mai jos
5
1200542310
pe ecran se afişează numărul 44
(1 4 1 2 1 0 2 3 2 1 0 3 0 1 0 3 0 1 5 4 5 2 5 0 44).
a) Descrieţi ı̂n limbaj natural algoritmul utilizat, justificând eficienţa acestuia. (4p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris. (6p.)
Capitolul 9
BAC 2014
9.1.1 Subiectul I
Pentru itemul 1, scrieţi pe foaia de examen litera corespunzătoare răspunsului corect.
Problema 1
Variabilele x, y şi z sunt de tip ı̂ntreg şi memorează câte un număr
natural nenul. Dacă expresia C/C++ alăturată are valoarea 1, indicaţi
şirul crescător format cu valorile acestor variabile, ı̂n ordinea precizată mai jos. (4p.)
a. x, y, z b. y, z, x c. z, x, y d. z, y, x
Problema 2
Se consideră algoritmul alăturat, reprezentat ı̂n pseu-
docod.
S-a notat cu x%y restul ı̂mpărţirii numărului natural x la
numărul natural nenul y şi cu [z] partea ı̂ntreagă a numărului real
z.
a) Scrieţi numărul afişat dacă se citeşte valoarea 162453. (6p.)
b) Scrieţi două numere de patru cifre distincte care pot fi citite
astfel ı̂ncât, ı̂n urma executării algoritmului, pentru fiecare dintre
acestea, să se afişeze valoarea 0. (4p.)
c) Scrieţi ı̂n pseudocod un algoritm, echivalent cu cel dat, ı̂n care
să se ı̂nlocuiască structura cât timp...execută cu o structură
repetitivă cu test final. (6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului dat.
(10p.)
Problema 1
Pentru a putea memora un tablou bidimensional cu maximum 21 de elemente, numere reale,
variabila A se poate declara astfel: (4p.)
69
CAPITOLUL 9. BAC 2014 9.1. SESIUNEA SPECIALĂ 70
Problema 2
Se consideră un graf neorientat conex şi fără cicluri, ı̂n care gradul oricărui nod este mai mic sau
egal cu 4. Dacă şase dintre nodurile sale au gradul egal cu 1, atunci numărul maxim de noduri cu
gradul egal cu 4 este: (4p.)
a. 0 b. 1 c. 2 d. 3
Problema 3
Problema 4
Se consideră următoarea operaţie prin care se transformă un arbore cu rădăcină: se elimină din
arbore nodul ”frunză” numerotat cu valoarea minimă, marcându-se nodul ”tată” al acestuia.
Scrieţi vectorul de ”taţi” al unui arbore cu 6 noduri, numerotate de la 1 la 6, ı̂n care nodul 1
este rădăcină, ştiind că dacă asupra acestui arbore se efectuează de patru ori succesiv operaţia de
transformare menţionată mai sus, se marchează, ı̂n această ordine, nodurile 5, 1, 1, 1. (6p.)
Problema 5
Se consideră un text cu cel mult 100 de caractere, ı̂n care cuvintele sunt formate numai din litere
mici ale alfabetului englez şi sunt separate prin câte un spaţiu.
Scrieţi un program C/C++ care citeşte de la tastatură un text de tipul menţionat mai sus
şi determină transformarea acestuia ı̂n memorie, astfel ı̂ncât din fiecare cuvânt format dintr-un
număr impar de litere (cel puţin trei) să se elimine litera aflată pe poziţia din mijloc, ca ı̂n exemplu.
Programul afişează pe ecran textul obţinut, iar dacă nu există niciun cuvânt modificat, afişează
pe ecran mesajul nu exista.
Exemplu: pentru textul
pictura prin aceea arata o pace profunda
se afişează
picura prin acea arta o pace profunda (10p)
Problema 1
Problema 2
Problema 3
Un număr natural nenul se numeşte perfect dacă este egal cu suma divizorilor săi naturali strict
mai mici decât el.
Exemplu: 28 este număr perfect pentru că 28=1+2+4+7+14.
Se consideră subprogramul perfect, cu doi parametri, a şi b, prin care primeşte câte un număr
natural (2 & a $ b & 10 ). Subprogramul afişează pe ecran, separate prin câte un spaţiu, ı̂n ordine
9
descrescătoare, toate numerele perfecte din intervalul [a,b]. Dacă ı̂n interval nu există astfel de
numere, subprogramul afişează pe ecran mesajul nu exista.
Scrieţi definiţia completă a subprogramului.
Exemplu: pentru a=5 şi b=30, se afişează pe ecran: 28 6 (10p.)
Problema 4
Numim secvenţă uniformă a unui şir de numere naturale un subşir al acestuia, format din termeni
cu aceeaşi valoare, aflaţi pe poziţii consecutive ı̂n şirul dat. Lungimea secvenţei este egală cu
numărul de termeni ai acesteia.
Fişierul bac.txt conţine un şir de cel puţin două şi cel mult 1000000000 de numere naturale
9
din intervalul 0, 10 . Numerele sunt separate prin câte un spaţiu, iar ı̂n şir există cel puţin doi
termeni egali pe poziţii consecutive.
Se cere să se determine o secvenţă uniformă de lungime maximă ı̂n şirul aflat ı̂n fişier şi să se
afişeze pe ecran lungimea acestei secvenţe şi, pe o linie nouă, separaţi prin câte un spaţiu, termenii
acesteia. Dacă sunt mai multe astfel de secvenţe, se afişează doar termenii ultimei dintre acestea.
Pentru determinarea numerelor cerute se utilizează un algoritm eficient din punctul de vedere
al memoriei necesare şi al timpului de executare.
Exemplu: dacă fişierul bac.txt conţine numerele
2 3 3 3 3 5 4 4 11 11 11 11 16 11 11 11 11 15 15
atunci pe ecran se afişează valorile
4
11 11 11 11
a) Descrieţi ı̂n limbaj natural algoritmul utilizat, justificând eficienţa acestuia. (4p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris. (6p.)
9.2.1 Subiectul I
Problema 1
a. 6 b. 8 c. 11 d. 18
CAPITOLUL 9. BAC 2014 9.2. SESIUNEA IUNIE - IULIE 72
Problema 2
Se consideră algoritmul alăturat, reprezentat ı̂n pseu-
docod.
S-a notat cu x%y restul ı̂mpărţirii numărului natural x la
numărul natural nenul y şi cu [z] partea ı̂ntreagă a numărului
real z.
a) Scrieţi valorile afişate dacă se citeşte numărul 2352. (6p.)
b) Scrieţi două numere cu cel mult două cifre care pot fi citite
astfel ı̂ncât, ı̂n urma executării algoritmului, pentru fiecare din-
tre acestea, să se afişeze valorile 5 1. (4p.)
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 C/C++ corespunzător algoritmului
dat. (10p.)
Problema 1
Un graf orientat are 8 vârfuri, numerotate de la 1 la 8, şi arcele (1,7), (1,8), (3,5), (3,7), (4,3),
(4,7), (6,3), (6,5), (6,7), (6,8), (8,5), (8,7).
Numărul vârfurilor care au gradul extern nul este: (4p.)
a. 1 b. 2 c. 3 d. 4
Problema 2
Variabila s poate memora un şir cu maximum 20 de caractere.
ı̂n urma executării secvenţei de instrucţiuni alăturate se afişează:
(4p.)
Problema 3
Se consideră declararea alăturată. Scrieţi o secvenţă de instrucţiuni ı̂n
urma executării căreia să se afişeze pe ecran mesajul acceptat, dacă
momentul de timp corespunzător variabilei start precede momentul
de timp din aceeaşi oră, corespunzător variabilei stop, sau mesajul
respins ı̂n caz contrar. (6p.)
Problema 4
Considerăm că ı̂nălţimea unui arbore cu rădăcină este egală cu cea mai mare dintre lungimile
lanţurilor elementare care au o extremitate ı̂n rădăcină şi cealaltă extremitate ı̂n oricare dintre
”frunzele” arborelui.
Se consideră arborele cu 9 noduri, numerotate de la 1 la 9, şi muchiile [1,2], [2,3], [2,5], [3,7],
[4,5], [5,6], [5,8], [8,9]. Scrieţi nodurile care pot fi alese drept rădăcină, astfel ı̂ncât ı̂nălţimea
arborelui să fie maximă. (6p.)
CAPITOLUL 9. BAC 2014 9.2. SESIUNEA IUNIE - IULIE 73
Problema 5
Scrieţi un program C/C++ care citeşte de la tastatură două numere naturale, m şi n (3 & m & 50,
3 & n & 50), şi elementele unui tablou bidimensional cu m linii şi n coloane, numere naturale
cu cel mult patru cifre, apoi modifică tabloul ı̂n memorie, eliminând penultima linie şi penultima
coloană a acestuia, ca ı̂n exemplu.
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.
Problema 1
Se consideră subprogramul f, definit alăturat.
Indicaţi ce valoare are f(15). (4p.)
a. 1 b. 7 c. 8 d. 10
Problema 2
Utilizând metoda backtracking, se generează toate posibilităţile de a forma şiraguri de câte
4 mărgele de culori distincte din mulţimea {roşu, galben, roz, albastru, violet}, astfel
ı̂ncât ı̂n fiecare şirag nu pot fi pe poziţii alăturate mărgele roşii şi galbene. Două şiraguri sunt
distincte dacă au cel puţin o mărgea de culoare diferită sau dacă ordinea culorilor mărgelelor este
diferită.
Primele cinci soluţii generate sunt, ı̂n această ordine, (roşu, roz, galben, albastru),
(roşu, roz, galben, violet), (roşu, roz, albastru, galben), (roşu, roz,
albastru, violet), (roşu, roz, violet, galben). Scrieţi cea de a şasea şi cea de a
şaptea soluţie, ı̂n ordinea generării acestora. (6p.)
Problema 3
Un interval cu proprietatea că există un singur număr natural, n (2n), pentru care valoarea
produsului 1 2 3 ... n aparţine acestui interval este numit interval factorial al lui n.
Exemplu: [5,8] şi [3,23] sunt intervale factoriale ale lui 3, dar [1,15] şi [7,10] nu sunt intervale
factoriale ale niciunui număr.
Se consideră subprogramul interval, cu trei parametri:
n, prin care primeşte un număr natural din intervalul [2,10].
a şi b, prin care furnizează câte un număr natural, astfel ı̂ncât expresia b-a să aibă valoare
maximă, iar [a,b] să fie interval factorial al lui n.
Scrieţi definiţia completă a subprogramului.
Exemplu: dacă n=3, după apel a=3 şi b=23. (10p.)
CAPITOLUL 9. BAC 2014 9.3. SESIUNEA DE TOAMNĂ 74
Problema 4
Un număr natural x, format din exact două cifre, este numit sub-număr al unui număr natural y
dacă cifrele lui x apar, ı̂n aceeaşi ordine, pe ranguri consecutive, ı̂n numărul y.
Exemplu: 21 este sub-număr al lui 12145, al lui 213, al lui 21, dar nu şi al lui 123 sau al lui
231.
9
Fişierul bac.txt conţine cel mult 1000000 de numere naturale din intervalul 10, 10 , separate
prin câte un spaţiu.
Se cere să se afişeze pe ecran, separate prin câte un spaţiu, sub-numerele care apar de cele mai
multe ori ı̂n scrierea numerelor din fişier. Pentru determinarea sub-numerelor cerute se utilizează
un algoritm eficient din punctul de vedere al timpului de executare.
Exemplu: dacă fişierul bac.txt conţine numerele
atunci pe ecran se afişează valorile de mai jos, nu neapărat ı̂n această ordine:
77 21
a) Descrieţi ı̂n limbaj natural algoritmul utilizat, justificând eficienţa acestuia. (4p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris. (6p.)
9.3.1 Subiectul I
Pentru itemul 1, scrieţi pe foaia de examen litera corespunzătoare răspunsului corect.
Problema 1
Variabila x este de tip ı̂ntreg şi poate memora un număr natural cu cel mult două
cifre. Valoarea maximă pe care o poate avea expresia C/C++ alăturată este: (4p.)
a. 6 b. 14.14 c. 93 d. 693
Problema 2
Se consideră algoritmul alăturat, reprezentat ı̂n pseudocod.
a) Scrieţi valoarea afişată dacă se citesc, ı̂n această ordine, numerele
10, 8, 11, 1, 21, 0. (6p.)
b) Scrieţi un set de patru numere distincte din intervalul [0,9] care
pot fi citite astfel ı̂ncât, ı̂n urma executării algoritmului, să se afişeze
valoarea 0. (4p.)
c) Scrieţi ı̂n pseudocod un algoritm, echivalent cu cel dat, ı̂n care
să se ı̂nlocuiască prima structură repetă...până când cu o structură
repetitivă cu test iniţial. (6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului dat. (10p.)
Problema 1
Un arbore cu 4 noduri, numerotate de la 1 la 4, NU poate fi reprezentat prin vectorul de ”taţi”:
(4p.)
a. (0,1,2,3) b. (2,1,0,3) c. (4,4,4,0) d. (2,3,4,0)
CAPITOLUL 9. BAC 2014 9.3. SESIUNEA DE TOAMNĂ 75
Problema 2
Se consideră un graf neorientat complet, cu 9 noduri. Pentru a obţine un graf parţial al său cu
două componente conexe, fiecare dintre acestea fiind grafuri complete, numărul maxim de muchii
care pot fi eliminate este: (4p.)
a. 14 b. 18 c. 20 d. 24
Problema 3
Se consideră graful orientat cu 6 vârfuri, numerotate de la 1 la 6, reprezentat
prin matricea de adiacenţă alăturată. Scrieţi un drum elementar din graf, cu
extremitatea iniţială ı̂n vârful 4 şi extremitatea finală ı̂n vârful 6. (6p.)
Problema 4
Variabila s poate memora un şir cu maximum 20 de caractere, iar variabila i
este de tip ı̂ntreg.
Scrieţi ce se afişează ı̂n urma executării secvenţei de instrucţiuni de mai jos. (6p.)
strcpy(s,"BACALAUREAT");
cout<<strlen(s); | printf("%d",strlen(s));
i=0;
while (i<strlen(s)-1)
{ if(strchr("EAIOU",s[i])!=NULL) strcpy(s+i+1,s+i+2);
i++;
}
cout<<s; | printf("%s",s);
Problema 5
Scrieţi un program C/C++ care citeşte de la tastatură două numere naturale, m şi n (2 & m & 20,
2 & n & 20), şi construieşte ı̂n memorie un tablou bidimensional A, cu m linii şi n coloane, astfel
ı̂ncât parcurgându-l linie cu linie, de sus ı̂n jos, şi fiecare linie de la stânga la dreapta, să se obţină
şirul primelor n m numere naturale, pare, care NU sunt divizibile cu 5, ordonat strict crescător.
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 m=4 şi n=3 se obţine tabloul alăturat. (10p.)
Problema 1
Problema 2
Se consideră subprogramul f, definit alăturat. Scrieţi două val-
ori naturale distincte din intervalul [1,50] pe care le poate avea
variabila ı̂ntreagă x, astfel ı̂ncât f(30,x) să aibă valoarea 5. (6p.)
Problema 3
Se consideră subprogramul triplete, cu un singur parametru, n, prin care primeşte o valoare
4
naturală din intervalul 2, 10 . Subprogramul afişează pe ecran toate tripletele de numere naturale
x, y, z cu proprietatea că x $ y $ z şi x y y z n. Fiecare triplet se afişează pe câte o linie
a ecranului, iar numerele din fiecare triplet sunt separate prin câte o virgulă şi ı̂ncadrate ı̂ntre
paranteze rotunde, ca ı̂n exemplu.
Scrieţi definiţia completă a subprogramului.
Exemplu: pentru n=8 se afişează pe ecran, nu neapărat ı̂n această ordine, tripletele:
(0,1,8)
(0,2,4)
(1,2,3) (10p.)
Problema 4
Fişierul bac.txt conţine pe prima linie un număr natural n (1 & n & 10 ), iar pe a doua linie cel
6
mult 1000000 de numere naturale de forma 10 (0 & p & 9), separate prin câte un spaţiu.
p
Se cere să se afişeze pe ecran numărul care ar apărea pe poziţia n ı̂n şirul ordonat crescător
obţinut din toate numerele aflate pe a doua linie a fişierului. Dacă şirul are mai puţin de n termeni,
se afişează pe ecran mesajul Nu exista.
Pentru determinarea numărului cerut se utilizează un algoritm eficient din punctul de vedere
al timpului de executare.
Exemplu: dacă fişierul bac.txt conţine numerele
5
100 100000 1 100000 1000 100 10
atunci pe ecran se afişează valoarea
1000
a) Descrieţi ı̂n limbaj natural algoritmul utilizat, justificând eficienţa acestuia. (4p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris. (6p.)
Capitolul 10
BAC 2013
10.1.1 Subiectul I
Pentru itemul 1, scrieţi pe foaia de examen litera corespunzătoare răspunsului corect.
Problema 1
Indicaţi expresia care are valoarea 1 dacă şi numai dacă numărul natural memorat ı̂n variabila
ı̂ntreagă x are exact două cifre. (4p.)
Problema 2
Se consideră algoritmul alăturat, reprezentat ı̂n pseu-
docod.
a) Scrieţi ce se afişează dacă pentru variabila a se citeşte valoarea
5, iar pentru variabila b se citeşte valoarea 9. (6p.)
b) Dacă pentru variabila a se citeşte valoarea 10, scrieţi numărul
care poate fi citit pentru variabila b astfel ı̂ncât, ı̂n urma executării
algoritmului, caracterul # să fie afişat de exact trei ori. (4p.)
c) Scrieţi ı̂n pseudocod un algoritm, echivalent cu cel dat, ı̂n
care să se ı̂nlocuiască structura pentru...execută cu o structură
repetitivă de alt tip. (6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului dat. (10p.)
Problema 1
Variabila a memorează elementele unui tablou bidimensional cu 100 de linii şi 100 de coloane,
numerotate de la 1 la 100. Un element aflat pe diagonala secundară a tabloului poate fi accesat
prin: (4p.)
77
CAPITOLUL 10. BAC 2013 10.1. SESIUNEA SPECIALĂ 78
Problema 2
Într-un arbore cu rădăcină considerăm că un nod se află pe nivelul x dacă lanţul elementar care
are o extremitate ı̂n nodul respectiv şi cealaltă extremitate ı̂n rădăcina arborelui are lungimea x.
Pe nivelul 0 se află un singur nod (rădăcina).
Se consideră un arbore cu rădăcină, cu patru niveluri. Toate nodurile de pe acelaşi nivel (cu
excepţia ultimului nivel) au un număr egal (nenul) de descendenţi direcţi (”fii”) şi nu există două
niveluri cu acelaşi număr de noduri. Numărul minim de noduri de pe nivelul 3 este: (4p.)
a. 6 b. 8 c. 9 d. 12
Problema 3
În declararea alăturată, variabilele f şi fs memorează ı̂n câmpurile a şi
b numărătorul, respectiv numitorul câte unei fracţii. Scrieţi o secvenţă
de instrucţiuni C/C++ care să memoreze ı̂n variabila fs fracţia obţinută
prin ı̂nsumarea fracţiei memorate ı̂n variabila f şi a fracţiei 23 . (6p.)
Problema 4
Scrieţi toate ciclurile elementare distincte ale unui graf neorientat cu 6 noduri, numerotate de la
1 la 6, şi muchiile [1,2], [1,3], [1,5], [3,4], [3,5], [4,5], [5,6].
Două cicluri se consideră distincte dacă ele diferă prin cel puţin o muchie. (6p.)
Problema 5
Se consideră un text cu cel mult 100 de caractere (litere mici ale alfabetului englez şi spaţii), ı̂n
care cuvintele sunt separate prin câte un spaţiu. Înaintea primului cuvânt şi după ultimul cuvânt
nu există spaţii.
Scrieţi un program C/C++ care citeşte de la tastatură un text de tipul menţionat mai sus şi
determină transformarea acestuia ı̂n memorie prin ı̂nlocuirea fiecărui cuvânt format din trei litere
cu simbolul *. Programul afişează pe ecran textul obţinut.
Exemplu: pentru textul
bun este izvorul ce are apa rece
se afişează
* este izvorul ce * * rece (10p.)
Problema 1
Se consideră subprogramele f1 şi f2, definite mai jos.
Identificaţi subprogramul care, la apel, pentru parametrul n=10, returnează suma primelor 10
numere naturale. (4p.)
Problema 2
Utilizând metoda backtracking se generează toate submulţimile cu cel mult patru elemente din
mulţimea {3, 5, 6, 7, 8}. Primele şase soluţii generate sunt, ı̂n această ordine: {3}, {3, 5}, {3, 5,
6}, {3, 5, 6, 7}, {3, 5, 6, 8}, {3, 5, 7}. Scrieţi cea de a şaptea şi cea de a opta soluţie, ı̂n ordinea
generării acestora. (6p.)
Problema 3
Se consideră subprogramul sub, cu trei parametri:
v, prin care primeşte un tablou unidimensional cu n elemente, numere naturale cu cel mult
4 cifre;
x, prin care primeşte un număr natural cu cel mult 4 cifre. Cel puţin unul dintre elementele
tabloului are valoarea x.
Subprogramul modifică ordinea valorilor din tablou, astfel ı̂ncât toate valorile egale cu x să ocupe
primele poziţii din v, iar celelalte valori să se regăsească ı̂n continuarea acestora.
Tabloul modificat este furnizat tot prin parametrul v.
Scrieţi definiţia completă a subprogramului.
Exemplu: dacă n=9, v=(2, 1, 0, 1, 7, 0, 1, 4, 5) şi x=1, atunci, după apel, o soluţie posibilă
este v=(1, 1, 1, 2, 0, 7, 0, 4, 5). (10p.)
Problema 4
Fişierul bac.txt conţine un şir de cel puţin trei şi cel mult 1000000 de numere naturale cu cel
mult nouă cifre. Numerele din şir sunt separate prin câte un spaţiu.
Se cere să se afişeze pe ecran, separate printr-un spaţiu, două numere distincte, anume cel mai
mic număr par cu două cifre şi cel mai mare număr par cu două cifre care NU fac parte din şir.
Dacă nu există două astfel de valori, pe ecran se afişează mesajul Nu exista. Pentru deter-
minarea numerelor cerute se utilizează un algoritm eficient din punctul de vedere al timpului de
executare.
Exemplu: dacă fişierul bac.txt conţine valorile
7 2 40 5 10 15 11 12 18 350
se afişează pe ecran numerele 14 98.
a) Descrieţi ı̂n limbaj natural algoritmul utilizat, justificând eficienţa acestuia. (4p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris. (6p.)
10.2.1 Subiectul I
Pentru itemul 1, scrieţi pe foaia de examen litera corespunzătoare răspunsului corect.
Problema 1
Variabila x este de tip ı̂ntreg şi poate memora un număr natural cu cel mult două cifre.
Valoarea maximă pe care o poate avea expresia C/C++ alăturată este: (4p.)
a. 3 b. 24.75 c. 95 d. 396
CAPITOLUL 10. BAC 2013 10.2. SESIUNEA IUNIE - IULIE 80
Problema 2
Se consideră algoritmul alăturat, reprezentat ı̂n
pseudocod.
S-a notat cu x%y restul ı̂mpărţirii numărului natural
x la numărul natural nenul y şi cu [z] partea ı̂ntreagă a
numărului real z.
a) Scrieţi valoarea afişată dacă se citesc, ı̂n această or-
dine, numerele 19, 23 şi 2. (6p.)
b) Dacă pentru variabila a se citeşte valoarea 1, iar pen-
tru variabila c se citeşte valoarea 1, scrieţi toate numerele
naturale care pot fi citite pentru variabila b, astfel ı̂ncât, ı̂n
urma executării algoritmului, pentru fiecare dintre acestea,
să se afişeze valoarea 12. (4p.)
c) Scrieţi ı̂n pseudocod un algoritm, echivalent cu cel dat, ı̂n care să se ı̂nlocuiască structura
cât timp...execută cu o structură repetitivă cu test final. (6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului dat. (10p.)
Pentru fiecare dintre itemii 1 şi 2 scrieţi pe foaia de examen litera corespunzătoare
răspunsului corect.
Problema 1
Expresia strlen(”bine”) are valoarea: (4p.)
a. 1 b. 4 c. 5 d. 6
Problema 2
Se consideră un graf orientat cu 6 vârfuri şi fără circuite. Numărul maxim de arce ale grafului
este: (4p.)
a. 5 b. 7 c. 10 d. 15
Problema 3
Se consideră declararea alăturată. Scrieţi o secvenţă de instrucţiuni
ı̂n urma executării căreia câmpul paritate al variabilei x să memoreze
litera p, dacă numărul memorat ı̂n câmpul v al acesteia este par, sau
litera i dacă numărul memorat ı̂n câmpul v al acesteia este impar.
(6p.)
Problema 4
Se consideră un arbore cu 5 noduri, dintre care doar trei au gradul egal cu 1. Scrieţi două valori
care să reprezinte gradele celorlalte două noduri. (6p.)
CAPITOLUL 10. BAC 2013 10.2. SESIUNEA IUNIE - IULIE 81
Problema 5
Scrieţi un program C/C++ care citeşte de la tastatură două numere naturale m şi n (2 & m & 50,
2 & n & 50) şi elementele unui tablou bidimensional cu m linii şi n coloane, numere naturale cu
cel mult patru cifre fiecare.
Programul determină coloanele care au toate elementele egale cu aceeaşi valoare şi, pentru
fiecare astfel de coloană afişează pe ecran valoarea respectivă.
Valorile afişate sunt separate prin câte un spaţiu, iar dacă nu există astfel de valori, programul
afişează pe ecran mesajul Nu exista.
Exemplu: pentru m=4, n=5 şi tabloul alăturat, se afişează pe ecran
numerele 3 7 7, nu neapărat ı̂n această ordine. (10p.)
Problema 1
Se consideră subprogramele f1 şi f2, definite mai jos.
y
La apel, pentru parametrii x 2 şi y 3, returnează x : (4p.)
a. atât f1, cât şi f2 b. numai f1 c. numai f2 d. nici f1, nici f2
Problema 2
Utilizând metoda backtracking se generează toate cuvintele de 5 litere din mulţimea {A, M},
cuvinte care ı̂ncep şi se termină cu M. Primele patru soluţii generate sunt, ı̂n această ordine:
MAAAM, MAAMM, MAMAM, MAMMM. Scrieţi cea de a cincea şi cea de a şasea soluţie, ı̂n
ordinea generării acestora. (6p.)
Problema 3
v, prin care furnizează un tablou unidimensional cu 2 n elemente, valori ı̂ntregi din intervalul
1, 2 n.
Subprogramul construieşte tabloul v astfel ı̂ncât, ı̂n acesta, şirul elementelor impare să fie strict
crescător, iar şirul elementelor pare să fie strict descrescător. Primul element al tabloului este
impar, iar două elemente cu aceeaşi paritate nu pot ocupa poziţii consecutive ı̂n tablou, ca ı̂n
exemplu.
Scrieţi definiţia completă a subprogramului.
Exemplu: dacă n=4 atunci, după apel, v=( 1, 8, 3, 6, 5, 4, 7, 2). (10p.)
CAPITOLUL 10. BAC 2013 10.3. SESIUNEA DE TOAMNĂ 82
Problema 4
Se consideră şirul definit alăturat (unde n este un număr
natural nenul), ı̂n care nu există doi termeni cu aceeaşi par-
itate aflaţi pe poziţii consecutive:
1, 2, 3, 4, 7, 8, 15, 16 ....
Se citeşte de la tastatură un număr natural x, cu cel mult nouă cifre, termen al şirului dat, şi
se cere să se scrie ı̂n fişierul text bac.txt, ı̂n ordine strict descrescătoare, separaţi prin câte un
spaţiu, toţi termenii şirului care sunt mai mici sau egali cu x.
Pentru determinarea termenilor ceruţi se utilizează un algoritm eficient din punctul de vedere
al memoriei utilizate şi al timpului de executare.
Exemplu: dacă x=15, fişierul bac.txt conţine numerele
15 8 7 4 3 2 1
a) Descrieţi ı̂n limbaj natural algoritmul utilizat, justificând eficienţa acestuia. (4p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris. (6p.)
10.3.1 Subiectul I
Pentru itemul 1, scrieţi pe foaia de examen litera corespunzătoare răspunsului corect.
Problema 1
Valoarea expresiei C/C++ alăturate este: (4p.)
a. 6 b. 9 c. 9.5 d. 10
Problema 2
Se consideră algoritmul alăturat, reprezentat ı̂n
pseudocod.
S-a notat cu x%y restul ı̂mpărţirii numărului natural
x la numărul natural nenul y şi cu [z] partea ı̂ntreagă a
numărului real z.
a) Scrieţi numărul afişat dacă pentru variabila a se
citeşte valoarea 65, iar pentru variabila b se citeşte val-
oarea 80. (6p.)
b) Dacă pentru variabila a se citeşte valoarea 1234,
scrieţi cel mai mare număr de patru cifre care poate fi
citit pentru variabila b astfel ı̂ncât, ı̂n urma executării
algoritmului, valoarea afişată să fie 5. (4p.)
c) Scrieţi ı̂n pseudocod un algoritm, echivalent cu cel dat, ı̂n care să se ı̂nlocuiască structura
pentru...execută cu o structură repetitivă cu test final. (6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului dat. (10p.)
Problema 1
Variabila i este de tip ı̂ntreg (0 & i & 99), iar variabila a memorează elementele unui tablou
bidimensional cu 100 de linii şi 100 de coloane, numerotate de la 0 la 99. ı̂n limbajul C/C++, un
element aflat pe linia i şi pe diagonala principală a tabloului poate fi accesat prin: (4p.)
Problema 2
Se consideră un graf neorientat conex cu 50 de noduri şi 52 de muchii. Numărul minim de muchii
ce pot fi eliminate astfel ı̂ncât graful parţial obţinut să nu aibă niciun ciclu este: (4p.)
a. 1 b. 2 c. 3 d. 4
Problema 3
Se consideră arborele cu 8 noduri, numerotate de la 1 la 8, reprezentat prin vectorul de ”taţi”: (3,
0, 2, 5, 2, 5, 2, 5). Enumeraţi nodurile arborelui care au acelaşi ”tată” cu nodul 4. (6p.)
Problema 4
ı̂n declarările alăturate:
variabila p memorează coordonatele unui punct ı̂n sistemul de
coordonate xOy;
variabila d memorează ı̂n câmpurile A şi B coordonatele, ı̂n acelaşi
sistem de coordonate, ale vârfurilor din stânga - sus, respectiv
din dreapta - jos ale unui dreptunghi cu laturile paralele cu axele
sistemului de coordonate.
Scrieţi o expresie C/C++ care să aibă valoarea 1 dacă punctul core-
spunzător variabilei p se află ı̂n interiorul dreptunghiului corespunzător variabilei d (dar nu pe
laturile acestuia) sau valoarea 0 ı̂n caz contrar. (6p.)
Problema 5
Se consideră un text cu cel mult 100 de caractere (litere mici ale alfabetului englez şi spaţii), ı̂n
care cuvintele sunt separate prin unul sau mai multe spaţii. ı̂naintea primului cuvânt şi după
ultimul cuvânt nu există spaţiu.
Scrieţi un program C/C++ care citeşte de la tastatură un text de tipul menţionat mai sus şi
determină transformarea acestuia ı̂n memorie prin eliminarea unor spaţii, astfel ı̂ncât ı̂ntre oricare
două cuvinte alăturate să rămână exact un spaţiu. Programul afişează pe ecran textul obţinut.
Exemplu: pentru textul
in vacanta plec la mare
se obţine şi se afişează
in vacanta plec la mare (10p.)
Problema 1
Se consideră subprogramul f, definit alăturat. Indicaţi ce se
afişează ı̂n urma apelului de mai jos.
f(3); (4p.)
Problema 2
Utilizând metoda backtracking, se generează ı̂n ordine lexicografică toate şirurile de câte 5 litere
distincte din mulţimea {A, B, C, D, E}, astfel ı̂ncât ı̂n fiecare şir litera D precede literele A şi
B. Primele cinci soluţii generate sunt, ı̂n această ordine: CDABE, CDAEB, CDBAE, CDBEA,
CDEAB. Scrieţi cea de a şasea şi cea de a şaptea soluţie, ı̂n ordinea generării acestora. (6p.)
CAPITOLUL 10. BAC 2013 10.3. SESIUNEA DE TOAMNĂ 84
Problema 3
Se consideră subprogramul sub, cu trei parametri:
n, prin care primeşte un număr natural (2¡n¡50);
v, prin care primeşte un tablou unidimensional cu n elemente, numere naturale cu cel mult
4 cifre;
k, prin care primeşte un număr natural (1 $ k & n).
Subprogramul returnează suma primelor k elemente cu valoare impară ale tabloului. Dacă nu
există k elemente impare ı̂n tablou, subprogramul returnează valoarea -1.
Scrieţi definiţia completă a subprogramului.
Exemplu: dacă n=8, v=(2, 7, 6, 8, 3, 7, 5, 1), k=3, atunci subprogramul returnează valoarea
17 (7+3+7=17). (10p.)
Problema 4
Fiind date două numere a şi b, ı̂l numim pe a sufix al lui b dacă a este egal cu b sau dacă b se
poate obţine din a prin alipirea la stânga a unor noi cifre.
Exemplu: 12 este sufix al lui 12, iar 15 este sufix al lui 31415.
Fişierul bac.txt conţine pe prima linie un număr natural x, cu cel mult nouă cifre, iar pe a
doua linie un şir de cel puţin două şi cel mult 1000000 de numere naturale cu cel mult nouă cifre.
Numerele din şir sunt separate prin câte un spaţiu.
Se cere să se afişeze pe ecran ultimul termen al şirului care are ca sufix numărul x. Dacă ı̂n şir
nu există o astfel de valoare, pe ecran se afişează mesajul Nu exista.
Pentru determinarea numărului cerut se utilizează un algoritm eficient din punctul de vedere
al memoriei şi al timpului de executare.
Exemplu: dacă fişierul bac.txt conţine numerele
12
3445 89312 1245 12 67120 312 1234578
atunci pe ecran se afişează 312.
a) Descrieţi ı̂n limbaj natural algoritmul utilizat, justificând eficienţa acestuia. (4p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris. (6p.)
Capitolul 11
BAC 2012
11.1.1 Subiectul I
Pentru itemul 1, scrieţi pe foaia de examen litera corespunzătoare răspunsului corect.
Problema 1
Indicaţi expresia care are valoarea 1 dacă şi numai dacă numărul memorat ı̂n variabila ı̂ntreagă x
are exact două cifre, iar cifra unităţilor este nenulă. (4p.)
Problema 2
Se consideră algoritmul alăturat, reprezentat ı̂n
pseudocod.
a) Scrieţi valoarea afişată dacă se citesc, ı̂n această
ordine, numerele 5, 4. (6p.)
b) Dacă pentru a se citeşte valoarea 1, scrieţi toate
valorile naturale, cu exact o cifră fiecare, care pot fi citite
pentru n astfel ı̂ncât ı̂n urma executării algoritmului, pen-
tru fiecare dintre acestea, să se afişeze o valoare impară. (4p.)
c) Scrieţi ı̂n pseudocod un algoritm, echivalent cu cel dat, ı̂n care să se ı̂nlocuiască structura
pentru...execută cu o structură repetitivă cu test final. (6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului dat. (10p.)
Problema 1
Se consideră graful neorientat cu şase noduri, reprezentat alăturat.
Un subgraf al său este: (4p.)
85
CAPITOLUL 11. BAC 2012 11.1. SESIUNEA SPECIALĂ 86
Problema 2
Un arbore are 4 frunze, iar lungimea oricărui lanţ elementar care uneşte două noduri de tip frunză
este egală cu 6. Numărul minim de noduri ale unui astfel de arbore este: (4p.)
a. 6 b. 9 c. 13 d. 25
Problema 3
Se consideră declarările alăturate, ı̂n care variabila s memorează coor-
donatele (x abscisa, iar y ordonata), ı̂n sistemul de coordonate xOy, ale
extremităţilor unui segment. Scrieţi o expresie C/C++ care are valoarea
1 dacă şi numai dacă ambele extremităţi ale segmentului aparţin axei Ox
a sistemului de coordonate. (6p.)
Problema 4
În secvenţa de instrucţiuni de mai jos variabilele i şi j sunt de tip ı̂ntreg, iar variabila A memorează
un tablou bidimensional cu 5 linii şi 5 coloane, numerotate de la 1 la 5, cu elemente numere ı̂ntregi.
Fără a utiliza alte variabile, scrieţi una sau mai multe instrucţiuni care pot ı̂nlocui punctele
de suspensie astfel ı̂ncât, ı̂n urma executării secvenţei obţinute, tabloul memorat ı̂n variabila A să
aibă elementele din figura de mai jos.
for(i=1;i<=5;i++)
for(j=1;j<=5;j++)
............... (6p.)
Problema 5
Scrieţi un program C/C++ care citeşte de la tastatură două cuvinte distincte, fiecare fiind format
din cel mult 30 de caractere, numai litere mici ale alfabetului englez. După primul cuvânt se
tastează Enter. Programul verifică dacă prin eliminarea unor litere din cel de al doilea cuvânt
se poate obţine primul cuvânt. ı̂n caz afirmativ programul afişează pe ecran mesajul DA, altfel
mesajul NU.
Exemple: dacă se citesc, ı̂n această ordine, cuvintele:
calut
bacalaureat
pe ecran se afişează mesajul DA
iar dacă se citesc, ı̂n această ordine, cuvintele:
calut
lacatus
pe ecran se afişează mesajul NU. (10p.)
Problema 1
Algoritmul de generare a tuturor numerelor naturale de 5 cifre, fiecare număr având toate cifrele
nenule şi distincte, este echivalent cu algoritmul de generare a: (4p.)
a. aranjamentelor de 9 elemente luate câte 5
b. combinărilor de 9 elemente luate câte 5
c. permutărilor a 5 elemente
d. submulţimilor unei mulţimi cu 9 elemente
Problema 2
Se consideră subprogramul f, definit alăturat.
Scrieţi valorile f(-6) şi f(20). (6p.)
CAPITOLUL 11. BAC 2012 11.2. SESIUNEA IUNIE - IULIE 87
Problema 3
Se consideră subprogramul minus, cu doi parametri:
n, prin care primeşte o valoare naturală 2¡n¡50;
Problema 4
Fişierul bac.txt conţine pe prima linie un număr natural par n cu cel mult patru cifre, iar pe
următoarea linie un şir de n numere naturale cu cel mult nouă cifre. Numerele din şir sunt ı̂n
ordine crescătoare şi sunt separate prin câte un spaţiu.
Se cere să se afişeze pe ecran cel mai mare număr din prima jumătate a şirului care să fie strict
mai mic decât oricare număr din a doua jumătate a şirului. Dacă ı̂n fişier nu se află o astfel de
valoare, pe ecran se afişează mesajul Nu exista.
Pentru determinarea numărului cerut se utilizează un algoritm eficient din punctul de vedere
al memoriei şi al timpului de executare.
Exemplu: dacă fişierul bac.txt are conţinutul
30
1 3 5 5 ... 5 5 7 10
aaaaaaaaaaa
de 26 de ori
atunci pe ecran se afişează 3, iar dacă fişierul are conţinutul
6
3 3 3 3 9 15
atunci pe ecran se afişează Nu exista.
a) Descrieţi ı̂n limbaj natural algoritmul utilizat, justificând eficienţa acestuia. (4p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris. (6p.)
11.2.1 Subiectul I
Problema 1
Indicaţi expresia care are valoarea 1 dacă şi numai dacă numărul memorat ı̂n variabila ı̂ntreagă x
aparţine mulţimii 1,2,3. (4p.)
Problema 2
Se consideră algoritmul alăturat, reprezentat ı̂n pseu-
docod.
S-a notat cu x%y restul ı̂mpărţirii numărului natural x la
numărul natural nenul y şi cu [z] partea ı̂ntreagă a numărului
real z.
a) Scrieţi numărul afişat dacă pentru variabila n se citeşte
valoarea 56413. (6p.)
b) Scrieţi toate numerele naturale, fiecare având exact pa-
tru cifre, care pot fi citite pentru variabila n astfel ı̂ncât, ı̂n
urma executării algoritmului, pentru fiecare dintre acestea să
se afişeze valoarea 40. (4p.)
c) Scrieţi ı̂n pseudocod un algoritm, echivalent cu cel dat, ı̂n care să se ı̂nlocuiască structura
cât timp...execută cu o structură repetitivă de alt tip. (6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului dat. (10p.)
Problema 1
Se consideră graful orientat cu 7 vârfuri, numerotate de la 1 la 7, şi arcele (1,2), (2,3), (3,4), (4,1),
(5,4), (7,5), (5,6). Numărul de vârfuri ale grafului care au gradul extern egal cu gradul intern
este: (4p.)
a. 2 b. 3 c. 4 d. 5
Problema 2
Se consideră graful neorientat cu cinci noduri, reprezentat alăturat.
Numărul minim de muchii ce trebuie adăugate astfel ı̂ncât, ı̂n graful
obţinut, ı̂ntre oricare două noduri distincte să existe cel puţin un lanţ
elementar de lungime 2, este: (4p.)
a. 1 b. 2 c. 3 d. 4
Problema 3
Se consideră declarările alăturate, ı̂n care variabila s memorează co-
ordonatele, ı̂n sistemul de coordonate xOy, ale extremităţilor unui
segment.
Scrieţi o instrucţiune care afişează pe ecran pătratul lungimii
segmentului corespunzător variabilei s. (6p.)
Problema 4
ı̂n secvenţa de instrucţiuni de mai jos variabilele i şi j sunt de tip ı̂ntreg, iar variabila A memorează
un tablou bidimensional cu 5 linii şi 5 coloane, numerotate de la 1 la 5. Elementele tabloului sunt
numere ı̂ntregi.
Fără a utiliza alte variabile, scrieţi una sau mai multe instrucţiuni care pot ı̂nlocui punctele
de suspensie astfel ı̂ncât, ı̂n urma executării secvenţei obţinute, tabloul memorat ı̂n variabila A să
aibă elementele din figura de mai jos.
for(i=1;i<=5;i++)
for(j=1;j<=5;j++)
.................. (6p.)
CAPITOLUL 11. BAC 2012 11.2. SESIUNEA IUNIE - IULIE 89
Problema 5
Se consideră două şiruri de caractere a, de lungime na şi b, de lungime nb.
Şirul a este numit prefix al şirului b dacă na & nb şi subşirul lui b determinat de primele sale
na caractere coincide cu a. Şirul a este numit sufix al şirului b dacă na & nb şi subşirul lui b
determinat de ultimele sale na caractere coincide cu a.
Scrieţi un program C/C++ care citeşte de la tastatură două cuvinte, fiecare fiind format din
cel mult 30 de caractere, numai litere mici ale alfabetului englez. După primul cuvânt se tastează
Enter. Programul afişează pe ecran, separate prin câte un spaţiu, toate sufixele primului cuvânt
care sunt prefixe ale celui de al doilea cuvânt, ca ı̂n exemplu. Dacă nu există astfel de subşiruri,
se afişează pe ecran mesajul NU EXISTA.
Exemple:
dacă se citesc, ı̂n ordine, cuvintele
rebele
elegant
se afişează (nu neapărat ı̂n această ordine) subşirurile: e ele
iar dacă se citesc, ı̂n ordine, cuvintele
strai
rai
se afişează subşirul rai (10p.)
Problema 1
Utilizând metoda backtracking se generează, ı̂n ordine lexicografică, toate şirurile de 5 cifre din
mulţimea {0, 1, 2}, cu proprietatea că nu există două cifre pare pe poziţii consecutive.
Primele opt şiruri generate sunt, ı̂n această ordine: 01010, 01011, 01012, 01101, 01110, 01111,
01112, 01121. Al nouălea şir generat este: (4p.)
a. 01120 b. 01201 c. 01210 d. 10101
Problema 2
Se consideră subprogramul f, definit alăturat. Scrieţi ce
se afişează ı̂n urma apelului de mai jos.
f(9); (6p.)
Problema 3
Se consideră subprogramul dublu, cu doi parametri:
n, prin care primeşte o valoare naturală 2¡n¡50;
v, prin care primeşte un tablou unidimensional cu n elemente, numere ı̂ntregi cu cel mult 4
cifre. Cel puţin unul dintre elementele tabloului este strict pozitiv.
După fiecare element strict pozitiv din tablou, subprogramul inserează câte un nou element, cu
aceeaşi valoare, ca ı̂n exemplu. Tabloul modificat, precum şi valoarea actualizată a lui n, sunt
furnizate tot prin parametrii v, respectiv n.
Scrieţi definiţia completă a subprogramului.
Exemplu: dacă n=6 şi v=(4, -5, 0, 9, 9, -2), atunci după apel
n=9, iar v=(4, 4, -5, 0, 9, 9, 9, 9, -2). (10p.)
CAPITOLUL 11. BAC 2012 11.3. SESIUNEA DE TOAMNĂ 90
Problema 4
Un număr natural cu cel puţin două cifre se numeşte x-ordonat dacă toate cifrele sale sunt ı̂n ordine
crescătoare şi valoarea absolută a diferenţei dintre oricare două cifre aflate pe poziţii consecutive
este egală cu x.
Exemple: numărul 2468 este 2-ordonat, numărul 147 este 3-ordonat; numerele 179 sau 131
nu sunt de tipul menţionat.
Se citeşte de la tastatură un număr natural x (1 & x & 8) şi se cere scrierea ı̂n fişierul BAC.TXT
a tuturor numerelor naturale distincte x-ordonate. Fiecare număr este scris pe câte o linie a
fişierului.
Pentru determinarea numerelor cerute se utilizează un algoritm eficient din punctul de vedere
al timpului de executare.
a) Descrieţi ı̂n limbaj natural algoritmul utilizat, justificând eficienţa acestuia. (4p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris. (6p.)
11.3.1 Subiectul I
Problema 1
Variabila x este de tip ı̂ntreg şi memorează un număr natural. Expresia
alăturată are valoarea 0 dacă şi numai dacă expresia x%5 are valoarea: (4p.)
a. 1 b. 2 c. 3 d. 4
Problema 2
Se consideră algoritmul alăturat, reprezentat
ı̂n pseudocod.
S-a notat cu x%y restul ı̂mpărţirii numărului nat-
ural x la numărul natural nenul y.
a) Scrieţi valoarea afişată dacă se citesc, ı̂n
această ordine, numerele 7, 5. (6p.)
b) Scrieţi două seturi de date de intrare, formate
din numere naturale cu cel mult două cifre fiecare,
astfel ı̂ncât ı̂n urma executării algoritmului, pentru
fiecare dintre acestea, să se afişeze valoarea 28. (4p.)
c) Scrieţi ı̂n pseudocod un algoritm, echivalent cu cel dat, ı̂n care să se ı̂nlocuiască structura
pentru...execută cu o structură repetitivă cu test final. (6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului dat. (10p.)
Problema 1
ı̂ntr-un arbore cu rădăcină considerăm că un nod se află pe nivelul x dacă lanţul elementar care
are o extremitate ı̂n nodul respectiv şi cealaltă extremitate ı̂n rădăcina arborelui are lungimea x.
Pe nivelul 0 se află un singur nod (rădăcina).
Se consideră arborele cu 7 noduri, numerotate de la 1 la 7, reprezentat prin vectorul de ”taţi”
(0,1,1,3,4,2,3). Mulţimea tuturor nodurilor aflate pe nivelul 2 este: (4p.)
a. {1, 2, 6} b. {2, 3} c. {4, 7} d. {4, 6, 7}
CAPITOLUL 11. BAC 2012 11.3. SESIUNEA DE TOAMNĂ 91
Problema 2
Se consideră graful neorientat cu şase noduri, reprezentat alăturat.
Numărul minim de muchii ce trebuie adăugate, astfel ı̂ncât ı̂n graful
obţinut fiecare nod să aparţină unui ciclu, este: (4p.)
a. 1 b. 2 c. 4 d. 5
Problema 3
Se consideră declararea alăturată, ı̂n care variabilele t1 şi t2 memorează
lungimile laturilor a două triunghiuri.
Scrieţi o expresie C/C++ care are valoarea 1 dacă şi numai dacă
triunghiul corespunzător variabilei t1 are perimetrul strict mai mare decât perimetrul triunghiului
corespunzător variabilei t2. (6p.)
Problema 4
Se consideră două şiruri de caractere a, de lungime na şi b, de lungime nb.
Şirul a este numit sufix al şirului b dacă na & nb şi subşirul lui b determinat de ultimele sale
na caractere coincide cu a.
În secvenţa de instrucţiuni de mai jos variabila i este de tip ı̂ntreg, iar variabila s memorează
un şir cu cel mult 20 de caractere.
Fără a utiliza alte variabile, scrieţi una sau mai multe instrucţiuni care pot ı̂nlocui punctele
de suspensie astfel ı̂ncât, ı̂n urma executării secvenţei obţinute, să se afişeze pe ecran, ı̂n ordinea
descrescătoare a lungimii, separate prin câte un spaţiu, toate sufixele şirului memorat ı̂n variabila
s, ca ı̂n exemplu.
Exemplu: pentru şirul elevi se afişează: elevi levi evi vi i
for(i=0;i<strlen(s);i++)
.................. (6p.)
Problema 5
Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (2¡n15) şi construieşte
ı̂n memorie un tablou bidimensional cu n linii şi n coloane ı̂n care:
toate elementele din prima coloană au valoarea 1;
ultima linie conţine, ı̂n ordine strict crescătoare, numerele naturale din intervalul [1, n];
oricare alt element este obţinut prin ı̂nsumarea celor două elemente vecine cu el, aflate pe
linia imediat următoare şi pe aceeaşi coloană cu el, respectiv pe aceeaşi linie cu el şi pe
coloana anterioară, ca ı̂n exemplu.
Programul afişează pe ecran tabloul obţinut, fiecare linie a tabloului pe
câte o linie a ecranului, elementele fiecărei linii fiind separate prin câte un
spaţiu.
Exemplu: pentru n=4 pe ecran se afişează tabloul alăturat.
(10p.)
Problema 1
Utilizând metoda backtracking se generează, ı̂n ordine lexicografică, toate şirurile de maximum 4
litere distincte din mulţimea {a, v, i, o, n}. Primele 5 şiruri generate sunt, ı̂n această ordine: a,
ai, ain, aino, ainv. Imediat după şirul avn se generează: (4p.)
Problema 2
Se consideră subprogramul f, definit alăturat.
Scrieţi valorile f(3,4) şi f(2,20). (6p.)
Problema 3
Se consideră subprogramul zero, cu doi parametri:
n, prin care primeşte o valoare naturală 2¡n¡50;
Problema 4
Fişierul bac.txt conţine pe prima linie un număr natural par n cu cel mult 3 cifre, iar pe
următoarea linie un şir de n numere naturale cu cel mult nouă cifre. Numerele din şir sunt
separate prin câte un spaţiu.
Se cere să se afişeze pe ecran mesajul Da dacă ı̂n şir există un element care să fie strict mai
mare decât jumătate dintre numerele din şir.
Dacă ı̂n şir nu se află o astfel de valoare, pe ecran se afişează mesajul Nu.
Pentru determinarea numărului cerut se utilizează un algoritm eficient din punctul de vedere
al memoriei şi al timpului de executare.
Exemplu: dacă fişierul bac.txt are conţinutul
6
8 34 34 34 5 34
atunci pe ecran se afişează Nu, iar dacă fişierul are conţinutul
8
1 5 6 12 3 12 12 9
atunci pe ecran se afişează Da.
a) Descrieţi ı̂n limbaj natural algoritmul utilizat, justificând eficienţa acestuia. (4p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris. (6p.)
Capitolul 12
BAC 2011
12.1.1 Subiectul I
Pentru itemul 1, scrieţi pe foaia de examen litera corespunzătoare răspunsului corect.
Problema 1
Indicaţi care dintre expresiile C/C++ de mai jos are valoarea 1 dacă şi numai dacă numărul
memorat ı̂n variabila ı̂ntreagă x aparţine reuniunii de intervale 3, 1 < 1, 3. (4p.)
Problema 2
Se consideră algoritmul alăturat, descris ı̂n pseu-
docod.
a. Scrieţi numerele care se afişează ı̂n urma executării
algoritmului, ı̂n ordine, dacă pentru n se citeşte valoarea 5,
iar pentru k se citeşte valoarea 2. (6p.)
b. Dacă pentru variabila k se citeşte valoarea 5, scrieţi
cea mai mică şi cea mai mare valoare care pot fi citite pen-
tru variabila n astfel ı̂ncât, ı̂n urma executării algoritmului,
ultimul număr care se afişează, pentru fiecare dintre aceste
valori, să fie 7. (6p.)
c. Scrieţi ı̂n pseudocod un algoritm care să conţină o
singură structură repetitivă ı̂n loc de două şi care să fie
echivalent cu cel dat. (4p.)
d. Scrieţi programul C/C++ corespunzător algoritmu-
lui dat. (10p.)
Problema 1
Numim pădure un graf neorientat ı̂n care fiecare componentă conexă a sa este un arbore. Orice
pădure cu cel puţin doi arbori este un graf care: (4p.)
a. are cicluri şi este conex b. are cicluri şi nu este conex
c. nu are cicluri şi este conex d. nu are cicluri şi nu este conex
93
CAPITOLUL 12. BAC 2011 12.1. SESIUNEA SPECIALĂ 94
Problema 2
Se consideră graful orientat cu 6 vârfuri, numerotate de la 1 la 6, şi mulţimea arcelor (1,4), (2,1),
(2,4), (2,6), (4,1), (4,6). Numărul de subgrafuri ale sale, fiecare având mulţimea arcelor (1,4),
(2,1), (2,4), (4,1), este: (4p.)
a. 2 b. 3 c. 4 d. 5
Problema 3
Se consideră graful neorientat cu 5 noduri, numerotate de la 1 la 5, reprezentat
prin listele de adiacenţă alăturate.
Enumeraţi nodurile care fac parte din componenta conexă a grafului dat care
are cele mai puţine noduri. (6p.)
Problema 4
În secvenţa de instrucţiuni de mai jos variabilele i şi j sunt de tip ı̂ntreg şi variabila A este de tip
tablou bidimensional cu 5 linii şi 5 coloane, numerotate de la 0 la 4, cu elemente numere ı̂ntregi.
Fără a utiliza alte variabile, scrieţi o instrucţiune care poate ı̂nlocui punctele de suspensie astfel
ı̂ncât, ı̂n urma executării secvenţei obţinute, tabloul memorat ı̂n variabila A să aibă elementele
din figura de mai jos. Înainte de executarea secvenţei toate elementele tabloului sunt nule.
for(i=0;i<5;i++)
for(j=0;j<5;j++)
.............. (6p.)
Problema 5
Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (2 & n & 20) şi apoi n
cuvinte distincte, fiecare fiind format din cel mult 20 de caractere, numai litere mici ale alfabetului
englez. La introducerea datelor, după fiecare cuvânt se tastează Enter. Programul afişează pe
ecran numărul de cuvinte dintre ultimele n-1 citite, care ı̂ncep cu primul cuvânt citit.
Exemplu: dacă n=5 şi cuvintele citite sunt:
bun
buncar
bunici
abundent
bunavoie
pe ecran se afişează 3 (deoarece numai cuvintele buncar, bunici şi bunavoie ı̂ncep cu bun).
(10p.)
Problema 1
Se consideră subprogramele recursive C1 şi C2, definite mai jos.
La apel, returnează valoarea celui mai mare divizor comun al celor două numere naturale
nenule primite ca parametri: (4p.)
a. numai C1 b. numai C2 c. at\ˆat C1 c\ˆat si C2 d. nici C1 nici C2
Scrieţi pe foaia de examen răspunsul pentru fiecare dintre cerinţele următoare.
CAPITOLUL 12. BAC 2011 12.2. SESIUNEA IUNIE - IULIE 95
Problema 2
Având la dispoziţie cinci mărgele de culori diferite, roşu, galben, verde, albastru, violet,
se utilizează metoda backtracking pentru a obţine toate posibilităţile de a forma şiruri de câte trei
mărgele, ştiind că ı̂n cadrul unui şir contează ordinea de asezare a mărgelelor.
Culorile mărgelelor, corespunzătoare primelor patru soluţii obţinute sunt, ı̂n această ordine:
(roşu, galben, verde), (roşu, galben, albastru), (roşu, galben, violet), (roşu,
verde, galben).
Scrieţi ultimele două soluţii generate, ı̂n ordinea obţinerii lor. (6p.)
Problema 3
Subprogramul inserare are doi parametri:
n, prin care primeşte un număr natural (2 & n & 20);
a, prin care primeşte un tablou unidimensional care memorează un şir de n numere naturale,
fiecare cu cel mult 4 cifre. Cel puţin un element al tabloului este număr par.
Subprogramul modifică tabloul astfel ı̂ncât după fiecare termen par al şirului inserează valoarea
2011 şi furnizează, tot prin parametrii n şi a, valorile actualizate ale datelor primite.
Scrieţi ı̂n limbajul C/C++ definiţia completă a subprogramului.
Exemplu: dacă n=7 şi a=(1, 4, 5, 3, 82, 6, 2) atunci, după apel,
n=11 şi a=(1, 4, 2011, 5, 3, 82, 2011, 6, 2011, 2, 2011). (10p.)
Problema 4
Se citesc de la tastatură două numere naturale s1 şi s2 (0 $ s1 & 18, 0 & s2 & 18) şi se cere scrierea
ı̂n fisierul BAC.TXT, fiecare pe câte o linie, ı̂n ordine strict crescătoare, a tuturor numerelor
naturale cu exact 5 cifre, pentru care suma primelor două cifre este egală cu s1, iar suma ultimelor
două cifre este egală cu s2. Pentru determinarea numerelor indicate se utilizează un algoritm
eficient din punct de vedere al timpului de executare.
Exemplu: dacă s1=8, iar s2=7, atunci 35725 este unul dintre numerele care respectă propri-
etatea cerută (3+5=8 si 2+5=7).
a) Descrieţi ı̂n limbaj natural algoritmul utilizat, justificând eficienţa acestuia. (4p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris. (6p.)
12.2.1 Subiectul I
Problema 1
Se consideră secvenţa de mai jos:
if (x+y>6)
if (x-y<3) cout<<1;
else cout<<2;
else cout<<3;
Valorile ı̂ntregi pozitive ale variabilelor x şi y pentru care se afişează valoarea 2 pot fi: (4p.)
a. x=1 şi y=4 b. x=4 şi y=1
c. x=5 şi y=2 d. x=5 şi y=3
CAPITOLUL 12. BAC 2011 12.2. SESIUNEA IUNIE - IULIE 96
Problema 2
Se consideră algoritmul alăturat, descris ı̂n pseu-
docod.
S-a notat cu x%y restul ı̂mpărţirii numărului natural x
la numărul natural nenul y.
a. Scrieţi numărul care se afişează ı̂n urma executării
algoritmului dacă pentru variabila a se citeşte valoarea 6,
iar pentru variabila b valoarea 11. (6p.)
b. Dacă pentru variabila a se citeşte valoarea 10 scrieţi
valoarea care poate fi citită pentru variabila b astfel ı̂ncât
ı̂n urma executării algoritmului să se afişeze numărul 52.
(4p.)
c. Scrieţi ı̂n pseudocod un algoritm care să NU folosească structura repetitivă cu test iniţial
şi care să fie echivalent cu cel dat. (6p.)
d. Scrieţi programul C/C++ corespunzător algoritmului dat. (10p.)
Problema 1
Se consideră variabila y, declarată alăturat. O instrucţiune de atribuire
corectă din punct de vedere sintactic este: (4p.)
a. y.a=y.b-’a’; b. y=(1,’a’,2,3);
c. y.s2.a=34; d. y(b)=’a’;
Problema 2
Numărul maxim de noduri de grad 0 pe care le poate avea un graf neorientat
cu 10 noduri şi 7 muchii este: (4p.)
a. 5 b. 6 c. 9 d. 10
Problema 3
În secvenţa de program alăturată variabila a memorează un
tablou bidimensional cu 10 linii şi 10 coloane, numerotate
de la 1 la 10, cu elemente numere ı̂ntregi, iar toate celelalte
variabile sunt ı̂ntregi.
Scrieţi valoarea sumei elementelor de pe diagonala secundară a tabloului construit ı̂n urma
executării acestei secvenţe. (6p.)
Problema 4
Se consideră graful orientat cu 5 vârfuri reprezentat prin matricea de adiacenţă
alăturată. Scrieţi mulţimea vârfurilor unui subgraf al acestuia care are un număr
maxim de vârfuri izolate. (6p.)
Problema 5
Scrieţi un program ı̂n limbajul C/C++ care citeşte de la tastatură un şir de cel mult 20 de
caractere (litere mari şi mici ale alfabetului englez), construieşte ı̂n memorie şi afişează pe ecran
un şir de caractere format din vocalele ce NU apar ı̂n şirul citit. Vocalele menţionate pot apărea
ı̂n şirul obţinut ı̂n orice ordine. Dacă şirul citit de la tastatură conţine toate vocalele, programul
afisează pe ecran mesajul SIRUL VID. Se consideră vocale literele
a, e, i, o, u, A, E, I, O, U.
Exemplu: dacă se citeşte textul fULminAnta o soluţie poate fi şirul EIOeou (10p.)
CAPITOLUL 12. BAC 2011 12.2. SESIUNEA IUNIE - IULIE 97
Problema 1
Utilizând metoda backtracking se generează toate valorile naturale formate cu cifre ale numărului
356 şi care sunt strict mai mici decât acesta. Primele cinci numere generate sunt, ı̂n această
ordine, 3, 33, 333, 335, 336. Scrieţi al câtelea număr generat este 5. (4p.)
a. 7 b. 9 c. 10 d. 15
Problema 2
Se consideră subprogramul f, definit alăturat. Scrieţi ce valori au
f(0), respectiv f(14). (6p.)
Problema 3
Subrogramul schimb are trei parametri:
n, prin care primeşte un număr natural (4¡n¡100);
v, prin care primeşte un tablou unidimensional care memorează un şir de n numere naturale,
fiecare având cel mult patru cifre;
k, un număr natural (1¡k¡n-1).
Subprogramul deplasează primele k elemente ale tabloului circular spre stânga, cu câte o poziţie,
şi restul elementelor circular spre dreapta, cu câte o poziţie, ca ı̂n exemplu. Tabloul modificat este
furnizat tot prin parametrul v.
Problema 4
Fişierul text bac.txt conţine un şir de cel puţin trei şi cel mult 100000000 de numere ı̂ntregi,
fiecare având cel mult 8 cifre. Numerele sunt separate prin câte un spaţiu.
Se consideră că un şir format din cel puţin trei termeni formează o progresie aritmetică dacă
diferenţa dintre oricare termen al acestuia şi cel aflat pe poziţia consecutivă ı̂n şir este constantă.
Se cere să se citească numerele din fişierul bac.txt şi să se afişeze pe ecran numărul maxim
de termeni ai unei secvenţe din şir, secvenţă care formează o progresie aritmetică.
Dacă nu există nicio astfel de secvenţă, se afişează pe ecran mesajul NU EXISTA.
Se utilizează un algoritm eficient din punct de vedere al timpului de executare şi al memoriei
folosite.
Exemplu: dacă fisierul conţine numerele
12.3.1 Subiectul I
Problema 1
Expresia C/C++
are valoarea 1 dacă şi numai dacă valoarea memorată de variabila reală x aparţine reuniunii de
intervale: (4p.)
a. , 10 < 5, b. 20, 10 < 5, 5
c. 20, 10 < 5, 5 d. 20, 10 < 5, 5
Problema 2
Se consideră algoritmul alăturat, descris ı̂n pseudocod.
S-a notat cu x%y restul ı̂mpărţirii numărului natural x la
numărul natural nenul y şi cu [z] partea ı̂ntreagă a numărului
real z.
a. Scrieţi numărul care se afişează ı̂n urma executării algorit-
mului dacă pentru variabila n se citeşte valoarea 1034, iar pentru
variabila m valoarea 1234. (6p.)
b. Scrieţi toate perechile distincte de valori naturale, de câte
două cifre fiecare, valori care pot fi citite pentru variabilele n
si m astfel ı̂ncât, ı̂n urma executării algoritmului, pentru fiecare
dintre acestea, numărul afişat să fie 86. (6p.)
c. Scrieţi ı̂n pseudocod un algoritm care să nu folosească
structuri repetitive şi care să fie echivalent cu cel dat. (4p.)
d. Scrieţi programul C/C++ corespunzător algoritmului dat. (10p.)
Pentru fiecare dintre itemii 1 şi 2 scrieţi pe foaia de examen litera corespunzătoare
răspunsului corect.
Problema 1
Se consideră graful orientat cu 6 vârfuri, numerotate de la 1 la 6, reprezentat
prin listele de adiacenţă alăturate. Două drumuri sunt distincte dacă diferă
prin cel puţin un arc.
Problema 2
Frunzele arborelui cu rădăcină, având 8 noduri, numerotate de la 1 la 8, reprezentat prin vectorul
”de taţi” (6,6,5,0,6,4,4,7) sunt: (4p.)
a. 1,2,3,8 b. 1,2,8 c. 3,7 d. 4,6,7
Problema 3
Structura cu numele CARTE permite memorarea unui număr real, reprezentând valoarea expri-
mată ı̂n euro a unei cărţi, a unui număr ı̂ntreg, reprezentând numărul de pagini ale cărţii, şi a
unui şir de caractere reprezentând titlul cărţii, format din cel mult 50 de caractere.
Scrieţi ı̂n limbajul C/C++ o definiţie a structurii menţionate şi declaraţi o variabilă x de acest
tip. Denumiţi sugestiv câmpurile acestei structuri. (6p.)
Problema 4
În secvenţa de program alăturată variabila a mem-
orează un şir cu cel mult 100 de caractere, iar vari-
abilele i si̧ k sunt de tip ı̂ntreg.
Scrieţi şirul afisat pe ecran ı̂n urma executării
secvenţei. (6p.)
Problema 5
Scrieţi un program C/C++ care citeşte de la tastatură două numere naturale n şi m (2 $ n & 24,
2 $ m & 24) şi construieste ı̂n memorie un tablou bidimensional cu n linii şi m coloane, ı̂n care
orice element aflat pe ultima linie sau pe ultima coloană are valoarea 1 şi oricare alt element este
egal cu ultima cifră a sumei celor două elemente alăturate lui, aflate pe aceeaşi linie şi pe coloana
din dreapta, respectiv pe aceeasi coloană şi pe linia următoare, ca ı̂n exemplu.
Programul afişează pe ecran tabloul obţinut, câte o linie a tabloului pe câte
o linie a ecranului, elementele fiecărei linii fiind separate prin câte un spaţiu.
(10p.)
Exemplu: pentru n=4 şi m=5 se afişează tabloul alăturat.
Problema 1
Utilizând metoda backtracking se generează ı̂n ordine crescătoare numere naturale de câte patru
cifre din mulţimea A={1,2,3,4,5}, numere care nu conţin două cifre impare alăturate. Primele opt
numere generate sunt, ı̂n această ordine, 1212, 1214, 1221, 1222, 1223, 1224, 1225, 1232. Numărul
de valori generate care au cifra miilor egală cu 2 şi cifra unităţilor egală cu 4 este: (4p.)
a. 20 b. 16 c. 12 d. 9
Problema 2
Scrieţi ce se afişează ı̂n urma apelului de mai jos pentru
subprogramul f, definit alăturat.
f(12345); (6p.)
CAPITOLUL 12. BAC 2011 12.3. SESIUNEA DE TOAMNĂ 100
Problema 3
Subprogramul inter are patru parametri:
na, nb prin care primeşte câte un număr natural
(0¡na¡100, 0¡nb¡100);
Problema 4
Fişierul BAC.TXT conţine un şir de cel puţin 11 şi cel mult un milion de numere naturale,
despărţite prin câte un spaţiu. Fiecare număr are cel puţin două şi cel mult nouă cifre. Primul
termen al şirului are numărul de ordine 1, al doilea are numărul de ordine 2 etc.
Se citeşte şirul din fişier şi se cere ca, utilizând un algoritm eficient din punct de vedere al
timpului de executare, să se determine şi să se afişeze pe ecran numărul de ordine al unui termen
al şirului care este precedat ı̂n fişier de un număr maxim de valori care au cifra zecilor egală cu
a sa. Dacă sunt mai mulţi termeni cu această proprietate, se afişează numărul de ordine doar al
unuia dintre ei.
Exemplu: dacă fişierul BAC.TXT conţine numerele
12 36 265
:
18 139 19 32 34 112 14 68
:
BAC 2010
13.1.1 Subiectul I
Pentru itemul 1, scrieţi pe foaia de examen litera corespunzătoare răspunsului corect.
Problema 1
Dintre expresiile C/C++ de mai jos, cea care are valoarea 1 dacă şi numai dacă numărul memorat
ı̂n variabila ı̂ntreagă x aparţine intervalului ı̂nchis [-5,5] este: (4p.)
Problema 2
Se consideră algoritmul alăturat descris ı̂n pseu-
docod.
S-a notat cu x%y restul ı̂mpărţirii numărului natural
x la numărul natural nenul y şi cu [z] partea ı̂ntreagă a
numărului real z.
a) Scrieţi numerele afişate dacă pentru variabila a se
citeste valoarea 5789. (6p.)
b) Scrieţi cel mai mare număr de patru cifre care poate
fi citit pentru variabila a astfel ı̂ncât, ı̂n urma executării
algoritmului, valoarea afişată pentru variabila ok să fie 1.
(4p.)
c) Scrieţi ı̂n pseudocod un algoritm, echivalent cu cel dat, ı̂n care să se ı̂nlocuiască structura
cât timp...execută cu o structură repetitivă de alt tip. (6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului dat. (10p.)
Problema 1
Pentru ca graful orientat cu 5 vârfuri, reprezentat ı̂n figura alăturată,
să devină graf tare conex, numărul minim de arce care trebuie adăugate
acestuia este: (4p.)
a. 1 b. 2 c. 3 d. 4
101
CAPITOLUL 13. BAC 2010 13.1. SESIUNEA SPECIALĂ 102
Problema 2
Se consideră arborele cu rădăcină, având 10 noduri, numerotate de la 1 la 10, reprezentat prin
vectorul de ”taţi” t=(2,5,1,1,0,3,3,7,4,6). Rădăcina arborelui este nodul numerotat cu: (4p.)
a. 0 b. 2 c. 5 d. 10
Problema 3
Se consideră variabila t, declarată alăturat, care memorează coordo-
natele, ı̂n planul xOy, ale vârfurilor A, B şi C ale unui triunghi.
Scrieţi o instrucţiune care iniţializează cu valoarea 0 coordonata
x a vârfului A al triunghiului respectiv. (6p.)
Problema 4
În secvenţa de instrucţiuni de mai jos, variabila p este de tip ı̂ntreg, iar variabila s memorează un
şir de cel mult 20 de caractere, numai litere mici ale alfabetului englez.
Scrieţi instrucţiunile care pot ı̂nlocui punctele de suspensie astfel ı̂ncât, ı̂n urma executării
secvenţei, să se afişeze pe ecran toate literele şirului memorat de variabila s, cu excepţia vocalelor
e şi i.
Literele se afişează ı̂n ordinea apariţiei lor ı̂n şir.
Exemplu: dacă şirul memorat ı̂n variabila s este
estetician, se va afişa sttcan. (6p.)
Problema 5
Într-un tablou bidimensional, cu elemente având valori numai ı̂n mulţimea {0,1}, numim linii
”complementare” două linii cu proprietatea că oricare două elemente ale acestora, aflate pe aceeaşi
coloană, sunt diferite.
Scrieţi un program C/C++ care citeste de la tastatură două numere naturale, m şi n (2 &
m & 20, 2 & n & 20), şi m n valori din mulţimea {0,1}, reprezentând elementele unui tablou
bidimensional cu m linii şi n coloane.
Programul afişează pe ecran numărul de linii ale tabloului care sunt ”comple-
mentare” cu ultima linie a acestuia.
Exemplu: dacă m=5, n=3, pentru tabloul alăturat se afişează pe ecran
valoarea 2. (10p.)
Problema 1
Algoritmul de generare a tuturor numerelor naturale formate din exact trei cifre, toate cifre impare,
poate fi similar cu algoritmul de generare a: (4p.)
a. aranjamentelor b. combinărilor
c. elementelor unui produs cartezian d. permutărilor
CAPITOLUL 13. BAC 2010 13.2. SESIUNEA IUNIE - IULIE 103
Problema 2
Se consideră subprogramul p, definit alăturat.
Scrieţi ce valori au p(-4), respectiv p(4). (6p.)
Problema 3
Subprogramul ordonare are doi parametri:
n, prin care primeste un număr natural (3n20);
a, prin care primeste un tablou unidimensional care memorează un şir de n numere naturale,
fiecare cu cel mult 4 cifre. Cel puţin doi termeni ai şirului sunt numere pare si cel puţin unul
este număr impar.
Subprogramul modifică tabloul astfel ı̂ncât termenii impari ai şirului să nu ı̂si schimbe poziţiile,
iar cei pari să formeze un subsir crescător, ca ı̂n exemplu.
Scrieţi ı̂n limbajul C/C++ definiţia completă a subprogramului.
Exemplu: dacă n=7 şi a=(1,4, 5, 3, 82, 6, 2) atunci, după apel,
a=(1, 2, 5, 3, 4, 6, 82). (10p.)
Problema 4
Pentru un număr natural nenul, n , se consideră suma
ı̂n care s-a notat cu [x] partea ı̂ntreagă a numărului real x şi k! 1 2 3 ... k 1 k.
a) Scrieţi un program C/C++ care citeste de la tastatură un număr natural nenul n (n¡1000) şi
determină, utilizând un algoritm eficient din punct de vedere al timpului de executare şi al mem-
oriei utilizate, valoarea sumei S(n) corespunzătoare numărului citit, apoi scrie valoarea obţinută
ı̂n fişierul BAC.TXT. (6p.)
Exemplu: pentru n=4 ı̂n fişier se scrie valoarea 5, calculată ca mai jos:
b) Descrieţi succint, ı̂n limbaj natural (3-4 rânduri), algoritmul utilizat la punctul a) si
justificaţi eficienţa acestuia. (4p.)
13.2.1 Subiectul I
Pentru itemul 1, scrieţi pe foaia de examen litera corespunzătoare răspunsului corect.
Problema 1
Se consideră definite trei variabile de tip int: x, y şi z. O expresie C/C++ care are valoarea 1
dacă şi numai dacă x, y şi z au valori identice este: (4p.)
a. x==y && x==z b. x==y==z
c. x==y || x==z || y==z d. !( x!=y && x!=z)
CAPITOLUL 13. BAC 2010 13.2. SESIUNEA IUNIE - IULIE 104
Problema 2
Se consideră algoritmul alăturat descris ı̂n pseu-
docod.
a) Scrieţi numărul afişat ı̂n urma executării algoritmului
dacă pentru n se citeste valoarea 6. (6p.)
b) Scrieţi o valoare care poate fi citită pentru n astfel
ı̂ncât să se afişeze valoarea 55. (4p.)
c) Scrieţi ı̂n pseudocod un algoritm, echivalent cu cel
dat, care să conţină o singură structură repetitivă. (6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului
dat. (10p.)
Pentru fiecare dintre itemii 1 şi 2 scrieţi pe foaia de examen litera corespunzătoare
răspunsului corect.
Problema 1
Se consideră un graf neorientat cu 6 noduri şi 9 muchii. Numărul de muchii ce trebuie adăugate,
pentru ca graful obţinut să fie complet, este: (4p.)
a. 5 b. 6 c. 12 d. 15
Problema 2
Se consideră secvenţa de instrucţiuni alăturată, ı̂n care vari-
abilele i şi j sunt de tip ı̂ntreg, iar variabila s poate memora
un şir de cel mult 20 de caractere.
Şirul afişat ı̂n urma executării secvenţei este: (4p.)
a. aureatbacal b. bacalaureab c. taealaureat d. taerualacab
Problema 3
Se consideră un arbore cu rădăcină având 6 noduri, numerotate de la 1 la 6, şi muchiile [1, 2], [1,
3], [2, 4], [3, 5], [3, 6]. Considerând că rădăcina este nodul numerotat cu 1 şi că ea este situată pe
nivelul 0 al arborelui, scrieţi toate nodurile situate pe nivelul 2 al arborelui dat. (6p.)
Problema 4
Variabilele e1 şi e2, declarate alăturat, memorează numele şi data nas-
terii pentru câte un elev.
Ştiind că cei doi elevi sunt născuţi ı̂n ani diferiţi, scrieţi secvenţa de
instrucţiuni care afişează pe ecran numele elevului de vârstă mai mare.
(6p.)
CAPITOLUL 13. BAC 2010 13.2. SESIUNEA IUNIE - IULIE 105
Problema 5
Scrieţi un program C/C++ care citeste de la tastatură un număr natural, n (2n20), si construieste
ı̂n memorie tabloul bidimensional cu n linii şi n coloane, având proprietăţile:
toate elementele situate pe diagonala principală sunt nule;
fiecare linie conţine, ı̂ncepând cu diagonala principală, de la dreapta la stânga, un şir strict
crescător de numere consecutive, iar ı̂ncepând cu diagonala principală, de la stânga la
dreapta, tot un şir strict crescător de numere consecutive.
Programul afişează pe ecran tabloul construit, fiecare linie a tabloului pe câte o
linie a ecranului, cu elementele aflate pe aceeaşi linie separate prin câte un spaţiu.
Exemplu: dacă n=5 se afişează pe ecran tabloul alăturat. (10p.)
Problema 1
Utilizând metoda backtracking se generează toate numerele pare cu câte trei cifre, cifre care
aparţin mulţimii 7, 8, 1, 6, 2, 3. Primele 4 soluţii generate sunt, ı̂n această ordine: 778, 776, 772,
788.
Cea de a 8-a soluţie generată este: (4p.)
a. 712 b. 716 c. 718 d. 782
Problema 2
Se consideră subprogramul f, definit alăturat. Scrieţi două
numere naturale din intervalul deschis (20,30), care pot fi
memorate ı̂n variabilele ı̂ntregi x1, şi respectiv x2, astfel ı̂ncât
valoarea lui f(x1,3) să fie 29, iar valoarea lui f(3,x2) să fie 1.
(6p.)
Problema 3
Se consideră şirul s, construit după regula alăturată.
Subprogramul sir primeşte prin parametrul n un număr
natural (3¡n¡20) şi furnizează prin parametrul a un tablou
unidimensional care memorează primii n termeni ai şirului s, definit după regula de mai sus,
astfel ı̂ncât numerele impare să ocupe primele poziţii ı̂n tablou, iar cele pare să fie memorate ı̂n
continuarea celor impare.
Scrieţi definiţia completă a subprogramului sir.
Exemplu: dacă n=6, primii sase termeni ai şirului sunt 1, 1, 2, 5, 13, 34, iar, după apel,
tabloul construit poate fi (1,1,5,13,2,34). (10p.)
Problema 4
Fişierul bac.in conţine pe prima linie un număr natural n (3¡n¡1000), iar pe următoarea linie, un
şir de n numere naturale distincte, de cel mult nouă cifre fiecare. Numerele din şir sunt separate
prin câte un spaţiu şi cel puţin două dintre ele au ultima cifră egală cu 5.
a) Scrieţi un program C/C++ care citeste toate numerele din fişier si, utilizând un algoritm
eficient din punct de vedere al timpului de executare şi al memoriei utilizate, determină si afişează
pe ecran cele mai mari două numere din şir care au ultima cifră egală cu 5. Numerele determinate
sunt afişate ı̂n ordine crescătoare, separate printr-un spaţiu. (6p.)
CAPITOLUL 13. BAC 2010 13.3. SESIUNEA DE TOAMNĂ 106
13.3.1 Subiectul I
Pentru itemul 1, scrieţi pe foaia de examen litera corespunzătoare răspunsului corect.
Problema 1
Indicaţi care dintre expresiile C/C++ de mai jos are valoarea 1 dacă şi numai dacă numărul
natural memorat ı̂n variabila ı̂ntreagă n este divizibil cu 2 şi cu 7. (4p.)
a. !( (n%2==1) || (n%7!=0) ) b. (n%2==0) && (n%7!=0)
c. (n%2==0) || !(n%7==0) d. (n%7==2) && (n%2==7)
Problema 2
Se consideră algoritmul alăturat descris ı̂n pseu-
docod:
S-a notat cu x%y restul ı̂mpărţirii numărului natural
x la numărul natural nenul y şi cu [z] partea ı̂ntreagă a
numărului real z.
a) Scrieţi numărul afişat dacă pentru variabila n se
citeste valoarea 64598. (6p.)
b) Scrieţi toate numerele de exact trei cifre care pot fi
citite pentru variabila n astfel ı̂ncât, pentru fiecare dintre
acestea, numărul afişat ı̂n urma executării algoritmului să
fie 24. (4p.)
c) Scrieţi ı̂n pseudocod un algoritm, echivalent cu cel dat, ı̂n care să se ı̂nlocuiască structura
repetă...până când cu o structură repetitivă de alt tip. (6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului dat. (10p.)
Problema 1
Se consideră declararea alăturată, ı̂n care variabila FIG memorează coor-
donatele, ı̂n planul xOy, ale centrului unui cerc, precum şi lungimea razei
acestuia. O expresie C/C++ care are valoarea 1 dacă şi numai dacă centrul
cercului se află pe prima bisectoare a sistemului de coordonate al planului
xOy este: (4p.)
a. centru(x)==centru(y) b. FIG.cerc.x==FIG.cerc.y
c. FIG(x)==FIG(y) d. FIG.x==FIG.y
Problema 2
CAPITOLUL 13. BAC 2010 13.3. SESIUNEA DE TOAMNĂ 107
Problema 3
În secvenţa de instrucţiuni de mai jos, variabilele i şi j sunt de tip ı̂ntreg şi se consideră că
variabila A memorează elementele, iniţial nule, ale unui tablou bidimensional, cu 5 linii şi 5
coloane, numerotate de la 0 la 4.
Fără a utiliza şi alte variabile decât cele menţionate mai sus, scrieţi o instrucţiune care poate
ı̂nlocui punctele de suspensie astfel ı̂ncât, ı̂n urma executării secvenţei, tabloul memorat ı̂n variabila
A să aibă elementele din figura de mai jos. (6p.)
Problema 4
Se consideră arborele cu rădăcină, având 10 noduri, numerotate de la 1 la 10, cu vectorul de ”taţi”
t=(3,3,8,0,8,9,9,4,4,9). Enumeraţi toate nodurile arborelui care au exact doi fii. (6p.)
Problema 5
Se consideră un text cu cel mult 100 de caractere, format din cuvinte şi numere, separate prin
unul sau mai multe spaţii. Cuvintele sunt formate numai din litere ale alfabetului englez. Toate
numerele sunt reale, pozitive şi sunt formate numai din parte ı̂ntreagă sau din parte ı̂ntreagă şi
parte fracţionară, separate prin punctul zecimal (.).
Scrieţi un program C/C++ care citeste de la tastatură textul, pe care ı̂l transformă, eliminând
din componenţa sa toate numerele care au parte fracţionară. Programul afişează apoi pe ecran
textul obţinut. (10p.)
Exemplu: dacă textul citit este
Problema 1
Se consideră subprogramul p, definit alăturat.
Valoarea lui p(210, 49) este: (4p.)
a. 1 b. 2 c. 3 d. 4
Problema 2
Având la dispoziţie cinci flori diferite, lalea, narcisă, mac, frezie, garoafă, se utilizează
metoda backtracking pentru a obţine toate posibilităţile de a forma un aranjament floral, sti-
ind că se folosesc toate cele cinci flori şi contează ordinea de asezare a acestora. Primele patru
soluţii obţinute sunt, ı̂n această ordine: (lalea, narcisă, mac, frezie, garoafă), (lalea,
narcisă, mac, garoafă, frezie), (lalea, narcisă, frezie, mac, garoafă), (lalea,
narcisă, frezie, garoafă, mac).
Scrieţi ultimele două soluţii generate, ı̂n ordinea obţinerii lor. (6p.)
Problema 3
Subprogramul tablou are trei parametri:
n şi k, prin care primeste câte un număr natural (3 & n & 20, 2 & k & 10);
a, prin care furnizează un tablou unidimensional care memorează un şir crescător de n k
termeni, din mulţimea primelor n numere naturale nenule, fiecare astfel de număr fiind ı̂n
şir de exact k ori.
Problema 4
Fişierul BAC.TXT conţine, ı̂n ordine crescătoare, cel puţin două şi cel mult 10000 de numere
naturale. Numerele sunt separate prin câte un spaţiu şi au cel mult 9 cifre fiecare.
Cel puţin un număr din fişier este par.
a) Scrieţi un program C/C++ care citeste toate numerele din fişier si, printr-un algoritm
eficient din punct de vedere al timpului de executare şi al memoriei utilizate, determină si afişează
pe ecran, ı̂n ordine strict crescătoare, separate prin câte un spaţiu, toate numerele pare care apar
ı̂n fişier. Fiecare număr se va afişa o singură dată. (6p.)
Exemplu: dacă fişierul are conţinutul de mai jos
1 1 2 2 2 7 10 10 10 10 24
pe ecran se afişează, ı̂n această ordine, numerele 2 10 24.
b) Descrieţi ı̂n limbaj natural (aproximativ 3-4 rânduri) algoritmul utilizat la punctul a) şi
justificaţi eficienţa acestuia. (4p.)
Part II
Indicaţii de rezolvare
109
Capitolul 14
BAC 2022
14.1.1 Subiectul I
1d 2b 3c 4a 5c 5 4p.
110
CAPITOLUL 14. BAC 2022 14.1. SESIUNEA - SIMULARE 111
2. Pentru răspuns corect 6p. Se acordă câte 2p. pentru fiecare dintre cele
trei noduri conform cerinţei (oricare dintre
nodurile 1, 3, 4, 6).
3. Răspuns corect 6p. (*) Se acordă câte 1p. pentru fiecare aspect
-acces la un element al tabloului 1p. (poziţionare a elementelor care compun un
-verificare a proprietăţii cerute (*) 4p. romb, valoare comună a elementelor care com-
-corectitudine globală a secvenţei 1p. pun un romb, algoritm de bază pentru verifi-
carea unei proprietăţi, elemente suport verifi-
cate) conform cerinţei.
3.1. Pentru subprogram corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect
- antet subprogram (*) 3p. al antetului (structură, parametri de intrare,
- determinare a valorii cerute (**) 6p. parametru de ieşire) conform cerinţei.
- declarare a tuturor variabilelor locale, (**) Se acordă câte 2p. pentru fiecare as-
tratare a cazului 0, corectitudine pect (identificare a unui număr corespunzător
globală a subprogramului 1p. restului cerut, algoritm de bază pentru deter-
minarea ultimei/celei mai mari valori cu o an-
umită proprietate dintr-o serie, valori suport
cu proprietatea cerută identificate) conform
cerinţei.
2. Pentru program corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect
- declarare a unei variabile care să specific (identificare a unui cuvânt ı̂n cadrul
memoreze un şir de caractere 1p. unui şir, identificare a unui cuvânt egal cu un
- citire a datelor ı̂n ordinea indicată 1p. cuvânt dat x, identificare a unui nume core-
- determinare a cuvintelor/numelor spunzător unui prenume, tratare a cazului ı̂n
cerute (*) 6p. care cuvântul x dat corespunde unui nume,
- tratare a cazului NU şi afişare fie a caractere utile ı̂ntr-un nume, cuvinte suport
numelor ı̂n formatul cerut, fie a identificate) conform cerinţei.
mesajului indicat 1p.
- declarare a variabilelor simple,
corectitudine globală a programului 1p
3. a) Pentru răspuns corect 2p. (*) Se acordă punctajul chiar dacă algoritmul
- coerenţă a descrierii algoritmului (*) 1p. ales nu este eficient.
- justificare a elementelor de eficienţă 1p.
CAPITOLUL 14. BAC 2022 14.2. SESIUNEA SPECIALĂ 112
3. b) Pentru program corect 8p. (**) Se acordă numai 3p. dacă algoritmul este
- operaţii cu fişiere: declarare, pregătire principial corect, dar nu oferă rezultatul cerut
ı̂n vederea scrierii, scriere ı̂n fişier 1p. pentru toate seturile de date de intrare.
- determinare a valorii cerute (*),(**) 5p. (***) Se acordă punctajul numai pentru un
- utilizare a unui algoritm eficient (***) 1p. algoritm cel mult liniar care utilizează eficient
- declarare a variabilelor, citire a memoria.
2
datelor, corectitudine globală a progra- O soluţie posibilă are ı̂n vedere că 45 3
mului 1p. 5 şi parcurge numerele naturale din inter-
valul 2, n, determinând pentru fiecare număr
curent k numărul t de apariţii ale lui 3, re-
spectiv numărul c de apariţii ale lui 5, ı̂n de-
scompunerea ı̂n factori primi a lui k, şi re-
alizând pe parcurs suma tuturor valorilor t
determinate (st), respectiv suma tuturor valo-
rilor c determinate (sc). Valoarea cerută este
min st©2, sc.
O altă soluţie posibilă determină valorile st şi
sc astfel:
st=[n/3]+[n/32]+[n/33]+[n/34]+ ...+0
sc=[n/5]+[n/52]+[n/53]+[n/54]+ ...+0
Valoarea cerută este min st©2, sc.
14.2.1 Subiectul I
1d 2c 3a 4c 5b 5 4p.
1. a) Răspuns corect: 37 23 6p. Se acordă numai 3p. dacă numai una din-
tre valori este conform cerinţei sau numai 4p.
dacă, pe lângă valorile cerute, sunt scrise şi
alte valori.
1. b) Pentru răspuns corect 6p. Se acordă câte 3p. pentru fiecare număr con-
form cerinţei (valori de forma xyz cu propri-
etatea că xy şi yz sunt numere prime).
1. c) Pentru program corect 10p. (*) Se acordă numai 2p. dacă doar una dintre
-declarare a variabilelor 1p. instrucţiunile de decizie este conform cerinţei.
-citire a datelor 1p.
-afişare a datelor 1p.
-instrucţiuni de decizie (*) 3p.
-instrucţiune repetitivă 2p.
-atribuiri 1p.
-corectitudine globală a programului 1p.
CAPITOLUL 14. BAC 2022 14.2. SESIUNEA SPECIALĂ 113
1. d) Pentru algoritm pseudocod corect 6p. (*) Se acordă punctajul chiar dacă algorit-
-utilizare a unei structuri repetitive cu mul obţinut nu este echivalent cu cel dat.
test iniţial (*) 2p. Se va puncta orice formă de structură repet-
-expresie logică pentru test iniţial itivă conform cerinţei (cât timp...execută,
ı̂n secvenţa obţinută prin ı̂nlocuire, while...do etc.).
conform cerinţei 2p.
-algoritm complet, corectitudine
globală a algoritmului 1p.
2. Răspuns corect: 6p. Se acordă numai 3p. dacă s-au precizat
[1,2], [1,3], [1,5], nodurile/muchiile unui subgraf complet dar
[2,3], [2,5], [3,5] care are 3 noduri, şi numai 4p. dacă s-au
precizat doar nodurile unui subgraf conform
cerinţei.
3. Pentru răspuns corect 6p. (*) Se acordă câte 2p. pentru fiecare as-
-acces la un câmp al unei ı̂nregistrări 1p. pect specific (algoritm de bază pentru deter-
-determinare a sumei cerute (*) 4p. minarea sumei unei serii de valori, valori su-
-corectitudine globală a secvenţei 1p. port ı̂nsumate) conform cerinţei.
3.1. Pentru subprogram corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect
-antet subprogram (*) 3p. al antetului (structură, parametru de intrare,
-determinare a valorilor cerute (**) 6p. parametri de ieşire) conform cerinţei.
-declarare a tuturor variabilelor locale, (**) Se acordă câte 1p. pentru fiecare as-
corectitudine globală a subprogramului 1p. pect (identificare a unor perechi de valori
corespunzătoare produsului cerut, algoritm de
bază pentru determinarea unei prime apariţii
a unei valori sau perechi / a unei valori
minime ı̂ntr-o serie, perechi de valori suport
verificate/obţinute pentru determinarea lui x
minim, valori strict mai mari decât 1, ordine a
valorilor x şi y, tratare caz 0) conform cerinţei.
3.2. Pentru program corect 10p. (*) Se acordă câte 2p. pentru fiecare aspect
-declarare a unei variabile care să mem- specific (algoritm de bază de deplasare spre
oreze un tablou bidimensional 1p. stânga, ı̂n memorie, a unor elemente de pe
-citire a datelor 1p. o linie, identificare a unui element aflat pe
-modificare a tabloului (*) 6p. diagonala principală, elemente suport elimi-
-afişare a unui tablou ı̂n formatul cerut 1p. nate/păstrate) conform cerinţei.
-declarare a variabilelor de tip simplu,
corectitudine globală a programului 1p
3.3. a) Pentru răspuns corect 2p. (*) Se acordă punctajul chiar dacă algoritmul
-descriere coerentă a algoritmului (*) 1p. ales nu este eficient.
-justificare a elementelor de eficienţă 1p.
CAPITOLUL 14. BAC 2022 14.3. SESIUNEA IUNIE - IULIE 114
3.3. b) Pentru program corect 8p. (**) Se acordă numai 3p. dacă algoritmul este
-operaţii cu fişiere: declarare, pregătire principial corect, dar nu oferă rezultatul cerut
ı̂n vederea citirii, citire din fişier 1p. pentru toate seturile de date de intrare.
-determinare a valorii cerute (*),(**) 5p. (***) Se acordă punctajul numai pentru un al-
-utilizare a unui algoritm eficient (***) 1p. goritm liniar care utilizează eficient memoria.
-declarare a variabilelor, afişare a O soluţie posibilă parcurge datele din fişier
datelor, corectitudine globală a progra- memorând ultimele două valori citite (fie ele x,
mului 1p. y), lungimea secvenţei curente de valori egale
(fie ea ny) şi lungimea secvenţei progresive
curente (lgcrt); pentru fiecare pereche (x,y)
pentru care x=y se incrementează ny; la fi-
nalul fiecărei secvenţe de valori egale (xneqy),
dacă ny=x se actualizează corespunzător lgcrt
şi, după caz, lungimea maximă cerută, iar al-
tfel, dacă ny¡x, se reiniţializează lgcrt cu 0.
Pentru ultima secvenţă de valori egale se ac-
tualizează datele la final.
Corectitudinea globală vizează structura, sintaxa, alte aspecte neprecizate ı̂n barem.
14.3.1 Subiectul I
1c 2d 3a 4b 5c 5 4p.
1. d) Pentru algoritm pseudocod corect 6p. (*) Se acordă punctajul chiar dacă algoritmul
-utilizare a unei structuri repetitive cu obţinut nu este echivalent cu cel dat.
test final (*) 2p. Se va puncta orice formă de structură repet-
-aspecte specifice ale secvenţei obţinute itivă conform cerinţei (repetă...până când,
prin ı̂nlocuire, conform cerinţei (**) 3p. do...while, repetă...cât timp, execută...până
-algoritm complet, corectitudine când, execută...cât timp etc.).
globală a algoritmului 1p. (**) Se acordă numai 2p. dacă doar unul din-
tre aspectele specifice (condiţie de echivalenţă
pentru prima iteraţie, expresie logică pentru
test final) este conform cerinţei.
2. Răspuns corect 6p. Se acordă câte 3p. pentru fiecare dintre cele
două valori conform cerinţei (oricare dintre
numerele 2022, 2023, 2024, 2025).
3. Pentru răspuns corect 6p. Se acordă câte 2p. pentru fiecare aspect
(identificare a unui cuvânt ı̂n cadrul unui şir,
copiere a unui şir ı̂ntr-un alt şir/concatenare
a două şiruri, secvenţe suport copiate ı̂n şirul
destinaţie) conform cerinţei.
1. Pentru subprogram corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect
-antet al subprogramului (*) 2p. al antetului (structură, parametru de intrare-
-determinare a valorii cerute (**) 6p. ieşire) conform cerinţei.
-furnizare a rezultatului prin (**) Se acordă câte 1p. pentru fiecare as-
parametrul indicat 1p. pect (identificare a unei cifre, identificare a
-declarare a tuturor variabilelor locale, unei perechi de cifre de pe poziţii consecu-
corectitudine globală a subprogramului 1p. tive, ı̂nlocuire a unei cifre, secvenţe suport
ı̂nlocuite, ordine a cifrelor, secvenţe suport
păstrate - inclusiv cifrele nule de la finalul
numărului) conform cerinţei.
2. Pentru program corect 10p. (*) Se acordă câte 1p. pentru fiecare as-
-declarare a unei variabile care să mem- pect specific (identificare a două parcele vecine
oreze un tablou bidimensional 1p. pentru cel puţin unul dintre cazurile de plasare
-citire a elementelor tabloului 1p. a acestora, algoritm de bază pentru deter-
-determinare a valorii cerute (*) 6p. minarea unei valori minime dintr-o serie de
-afişare a datelor 1p. maximum patru, parcele vecine suport pen-
-declarare a variabilelor simple, citire a tru determinarea minimului - pentru toate
datelor simple, corectitudine globală a cazurile particulare, identificare a unei parcele
programului 1p. care se ı̂nnisipează, algoritm de bază pentru
ı̂nsumarea unei serii de valori, valori suport
ı̂nsumate) conform cerinţei.
3. a) Pentru răspuns corect 2p. (*) Se acordă punctajul chiar dacă algoritmul
-descriere coerentă a algoritmului (*) - 1p. ales nu este eficient.
justificare a elementelor de eficienţă 1p.
CAPITOLUL 14. BAC 2022 14.4. SESIUNEA DE TOAMNĂ 116
3. b) Pentru program corect 8p. (**) Se acordă numai 3p. dacă algoritmul este
-operaţii cu fişiere: declarare, pregătire principial corect, dar nu oferă rezultatul cerut
ı̂n vederea citirii, citire din fişier 1p. pentru toate seturile de date de intrare.
-determinare a valorii cerute (*),(**) 5p. (***) Se acordă punctajul numai pentru un al-
-utilizare a unui algoritm eficient (***) 1p. goritm liniar care utilizează eficient memoria.
-declarare a variabilelor, afişare a Se memorează ultimele două valori citite, ı̂n
datelor, corectitudine globală a progra- această ordine, ant şi crt, precum şi numărul
mului 1p. cerut, nr.
O soluţie posibilă iniţializează numărul ant
cu 0 şi parcurge datele din fişier citind val-
oarea curentă crt (eventual cât timp crt&y),
incrementând numărul nr pentru fiecare val-
oare distinctă din şir (crtjant) din intervalul
cerut (crt'x şi crt&y); valoarea ant se actual-
izează la fiecare pas.
Corectitudinea globală vizează structura, sintaxa, alte aspecte neprecizate ı̂n barem.
14.4.1 Subiectul I
1b 2a 3d 4c 5b 5 4p.
3. Pentru rezolvare corectă 6p. (*) Se acordă numai 2p. dacă a fost tratat con-
-accesul la un câmp al unei ı̂nregistrări 1p. form cerinţei un singur caz, numai 3p. dacă
-tratare a tuturor cazurilor, conform au fost tratate conform cerinţei numai două
cerinţei (*) 4p. cazuri.
-corectitudinea globală a secvenţei 1p.
1. Pentru subprogram corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect
-antet subprogram (*) 3p. al antetului (structură, parametri de intrare,
-determinare a valorii cerute (**) 6p. parametru de ieşire) conform cerinţei.
-declarare a tuturor variabilelor locale, (**) Se acordă câte 2p. pentru fiecare as-
corectitudine globală a subprogramului 1p. pect (acces la o cifră a unui număr, or-
dine a cifrelor numărului obţinut, cifre suport
ı̂nlocuite/păstrate - inclusiv a cifrelor nule de
la finalul numărului) conform cerinţei.
2. Pentru program corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect
-declarare a unei variabile care să specific (acces la un caracter al unui şir, iden-
memoreze un şir de caractere 1p. tificare a unei vocale/consoane, algoritm de
-citire a datelor 1p. bază pentru determinarea primei valori cu o
-determinare a şirului conform formei anumită proprietate dintr-o serie/a unei vo-
codificate (*) 6p. cale prietene, ı̂nlocuire a unui caracter ı̂ntr-un
-afişare a datelor 1p. şir, caractere suport ı̂nlocuite/păstrate, trans-
-declarare a variabilelor de tip simplu, formare ı̂n memorie) conform cerinţei.
corectitudine globală a programului 1p.
3. a) Pentru răspuns corect 2p. (*) Se acordă punctajul chiar dacă algoritmul
-descriere coerentă a algoritmului (*) 1p. ales nu este eficient.
-justificare a elementelor de eficienţă 1p.
3. b) Pentru program corect 8p. (**) Se acordă numai 3p. dacă algoritmul este
-operaţii cu fişiere: declarare, pregătire principial corect, dar nu oferă rezultatul cerut
ı̂n vederea citirii, citire din fişier 1p. pentru toate seturile de date de intrare.
-determinare a valorilor cerute (*),(**) 5p. (***) Se acordă punctajul numai pentru un al-
-utilizare a unui algoritm eficient (***) 1p. goritm liniar care utilizează eficient memoria.
-declarare a variabilelor, afişare a O soluţie posibilă parcurge datele din fişier
datelor, corectitudine globală a progra- şi memorează ı̂n variabilele x şi y ul-
mului 1p. timii doi termeni citiţi; dacă x%2 j
y%2, iniţializează lungimea secvenţei curente,
iar dacă x%2 y%2, incrementează
lungimea secvenţei curente şi actualizează,
după caz, lungimea maximă şi incrementează
sau iniţializează numărul secvenţelor cerute.
Capitolul 15
BAC 2021
15.1.1 Subiectul I
1c 2b 3a 4c 5d 5 4p.
1. a) Răspuns corect: **** 6p. Se acordă numai 3p. dacă s-au scris 5 sau doar
3 simboluri *.
1. b) Pentru răspuns corect 6p. Se acordă câte 3p. pentru fiecare dintre cele
două numere conform cerinţei (oricare două
dintre numerele 1, 157, 158).
1. c) Pentru program corect 10p. (*) Se acordn̆umai 1p. dacă doar una dintre
-declarare variabile 1p. instrucţiunile de decizie este conform cerinţei.
-citire date 1p.
-afişare date 1p.
-instrucţiuni de decizie (*) 2p.
-instrucţiune repetitivă 2p.
-atribuiri precizate ı̂n algoritmul dat 1p.
-implementare a operaţiei de
interschimbare 1p.
26
-corectitudine globală a programului 1p.
1. d) Pentru algoritm pseudocod corect 6p. (*) Se acordă numai 2p. dacă algoritmul
-echivalenţă a prelucrării realizate, are o structură repetitivă conform cerinţei,
conform cerinţei (*) 5p. principial corectă, dar nu este echivalent cu
-corectitudine globală a algoritmului 1p. cel dat.
26
Corectitudinea globală vizează structura, sintaxa, alte aspecte neprecizate ı̂n barem.
118
CAPITOLUL 15. BAC 2021 15.2. SESIUNEA IUNIE - IULIE 119
3.1. Pentru subprogram corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect
-antet subprogram (*) 3p. al antetului (structură, parametri de intrare,
-determinare a valorii cerute (**) 6p. parametru de ieşire) conform cerinţei.
-declarare a tuturor variabilelor locale, 1p. (**) Se acordă câte 1p. pentru fiecare aspect
corectitudine globală a subprogramului (identificare a unei cifre pare/impare, succe-
siune de cifre obţinute ı̂n ordinea parcurgerii
stânga-dreapta, succesiune de cifre obţinute
ı̂n ordinea parcurgerii dreapta-stânga, identi-
ficare a unei cifre comune / distincte, cifre su-
port / numere formate din cifrele suport ver-
ificate, tratare a cazului ı̂n care nu există cifre
impare ı̂n niciun număr) conform cerinţei.
2. Pentru program corect 10p. (*) Se acordă câte 1p. pentru fiecare as-
-declarare a unei variabile care să 1p. pect specific (identificare a unui element sit-
memoreze un tablou bidimensional 1p. uat pe linia cerută ı̂n stânga diagonalei prin-
-citire a datelor 6p. cipale, identificare a unui element situat pe
-transformare a tabloului conform 1p. coloana cerută deasupra diagonalei principale,
cerinţei (*) 1p plasare a unor elemente de pe linia sursă pe
-afişare a datelor coloana destinaţie, plasare a unor elemente de
-declarare a variabilelor simple, corec- pe coloana sursă pe linia destinaţie, valori su-
titudine globală a programului port deplasate/nemodificate, transformare ı̂n
memorie) conform cerinţei.
3. a) Pentru răspuns corect 2p. (*) Se acordă punctajul chiar dacă algoritmul
-coerenţă a descrierii algoritmului (*) 1p. ales nu este eficient.
-justificare a elementelor de eficienţă 1p.
3. b) Pentru program corect 8p. (**) Se acordă numai 3p. dacă algoritmul este
-operaţii cu fişiere: declarare, pregătire 1p. principial corect, dar nu oferă rezultatul cerut
ı̂n vederea scrierii, scriere ı̂n fişier pentru toate seturile de date de intrare.
-determinare a valorii cerute (*),(**) 5p. (***) Se acordă punctajul numai pentru un al-
-utilizare a unui algoritm eficient (***) 1p. goritm liniar care utilizează eficient memoria.
-declarare a variabilelor, citire a 1p. O soluţie posibilă determină valoarea lui n,
datelor, corectitudine globală a progra- corespunzătoare termenului fn y, pe baza
mului expresiei n y x©2; se generează ter-
menii şirului mai mici decât y pe baza relaţiei
fn x y 2 n 1, unde x, y şi n se actu-
alizează corespunzător, la fiecare pas.
O altă soluţie posibilă nu utilizează deloc val-
oarea lui x, ci deduce formula termenului gen-
eral ca fiind fn 1 n n 1 şi determină val-
oarea lui n corespunzătoare termenului fn y
2
rezolvând ecuaţia n n y 1 0; se
generează termenii fn ai şirului pe baza for-
mulei deduse, unde n se actualizează core-
spunzător, la fiecare pas.
15.2.1 Subiectul I
1a 2d 3d 4b 5c 5 4p.
1. a) Răspuns corect: 1111121121 6p. Se acordă numai 1p. dacă doar prima cifră
este conform cerinţei, numai 2p. dacă doar
primele două cifre sunt conform cerinţei, nu-
mai 3p. dacă doar primele patru cifre sunt
conform cerinţei, numai 5p. dacă doar primele
şapte cifre sunt conform cerinţei.
1. b) Pentru răspuns corect 6p. Se acordă câte 3p. pentru fiecare dintre cele
două numere conform cerinţei (6, 15).
1. c) Pentru program corect 10p. (*) Se acordă numai 1p. dacă doar una dintre
-declarare a variabilelor 1p. instrucţiunile de decizie este conform cerinţei.
-citire a datelor 1p.
-afişare a datelor 1p.
-instrucţiuni de decizie (*) 2p.
-instrucţiune repetitivă 2p.
-implementare a operaţiei de
interschimbare 1p.
-atribuiri precizate ı̂n algoritmul dat 1p.
-corectitudine globală a programului 1p.
1. d) Pentru algoritm pseudocod corect 6p. (*) Se acordă punctajul chiar dacă algoritmul
-utilizare a unei structuri repetitive cu obţinut nu este echivalent cu cel dat.
test iniţial (*) 2p. Se va puncta orice formă explicită de
-aspecte specifice ale secvenţei obţinute structură repetitivă conform cerinţei (cât
prin ı̂nlocuire, conform cerinţei (**) 3p. timp...execută, while... do etc.).
-algoritm complet, corectitudine (**) Se acordă câte 1p. pentru fiecare aspect
globală a algoritmului 1p. (iniţializare contor, expresie logică pentru test
iniţial, actualizare contor) conform cerinţei.
2. Răspuns corect 6p. Se acordă câte 3p. pentru fiecare dintre cele
(ciocârlie, scatiu) două soluţii conform cerinţei. Se acordă punc-
(mierlă, scatiu) tajul şi dacă soluţiile nu sunt grupate ı̂ntre
paranteze/acolade.
3. Pentru răspuns corect 6p. (*) Se acordă numai 2p. dacă doar numitorul
-acces la câmpurile unei structuri 2p. sau doar numărătorul au fost calculate con-
-atribuiri conform cerinţei (*) 3p. form cerinţei.
-corectitudine globală a secvenţei 1p.
1. Pentru subprogram corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect
-antet al subprogramului (*) 3p. al antetului (structură, parametru de intrare,
-determinare a valorii cerute (**) 6p. parametru de ieşire) conform cerinţei.
-declarare a tuturor variabilelor locale, 1p. (**) Se acordă câte 1p. pentru fiecare as-
corectitudine globală a subprogramului pect (identificare a unui divizor, identificare
a unui număr/divizor prim, identificare a put-
erii unui divizor ı̂n descompunerea ı̂n factori
primi, identificare a unei puteri impare, al-
goritm de bază pentru ı̂nsumarea unei serii
de valori, valori suport ı̂nsumate) conform
cerinţei.
CAPITOLUL 15. BAC 2021 15.3. SESIUNEA DE TOAMNĂ 121
2. Pentru program corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect
-declarare a unei variabile care să mem- specific (parcurgere a unei serii de cuvinte, ac-
oreze un şir de caractere 1p. ces la ultima literă a unui cuvânt, identificare
-citire a tuturor datelor 1p. a unei vocale/consoane, algoritm de bază pen-
-determinare a cuvintelor cerute (*) 5p. tru numărarea unei serii de valori, cuvinte su-
-afişare a datelor şi tratare a cazului nu port numărate) conform cerinţei.
exista (**) 2p. (**) Se acordă numai 1p. dacă s-au afişat atât
-declarare a variabilelor simple, corecti- unele cuvinte, cât şi mesajul indicat.
tudine globală a programului 1p.
3. a) Pentru răspuns corect 2p. (*) Se acordă punctajul chiar dacă algoritmul
-coerenţă a descrierii algoritmului (*) 1p. ales nu este eficient.
-justificare a elementelor de eficienţă 1p.
3. b) Pentru program corect 8p. (*) Se acordă punctajul chiar dacă algoritmul
-operaţii cu fişiere: declarare, pregătire 1p. ales nu este eficient.
ı̂n vederea citirii, citire din fişier (**) Se acordă numai 3p. dacă algoritmul este
-determinare a valorilor cerute (*),(**) 5p. principial corect, dar nu oferă rezultatul cerut
-utilizare a unui algoritm eficient (***) 1p. pentru toate seturile de date de intrare.
-declarare a variabilelor, afişare a 1p. (***) Se acordă punctajul numai pentru un al-
datelor, corectitudine globală a progra- goritm liniar care utilizează eficient memoria.
mului O soluţie posibilă citeşte prima valoare din
fişier (x), apoi, pe măsura citirii celorlalte
valori, memorează valoarea curentă (crt), şi
penultima valoare citită (ant), precum şi ul-
timele două numere cu proprietatea cerută (pu
şi u, iniţializate cu -1); ant se actualizează la
fiecare pas (ant=crt), iar pu şi u se actual-
izează doar dacă crt mod 1000=x şi ant mod
1000=x (pu=ant şi u=crt).
1d 2b 3a 4b 5c 5 4p.
1. a) Răspuns corect: 3 4 6 8 9 15 6p. Se acordă câte 1p. pentru fiecare număr con-
form cerinţei.
1. b) Pentru răspuns corect 6p. Se acordă câte 3p. pentru fiecare set de date
conform cerinţei (orice triplet de numere nat-
urale nenule, n, x, y, unde x&n şi x=y).
1. c) Pentru program corect 10p. (*) Se acordă numai 2p. dacă doar una dintre
-declarare a variabilelor 1p. instrucţiunile de decizie este conform cerinţei.
-citire a datelor 1p.
-afişare a datelor 1p.
-instrucţiuni de decizie (*) 3p.
-instrucţiune repetitivă 2p.
-atribuiri 1p.
-corectitudine globală a programului 1p.
CAPITOLUL 15. BAC 2021 15.3. SESIUNEA DE TOAMNĂ 122
1. d) Pentru algoritm pseudocod corect 6p. (*) Se acordă punctajul chiar dacă algoritmul
-utilizare a unei structuri repetitive cu 2p. obţinut nu este echivalent cu cel dat.
test iniţial (*) Se va puncta orice formă de structură repet-
-aspecte specifice ale secvenţei obţinute 3p. itivă conform cerinţei (cât timp...execută,
prin ı̂nlocuire, conform cerinţei (**) while... do etc.).
-algoritm complet, corectitudine 1p. (**) Se acordă câte 1p. pentru fiecare aspect
globală a algoritmului (iniţializare contor, expresie logică pentru test
iniţial, actualizare contor) conform cerinţei.
2. Răspuns corect 6p. Se acordă numai 1p. dacă doar ultimele 3
ARMONIA litere sunt conform cerinţei, numai 3p. dacă
doar ultimele 4 litere sunt conform cerinţei,
numai 5p. dacă doar ultimele 6 litere sunt
conform cerinţei.
3. Pentru răspuns corect 6p.
-acces la un câmp de pe primul nivel al 2p.
structurii
-acces la un câmp de pe al doilea nivel 2p.
al structurii
-atribuire a valorilor indicate pentru 1p.
datele angajatului precizat
-corectitudine globală a secvenţei 1p.
1. Pentru subprogram corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect
-antet subprogram (*) 2p. al antetului (structură, parametru de intrare)
-determinare a valorilor cerute (**) 4p. conform cerinţei.
-afişare a datelor (***) 3p. (**) Se acordă câte 2p. pentru fiecare aspect
-declarare a tuturor variabilelor locale, (determinare/identificare a unui cub perfect,
corectitudine globală a subprogramului 1p. cuburi perfecte suport determinate) conform
cerinţei.
(***) Se acordă numai 1p. dacă valorile sunt
afişate, dar nu ı̂n ordinea cerută.
2. Pentru program corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect
-declarare a unei variabile care să mem- 1p. specific (identificare a poziţiei elementelor sit-
oreze un tablou bidimensional uate pe diagonala principală, plasare pe linii
-citire a datelor 1p. a unor valori consecutive la stânga diagonalei
-construire a tabloului conform cerinţei 6p. principale, plasare pe linii a unor valori con-
(*) secutive la dreapta diagonalei principale, mul-
-afişare a datelor 1p. tipli ai lui k suport pe diagonala principală,
-declarare a variabilelor simple, corecti- 1p. valori suport plasate ı̂n afara diagonalei princi-
tudine globală a programului pale, construire ı̂n memorie) conform cerinţei.
3. a) Pentru răspuns corect 2p. (*) Se acordă punctajul chiar dacă algoritmul
-coerenţă a descrierii algoritmului (*) 1p. ales nu este eficient.
-justificare a elementelor de eficienţă 1p.
CAPITOLUL 15. BAC 2021 15.3. SESIUNEA DE TOAMNĂ 123
3. b) Pentru program corect 8p. (**) Se acordă numai 3p. dacă algoritmul
-operaţii cu fişiere: declarare, pregătire 1p. este principial corect, dar nu oferă rezultatul
ı̂n vederea citirii, citire din fişier cerut pentru toate seturile de date de intrare.
-determinare a valorii cerute (*),(**) 5p. (***) Se acordă punctajul numai pentru un
-utilizare a unui algoritm eficient (***) 1p. algoritm liniar.
-declarare a variabilelor, afişare a 1p.
datelor, corectitudine globală a progra- O soluţie posibilă utilizează un vector de
mului frecvenţă v ı̂n care vi reprezintă numărul de
valori x din şirul A pentru care i=x%100
(i"[0,99]). Vectorul v se actualizează pe
măsura parcurgerii celei de a doua linii a
fişierului. Se determină numărul cerut nr pe
măsura parcurgerii numerelor de pe a treia
linie a fişierului: pentru fiecare număr curent
y din şirul B se determină ultimele două
cifre ale sale, c1 şi c2 şi numerele i şi j, unde
i=c1*10+c2, iar j=c2*10+c1, apoi se adună la
nr valoarea vi şi, dacă ijj, se adună la nr şi vj .
BAC 2020
16.1.1 Subiectul I
1d 2b 3c 4c 5a 5 4p.
1.a) Răspuns corect: 1 1 1 0 0 6p. Se acordă numai 2p. dacă s-a precizat conform
cerinţei, pe poziţia corespunzătoare, doar o
valoare, numai 3p. dacă sunt precizate con-
form cerinţei, pe poziţiile corespunzătoare,
doar două valori, numai 4p. dacă sunt
precizate conform cerinţei, pe poziţiile core-
spunzătoare, doar trei valori şi numai 5p. dacă
sunt precizate conform cerinţei, pe poziţiile
corespunzătoare, doar patru valori sau dacă,
ı̂n plus faţă de valorile cerute, sunt afişate şi
alte valori.
1.b) Răspuns corect: 6p. Pentru fiecare număr dintre cele două se
102468 acordă câte 3p. dacă este conform cerinţei şi
986420 numai câte 1p. dacă are ı̂n scrierea sa 5 cifre
pare distincte, dar nu este minim/maxim sau
nu aparţine intervalului indicat.
1.c) Pentru program corect 10p. (*) Se acordă numai 2p. dacă doar una dintre
- declarare a variabilelor 1p. instrucţiunile repetitive este conform cerinţei.
- citire a datelor 1p.
- afişare a datelor 1p.
- instrucţiune de decizie 2p.
- instrucţiuni repetitive (*) 3p.
- atribuiri 1p.
- corectitudine globală a programului 1p.
124
CAPITOLUL 16. BAC 2020 16.1. SESIUNEA SPECIALĂ 125
1.d) Pentru algoritm pseudocod corect 6p. (*) Se acordă numai 2p. dacă algoritmul are o
- echivalenţă a prelucrării realizate, structură repetitivă de tipul cerut, principial
conform cerinţei (*) 5p. corectă, dar nu este echivalent cu cel dat.
- corectitudine globală a algoritmului 1p. Se va puncta orice formă de structură repeti-
tivă de tipul cerut.
2. Pentru rezolvare corectă 6p. (*) Se acordă câte 1p. pentru fiecare as-
- definire a structurii/ı̂nregistrării (*) 4p. pect specific (definire principial corectă a
- declarare a variabilei conform cerinţei 1p. unei structuri/ı̂nregistrări, câmp de tip sim-
- corectitudine globală a secvenţei1) 1p. plu de date, câmp de tip structurat de date,
etichetă/nume) conform cerinţei.
3. Pentru rezolvare corectă 6p. (*) Se acordă câte 2p. pentru fiecare aspect
-acces la un element al tabloului 1p. specific (valori suport utilizate, corespondenţă
-atribuire a valorilor indicate ele- valori-elemente suport) conform cerinţei.
mentelor tabloului (*) 4p.
-corectitudine globală a secvenţei1) 1p.
1. Pentru subprogram corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect
-antet subprogram (*) 2p. al antetului (structură, parametri de intrare)
-determinare a valorii cerute (**) 6p. conform cerinţei.
-instrucţiune/instrucţiuni de returnare (**) Se acordă câte 2p. pentru fiecare aspect
a rezultatului 1p. specific (algoritm principial corect pentru cal-
-declarare a tuturor variabilelor locale, culul unei sume, determinare a unui divizor al
corectitudine globală a subprogramului 1p. unui număr, divizori comuni suport) conform
cerinţei.
2. Pentru program corect 10p. (*) Se acordă câte 1p. pentru fiecare as-
- declarare a unei variabile care să mem- pect specific (identificare a unui cuvânt cu cel
oreze un şir de caractere 1p. puţin 3 litere, mutare a literelor unui cuvânt
- citire a datelor 1p. spre stânga, mutare a primei litere a unui
- transformare a şirului conform cerinţei cuvânt la final, litere suport, cuvinte suport
(*) 6p. rotite/nerotite, transformare ı̂n memorie) con-
- afişare a datelor şi tratare a cazului nu form cerinţei.
exista 1p.
- declarare a variabilelor simple, corec-
titudine globală a programului 1p.
a) Pentru răspuns corect 2p. (*) Se acordă punctajul chiar dacă algoritmul
-coerenţă a descrierii algoritmului (*) 1p. ales nu este eficient.
-justificare a elementelor de eficienţă 1p.
b) Pentru program corect 8p. (**) Se acordă numai 3p. dacă algoritmul este
- operaţii cu fişiere: declarare, pregătire principial corect, dar nu oferă rezultatul cerut
ı̂n vederea citirii, citire din fişier 1p. pentru toate seturile de date de intrare.
- verificare a proprietăţii cerute (*),(**) 5p. (***) Se acordă punctajul numai pentru un al-
- utilizare a unui algoritm eficient (***) 1p. goritm liniar (de complexitate O(n)).
- declarare a variabilelor, afişare a O soluţie posibilă utilizează un vector de
datelor, corectitudine globală a progra- 1p. frecvenţă, ap (ap[x]=numărul de apariţii ale
mului lui x ı̂n şirul aflat ı̂n fişier), având iniţial
toate elementele nule, care se actualizează pe
măsura citirii datelor din fişier; după citirea
datelor, se parcurge vectorul de frecvenţă şi
la final se afişează DA dacă există cel mult o
valoare impară ı̂n acest vector.
CAPITOLUL 16. BAC 2020 16.2. SESIUNEA IUNIE - IULIE 126
16.2.1 Subiectul I
1a 2d 3a 4b 5c 5 4p.
1. Pentru subprogram corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect
- antet subprogram (*) 2p. al antetului (structură, parametru de intrare)
- determinare a valorii cerute (**) 6p. conform cerinţei.
- instrucţiune/instrucţiuni de returnare (**) Se acordă câte 2p. pentru fiecare aspect
a rezultatului 1p. specific (multiplu, pătrat perfect, minim) con-
- declarare a tuturor variabilelor locale, form cerinţei.
corectitudine globală a subprogramului 1p.
2. Pentru program corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect
- declarare a unei variabile care poate specific (identificare a ı̂nceputului unui citat,
memora un şir de caractere 1p. identificare a finalului unui citat, identificare
- citire a datelor 1p. a unei litere dintr-un citat/din afara unui ci-
- transformare a şirului conform cerinţei tat, transformare a unei litere mici ı̂n litera
(*) 6p. mare corespunzătoare, caractere suport trans-
- afişare a datelor 1p. formate, transformare ı̂n memorie) conform
- declarare a variabilelor simple, corec- cerinţei.
titudine globală a programului 1p.
3.a) Pentru răspuns corect 2p. (*) Se acordă punctajul chiar dacă algoritmul
-coerenţă a descrierii algoritmului (*) 1p. ales nu este eficient.
-justificare a elementelor de eficienţă 1p.
3.b) Pentru program corect 8p. (**) Se acordă numai 3p. dacă algoritmul este
- operaţii cu fişiere: declarare, pregătire principial corect, dar nu oferă rezultatul cerut
ı̂n vederea citirii, citire din fişier 1p. pentru toate seturile de date de intrare.
- determinare a valorii cerute (*),(**) 5p. (***) Se acordă punctajul numai pentru un
- utilizare a unui algoritm eficient (***) 1p. algoritm liniar (de complexitate O(n)), care
- declarare a variabilelor, afişare a utilizează eficient memoria.
datelor şi tratare a cazului nu exista, 1p. O soluţie posibilă determină numărul cerut pe
corectitudine globală a programului măsura citirii datelor din fişier: se memorează
ultimele trei numere citite şi, dacă penultimul
număr citit este vârf, se actualizează, după
caz, numărul cerut, având ı̂n vedere calculul
corect al diferenţei indicate.
16.3.1 Subiectul I
1b 2c 3c 4d 5b 5 4p.
1.a) Răspuns corect: 5NU 6p. Se acordă câte 3p. pentru fiecare dintre cele
două valori conform cerinţei; se acordă punc-
tajul şi dacă valorile sunt scrise pe linii diferite
sau separate prin spaţiu.
CAPITOLUL 16. BAC 2020 16.3. SESIUNEA DE TOAMNĂ 128
1.b) Pentru răspuns corect 6p. Se acordă câte 3p. pentru fiecare dintre cele
două numere conform cerinţei (orice număr
din intervalul cerut, format cu cifrele distincte
x, y şi z, ı̂n orice ordine, cu proprietatea că
2 (x+y)=z şi z¿5) sau numai câte 2p. pentru
fiecare dintre cele două numere care conduc
la afişarea mesajului indicat, dar nu au cifre
distincte sau nu aparţin intervalului precizat.
1.c) Pentru program corect 10p. (*) Se acordă numai 2p. dacă doar una dintre
- declarare a variabilelor 1p. instrucţiunile de decizie este conform cerinţei.
- citire a datelor 1p.
- afişare a datelor 1p.
- instrucţiuni de decizie (*) 3p.
- instrucţiune repetitivă 2p.
- atribuiri 1p.
- corectitudine globală a programului 1p.
1.d) Pentru algoritm pseudocod corect 6p. (*) Se acordă numai 2p. dacă algoritmul are o
- echivalenţă a prelucrării realizate, structură repetitivă de tipul cerut, principial
conform cerinţei (*) 5p. corectă, dar nu este echivalent cu cel dat.
- corectitudine globală a algoritmului 1p. Se punctează orice formă de structură repeti-
tivă de tipul cerut.
2. Pentru rezolvare corectă 6p. (*) Se acordă câte 1p. pentru fiecare as-
- definire a structurii/ı̂nregistrării (*) 4p. pect specific (definire principial corectă a
- declarare a variabilei conform cerinţei 1p. unei structuri/ı̂nregistrări, câmp de tip char,
- corectitudine globală a secvenţei 1p. câmpuri de tip numeric, etichetă/nume) con-
form cerinţei.
3. Pentru rezolvare corectă 6p. (*) Se acordă câte 1p. pentru fiecare as-
- acces la un element al tabloului 1p. pect specific (algoritm de ordonare princip-
- ordonare a elementelor indicate (*) 4p. ial corect, elemente pare ordonate, poziţii ele-
- corectitudine globală a secvenţei 1p. mente pare/impare, coloană suport) conform
cerinţei.
1. Pentru subprogram corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect
- antet subprogram (*) 2p. al antetului (structură, parametri de intrare)
- determinare a valorii cerute (**) 6p. conform cerinţei.
- instrucţiune/instrucţiuni de returnare (**) Se acordă câte 1p. pentru fiecare aspect
a rezultatului şi tratare a cazului -1 1p. specific (identificare a unui divizor, algoritm
- declarare a tuturor variabilelor locale, principial corect de determinare a unei sume,
corectitudine globală a subprogramului 1p. algoritm principial corect de numărare, iden-
tificare a unui p-număr, numere din interval,
al k-lea număr) conform cerinţei.
2. Pentru program corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect
- declarare a unei variabile care să mem- specific (identificare a unui cuvânt, cuvinte de
oreze un şir de caractere 1p. lungime pară/impară, obţinere a unui cuvânt
- citire a datelor 1p. ı̂n oglindă, cuvinte distincte ı̂n oglindă, cu-
- transformare a şirului conform cerinţei vinte suport, transformare ı̂n memorie) con-
(*) 6p. form cerinţei.
- afişare a datelor şi tratare a cazului nu
exista 1p.
- declarare a variabilelor simple, corec-
titudine globală a programului 1p.
CAPITOLUL 16. BAC 2020 16.3. SESIUNEA DE TOAMNĂ 129
3.a) Pentru răspuns corect 2p. (*) Se acordă punctajul chiar dacă algoritmul
- coerenţă a descrierii algoritmului (*) 1p. ales nu este eficient.
- justificare a elementelor de eficienţă 1p.
3. b) Pentru program corect 8p. (**) Se acordă numai 3p. dacă algoritmul este
- operaţii cu fişiere: declarare, pregătire principial corect, dar nu oferă rezultatul cerut
ı̂n vederea citirii, citire din fişier 1p. pentru toate seturile de date de intrare.
- determinare a valorilor cerute (*),(**) 5p. (***) Se acordă punctajul numai pentru un
- utilizare a unui algoritm eficient (***) 1p. algoritm liniar (de complexitate O(n)), care
- declarare a variabilelor, afişare a utilizează eficient memoria.
datelor şi tratare a cazului nu exista, Pe măsura citirii datelor din fişier, se memo-
corectitudine globală a programului 1p. rează cel mai mic (x), respectiv cel mai mare
(y) număr de două cifre din şir, care se actu-
alizează, după caz, la fiecare pas. Numerele
cerute sunt x-1, respectiv y+1.
Capitolul 17
BAC 2019
17.1.1 Subiectul I
1c 2b 3a 4b 5b 5 4p.
130
CAPITOLUL 17. BAC 2019 17.2. SESIUNEA IUNIE - IULIE 131
3. Pentru rezolvare corectă 6p. (*) Se acordă numai 2p. dacă s-au atribuit val-
-acces la un element al tabloului 1p. ori conform cerinţei doar elementelor situate
-atribuire a valorilor indicate ele- sub diagonala principală sau doar elementelor
mentelor tabloului (*) 4p. situate deasupra diagonalei principale.
-corectitudine globală a secvenţei 1p.
1. Pentru subprogram corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect
-antet subprogram (*) 2p. al antetului (structură, parametru de intrare)
-verificare a proprietăţii cerute (**) 6p. conform cerinţei.
-instrucţiune/instrucţiuni de returnare (**) Se acordă câte 2p. pentru fiecare aspect
a rezultatului 1p. al cerinţei (identificare a unei cifre pare/im-
-declarare a tuturor variabilelor locale, pare, cifre suport, algoritm principial corect
corectitudine globală a subprogramului 1p. de verificare a unei proprietăţi).
2. Pentru program corect 10p. (*) Se acordă câte 2p. pentru fiecare aspect al
-declarare a unei variabile care să mem- cerinţei (obţinere a unui cuvânt, determinare a
oreze un şir de caractere 1p. Iungimii unui cuvânt, cuvinte suport conform
-citire a datelor 1p. cerinţei).
-determinare a cuvintelor cerute (*) 6p.
-afişarea a datelor ı̂n formatul cerut şi
tratare a cazului nu exista 1p.
-declarare a variabilelor simple, corecti-
tudine globală a programului 1p.
3a) Pentru răspuns corect 2p. (*) Se acordă punctajul chiar dacă algoritmul
-coerenţă a descrierii algoritmului (*) 1p. ales nu este eficient.
-justificare a elementelor de eficienţă 1p.
3b) Pentru program corect 8p. (**) Se acordă numai 3p. dacă algoritmul este
-operaţii cu fişiere: declarare, pregătire principial corect, dar nu oferă rezultatul cerut
ı̂n vederea scrierii, scriere ı̂n fişier 1p. pentru toate seturile de date de intrare.
-determinare a valorilor cerute (*),(**) 5p. (***) Se acordă punctajul numai pentru un al-
-utilizare a unui algoritm eficient (***) 1p. goritm liniar care utilizează eficient memoria.
-declarare a variabilelor, citire a O soluţie posibilă generează termenii şirului
datelor, corectitudine globală a progra- 1p. deducând forma generală a unui astfel de ter-
mului men (pentru i ' 1): dacă i este par, fi
i©2 1 z x y, iar dacă i este impar,
fi i©2z i©2 1x.
17.2.1 Subiectul I
1a 2b 3b 4b 5c 5 4p.
1. Pentru subprogram corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect al
-antet subprogram (*) 2p. antetului (structură, declarare parametru de
-determinare a numărului cerut (**) 6p. intrareieşire) conform cerinţei.
-furnizare a rezultatului prin (**) Se acordă câte 1p. pentru fiecare as-
parametrul indicat 1p. pect al cerinţei (acces la o cifră, identificare
-declarare a tuturor variabilelor locale, cifre pare/impare, includere ı̂n rezultat a unei
corectitudine globală a subprogramului 1p. cifre, includere ı̂n rezultat a tuturor cifrelor
pare suport nemodificate - inclusiv cazul cu
cifra unităţilor 0, includere ı̂n rezultat a tu-
turor cifrelor obţinute prin ı̂nlocuirea cifrelor
impare, ordine a cifrelor).
2. Pentru program corect 10p. (*) Se acordă câte 2p. pentru fiecare aspect
-declarare a unei variabile care să mem- al cerinţei (algoritm principial corect de ver-
oreze un tablou bidimensional 1p. ificare a unei proprietăţi, identificare a unei
-citire a datelor 1p. perechi de elemente simetrice faţă de coloana
-verificare a proprietăţii cerute (*) 6p. indicată, elemente/linii suport).
-afişare a mesajului conform cerinţei 1p.
-declarare a variabilelor simple, corecti-
tudine globală a programului1) 1p.
3.a) Pentru răspuns corect 2p. (*) Se acordă punctajul chiar dacă algoritmul
-coerenţă a descrierii algoritmului (*) 1p. ales nu este eficient.
-justificare a elementelor de eficienţă 1p.
CAPITOLUL 17. BAC 2019 17.3. SESIUNEA DE TOAMNĂ 133
3.b) Pentru program corect 8p. (**) Se acordă numai 3p. dacă algoritmul este
-operaţii cu fişiere: declarare, pregătire principial corect, dar nu oferă rezultatul cerut
ı̂n vederea citirii, citire din fişier 1p. pentru toate seturile de date de intrare.
-determinare a valorilor cerute (*),(**) 5p. (***) Se acordă punctajul numai pentru un al-
-utilizare a unui algoritm eficient (***) 1p. goritm liniar, care utilizează eficient memoria.
-declarare a variabilelor, afişare a O soluţie posibilă determină, pe măsura citirii
datelor, corectitudine globală a progra- 1p. din fişier, valoarea ultimului vârf local şi
mului poziţia acestuia (fie acestea m şi pm). Val-
oarea curentă x citită de pe poziţia px este
afişată numai dacă x¿m sau dacă x=m şi
px=pm+1 (cazuri ı̂n care pm şi eventual m
sunt actualizate).
17.3.1 Subiectul I
1b 2c 3a 4d 5b 5 4p.
3. Pentru rezolvare corectă 6p. (*) Se acordă câte 1p. pentru fiecare aspect
-acces la câmpurile de pe primul nivel al cerinţei referitor la condiţia impusă (ab-
al ı̂nregistrării 1p. scisă, ordonată, operatori logici utilizaţi con-
-acces la câmpurile de pe al doilea nivel form cerinţei).
al ı̂nregistrării 1p.
-verificare a condiţiei impuse (*) 3p.
-corectitudine globală a expresiei 1p.
1. Pentru subprogram conform cerinţei 10p. (*) Se acordă câte 1p. pentru fiecare aspect
-antet subprogram (*) 2p. al antetului (structură, declarare parametri de
-determinare a numărului cerut (**) 6p. intrare) conform cerinţei.
-instrucţiune/instrucţiuni de returnare (**) Se acordă câte 2p. pentru fiecare aspect
a rezultatului şi tratare a cazului 0 1p. al cerinţei (divizori suport, algoritm principial
-declarare a tuturor variabilelor locale, corect de calcul al unui produs, număr maxim
corectitudine globală a subprogramului 1p. cu proprietatea cerută).
2. Pentru program corect 10p. (*) Se acordă câte 2p. pentru fiecare as-
-declarare a unei variabile de tip tablou 1p. pect al cerinţei (elemente care formează un
-citire a datelor 1p. pătrat, pătrat cu elemente egale, dimensiune
-determinare a valorii cerute (*) 6p. maximă).
-afişare a datelor 1p.
-declarare a variabilelor simple, corecti-
tudine globală a programului 1p.
3.a) Pentru răspuns corect 2p. (*) Se acordă punctajul chiar dacă algoritmul
-coerenţă a descrierii algoritmului (*) 1p. ales nu este eficient.
-justificare a unor elemente de eficienţă 1p.
3. b) Pentru program corect 8p. (**) Se acordă numai 3p. dacă algoritmul este
-operaţii cu fişiere: declarare, pregătire principial corect, dar nu oferă rezultatul cerut
ı̂n vederea citirii, citire din fişier 1p. pentru toate seturile de date de intrare.
-determinare a valorilor cerute (*),(**) 5p. (***) Se acordă punctajul numai pentru un
-utilizare a unui algoritm eficient (***) 1p. algoritm liniar.
-declarare a variabilelor, afişare a O soluţie posibilă utilizează un vector de
datelor, corectitudine globală a progra- 1p. frecvenţă (ı̂n care vi este numărul de apariţii
mului ale valorii i) actualizat pe măsura citirii din
fişier. Vectorul de frecvenţă este parcurs de
două ori după completarea sa, mai ı̂ntâi par-
curgând indicii impari i, afişând de vi ori
fiecare valoare i, şi apoi, analog, pentru indicii
pari.
Capitolul 18
BAC 2018
18.1.1 Subiectul I
135
CAPITOLUL 18. BAC 2018 18.1. SESIUNEA SPECIALĂ 136
18.2.1 Subiectul I
5. Pentru program corect 10p. (*) Se acordă câte 1p. pentru fiecare as-
-declarare a cel puţin unei variabile care pect al cerinţei (identificare cifre pare/impare,
să memoreze un şir de caractere 1p. plasare a unor litere la ı̂nceputul unui cuvânt,
-citire a şirurilor 1p. plasare a unor litere la finalul unui cuvânt, or-
-determinare a şirului conform cerinţei dine a literelor, corespondenţă plasare litere/-
(*) 6p. paritate cifre, transformare ı̂n memorie).
-afişare date şi tratare caz cod incorect 1p.
-declarare variabile simple, corectitu-
dine globală a programului 1p.
a Se vor lua ı̂n considerare atât implementările concepute pentru compilatoare pe 16 biţi, cât
şi cele pentru compilatoare pe 32 de biţi.
18.3.1 Subiectul I
BAC 2017
19.1.1 Subiectul I
141
CAPITOLUL 19. BAC 2017 19.1. SESIUNEA SPECIALĂ 142
3. Pentru rezolvare corectă 6p. (*) Se acordă numai 2p. dacă doar unul dintre
-definire principial corectă a unei struc- câmpuri este conform cerinţei.
turi/ı̂nregistrări 2p.
-câmpuri ale structurii/ı̂nregistrării def-
inite conform cerinţei (*) 3p.
-declarare variabilă 1p.
4. Pentru rezolvare corectă 6p. (*) Se acordă punctajul chiar dacă, suplimen-
-acces la un element al tabloului 1p. tar elementelor suport indicate, s-a atribuit
-atribuire a uneia dintre valorile indi- valoarea şi altor elemente
cate elementelor corespunzătoare (*) 2p.
-atribuire a celei de a doua din-
tre valorile indicate elementelor core- 3p.
spunzătoare
5. Pentru program corect 10p. (*) Se acordă câte 2p. pentru fiecare aspect
-declarare a unei variabile care să mem- al cerinţei (căutare a unui subşir ı̂ntr-un şir,
oreze un şir de caractere 1p. identificare a unui cuvânt conform cerinţei, cu-
-citire a şirului 1p. vinte suport).
-determinare a cuvintelor conform
cerinţei (*) 6p.
-afişare a cuvintelor şi tratare a cazului
nu exista 1p.
-declarare variabile simple, corectitu-
dine globală a programului 1p.
4b. Pentru program corect 8p. (*) Se acordă punctajul chiar dacă soluţia pro-
-operaţii cu fişiere: declarare, pregătire pusă nu prezintă elemente de eficienţă.
ı̂n vederea citirii, citire din fişier 1p. (**) Se acordă numai 2p. pentru algoritm
-determinare a valorii cerute (*, **) 4p. principial corect, dar care nu conduce la rezul-
-afişare a datelor şi tratare a cazului im- tatul cerut pentru toate cazurile.
posibil 1p. (***) Se acordă punctajul numai pentru un al-
-utilizare a unui algoritm eficient (***) 1p. goritm liniar, care utilizează eficient memoria.
-declarare a variabilelor, corectitudine O soluţie posibilă memorează prima şi ultima
globală a programului 1p. valoare din primul şir ı̂n variabilele p, respectiv
u, apoi, pe măsura citirii celui de al doilea şir,
se determină numărul k de termeni ai acestuia
cu proprietatea că primii k 1 sunt strict mai
mici decât p, iar al k-lea este strict mai mare
decât u. Poziţia cerută este k.
19.2.1 Subiectul I
3. Pentru rezolvare corectă 6p. (*) Se acordă numai 1p. dacă doar un câmp
-acces la câmpurile ı̂nregistrării (*) 2p. este accesat corect.
-acces la prima literă a numelui 1p. (**) Se acordă numai 1p. dacă media se cal-
-expresie corectă pentru calculul mediei culează corect doar dacă rezultatul este un
(**) 2p. număr ı̂ntreg.
-afişare a datelor conform cerinţei 1p.
4. Pentru rezolvare corectă 6p. Se acordă câte 2p. pentru fiecare parametru
al matricei de adiacenţă (dimensiuni, număr
de valori nenule/nule, elemente nenule core-
spunzătoare numărului de circuite elementare
ale grafului) conform cerinţei.
5. Pentru program corect 10p. (*) Se acordă câte 1p. pentru fiecare as-
-declarare a variabilei de tip tablou 1p. pect al cerinţei (identificare elemente de pe
-citire a tabloului 1p. prima linie, identificare elemente de pe ul-
-modificare a tabloului (*) 6p. tima linie, identificare elemente de pe prima
-afişare a datelor ı̂n formatul cerut 1p. coloană, identificare elemente de pe ultima
-declarare şi citire a variabilelor simple, coloană, valoare plasată pe contur, modificare
corectitudine globală a programului 1p. ı̂n memorie).
19.3.1 Subiectul I
5. Pentru program corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect
-declarare a variabilei de tip tablou de (algoritm principial corect de calcul al unei
numere reale 1p. medii, elemente suport pentru determinarea
-citire a tabloului 1p. valorii unui element inserat, inserare a unei
-modificare a tabloului (*) 5p. linii, plasare ı̂n tablou a mediilor calculate,
-afişare a datelor ı̂n formatul cerut (**) 2p. transformare ı̂n memorie) conform cerinţei.
-declarare şi citire a variabilelor simple, (**) Se acordă numai 1p. dacă s-au afişat
corectitudine globală a programului 1p. datele, dar numărul de elemente afişate sau
formatul de afişare nu este conform cerinţei.
BAC 2016
20.1.1 Subiectul I
147
CAPITOLUL 20. BAC 2016 20.2. SESIUNEA IUNIE - IULIE 148
3. Pentru rezolvare corectă 6p. Se acordă câte 2p. pentru fiecare parametru
-enumerare a nodurilor unui lanţ 2p. conform cerinţei (lanţ elementar, lungime
-parametri pentru lanţ (*) 4p. maximă).
4. Pentru rezolvare corectă 6p. (*) Se acordă numai 1p. dacă s-a utilizat oper-
-acces la câmpurile unui element al atorul de selecţie al unui câmp, dar nu conform
tabloului (*) 3p. cerinţei.
-determinare a sumei cerute (**) 3p. (**) Se acordă numai 1p. dacă algoritmul de
calcul al unei sume este principial corect, dar
nu conduce la rezultatul cerut.
5. Pentru program corect 10p. (*) Se acordă câte 2p. pentru fiecare aspect al
-declarare corectă a unei variabile care cerinţei (plasare a cuvintelor de lungime k con-
să memoreze mai multe cuvinte 1p. form cerinţei, plasare a cuvintelor de lungime
-citire a datelor 1p. diferită de k conform cerinţei, construire şir ı̂n
-determinare a şirului cerut (*) 6p. memorie).
-afişare a datelor ı̂n formatul cerut 1p.
-declarare a variabilelor simple, corecti-
tudine globală a programului 1p.
a Se acordă 10 puncte din oficiu. Nota finală se calculează prin ı̂mpărţirea punctajului total
acordat pentru lucrare la 10.
a Utilizarea unui tip de date care depăşeşte domeniul de valori precizat ı̂n enunţ este acceptată
dacă acest lucru nu afectează corectitudinea ı̂n funcţionarea programului.
a Se vor lua ı̂n considerare atât implementările concepute pentru compilatoare pe 16 biţi, cât
şi cele pentru compilatoare pe 32 de biţi.
20.2.1 Subiectul I
20.3.1 Subiectul I
2.c) Pentru algoritm pseudocod corect 6p. (*) Se acordă numai 2p. dacă algoritmul are o
-echivalenţă a prelucrării realizate, con- structură repetitivă de tipul indicat, principial
form cerinţei (*) 5p. corectă, dar nu este echivalent cu cel dat.
-corectitudine globală a algoritmului 1p. Se va puncta orice formă corectă de structură
repetitivă conform cerinţei.
2.d) Pentru program corect 10p. (*) Se acordă numai 2p. dacă doar una dintre
-declarare variabile 1p. instrucţiuni este conform cerinţei.
-citire date 1p.
-afişare date 2p.
-instrucţiune de decizie conform
cerinţei 3p.
-instrucţiuni repetitive conform cerinţei
(*) 1p.
-atribuiri corecte 1p.
-corectitudine globală a programului 1p.
4b. Pentru program corect 6p. (*) Se acordă punctajul chiar dacă soluţia pro-
-operaţii cu fişiere: declarare, pregătire pusă nu prezintă elemente de eficienţă.
ı̂n vederea citirii, citire din fişier 1p. (**) Se acordă numai 2p. pentru un algoritm
-determinare şi afişare a valorilor cerute principial corect, dar care nu conduce la rezul-
(*, **) 3p. tatul cerut.
-tratare a cazului Nu exista 1p. (***) Se acordă punctajul numai pentru un
-utilizare a unui algoritm eficient (***) 1p. algoritm liniar (de complexitate O(n)), care
utilizează eficient memoria.
O soluţie posibilă parcurge fişierul până când
s-au ı̂ntâlnit 3 termeni impari. Se parcurge
apoi fişierul ı̂n continuare până la final sau
până când se ı̂ntâlneşte un nou termen im-
par, memorând pe parcurs cele mai mari două
valori pare.
Capitolul 21
BAC 2015
21.1.1 Subiectul I
153
CAPITOLUL 21. BAC 2015 21.2. SESIUNEA IUNIE - IULIE 154
4. Pentru rezolvare corectă 6p. (*) Se acordă numai 2p. dacă doar una dintre
- acces corect la un element al tabloului 1p. proprietăţile tabloului (alternanţă a valorilor
- atribuire a valorilor indicate ele- binare ı̂n cadrul unei linii/coloane, toate ele-
mentelor tabloului (*) 5p. mentele suport) este conform cerinţei.
5. Pentru program corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect
- declarare corectă a unei variabile care al cerinţei (identificare a primei litere a unui
să memoreze un şir de caractere 1p. cuvânt, identificare a unei majuscule, obţinere
- citire a şirului 1p. a unui şir construit cu prima literă a unor cu-
- acces la un caracter al şirului 1p. vinte, caractere suport pentru acronim, con-
- construire şir conform cerinţei (*) 5p. struire ı̂n memorie).
- afişare a datelor 1p.
- declarare variabile simple, corectitu-
dine globală a programului 1p.
a Se vor lua ı̂n considerare atât implementările concepute pentru compilatoare pe 16 biţi, cât
şi cele pentru compilatoare pe 32 de biţi.
21.2.1 Subiectul I
3. Pentru subprogram corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect
-antet subprogram (*) 2p. al antetului (structură, declarare parametru)
-determinare a numărului cerut (**) 6p. conform cerinţei.
-instrucţiune/instrucţiuni de returnare (**) Se acordă câte 2p. pentru fiecare aspect
a rezultatului 1p. al cerinţei (termen al şirului, termen impar,
-declarare a tuturor variabilelor locale, număr de ordine - inclusiv cazul ı̂n care n¡3).
corectitudine globală a subprogramului 1p.
4a. Pentru răspuns corect 4p. (*) Se acordă punctajul chiar dacă metoda
-coerenţă a explicării metodei (*) 2p. aleasă nu este eficientă.
-justificare a unor elemente de eficienţă 2p
4b. Pentru program corect 6p. (*) Se acordă punctajul chiar dacă soluţia pro-
-operaţii cu fişiere: declarare, pregătire pusă nu prezintă elemente de eficienţă. (**) Se
ı̂n vederea citirii, citire din fişier 1p. acordă câte 1p. pentru fiecare condiţie impusă
-determinare a perechilor cerute (*,**) 3p. perechilor x, y (y x ' 2, interval x, y care
-afişare a datelor conform cerinţei şi să nu conţină niciun termen al şirului, perechi
tratare a cazului nu exista 1p. distincte).
-utilizare a unui algoritm eficient (***) 1p. (***) Se acordă punctajul numai pentru un
algoritm liniar (de complexitate O n).
O soluţie posibilă utilizează un vector de
apariţii (ı̂n care vi este 1 dacă valoarea i apare
ı̂n şir sau 0 altfel) actualizat pe măsura citirii
datelor din fişier. Vectorul de apariţii este
parcurs o singură dată după completarea sa,
memorându-se la fiecare pas ultimii doi indici
i şi j (i $ j) cu proprietatea că valorile vi şi vj
sunt nenule şi j i ' 2, care reprezintă fiecare
dintre perechile cerute.
21.3.1 Subiectul I
2.c) Pentru algoritm pseudocod corect 6p. (*) Se acordă numai 2p. dacă algoritmul are o
-echivalenţă a prelucrării realizate, con- structură repetitivă conform cerinţei, princip-
form cerinţei (*) 5p. ial corectă, dar nu este echivalent cu cel dat.
-corectitudine globală a algoritmului 1p. Se va puncta orice formă corectă de structură
repetitivă conform cerinţei.
2.d) Pentru program corect 10p. (*) Se acordă numai 2p. dacă numai una din-
-declarare variabile 1p. tre instrucţiunile repetitive este corectă.
-citire date 1p.
-afişare date 1p.
-instrucţiune de decizie corectă 2p.
-instrucţiuni repetitive corecte (*) 3p.
-atribuiri corecte 1p.
-corectitudine globală a programului 1p.
4b. Pentru program corect 6p. (*) Se acordă punctajul chiar dacă soluţia pro-
-operaţii cu fişiere: declarare, pregătire pusă nu prezintă elemente de eficienţă.
ı̂n vederea citirii, citire din fişier 1p. (**) Se acordă câte 2p. pentru fiecare aspect
-determinare şi afişare a valorii cerute al cerinţei (produse conform cerinţei, sumă de
(*, **) 4p. produse).
-utilizarea unui algoritm eficient (***) 1p. (***) Se acordă punctajul numai pentru un
algoritm liniar (de complexitate O n), care
utilizează eficient memoria.
O soluţie posibilă se obţine calculând, pe
măsura citirii din fişier, pentru fiecare
jumătate a şirului, sumele termenilor pari (fie
acestea s1p şi s2p), respectiv sumele terme-
nilor impari (fie acestea s1i şi s2i).
Valoarea cerută este s1p s2i s1i s2p.
Capitolul 22
BAC 2014
22.1.1 Subiectul I
159
CAPITOLUL 22. BAC 2014 22.1. SESIUNEA SPECIALĂ 160
3. Pentru rezolvare corectă 6p. Se acordă numai 3p. dacă s-a scris o matrice
de adiacenţă a unui graf cu 5 vârfuri, dar care
nu corespunde grafului indicat.
4.Răspuns corect: (0,5,1,1,1,1) 6p. Se acordă câte 1p. pentru fiecare element
corect al vectorului.
5. Pentru program corect 10p. (*) Se acordă câte 1p. pentru fiecare aspect al
-declarare corectă a unei variabile care cerinţei (determinare a numărului de litere ale
să memoreze un şir de caractere 1p. unui cuvânt, transformare cuvinte de lungime
-citire a şirului 1p. impară, transformare cuvinte cu cel puţin 3
-transformare a şirului conform cerinţei litere, eliminare a literei din mijloc a unui
(*) 6p. cuvânt, toate literele suport eliminate, trans-
-afişare date şi tratare caz nu exista 1p. formare ı̂n memorie).
-declarare variabile simple, corectitu-
dine globală a programului 1p.
22.2.1 Subiectul I
5. Pentru program corect 10p. (*) Se acordă câte 2p. pentru fiecare aspect al
-declarare corectă a variabilei de tip cerinţei (eliminare linie, eliminare coloană).
tablou 1p. (**) Se acordă numai 1p. dacă sunt afişate
-citire a tabloului 1p. toate elementele, dar nu ı̂n formatul cerut.
-accesare corectă a unui element al
tabloului 1p.
-modificare corectă a tabloului (*) 4p.
-afişare a unui tablou ı̂n formatul cerut
(**) 2p.
-declarare şi citire a variabilelor simple,
corectitudine globală a programului 1p.
a Se acordă 10 puncte din oficiu. Nota finală se calculează prin ı̂mpărţirea punctajului total
acordat pentru lucrare la 10.
a Utilizarea unui tip de date care depăşeşte domeniul de valori precizat ı̂n enunţ este acceptată
dacă acest lucru nu afectează corectitudinea ı̂n funcţionarea programului.
a Se vor lua ı̂n considerare atât implementările concepute pentru compilatoare pe 16 biţi, cât
şi cele pentru compilatoare pe 32 de biţi.
22.3.1 Subiectul I
BAC 2013
23.1.1 Subiectul I
165
CAPITOLUL 23. BAC 2013 23.1. SESIUNEA SPECIALĂ 166
4b. Pentru program corect 6p. (*) Se acordă punctajul chiar dacă soluţia pro-
-operaţii cu fişiere: declarare, pregătire pusă nu prezintă elemente de eficienţă.
ı̂n vederea citirii, citire din fişier 1p. (**) Se acordă câte 1p. pentru fiecare dintre
-determinarea valorilor cerute (*, **) 3p. cele trei condiţii impuse (numere pare cu două
-afişarea datelor şi tratarea cazului Nu cifre, minim, maxim).
exista 1p. (***) Se acordă punctajul numai pentru un
-utilizarea unui algoritm eficient (***) 1p. algoritm liniar (de complexitate O n).
O soluţie posibilă utilizează un vector carac-
teristic, ı̂n care se marchează apariţia fiecărui
număr cu două cifre, la parcurgerea fişierului.
Numerele cerute sunt cel mai mic şi cel mai
mare număr par cu două cifre, nemarcate.
23.2.1 Subiectul I
23.3.1 Subiectul I
5. Pentru program corect 10p. (*) Se acordă câte 2p. pentru fiecare aspect al
-declararea corectă a unei variabile care cerinţei (caractere suport eliminate, transfor-
să memoreze un şir de caractere 1p. mare ı̂n memorie).
-citirea şirului 1p.
-identificarea unui caracter spaţiu 1p.
-identificarea unui spaţiu suplimentar 1p.
-transformarea şirului conform cerinţei
(*) 4p.
-afişarea datelor 1p.
-declarare variabile simple, corecti-
tudinea globală a programului 1p.
BAC 2012
24.1.1 Subiectul I
171
CAPITOLUL 24. BAC 2012 24.2. SESIUNEA IUNIE - IULIE 172
a Nu se acordă punctaje intermediare, altele decât cele precizate explicit prin barem. Nu se
acordă fracţiuni de punct.
a Se acordă 10 puncte din oficiu. Nota finală se calculează prin ı̂mpărţirea punctajului total
acordat pentru lucrare la 10.
a Utilizarea unui tip de date care depăşeşte domeniul de valori precizat ı̂n enunţ este acceptată
dacă acest lucru nu afectează corectitudinea ı̂n funcţionarea programului.
a Se vor lua ı̂n considerare atât implementările concepute pentru compilatoare pe 16 biţi, cât
şi cele pentru compilatoare pe 32 de biţi.
24.2.1 Subiectul I
4. Pentru rezolvare corectă 6p. Două soluţii posibile sunt obţinute prin tran-
-accesarea unui element al tabloului 2p. scrierea ı̂n limbaj de programare a atribuirii:
-expresie corectă de calcul al valorii el-
ementului 3p.
-atribuire corectă 1p.
4b. Pentru program corect 6p. (*) Se acordă punctajul chiar dacă soluţia
-operaţii cu fişiere: declarare, pregătire propusă nu prezintă elemente de eficienţă.
ı̂n vederea scrierii, scriere ı̂n 1p. (**) Punctajul se acordă numai pentru un al-
-determinarea de numere de tip xordo- goritm ı̂n care se generează direct numerele
nat (*) 2p. x-ordonate. O soluţie posibilă de generare
-scrierea tuturor numerelor cerute ı̂n este transpunerea ı̂n limbaj de programare a
formatul impus (*) 2p. secvenţei pseudocod:
-utilizarea unui algoritm eficient (**) 1p.
24.3.1 Subiectul I
2.d) Pentru program corect 10p. (*) Se acordă numai 1p. dacă doar o parte
-declarare corectă a tuturor variabilelor dintre variabile este declarată corect.
(*) 2p.
-citire corectă 1p.
-afişare corectă 1p.
-instrucţiuni repetitive corecte 4p.
-atribuiri corecte 1p.
-corectitudinea globală a programului 1p.
4a. Pentru răspuns corect 4p. (*) Se acordă punctajul chiar dacă metoda
-coerenţa explicării metodei (*) 2p. aleasă nu este eficientă.
-explicarea unor elemente de eficienţă 2p
4b. Pentru program corect 6p. (*) Se acordă punctajul chiar dacă soluţia pro-
-operaţii cu fişiere: declarare, pregătire pusă nu prezintă elemente de eficienţă.
ı̂n vederea citirii, citire din fişier 1p. (**) Se acordă punctajul numai pentru un al-
-determinarea existenţei numărului goritm liniar (de complexitate O(n)), care uti-
cerut (*) 3p. lizează eficient memoria.
-afişarea mesajului conform cerinţei 1p. O soluţie posibilă parcurge datele din fişier de-
-utilizarea unui algoritm eficient (**) 1p. terminând atât cea mai mare valoare din şir,
cât şi numărul apariţiilor acesteia ı̂n şir.
Se afişează DA dacă numărul apariţiilor este
mai mic sau egal cu n/2.
Capitolul 25
BAC 2011
25.1.1 Subiectul I
178
CAPITOLUL 25. BAC 2011 25.1. SESIUNEA SPECIALĂ 179
2.d) Pentru program corect 10p. (*) Se acordă numai 2p. dacă doar una dintre
-declarare corectă a tuturor variabilelor 1p. structuri este corectă.
-citire corectă 1p.
-scriere corectă 1p.
-instrucţiune de decizie corectă 2p.
-instrucţiuni repetitive cu test iniţial
corecte (*) 3p.
-atribuiri corecte 1p.
-corectitudine globală a programului 1p.
4a. Pentru răspuns corect 4p. (*) Se acordă punctajul chiar dacă metoda
-coerenţa explicării metodei (*) 2p. aleasă nu este eficientă.
-explicarea unor elemente de eficienţă
din punct de vedere al timpului de exe-
cutare 2p
4b. Pentru program corect 6p. (*) Se acordă punctajul chiar dacă soluţia pro-
-operaţii cu fişiere: declarare, pregătire pusă nu prezintă elemente de eficienţă sau
ı̂n vederea scrierii, scriere ı̂n fişier 1p. afisează numerele cifră cu cifră.
-respectarea cerinţei privind primele (**) Se acordă numai 1p. dacă numerele nu
două cifre ale numărului 1p. sunt scrise ı̂n formatul cerut sau dacă fişierul
-respectarea cerinţei privind ultimele conţine, ı̂n plus, si alte numere.
două cifre ale numărului 1p. (***) Punctajul se acordă numai pentru un
-afisarea tuturor numerelor cerute algoritm ı̂n care una dintre primele două cifre
(*),(**) 2p. este determinată ı̂n funcţie de cealaltă, si una
-utilizarea unui algoritm eficient (***) 1p. dintre ultimele două cifre este determinată ı̂n
funcţie de cealaltă.
O soluţie posibilă de generare este
transpunerea ı̂n limbaj de programare a
secvenţei pseudocod:
25.2.1 Subiectul I
2.c) Pentru algoritm pseudocod corect 6p. (*) Prelucrarea determină suma numerelor im-
- echivalenţa prelucrării realizate, con- pare din intervalul ı̂nchis delimitat de a si b.
form cerinţei (*) (**) 4p. Dacă numerele a si b au aceeasi paritate, la
- corectitudine globală a algoritmului 2p. sumă se adaugă [(a+b)/2], dacă este număr
impar.
Soluţiile posibile pot utiliza sau nu structuri
repetitive, conform cerinţei.
(**) Se acordă numai 3p. dacă echivalenţa
este realizată doar dacă numerele a si b nu au
aceeasi paritate, sau au aceeasi paritate dar
[(a+b)/2] este număr par.
2.d) Pentru program corect 10p.
-declararea corectă a tuturor vari-
abilelor 2p.
-citire corectă 1p.
-scriere corectă 1p.
-instrucţiune repetitivă cu test iniţial
corectă 2p.
-expresia de calcul al sumei 2p.
-atribuiri principial corecte 1p.
-corectitudinea globală a programului 1p.
3. Pentru subprogram corect 10p. (*) Pentru limbajul Pascal, se acordă puncta-
- structură antet principial corectă 1p. jul dacă este definit tipul tablou, iar transferul
- declarare corectă a parametrilor n,k 1p. se face prin adresă.
- declarare corectă a parametrului v (*) 1p. (**) Se acordă numai 2p. dacă elementele sau
- declararea tuturor variabilelor locale 1p. deplasat circular corect doar spre stânga sau
- deplasarea principial corectă a unui el- doar spre dreapta, sau dacă lungimile zonelor
ement spre stânga 1p. deplasate (k, n-k) nu sunt conform cerinţei.
- deplasarea principial corectă a unui el-
ement spre dreapta 1p.
- deplasarea circulară a tuturor ele-
mentelor conform cerinţei (**) 3p.
- corectitudinea globală a subprogramu-
lui 1p.
4a. Pentru răspuns corect 4p. (*) Se acordă punctajul chiar dacă metoda
- coerenţa explicării metodei (*) 2p. aleasă nu este eficientă
- explicarea unor elemente de eficienţă
din punct de vedere al timpului de exe-
cutare 1p.
- explicarea unor elemente de eficienţă
din punct de vedere al memoriei uti-
lizate 1p.
4b. Pentru program corect 6p. (*) Se acordă punctajul chiar dacă soluţia pro-
- operaţii cu fişiere: declarare, pregătire pusă nu prezintă elemente de eficienţă.
ı̂n vederea citirii, citire 1p. (**) Punctajul se acordă numai pentru un al-
- aplicarea unui algoritm principial goritm liniar, care utilizează eficient memoria.
corect de determinare a unei secvenţe O soluţie posibilă citeste numerele din fişier
de cel puţin trei termeni aflaţi ı̂n pro- si determină poziţia primului, respectiv a ul-
gresie aritmetică 1p. timului termen al unei progresii, actualizând
- determinarea si afisarea valorii cerute lungimea maximă obţinută.
(*) 2p.
- determinarea situaţiei ı̂n care nu ex-
istă nicio secvenţă conform cerinţei si
afiserea mesajului 1p.
- utilizarea unui algoritm eficient(**) 1p.
25.3.1 Subiectul I
2.b) (10,96), (96,10), (11,97), (97,11), 6p. Se acordă -numai 2p. dacă a fost menţionată
(12,98), (98,12), (13,99), (99,13) o singură pereche corectă;
-numai 3p. dacă au fost menţionate doar două
sau trei perechi corecte;
-numai 4p. dacă au fost menţionate doar pa-
tru sau cinci perechi corecte;
-numai 5p. dacă au fost menţionate doar sase
sau sapte perechi corecte.
2.c) Pentru algoritm pseudocod corect 4p. Dintre soluţiile posibile, propunem:
-echivalenţa prelucrării realizate prin
structura repetitivă, conform cerinţei 3p.
-corectitudine globală 1p.
2. Răspuns corect: *12345*123*1**** 6p. Se acordă doar 3p. pentru un răspuns parţial
corect care ı̂ncepe cu secvenţa
*12345*123*1.
3. Pentru subprogram corect 10p.
-structură antet principial corectă 1p.
-declarare corectă a parametrilor (de
tip tablou si date simple) 2p.
-declarare variabile locale 1p.
-algoritm principial corect de deter-
minare a unui element al intersecţiei 2p.
-determinare a numărului cerut 2p.
-returnare rezultat 1p.
-corectitudine globală a subprogramu-
lui 1p.
4a. Pentru răspuns corect 4p. (*) Se acordă punctajul chiar dacă algoritmul
-coerenţa explicării algoritmului (*) 2p. ales nu este eficient.
-explicarea unor elemente de eficienţă
din punct de vedere al timpului de exe-
cutare 2p
4b. Pentru program corect 6p. (*) Se acordă punctajul chiar dacă soluţia pro-
-operaţii cu fişiere: declarare, pregătire pusă nu prezintă elemente de eficienţă.
ı̂n vederea citirii, citire din fişier 1p. (**) Punctajul se acordă numai pentru un al-
-determinarea numărului de apariţii a goritm liniar.
unei cifre a zecilor conform cerinţei 2p. O soluţie posibilă utilizează un tablou nr,
-determinarea si afisarea numărului de cu 10 elemente, iniţial nule, ı̂n care, pe
ordine cerut (*) 2p. măsura citirii datelor din fişier, se contorizează
-utilizarea unui algoritm eficient (**) 1p. numărul de apariţii ale fiecărei cifre a zecilor
din numerele citite.
Simultan, ı̂ntr-un tablou p, cu 10 elemente,
se memorează, pentru fiecare cifră menţionată
mai sus, numărul de ordine al numărului
curent corespunzător acesteia. Dacă nri este
valoarea maximă din tabloul nr, rezultatul
cerut este pi .
Capitolul 26
BAC 2010
26.1.1 Subiectul I
185
CAPITOLUL 26. BAC 2010 26.1. SESIUNEA SPECIALĂ 186
4a. Pentru program corect 6p. (*) Se acordă punctajul chiar dacă soluţia pro-
- operaţii cu fişiere: declarare, scriere pusă nu prezintă elemente de eficienţă.
ı̂n fişier 1p. (**) Punctajul se acordă numai pentru un al-
- calculul corect al sumei date (*) 2p. goritm liniar (care are ı̂n vedere că de la un
- utilizarea unui algoritm eficient (**) 2p. anumit rang, toţi termenii sumei sunt nuli) si
- declarare de variabile (altele decât care nu utilizează tablouri.
fişier), citire date, corectitudinea Se acordă numai 1p dacă nu este valorificată
globală a programului 1p menţiunea privind termenii nuli, sau dacă se
utilizează un tablou.
O soluţie posibilă de determinare eficientă a
sumei s se obţine prin transpunerea ı̂n limbaj
de programare a secvenţei:
4b. Pentru răspuns corect 4p. (*) Se acordă punctajul chiar dacă metoda
- coerenţa explicării metodei (*) 1p. aleasă nu este eficientă.
- explicarea unor elemente de eficienţă
din punct de vedere al timpului de exe-
cutare 2p.
- explicarea unor elemente de eficienţă
din punct de vedere al memoriei uti-
lizate 1p.
26.2.1 Subiectul I
26.3.1 Subiectul I
1p.
Rezolvări detaliate
192
Capitolul 27
BAC 2022
Problema 2
193
CAPITOLUL 27. BAC 2022 27.1. SESIUNEA - SIMULARE 194
13 return 1;
14 }
15
16 else
17 {
18 cout<<"<-- f("<<st<<","<<dr<<",v) "<<0<<"\n\n";
19 return 0;
20 }
21
22 }
23 else
24 {
25 int rez1=f(st, (st+dr)/2,v);
26 int rez2=f(1+(st+dr)/2,dr,v);
27 int rez12=rez1+rez2;
28
29 cout<<"<-- f("<<st<<","<<dr<<",v) "<<rez12<<"\n\n";
30
31 return rez12;
32 }
33 }
34
35 int main()
36 {
37 int x[]={7, 1, 2, 5, 4};
38
39 int rez=f(0,4,x);
40
41 cout<<"rez = "<<rez;
42
43 return 0;
44 }
45 /*
46 --> f(0,4,v)
47 --> f(0,2,v)
48 --> f(0,1,v)
49 --> f(0,0,v)
50 <-- f(0,0,v) 0
51
52 --> f(1,1,v)
53 <-- f(1,1,v) 1
54
55 <-- f(0,1,v) 1
56
57 --> f(2,2,v)
58 <-- f(2,2,v) 1
59
60 <-- f(0,2,v) 2
61
62 --> f(3,4,v)
63 --> f(3,3,v)
64 <-- f(3,3,v) 0
65
66 --> f(4,4,v)
67 <-- f(4,4,v) 1
68
69 <-- f(3,4,v) 1
70
71 <-- f(0,4,v) 3
72
73 rez = 3
74 */
Problema 3
Considerăm produsul cartezian a 4 mulţimi de elemente (determinate din enuţul problemei). Din
primele configuraţii deducem că elementele sunt ”aşezate” ı̂n ordine alfabetică.
CAPITOLUL 27. BAC 2022 27.1. SESIUNEA - SIMULARE 195
Problema 4
Accesul la elementele unei structuri se face ”din exterior câtre interior”, aşa că ... variantele ı̂n
care apar sublinieri cu culoarea roşie sunt ...!
Problema 5
”Subgraf” ı̂nseamnă că putem elimina noduri (cu toate muchiile lor!). Asta ı̂nseamnă că ... rămâne
tot un graf complet.
II-1-a:
CAPITOLUL 27. BAC 2022 27.1. SESIUNEA - SIMULARE 196
II-1-b:
II-1-c:
CAPITOLUL 27. BAC 2022 27.1. SESIUNEA - SIMULARE 197
II-1-d:
Problema 2
tata[5]=0 deci nodul 5 este rădăcina arborelui.
Fii nodului 5 sunt cei pentru care tata[?]=5. Aceştia sunt 2, 3, 9 şi ı̂i aşezăm pe nivelul 1.
Mai departe ...
CAPITOLUL 27. BAC 2022 27.1. SESIUNEA - SIMULARE 198
Problema 3
a[i][j] este notaţia folosită pentru elementele matricei.
Pentru a avea elemente ”sus” şi ”jos” (la N şi la S) ... i=0;
Pentru a avea elemente ”la stânga” şi ”la dreapta” (la V şi la E) ... j=1,...13;
Pentru a verifica dacă ı̂n cele 4 poziţii N, V, S, E sunt ”valori egale” ... alegem o poziţie (de
exemplu N) şi verificăm dacă valoarea din fiecare poziţie rămasă (V, S, E) este egaă cu valoarea
din poziţia aleasă (N).
26 int rez;
27
28 rest(x,y,n,rez);
29
30 cout<<"rez = "<<rez;
31
32 return 0;
33 }
Problema 2
62 nume = DAN 3
63 */
Problema 3
Numărul 3-urilor din R2 (primul nivel din figură!) este n/3 (”culege” câte un 3 din 3, 6, 9, 12, 15,
18, 21, 24, 27, 30, ...).
Numărul 3-urilor din R3 (al doilea nivel din figură!) este n/9 (”culege” câte un 3 din 9, 18,
27, ...).
Numărul 3-urilor din R4 (nu apare ı̂n figură!) este n/9 (”culege” câte un 3 din 27, ...).
La fel pentru 5.
45 conţine doi de 3 şi un 5. Dacă ştim câţi de 3 şi câţi de 5 avem la dispoziţie ... este uşor de
calculat câţi de 45 putem construi!
51 nume = MARIS 5
52
53 MARIS ***
54 prenume = DANILA 6
55 nume = PREPELEAC 9
56
57 prenume = DAN 3
58 nume = POPA 4
59
60 POPA ***
61 prenume = EDANA 5
62 nume = DAN 3
63 */
5 #include<iomanip>
6 #include <climits>
7
8 using namespace std;
9
10 ofstream fout("bac.txt");
11
12 int main()
13 {
14 int n;
15 int i;
16 int ii; // copie de lucru a lui i
17
18 int nr3=0;
19 int nr5=0; // sigur nr5 <= nr3 ...
20
21 int p;
22
23 cin>>n;
24 cout<<"n = "<<n<<"\n";
25
26 for(i=3; i<=n; i++)
27 {
28 cout<<i<<" : ";
29 ii=i;
30 while(ii%3==0)
31 {
32 nr3++;
33 ii=ii/3;
34 cout<<"3 ";
35 }
36 while(ii%5==0)
37 {
38 nr5++;
39 ii=ii/5;
40 cout<<"5 ";
41 }
42 cout<<"\n";
43 }
44
45 cout<<"nr3 = "<<nr3<<"\n";
46 cout<<"nr5 = "<<nr5<<"\n";
47
48 p=nr5;
49 while(p > 2*nr3) p--;
50
51 cout<<"p = "<<p;
52 fout<<p;
53
54 fout.close();
55
56 return 0;
57 }
58 /*
59 14
60 n = 14
61 3 : 3
62 4 :
63 5 : 5
64 6 : 3
65 7 :
66 8 :
67 9 : 3 3
68 10 : 5
69 11 :
70 12 : 3
71 13 :
72 14 :
73 nr3 = 5
74 nr5 = 2
75 p = 2
76 */
77 14
78 n = 14
79 p3 = 2
80 p5 = 1
81 nr3 = 5
82 nr5 = 2
83 p = 2
84 */
Capitolul 28
BAC 2021
Problema 2
205
CAPITOLUL 28. BAC 2021 28.1. SESIUNEA SPECIALĂ 206
Problema 3
Problema 4
k 1 2 3 4 5 6 7 8 9 10 11
t[k] 9 3 4 6 4 8 6 0 4 4 4
Tabelul 28.2: 2021bac-s1-I-4
Problema 5
n n1
Graful complet cu n noduri are Kn 2
muchii.
Cum ţinem minte această formulă?
Din fiecare nod putem duce câte o muchie către fiecare
vecin, deci putem duce n 1 muchii. Sunt n noduri, deci
putem duce n n 1 muchii ı̂n total. Dar ... fiecare muchie
i, j este numărată de două ori: o dată când ”am fost” ı̂n
nodul i şi a doua oară când ”am fost” ı̂n nodul j. Împărţim la
2 numărul total de muchii numărate şi ... totul s-a corectat!
Putem rezolva ecuaţia Kn 210 dar ... vom face câteva
”ı̂ncercări” rapide:
Figura 28.2: 2021bac-s1-I-5
109
K 10 2
45 muchii (prea puţin!).
CAPITOLUL 28. BAC 2021 28.1. SESIUNEA SPECIALĂ 208
2019
K20 2
190 muchii (ı̂ncă prea puţin!).
2120
K21 2
21 10 210 muchii (exact!).
Răspunsul corect este d (21 de muchii).
II-1-a:
Observaţia evidentă este: câte numere impare sunt ı̂ntre m şi n (inclusiv m şi n dacă sunt
impare!) atâtea simboluri * se vor afişa!
II-1-b: Spre stânga şi spre dreapta lui 79 se determină al 40-lea număr impar (incluzând pe 79).
Acestea sunt: 1 şi 157. Se pot alege şi numerele pare 0 şi 158 pentru că ele nu elimină şi nici nu
adaugă alte numere impare dar ... 0 trebuie eliminat pentru că numerele trebuie să fie ”nenule”
(aşa scrie ı̂n enunţ!).
1 #include<iostream>
2
3 using namespace std;
4
5 int main()
6 {
7 int m, n;
8 // a)
9 //m=2; n=9; // se citesc !!! --> ****
10
11 int nas=0; // nas = nr afisari steluta
12
13 // b1)
14 //n=79; m=0;
15 // n=79; m=1;
16
17 // b2)
18 //n=79; m=157;
19 n=79; m=158;
20
21 // n=mare, m=mic ... !!!
22 if(m>n) {int aux; aux=m; m=n; n=aux;}
23
24 if(m%2 == 0) m=m+1; // m = impar ... !!!
25
26 while(m<=n)
27 {
28 m=m+2; // m merge numai pe numere impare
29 cout<<’*’; nas++;
30 }
31
32 cout<<"\n";
33 cout<<"nas = "<<nas<<"\n";
34 return 0;
35 }
36 /*
37 ****************************************
38 nas = 40
39 */
II-1-d:
29
30 return 0;
31 }
32 /*
33 ****
34 nas = 4
35 */
Problema 2
Funcţia este:
int f(int x) { if (x<=4) return x; else return x-f(x-2); }
f(2) = 2;
f(21) = 21 - f(19) = 21 - [19 - f(17)] = 21 - 19 + f(17) = 21 - 19 + [17 - f(15)] = 21 - 19 + 17 -
f(15) = 21 - 19 + 17 - 15 + f(13) = 21 - 19 + 17 - 15 + 13 - f(11) = 21 - 19 + 17 - 15 + 13 - 11 +
f(9) = 21 - 19 + 17 - 15 + 13 - 11 + 9 - f(7) = 21 - 19 + 17 - 15 + 13 - 11 + 9 - 7 + f(5) = 21 -
19 + 17 - 15 + 13 - 11 + 9 - 7 + 5 - f(3) = 21 - 19 + 17 - 15 + 13 - 11 + 9 - 7 + 5 - 3 = 2*5 = 10
Problema 3
60
61 cout<<"rez = "<<rez<<"\n";
62
63 return 0;
64 }
65 /*
66 --> imog : 523 84356 32759
67 xi = 53
68 yio = 53
69 rez = 1
70 */
Problema 2
Evident, este o problemă banală!
51 2 6 9 0 5
52 6 1 3 6 9
53 7 3 9 4 2
54
55 2 4 3 6 6
56 8 0 9 1 7
57 2 6 9 3 5
58 5 8 0 6 9
59 7 3 9 4 2
60 */
Problema 3
O primă rezolvare constă ı̂n determinarea expresiei şirului.
Acest lucru se poate realiza (cu puţin noroc!) scriind relaţia de recurenţă pentru primele şi
ultimele câteva valori ale lui n (ca ı̂n figura următoare).
2
Merită verificat dacă şirul are o expresie de forma f n an bn c. Constantele a, b, c se
determină rezolvând sistemul liniar de ecuaţii:
~
f 0 a0b0c
f 1 a1b1c
f 2 a4b4c
calculând primii termeni ai şirului cu ajutorul relaţiei de recurenţă şi ı̂nlocuind ı̂n sistem valorile
f 0, f 1, f 2 (sau folosind alţi termeni ai şirului!).
O a doua rezolvare este posibilă calculând ”ı̂napoi” termenii şirului. Ştim că f n 31 şi
termenul anterior este f n 1 f n 2n. Pare că nu ştim cât este n dar ... el se poate
determina folosind cei doi termeni consecutivi din şir: 21 şi 31. Următorul program foloseşte
această idee.
43 x=xp; y=yp;
44 d=(x%2==y%2); cout<<x<<" "<<y<<" : "<<d<<"\n";
45 x=xp; y=yi;
46 d=(x%2==y%2); cout<<x<<" "<<y<<" : "<<d<<"\n";
47 x=xi; y=yp;
48 d=(x%2==y%2); cout<<x<<" "<<y<<" : "<<d<<"\n";
49 x=xi; y=yi;
50 d=(x%2==y%2); cout<<x<<" "<<y<<" : "<<d<<"\n";
51
52 return 0;
53 }
54 /*
55 a:
56 2 4 : 1
57 2 3 : 0
58 1 4 : 0
59 1 3 : 0
60
61 b:
62 2 4 : 0
63 2 3 : 1
64 1 4 : 0
65 1 3 : 0
66
67 c:
68 2 4 : 1
69 2 3 : 0
70 1 4 : 0
71 1 3 : 1
72
73 a:
74 2 4 : 1
75 2 3 : 0
76 1 4 : 0
77 1 3 : 1
78 */
Problema 2
Un desen al apelurilor (ca ı̂n figură!) este util!
Problema 3
Diagonala secundară are suma indicilor elementelor constantă ...
Problema 4
Graful este:
Problema 5
Arborele este:
31 /*
32 a: 1111121121
33 b1: 1111121121121
34 b2: 111111121121121
35 */
21 cout<<"1";
22 }
23
24 return 0;
25 }
Problema 2
Codificarea cu numere este utilă!
Problema 3
Variabilele f şi fs ı̂n memorie:
16
17 if(n==1) return; // n a fost numai o putere a lui 2
18
19 // scot 3, 5, 7, 9 ???
20 // incerc 9 dar ... sigur nu merge pentru ca am scos 3-urile ... !!!
21 //======================================================================
22 d=3;
23 while(d*d <= n) // divizorii mai mici decat d au fost deja scosi ... !!!
24 {
25 ed=0; // initial ...
26 while(n%d == 0) {ed++; n=n/d;} // scot d-urile din n ... !!!
27
28 if(ed % 2 == 1) s=s+d;
29
30 d=d+2; // ... !!!!
31 }
32 //=====================================================================
33
34 // ramane n=1 sau
35 // n=un numar prim ... cel mai mare ... la puterea 1 numai ... !!!
36 if(n>1) // a ramas un factor prim (la puterea 1) in n ... ???
37 s=s+n;
38
39 return;
40 }
41
42 int main()
43 {
44 int n, s;
45
46 n=360;
47 //n=2*3*3*13;
48 //n=2*3*3*13*13*13;
49
50 divPrim(n,s);
51
52 cout<<"s = "<<s<<"\n";
53
54 return 0;
55 }
Problema 2
30
31 }
32
33 if(ncok < k)
34 cout<<"nu exista";
35 else
36 {
37 int i=0; // parcurg din nou cuvintele sa afisez primele k ok ...
38 while(k>0)
39 {
40 i++;
41 if(esteok[i]==1) { cout<<s[i]<<"\n"; k--;}
42 }
43 }
44
45 return 0;
46 }
47 /*
48 5 2
49 norii
50 cumulus
51 pluteau
52 pe
53 cer
54
55 norii
56 pluteau
57 */
Problema 3
42
43 // optimizarea = o singura parcurgere a sirului de date
44 while(fin>>nrc) // asa este OK ... !!!
45 {
46 nr1=nr2;
47 nr2=nrc;
48
49 if(((nr1%x10)==x) &&
50 ((nr2%x10)==x))
51 nr1s=nr1, nr2s=nr2;
52 }
53
54 if(nr1s>0)
55 cout<<nr1s<<" "<<nr2s<<"\n";
56 else
57 cout<<"nu exista";
58
59 fin.close();
60
61 return 0;
62 }
63 /*
64 210
65 3445 210 893210 1245 1210 3210 15210 67120 20210 12
66
67 3210 15210
68 */
Problema 3
Construcţia soluţiei:
CAPITOLUL 28. BAC 2021 28.3. SESIUNEA DE TOAMNĂ 226
Problema 4
Reprezentări diverse pentru arbore dar ... acelaşi rezultat:
Problema 5
Calcul ı̂n matricea de adiacenţă:
22
23 // [(x*y’)+(x’*y)]’=(x’+y)*(x+y’)=
24 // = x’x+x’y’+yx+yy’=x’y’+yx
25 if(ok==0) //toate i-urile sunt ... multiplu de ambele sau de niciunul !!!
26 cout<<0;
27
28 return 0;
29 }
30 /*
31 0
32 */
Problema 2
Reprezentarea execuţiei pseudocodului:
Problema 3
16
17 return 0;
18 }
Problema 2
Problema 3
Frecvenţele asociate celor două şiruri de numere:
CAPITOLUL 28. BAC 2021 28.3. SESIUNEA DE TOAMNĂ 232
46 }
47 }
48
49 cout<<nrpa;
50
51 return 0;
52 }
53 /*
54 na = 9 nb = 7
55 112 20 42 112 5013 824 10012 55 155
56 402 1024 321 521 57 6542 255
57
58 1 : 112 321
59 2 : 112 521
60 3 : 20 402
61 4 : 42 1024
62 5 : 42 6542
63 6 : 112 321
64 7 : 112 521
65 8 : 824 1024
66 9 : 824 6542
67 10 : 10012 321
68 11 : 10012 521
69 12 : 55 255
70 13 : 155 255
71 13
72 */
46 c12=y%100;
47 c1=c12/10;
48 c2=c12%10;
49 c21=c2*10+c1;
50 if(c12 < c21) f2b[c12]++; else f2b[c21]++; // 73 --> 37
51 }
52 cout<<"\n\n";
53
54 nrpa=0;
55 for(int i=0; i<=99; i++) // calcul = 100
56 {
57 if(f2a[i]==0 || f2b[i]==0) continue;
58
59 cout<<i<<" : "<<f2a[i]<<" "<<f2b[i]<<"\n";
60 nrpa=nrpa+f2a[i]*f2b[i];
61 }
62
63 cout<<nrpa;
64
65 return 0;
66 }
67 /*
68 na = 9 nb = 7
69 112 20 42 112 5013 824 10012 55 155
70 402 1024 321 521 57 6542 255
71
72 2 : 1 1
73 12 : 3 2
74 24 : 2 2
75 55 : 2 1
76 13
77 */
41
42 nrpa=0;
43 for(int ib=1; ib<=nb; ib++) // calcul = nb = 100.000 max
44 {
45 fin>>y;
46 cout<<y<<"\t";
47
48 c12=y%100;
49 c1=c12/10;
50 c2=c12%10;
51 c21=c2*10+c1;
52 if(c2 < c1) c12=c21; // cel mai mic ...
53
54 nrpa+=f2a[c12];
55 cout<<ib<<" : "<<f2a[c12]<<" --> "<<nrpa<<"\n";
56 }
57 cout<<"\n";
58
59 cout<<nrpa;
60
61 return 0;
62 }
63 /*
64 na = 9 nb = 7
65 112 20 42 112 5013 824 10012 55 155
66 402 1 : 1 --> 1
67 1024 2 : 2 --> 3
68 321 3 : 3 --> 6
69 521 4 : 3 --> 9
70 57 5 : 0 --> 9
71 6542 6 : 2 --> 11
72 255 7 : 2 --> 13
73
74 13
75 */
Capitolul 29
BAC 2020
Problema 2
Notăm v 0 a, v 1 b, v 2 c şi v 3 d. Trebuie să determinăm valorile a, b, c, d.
O primă observaţie utilă este că afişarea din funcţia f se face ”după” apelul recursiv, deci pe
traseul de ”ı̂ntoarcere” (al apelurilor recursive).
Prima afisare se face la momentul ”s5”, a doua la momentul ”s6”, ... aşa că pe ecran vor
apărea valorile: d 1 c b a. De aici rezultă că trebuie să avem d 1 2, c 0, b 2 şi a 0.
A doua observaţie: se poate ı̂ncepe cu ”rularea” funcţiei f (ca ı̂n figură) pentru a), apoi pentru
b) şi gata! (se obţine deja rezultatul).
236
CAPITOLUL 29. BAC 2020 29.1. SESIUNEA SPECIALĂ 237
Problema 3
Am notat prin s1, s2, s3 şi s4 cele patru sume care trebuie să respecte condiţia de a fi
un şir strict descrescător. În desen am renunţat uneori la un zero pentru a uşura un pic scrierea
configuraţiilor de numere!
Ce urmează după 80 60 50 10? În s23 60 nu mai putem construi altă configuraţie, aşa că
trebuie să ”mărim” configuraţie din s12. Ce urmează după configuraţia 80 60?
Urmează 80 70 iar pentru această configuraţie s12 80 70 150 iar s34 200 150 50.
50 se poate realiza cu 30+20 sau 40+10 iar cea mai ”mică” configuraţie este 30 20.
În concluzie, a şasea configuraţie este: c) 80 70 30 20.
Problema 4
tata[6]=0 deci nodul 6 este rădă cina arborelui.
tata[3]=tata[7]=6 ı̂nseamnă că 3 şi 6 sunt ”fiii” lui 6.
La fel se completează nivelurile următoare!
Problema 5
Din ciclul [1,2,3,4,1] se poate elimina oricare muchie.
13 do
14 {
15 b=a; // copie a lui a
16 x=0;
17 do
18 {
19 if(b%10 == c) x=1;
20 b=b/10;
21 } while( !((b==0)||(x==1)) ); // daca a gasit cifra c sau a parcurs
22 cout<<x<<’ ’; // toate cifrele ... se opreste
23 c=c+2; // cifra devine 2, apoi 4, apoi 6, ... deci cauta cifrele pare
24 } while( !(c>9) );
25
26 return 0;
27 }
Problema 2
Structura ı̂nregistrării:
CAPITOLUL 29. BAC 2020 29.1. SESIUNEA SPECIALĂ 241
9 {
10 char monitor;
11 struct xyz
12 {
13 int interna;
14 int externa;
15 } memorie;
16 };
17
18 struct calculator c;
19
20 c.monitor=’M’;
21
22 c.memorie.interna=123456;
23 c.memorie.externa=654321;
24
25 cout<<"monitor : "<<c.monitor<<"\n";
26 cout<<"memorie.interna : "<<c.memorie.interna<<"\n";
27 cout<<"memorie.externa : "<<c.memorie.externa<<"\n";
28
29 return 0;
30 }
16 {
17 char monitor;
18 struct xyz memorie;
19 } c;
20
21 //struct calculator c;
22
23 c.monitor=’M’;
24
25 c.memorie.interna=123456;
26 c.memorie.externa=654321;
27
28 cout<<"monitor : "<<c.monitor<<"\n";
29 cout<<"memorie.interna : "<<c.memorie.interna<<"\n";
30 cout<<"memorie.externa : "<<c.memorie.externa<<"\n";
31
32 return 0;
33 }
18 //struct calculator c;
19
20 c.monitor=’M’;
21
22 c.memorie.interna=123456;
23 c.memorie.externa=654321;
24
25 cout<<"monitor : "<<c.monitor<<"\n";
26 cout<<"memorie.interna : "<<c.memorie.interna<<"\n";
27 cout<<"memorie.externa : "<<c.memorie.externa<<"\n";
28
29 return 0;
30 }
Problema 3
37
38 return 0;
39 }
Problema 2
Soluţia 1: Citirea textului caracter cu caracter şi prelucrarea caracterelor.
24
25 i1=0;
26 i2=0;
27 while(i1<n)
28 {
29 while(t[i2]>=’a’ && t[i2]<=’z’) i2++; // i2 este plasat pe spatiu
30
31 if((i2-1)-(i1-1) < 3) // nu are cel putin 3 litere ...
32 {
33 i1=i2+1;
34 i2++; // se muta de pa spatiu spre dreapta ...
35 continue; // reia bucla while(i1<ns)
36 }
37
38 // cuvantul dintre i1 .. i2-1 are cel putin 3 litere
39 // prima litera ajunge ultima ...
40 primalitera=t[i1];
41 for(i=i1; i<=i2-2; i++)
42 t[i]=t[i+1];
43 t[i2-1]=primalitera;
44 i1=i2+1;
45 i2++; // se muta de pe spatiu spre dreapta ...
46 }
47 cout<<t;
48
49 return 0;
50 }
51 /*
52 un palc mic de scolarite ilumina sala
53 */
42 }
43 /*
44 un palc mic de scolarite ilumina sala
45 */
Problema 3
15
16 fin>>x;
17 while(!fin.eof())
18 {
19 f[x]++;
20 nv++;
21 fin>>x;
22 }
23
24 /*
25 while(fin>>x) // este ok si asa
26 {
27 cout<<nv<<" : "<<x<<"\n";
28 f[x]++;
29 nv++;
30 }
31 */
32
33 nrfimp=0;
34 for(int i=1; i<=1000; i++)
35 if(f[i]%2 == 1) nrfimp++;
36
37 if((nv%2 == 0 && nrfimp == 0) ||
38 (nv%2 == 1 && nrfimp == 1))
39 cout<<"DA";
40 else
41 cout<<"NU";
42
43 return 0;
44 }
Problema 2
Problema 3
Problema 4
Problema 5
Problema 2
23 c.centru.x = 1.1;
24 c.centru.y = 2.2;
25 c.raza = 3.3;
26
27 cout<<"x = "<<c.centru.x<<"\n";
28 cout<<"y = "<<c.centru.y<<"\n";
29 cout<<"raza = "<<c.raza<<"\n";
30
31 return 0;
32 }
Problema 3
38 else
39 m[i][j]=’a’+j-i;
40
41 afism();
42
43 return 0;
44 }
61 }
62 // ------------------------
63 //cout<<"\nA ramas n = "<<n<<"\n";
64
65 if(n>1) // NU daca am folosit while(n>1)
66 {
67 mn=mn*n;
68 //cout<<"("<<n<<") ";
69 }
70
71 //cout<<"\n";
72
73 return mn;
74 }
75
76 int main()
77 {
78 int n;
79
80 n=72;
81 //n=144;
82 //n=2*2*3*5*5*7;
83
84 int rez=multiplu2(n);
85
86 cout<<rez<<"\n";
87
88 return 0;
89 }
Problema 2
41 if(citat==1)
42 {
43 //cout<<" litera in citat ";
44 text[i]=text[i]-(’a’-’A’);
45 }
46 else
47 {
48 //cout<<" litera in text ";
49 }
50
51 //cout<<text[i]<<"\n";
52 }
53
54 cout<<text<<"\n";
55
56 return 0;
57 }
58 /*
59 mai bine sa fii un <om de valoare> decat un <om de succes>
60 */
Problema 3
55 v1=v2;
56 v2=v3;
57 }
58 }
59
60 if(gasitvarf==1)
61 {
62
63 }
64 else
65 {
66 cout<<"nu exista";
67 return 0;
68 }
69
70 // caut pana la sfarsitul fisierului alte varfuri (unul deja exista)
71 while(fin>>x)
72 {
73 v1=v2;
74 v2=v3;
75 v3=x;
76
77 if(v1<v2 && v2>v3) // daca v2 este varf
78 {
79 difvec=v3-v1;
80 if(difvec<0) difvec=-difvec; // valoare absoluta (pozitiva)
81
82 // v2 este varf mai bun ?
83 if(difvec<difmin)
84 {
85 varfmax=v2;
86 difmin=difvec;
87 }
88 else
89 if(difvec==difmin && v2>varfmax)
90 {
91 varfmax=v2;
92 }
93 }
94
95 // merg mai departe in sir
96 }
97
98 cout<<varfmax;
99
100 return 0;
101 }
Problema 2
Problema 3
Problema 4
Problema 5
15 c=n%10;
16 n=n/10;
17 if(c<5)
18 m=m-2*c;
19 else
20 m=m+c;
21 } while( !(n==0) );
22
23 if(m==0)
24 cout<<"DA";
25 else
26 cout<<m<<"NU";
27
28 return 0;
29 }
30 /*
31 247388
32 */
Problema 2
15
16 p[0].producator=’X’;
17 p[0].frecventa=2200;
18 p[0].pret=1234.567;
19
20 cout<<"producator : "<<p[0].producator<<"\n";
21 cout<<"frecventa : "<<p[0].frecventa<<"\n";
22 cout<<"pret : "<<p[0].pret<<"\n";
23
24 return 0;
25 }
Problema 3
48
49 if(a[i][2] > a[k][2]) // interschimbare (a[i] sa fie cel mai mic)
50 {
51 int aux;
52 aux=a[i][2];
53 a[i][2]=a[k][2];
54 a[k][2]=aux;
55 }
56 }
57 }
58 // -------------------------------------------------
59
60 afisa();
61
62 return 0;
63 }
Problema 2
61 {
62 i2=i-1; // cuvant: i1 .. i2
63 calcul();
64 i1=i2+2; // inceputul altui cuvant
65 }
66 else
67 {
68 cout<<"EROARE date !!!";
69 return 1;
70 }
71 }
72
73 if(nc>0)
74 cout<<s<<"\n";
75 else
76 cout<<"nu exista";
77
78 return 0;
79 }
80 /*
81 era o selectie reper de desene animate prezenta
82
83 reper pentru desene
84 */
Problema 3
17 {
18 if(x<vmin) vmin=x;
19 if(x>vmax) vmax=x;
20 }
21 cout<<"x = "<<x<<" vmin = "<<vmin<<" vmax = "<<vmax<<"\n";
22 }
23
24 if(vmax>9)
25 cout<<vmin-1<<" "<<vmax+1;
26 else
27 cout<<"nu exista";
28 return 0;
29 }
Capitolul 30
BAC 2019
30.1.1 Subiectul I
Problema 1
Expresia dată: E = (x¡3) && (y¿=5)
a. !((x¡3) —— (y¿=5)) = !(x¡3) && !(y¿=5) = (x¿=3) && (y¡5)
b. !(x¿=3) && (y¡5) = (x¡3) && (y¡5)
c. !(!(x¡3) —— !(y¿=5)) = (x¡3) && (y¿=5) = E
d. !((x¿=3) && (y¡5)) = !(x¿=3) —— !(y¡5)) = (x¡3) —— (y¿=5)
Problema 2
Se ı̂nţelege clar că m şi n sunt cele două numere iar d este divizor. Apelul f(x,y,x) arată că se
transmit cele două numere x şi y iar pe post de divizor de inceput se transmite unul dintre numere,
de exemplu x.
Apelurile f(m+1,n+1,d) şi f(m-1,n-1,d) se pot elimina din analiza noastră pentru că schimbă
numerele m şi n. Rămâne să analizăm apelurile f(m,n,d+1) şi f(m,n,d-1).
Este clar că nu trebuie mărit divizorul deja ı̂ncercat, deci apelul cu d+1 este eliminat.
Dacă x=9 şi y=6 atunci apelurile sunt: f(9,6,9) = f(9,6,8) = f(9,6,7) = f(9,6,6) = f(9,6,5) =
f(9,6,4) = f(9,6,3) = 3;
270
CAPITOLUL 30. BAC 2019 30.1. SESIUNEA SPECIALĂ 271
Problema 3
Ca să fie mai ”uşor” sunt utile codificări cu cifre sau litere.
Problema 4
Problema 5
CAPITOLUL 30. BAC 2019 30.1. SESIUNEA SPECIALĂ 272
CAPITOLUL 30. BAC 2019 30.2. SESIUNEA IUNIE - IULIE 273
BAC 2018
31.1.1 Subiectul I
***
274
CAPITOLUL 31. BAC 2018 31.2. SESIUNEA IUNIE - IULIE 275
Problema 1
Problema 2
Problema 3
Problema 4
Problema 5
BAC 2017
32.1.1 Subiectul I
***
276
CAPITOLUL 32. BAC 2017 32.2. SESIUNEA IUNIE - IULIE 277
Problema 1
Problema 2
Problema 3
Problema 4
Problema 5
BAC 2016
33.1.1 Subiectul I
***
278
CAPITOLUL 33. BAC 2016 33.2. SESIUNEA IUNIE - IULIE 279
Problema 1
Problema 2
Problema 3
Problema 4
Problema 5
BAC 2015
34.1.1 Subiectul I
***
280
CAPITOLUL 34. BAC 2015 34.2. SESIUNEA IUNIE - IULIE 281
Problema 1
Problema 2
Problema 3
Problema 4
Problema 5
BAC 2014
35.1.1 Subiectul I
***
282
CAPITOLUL 35. BAC 2014 35.2. SESIUNEA IUNIE - IULIE 283
Problema 1
Problema 2
Problema 3
Problema 4
Problema 5
BAC 2013
36.1.1 Subiectul I
***
284
CAPITOLUL 36. BAC 2013 36.2. SESIUNEA IUNIE - IULIE 285
Problema 1
Problema 2
Problema 3
Problema 4
Problema 5
BAC 2012
37.1.1 Subiectul I
***
286
CAPITOLUL 37. BAC 2012 37.2. SESIUNEA IUNIE - IULIE 287
Problema 1
Problema 2
Problema 3
Problema 4
Problema 5
BAC 2011
38.1.1 Subiectul I
***
288
CAPITOLUL 38. BAC 2011 38.2. SESIUNEA IUNIE - IULIE 289
Problema 1
Problema 2
Problema 3
Problema 4
Problema 5
BAC 2010
39.1.1 Subiectul I
***
290
CAPITOLUL 39. BAC 2010 39.2. SESIUNEA IUNIE - IULIE 291
Problema 1
Problema 2
Problema 3
Problema 4
Problema 5
”Instalare” C++
Instalarea este foarte uşoară (este de tipul ”next -> next -> ... -> next”) iar pe in-
ternet sunt multe site-uri de ajutor. De exemplu:
https://www.pbinfo.ro/?pagina=intrebari-afisare&id=26
https://www.youtube.com/watch?v=CLkWRvAwLO8
https://infoas.ro/lectie/112/tutorial-instalare-codeblocks-usor-introducere-in-in
https://www.competentedigitale.ro/c/oji2019/Kit_OJI_2017.rar
293
APPENDIX A. ”INSTALARE” C++ A.1. KIT OJI 2017 294
A.1.1 Code::Blocks
Pentru versiuni mai noi, de Code::Blocks şi compilatoare, se poate accesa site-ul
http://www.codeblocks.org/downloads/binaries
de unde se poate descărca, de exemplu, codeblocks-20.03mingw-setup.exe.
Versiuni mai vechi, dar foarte bune, se pot descărca de la adresa
27
Code::Blocks este un IDE (integrated development environment) pentru C/C++, un fel de Notepad ... mai
sofisticat, cu multe butoane care lansează ı̂n execuţie diverse programe, de exeplu g++.exe
28
g++.exe este compilatorul de C++, programul care va verifica dacă instrucţiunile noastre sunt ok sau nu ...
şi care ne va supăra mereu cu erorile pe care ni le arată ... ... Este “o mică artă” să ı̂nţelegem mesajele de
eroare pe care le vedem pe ecran şi să fim ı̂n stare să “depanăm” programele noastre!
APPENDIX A. ”INSTALARE” C++ A.1. KIT OJI 2017 295
http://www.codeblocks.org/downloads/source/5
Mai precis:
https://sourceforge.net/projects/codeblocks/files/Binaries/20.03/
http://sourceforge.net/projects/codeblocks/files/Binaries/17.12
http://sourceforge.net/projects/codeblocks/files/Binaries/16.01
De preferat este să avem cel puţin două partiţii: C:¯, D:¯, ... şi să “lăsăm ı̂n pace” partiţia C:¯
pentru sistemul de operare şi programele instalate!
În figura de mai sus se poate observa că pe D:¯ există un folder de lucru pentru programele ı̂n
C++, folder care se numeşte Programe C++. Aici vom salva toate programele C++ pe care
le vom scrie, eventual organizate pe mai multe subfoldere.
Click-dreapta cu mouse-ul şi selectăm “New -¿ Text document” ca ı̂n figura următoare.
APPENDIX A. ”INSTALARE” C++ A.1. KIT OJI 2017 296
Dacă vom executa două click-uri pe numele fşierului p01.cpp sau un click pentru a marca
fişierul şi apoi un ¡Enter¿, se va declanşa Code::Blocks cu p01.cpp ı̂n fereastra de editare şi, ce
este şi mai important, cu Programe C++ ca folder curent de lucru pentru Code::Blocks.
Adică, aici vor apărea toate fişiere generate de Code::Blocks pentru p01.cpp.
Figura A.9: Pregătit pentru a scrie cod de program C++ ı̂n Code::Blocks
APPENDIX A. ”INSTALARE” C++ A.1. KIT OJI 2017 298
Dacă avem fişierele p01.cpp, ..., p05.cpp, ı̂n folderul nostru de lucru, şi facem dublu-click pe
fiecare ... vor apărea toate ...
A.2 winlibs
A.2.1 GCC şi MinGW-w64 pentru Windows
Se descarcă de la
http://winlibs.com/#download-release
unul dintre fişierele:
winlibs-x86_64-posix-seh-gcc-10.2.0-llvm-11.0.0-mingw-w64-8.0.0-r
3.7z dimensiune fişier = 148 MB
winlibs-x86_64-posix-seh-gcc-10.2.0-llvm-11.0.0-mingw-w64-8.0.0-r
3.zip dimensiune fişier = 324 MB
winlibs-x86_64-posix-seh-gcc-10.2.0-mingw-w64-8.0.0-r3.7z dimensiune
fişier = 52.1 MB
winlibs-x86_64-posix-seh-gcc-10.2.0-mingw-w64-8.0.0-r3.zip dimensi-
une fişier = 141 MB
A.2.2 PATH
Trebuie pusă ı̂n PATH calea pentru D:\mingw64\bin\. În “Type here to search” scrieţi: path
şi apoi click pe “Edit the system environment variables”, ca ı̂n figura următoare:
APPENDIX A. ”INSTALARE” C++ A.2. WINLIBS 304
Se selecteaza “Path” şi click pe “Edit”. Apare fereastra “Edit Environment Variables”
C:¯path
Dacă totul este OK atunci se trece la instalarea IDE-ului preferat (Integrated Development
29
Environment ), de exemplu Code::Blocks 20.03 (sau Eclipse, Visual Studio Code, Dev C++,
NetBeans, şi altele).
A.2.3 CodeBlocks
CodeBlocks se poate descărca de la http://www.codeblocks.org/downloads/26. Sunt
mai multe variante dar eu am descărcat numai codeblocks-20.03-setup.exe care are 35.7 MB.
La instalare am lăsat totul implicit, deci ... Next, Next, ..., Next până la sfârşit!
La prima lansare ı̂n execuţie este necesară setarea locaţiei compilatorului de C++ (gcc-ul pe
care tocmai l-am instalat!).
29
https://en.wikipedia.org/wiki/Integrated_development_environment
https://ro.wikipedia.org/wiki/Mediu_de_dezvoltare
APPENDIX A. ”INSTALARE” C++ A.2. WINLIBS 307
316
Bibliografie
[1] Aho, A., Hopcroft, J., Ullman, J.D.; Data strutures and algorithms, Addison Wesley, 1983
[2] Andreica M.I.; Elemente de algoritmică - probleme şi soluţii, Cibernetica MC, 2011
[3] Andonie R., Gârbacea I.; Algoritmi fundamentali, o perspectivă C++, Ed. Libris, 1995
[4] Atanasiu, A.; Concursuri de informatică. Editura Petrion, 1995
[5] Bell D., Perr M.; Java for Students, Second Edition, Prentice Hall, 1999
[21] Knuth, D.E.; The art of computer programming, vol. 4A: Combinatorial algorithms, Part 1,
Addison Wesley, 2011.
[22] Lambert,K. A., Osborne,M.; Java. A Framework for Programming and Problem Solving,
PWS Publishing, 1999
[23] Laaksonen A.; Guide to competitive programming, Springer, 2017
[24] Livovschi, L.; Georgescu H.; Analiza şi sinteza algoritmilor. Ed. Enciclopedică, Bucureşti,
1986.
[25] Niemeyer, P., Peck J.; Exploring Java, O’Reilly, 1997.
317
BIBLIOGRAFIE BIBLIOGRAFIE 318
[26] Odăgescu, I., Smeureanu, I., Ştefănescu, I.; Programarea avansată a calculatoarelor personale,
Ed. Militară, Bucureşti 1993
[27] Odăgescu, I.; Metode şi tehnici de programare, Ed. Computer Lobris Agora, Cluj, 1998
[28] Popescu Anastasiu, D.; Puncte de articulaţie şi punţi ı̂n grafuri, Gazeta de Informatică nr.
5/1993
[29] Răbâea, A.; https://math.univ-ovidius.ro/Doc/Admitere/CentruPregatire
/2007/Info/Lista_probleme_2000-2007.pdf
[30] Răbâea, A.; https://math.univ-ovidius.ro/Doc/Admitere/CentruPregatire
/2007/Info/Rezolvari_C09.pdf
320
What’s the next?
ORNL’s Frontier First to Break the Exaflop Ceiling
Over time
the following steps
will lead you to the value
you seek for yourself
now!