1. Fişierul BAC.
TXT conţine 10000 de numere naturale (dintre care cel puţin două impare) cu cel mult 9
cifre fiecare. Numerele sunt separate prin câte un spaţiu.
a) Scrieţi un program C++ care, utilizând un algoritm eficient din punct de vedere al spaţiului de memorare şi
al timpului de executare, determină şi afişează pe ecran penultimul număr impar din fişier precum şi numărul
de ordine al acestuia. (6p.)
Exemplu: dacă fişierul conţine valorile alăturate, se vor afişa
numerele 49 9998 (penultimul număr impar este 49 şi are numărul de ordine 9998.
b) Descrieţi în limbaj natural metoda utilizată şi explicaţi în ce constă eficienţa ei. (4p.)
2. Pe prima linie a fişierului text DATE.TXT se află un şir de cel mult 10000 de numere naturale, despărţite
prin câte un spaţiu, fiecare având exact o cifră.
a) Scrieţi un program C++ care citeşte numerele din fişier şi le scrie în fişierul text OUT.TXT, pe o singură
linie, în ordine crescătoare a valorilor lor, separate prin câte un spaţiu. Se va utiliza un algoritm eficient din
punct de vedere al timpului de executare.
Exemplu: dacă din fişierul DATE.TXT se citeşte şirul:
243274372772191123
fişierul OUT.TXT va conţine
1 1 1 2 2 2 2 2 3 3 3 4 4 7 7 7 7 9 (6p.)
b) Explicaţi în limbaj natural metoda utilizată, justificând eficienţa acesteia. (4p.)
3. Pe prima linie a fişierului text DATE.TXT se află un număr natural n (0<n≤10000), iar pe a doua linie un şir
de n numere naturale, depărţite prin câte un spaţiu, fiecare având cel mult 4 cifre.
a) Scrieţi un program C++ care citeşte numerele din fişier şi afişează, pe ecran, valorile din şir în ordinea
crescătoare a cifrei unităţilor. Dacă două numere din şir au aceeaşi cifră a unităţilor nu contează care dintre
ele va fi afişat primul. Realizaţi un program eficient din punct de vedere al timpului de executare. (6p.)
Exemplu: dacă fişierul DATE.TXT conţine
7
32 491 26 328 213 500 422
pe ecran se va afişa:
500 491 32 422 213 26 328
b) Descrieţi succint, în limbaj natural, metoda utilizată, justificând eficienţa acesteia. (4p.)
5. Fişierul text BAC.DAT conţine pe prima linie, separate printr-un spaţiu, două valori naturale n şi m
(2≤n≤1000, 2≤m≤1000), pe a doua linie n valori întregi, apoi pe următoarele m linii câte două valori, fiecare
dintre aceste perechi determinând un interval închis (prin interval închis determinat de două valori a şi b se
înţelege intervalul [a,b], dacă a≤b sau intervalul [b,a], dacă b<a). Valorile de pe a doua şi de pe următoarele
m linii sunt separate între ele prin câte un spaţiu şi au cel mult 4 cifre fiecare. Se cere determinarea şi
afişarea pe ecran a numărului de intervale, dintre cele citite din fişier, care conţin toate valorile aflate pe a
doua linie a fişierului. Se va utiliza o metodă eficientă din punct de vedere al timpului de executare şi al
memoriei utilizate.
Exemplu: dacă fişierul BAC.DAT are conţinutul alăturat, programul va afişa: 2
Explicaţie: din cele patru intervale date pe liniile 3, 4, 5 şi 6, numai două conţin toate valorile de pe a doua
linie a fişierului şi anume [-20,50] şi [-11,20].
10 4
8 3 -11 17 -8 3 14 5 0 -2
-10 100
-20 50
15 -80
20 -11
a) Descrieţi succint, în limbaj natural, metoda de rezolvare folosită, explicând în ce constă eficienţa ei (3 – 4
rânduri). (4p.)
b) Scrieţi un program C++ care să rezolve problema conform metodei descrise. (6p.)
6. Pe prima linie a fişierului text DATE.TXT se află un număr natural nenul n (n≤1000), iar pe a doua linie un
şir de n numere întregi nenule, depărţite prin câte un spaţiu, fiecare având cel mult 9 cifre.
a) Scrieţi un program C++ care citeşte numerele din fişier şi ordonează crescător doar numerele pozitive din
şir, fără a modifica poziţiile numerelor negative. Programul va afişa, pe ecran, pe o singură linie, şirul obţinut
după ordonare, numerele fiind despărţite prin câte un spaţiu. În locul fiecărui număr negativ din şirul citit se
va afişa valoarea 0. Realizaţi un program eficient din punct de vedere al spaţiului de memorie folosit. (6p.)
Exemplu: dacă fişierul DATE.TXT conţine:
7
32 -491 23 -328 213 51 -4
pe ecran se va afişa:
23 0 32 0 51 213 0
b) Descrieţi succint, în limbaj natural, metoda utilizată, justificând eficienţa acesteia. (4p.)
7. Se considera fisierul BAC.TXT ce contine un sir crescator cu cel mult un milion de numere naturale de cel
mult noua cifre fiecare, separate prin câte un spatiu.
Sa se scrie un program C/C++ care, folosind un algoritm eficient din punct de vedere al memoriei utilizate si
al timpului de executare, citeste din fisier toti termenii sirului si afiseaza pe ecran, pe o singura linie, fiecare
termen distinct al sirului urmat de numarul de aparitii ale acestuia în sir. Valorile afisate sunt separate prin
câte un spatiu. (6p.)
Exemplu: daca fisierul BAC.TXT are urmatorul continut:
1 1 1 5 5 5 5 9 9 11 20 20 20
programul va afisa:
1 3 5 4 9 2 11 1 20 3
deoarece 1 apare de 3 ori, 5 apare de 4 ori, etc.
b) Descrieţi succint, în limbaj natural, metoda utilizată, justificând eficienţa acesteia. (4p.)
8. Fişierul text BAC.TXT conţine un şir s de cel mult un milion de numere naturale, formate fiecare din cel
mult 9 cifre, separate prin câte un spaţiu
a) Scrieţi un program C/C++ care citeşte numerele din fişier şi determină, utilizând un algoritm eficient din
punct de vedere al memoriei utilizate şi al timpului de executare, lungimea secvenţei obţinute prin eliminarea
din cele două extremităţi ale şirului s a unui număr minim de numere, fără a schimba ordinea celorlalte
numere, astfel încât secvenţa rezultată să înceapă cu un număr format doar din cifre pare şi să se termine cu
un număr format doar din cifre impare. Programul va afişa pe ecran lungimea secvenţei obţinute.
De exemplu, dacă fişierul BAC.TXT conţine numerele:
132 214 62 34 28 34 8 45 18 72 35 12 17 34 4 135 63 81 101
pe ecran se va afişa numărul 14, deoarece secvenţa căutată se obţine prin eliminarea numerelor subliniate.
(8p.)
b) Descrieţi succint, în limbaj natural, metoda de rezolvare folosită, explicând în ce constă eficienţa ei (3 – 4
rânduri). (2p.)
9. Fişierul BAC.TXT are pe prima linie două numere naturale n şi m (0<n<1000, 0<m<1000) separate prin
câte un spaţiu, pe linia a doua n numere întregi ordonate strict crescător, iar pe linia a treia m numere
naturale distincte. Numerele din fişier aflate pe linia a doua şi a treia au cel mult 6 cifre fiecare şi sunt
despărţite în cadrul liniei prin câte un spaţiu. Să se scrie un program care citeşte toate numerele din fişier şi
afişează pe ecran, despărţite prin câte un spaţiu, toate numerele de pe a doua linie a fişierului care apar şi
pe linia a treia a acestuia.
Exemplu: dacă fişierul are următorul conţinut:
65
234589
4 5 2 11 8
atunci se va afişa: 5 2 8 4, nu neapărat în această ordine.
a) Descrieţi în limbaj natural o metodă de rezolvare eficientă ca timp de executare. (4p.)
b) Scrieţi programul C/C++ corespunzător metodei descrise la punctul a). (6p.)
10. Fişierul text bac.in conţine pe prima sa linie un număr natural n (0<n<10000), iar pe
următoarea linie n numere naturale din intervalul [1,100] separate prin câte un spaţiu.
Se cere să se citescă din fişier toate numerele şi să se afişeze pe ecran numărul sau numerele care apar de
cele mai multe ori printre numerele citite de pe a doua linie a fişierului. Numerele afişate vor fi separate prin
câte un spaţiu. Alegeţi un algoritm de rezolvare eficient atât din punctul de vedere al timpului de executare
cât şi al gestionării memoriei. .
Exemplu: dacă fişierul bac.in are următorul conţinut:
12
122329339971
pe ecran se vor afişa valorile 2, 3 şi 9, nu neapărat în această ordine.
a) Explicaţi în limbaj natural metoda utilizată justificând eficienţa acesteia (4-6 rânduri) (4p.)
b) Scrieţi programul C/C++ ce rezolvă problema enunţată, corespunzător metodei
descrise la punctul a). (6p.)
11. Se citeşte de pe prima linie a fişierului numere.in un număr natural n (0<n<10000) şi, de pe a doua
linie a fişierului, n numere naturale din intervalul [1,100] şi se cere să se afişeze pe ecran, în ordine
crescătoare, despărţite prin câte un spaţiu, numărul sau numerele întregi din intervalul [1,100] care nu apar
printre numerele citite. Dacă pe a doua linie a fişierului apar toate numerele din intervalul precizat, se va afişa
mesajul NU LIPSESTE NICIUN NUMAR. Alegeţi un algoritm de rezolvare eficient din punctul de vedere al
timpului de executare.
Exemplu: pentru fişierul numere.in cu următorul conţinut
12
4 2 3 1 6 5 7 8 9 11 10 100
se vor afişa valorile 12 13 … 99.
a) Explicaţi în limbaj natural metoda utilizată, justificând eficienţa acesteia (4-6 rânduri).(4p.)
b) Scrieţi programul C/C++ ce rezolvă problema enunţată, corespunzător metodei descrise la
punctul a). (6p.)
12. Fişierul text bac.in conţine pe prima sa linie un număr natural n (0<n<10000), iar pe următoarea
linie n numere naturale din intervalul [1,100]. Se cere să se citescă din fişier toate numerele şi să se afişeze
pe ecran, în ordine descrescătoare, toate numerele care apar pe a doua linie a fişierului şi numărul de apariţii
ale fiecăruia. Dacă un număr apare de mai multe ori, el va fi afişat o singură dată. Fiecare pereche „valoare -
număr de apariţii” va fi afişată pe câte o linie a ecranului, numerele fiind separate printr-un spaţiu, ca în
exemplu.
Alegeţi un algoritm de rezolvare eficient din punctul de vedere al timpului de executare.
Exemplu: dacă fişierul bac.in are următorul conţinut:
12
122322332321
pe ecran se vor afişa, în această ordine, perechile:
34
26
12
a) Explicaţi în limbaj natural metoda utilizată justificând eficienţa acesteia (4-6 rânduri) (4p.)
b) Scrieţi programul C/C++ ce rezolvă problema enunţată, corespunzător metodei descrise la punctul a).(6p.)