Sunteți pe pagina 1din 33

EXAMENUL PENTRU OBȚINEREA ATESTATULUI PROFESIONAL LA DISCIPLINA

INFORMATICĂ
2020
SUBIECTE DE TIP II - PROGRAMARE

1. Fișierul text numere.in conține pe prima linie un număr natural n (0<n<1000), iar pe
a doua linie n numere naturale cu cel mult 9 cifre fiecare, despărțite prin câte un spațiu.
Scrieți un program C/C++ care citește toate numerele din fișierul numere.in și care:
• afișează în fișierul numere.out toate numerele din fișierul de intrare care au
toate cifrele pare;
• afișează pe a doua linie a fișierului numere.out cel mai mare număr care are
toate cifrele pare.
Exemplu:
numere.in numere.out
4 24 2462
23 24 555 2462 2462

2. Fișierul atestat.in conține pe prima linie un număr natural n de cel mult 9 cifre.
Scrieți un program C++ care citește din „atestat.in” numărul n și care scrie în fișierul
atestat.out:
a) pe prima linie, cifrele de rang par separate printr-un spațiu (rangul se
numerotează de la dreapta la stânga începând cu cifra unităților care va avea
rangul 1);
b) pe a doua linie numărul obținut din n după ce s-a făcut o permutare circulară
spre stânga a cifrelor sale.
Exemplu:
Dacă fișierul atestat.in conține:
32245673
atunci atestat.out va avea următorul conținut:
7523
22456733

• În fișierul date.in pe prima linie este memorat un număr natural n iar pe următoarea
linie sunt memorate n numere naturale separate prin spațiu, numere de maxim 9
cifre. Se cere:
a) să se afișeze pe prima linie a fișierului date.out cel mai mic număr impar și
poziția primei apariții a acestuia. Dacă nu există astfel de numere să se afișeze
mesajul "NU EXISTA";
b) să se afișeze pe a doua linie a fișierului date.out cel mai mare divizor comun
al primelor două numere dintre cele n numere naturale din fișierul date.in.
Exemplu:
date.in date.out
4 33 2
24 33 234 100 3
4. Fișierul date.in conține cel mult 50 de numere naturale, numerele fiind separate prin
câte un spațiu. Fiecare număr are cel mult 4 cifre.
Se cere:
• scrieți un program C/C++ care afișează pe câte o linie a fișierului date.out, fiecare
număr citit, în ordinea citirii, și divizorii proprii ai acestuia;
• scrieți pe următoare linie a fișierului date.out, numărul care are cei mai mulți
divizori proprii. În cazul în care există mai multe valori în fișier care au număr maxim
de divizori proprii, programul va afișa cea mai mică valoare dintre acestea.
Exemplu: dacă fișierul date.in conține valorile:
23 12 100 36
atunci se va scrie în fișierul date.out:
23
12 2 3 4 6
100 2 4 5 10 20 25 50
36 2 3 4 6 9 12 18
36
pentru că atât 100 cât și 36 au număr maxim de divizori proprii, dar 36 este cel mai mic.

• Fișierul text Numere.in conține cel mult 1000 de numere naturale cu cel mult patru
cifre fiecare, despărțite prin câte un spațiu.
Se cere:
• afișați pe ecran primul număr prim din fișier. Dacă fișierul nu conține nici un astfel
de număr, atunci se va scrie mesajul NU EXISTA.
• afișați factorii primi împreună cu exponenții lor, din descompunerea în factori primi
ai primului număr din fișierul Numere.in. Afișarea se va face în fișierul
Rezultate.out, fiecare factor și exponentul său pe câte o linie în fișier, separați
prin câte un spațiu.
Exemplu: dacă fișierul Numere.in are următorul conținut:
300 11 44 25 7 13
pe ecran se va afișa 11,
iar fișierul Rezultate.out va avea următorul conținut:
22
31
52
pentru că 300=22*31*52.

6. În fișierul numere.in sunt memorate cel mult 1000 de numere naturale de cel mult 4
cifre fiecare.
Scrieți un program care citește numerele din fișierul numere.in și rezolvă următoarele
cerințe:
• scrie pe prima linie a fișierului numere.out cel mai mare număr palindrom din
fișierul numere.in;
• scrie pe a doua linie a fișierului numere.out, separate prin spațiu, primul și
ultimul număr palindrom din fișierul numere.in.
Exemplu:
numere.in numere.out
10 101 23 44 676 43 88 201 202 124 676
141 90 101 141
7. Fișierul atestat.in conține două linii. Pe prima linie este scris un număr natural nenul
n, (5<n<30). Pe cea de-a doua linie a fișierului sunt scrise n numere naturale separate
prin câte un spațiu, formate fiecare din cel mult 4 cifre, reprezentând un șir de n
numere naturale nenule. Cel puțin unul din cele n numere din șir este număr impar.
Să se realizeze un program în limbajul C/C++, care scrie în fișierul atestat.out:
• pe prima linie, separate printr-un spațiu, numărul cifrelor numerelor impare din
șir;
• pe următoarea linie a fișierului, cel mai mare divizor comun dintre elementul
minim și cel maxim din șir.
Exemplu:
atestat.in atestat.out
6 312
1232 243 98 3 242 27 3

8. Din fișierul cmmdc3.in se citește un număr natural n de exact 9 cifre. Numărul n citit
se va împărți apoi în 3 numere, de câte 3 cifre fiecare, spre exemplu: pentru , cele 3
numere vor fi: , , .
Se cere:
a) pe prima linie a fișierului cmmdc3.out se vor afișa cele 3 numere astfel
formate, separate prin câte un spațiu;
b) pe a doua linie a fișierului cmmdc3.out se va afișa cel mai mare divizor
comun a celor 3 numere.
Exemplu:
cmmdc3.in cmmdc3.out
153006018 153 6 18
3
9. Din fișierul tip1.in se citește un număr natural n cu maxim nouă cifre nenule și o cifră
pară k. Să se scrie în fișierul tip1.out răspunsul la următoarele cerințe:
• numărul care se obține prin eliminarea tuturor cifrelor cu valoarea k din x;
• cel mai mare număr, mai mic decât n, care este o putere a lui k.
Exemplu:
Date de intrare: 1231 2
Date de ieșire: pe prima linie a fișierului tip1.out se va scrie 131
pe a doua linie a fișierului tip1.out se va scrie 1024

10. Fișierul text numere.in conține pe prima linie un număr natural n (0<n<1000), iar pe
a doua linie n numere naturale cu cel mult 9 cifre fiecare, despărțite prin câte un spațiu.
Scrieți un program C/C++ care citește toate numerele din fișierul numere.in și care:
a) scrie pe prima linie în fișierul de ieșire numere.out, separate prin câte un
spațiu, numerele palindrom de pe a doua linie a fișierului numere.in;
b) scrie pe a doua linie în fișierul numere.out, în ordine crescătoare numerele
palindrom care au un număr impar de cifre de pe a doua linie a fișierului
numere.in.
Exemplu:
numere.in numere.out
8 53135 3113 373 239932 313
53135 3113 61556 373 54 239932 313 313 373 53135
122

11. Fișierul puncte.txt conține cel mult 1000 de linii, pe fiecare linie fiind scrise câte
două numere întregi nenule semnificând coordonatele unor puncte în plan.
Scrieți un program care citește coordonatele punctelor din fișierul puncte.txt și afișează
pe ecran, separate prin spațiu, două valori determinate astfel:
• prima valoare reprezintă numărul de valori care se află în cadranul I;
• a doua valoare reprezintă distanța maximă existentă între două puncte.
Exemplu:
puncte.txt ecran
1 1 2 11
10 1
-1 1

12. Fișierul fractii.txt conține pe prima linie un număr n cu cel mult două cifre iar pe
următoarele n linii câte două numere naturale nenule semnificând numărătorul și
numitorul unei fracții. Scrieți un program care citește datele din fișierul fractii.txt și
afișează pe ecran, separate prin spațiu, două valori determinate astfel:
• prima valoare reprezintă numărul de fracții ireductibile scrise în fișierul fractii.txt;
• a doua valoare reprezintă cel mai mic numitor comun al tuturor fracțiilor.
Exemplu:
Dacă fișierul fractii.txt are următorul conținut:
4
23
46
24
11 6
atunci pe ecran se vor afișa valorile: 2 12 deoarece sunt două fracții ireductibile și cel
mai mic numitor comun al tuturor fracțiilor este 12.

13. Fișierul atestat.in conține pe prima linie numărul natural nenul n (2<n<10). Pe
fiecare dintre următoarele n linii sunt scrise câte trei numere reale x , y și r,
reprezentând coordonatele carteziene ale centrului unui cerc din planul xOy și raza
acestuia. Cele trei numere x, y și r sunt separate prin câte un spațiu.
Să se scrie un program, în limbajul /C/C++, care scrie în fișierul atestat.out:
• coordonatele carteziene ale centrelor cercurilor din planul xOy şi raza acestora,
sub forma (x, y, r) (abscisă, ordonată, rază), câte unul pe linie, în ordinea
crescătoare a razelor;
• pe linia următoare, numărul de cercuri care au centrul situat pe prima
bisectoare. Un punct se află situat pe prima bisectoare atunci când abscisa și
ordonata acestuia sunt egale.
Exemplu:
atestat.in atestat.out
5 (1,3,1)
131 (3,3,2)
447 (6,2,3)
255 (2,5,5)
332 (4,4,7)
623 2

14. La un magazin sunt cel mult n produse fiecare produs fiind identificat prin cod, preț,
cantitate (numere naturale de maxim 4 cifre) și denumire(maxim 20 litere și spații). În
fișierul tip5.in pe prima linie se află n numărul de produse iar pe următoarele n linii,
datele pentru fiecare produs( cod, preț cantitate și denumire). Să se realizeze un
program C++ care să afișeze în fișierul de ieșire tip5.out:
a) pe prima linie, lista denumirii produselor cu cantitatea mai mare ca 10,
separate prin virgulă, sau mesajul NU EXISTA;
b) pe următoarele linii se va scrie lista produselor ordonată descrescător după
preț ( cod, denumire, preț și cantitate) și la final pe o linie nouă valoarea totală a
stocului de marfă.
Exemplu:
tip5.in tip5.out
3 unt, paste
11 3 20 unt 6 paste 4 11
2 2 5 apa 11 unt 3 20
6 4 11 paste 2 apa 2 5
114

15. Într-o clasă sunt maxim 30 elevi, fiecare elev fiind identificat prin nume și prenume.
Elevul poate primi pe semestru la o disciplina maxim 5 note. Dacă are mai puțin de 5
note, notelor lipsă li se va atribui valoarea 0. Datele sunt citite din fișierul de intrare
elev.in astfel: pe prima linie numărul n de elevi iar pe următoarele n linii atributele
pentru fiecare elev (notele urmate de numele și prenumele). Să se realizeze un
program C++ care să afișeze în fișierul de ieșire elev.out mediile elevilor din clasă la
acea disciplina(medie urmată de nume și prenume) în ordinea:
a) descrescătoare a mediilor, pe primele n linii;
b) alfabetică a numelui și prenumelui, pe următoarele n linii.
Exemplu:
elev.in elev.out
3 7.00 Bran Ion
5 5 5 5 0 Pop Vasile 6.00 Aldea Maria
6 6 0 6 6 Aldea Maria 5.00 Pop Vasile
0 0 7 7 7 Bran Ion 6.00 Aldea Maria
7.00 Bran Ion
5.00 Pop Vasile
16. Fișierul text numere.in conține pe prima linie un număr natural n (0<n<1000), iar pe
a doua linie n numere naturale cu cel mult 9 cifre fiecare, despărțite prin câte un spațiu.
Scrieți un program C/C++ care citește toate numerele din fișierul numere.in și care:
• afișează pe prima linie în fișierul numere.out suma cifrelor fiecărui număr
din fișierul de intrare;
• afișează pe a doua linie în fișierul numere.out numerele care au suma
cifrelor maximă.
Exemplu:
numere.in numere.out
3 10 5 10
82 500 1234 82 1234

#include <fstream>
using namespace std;
ifstream f("numere.in");
ofstream g("numere.out");
int n,v[1001],s,x[1001],maxi;
void citire()
{f>>n;
for(int i=1;i<=n;i++)
f>>v[i];
}
int suma(int a)
{int s=0;
while(a)
{s=s+a%10;
a=a/10;
}
return s;
}
void sm(int n,int v[1001])
{ for(int i=1;i<=n;i++)
{x[i]=suma(v[i]);g<<x[i]<<' ';}
g<<endl;
for(int i=1;i<=n;i++)
if(maxi<=x[i]) {g<<v[i]<<' ';maxi=x[i];}
}
int main()
{citire();
sm(n,v);
f.close();
g.close();
return 0;
}

17. Fișierul atestat.in conține două linii. Pe prima linie este scris un număr natural n
nenul (n<=50) iar pe a doua linie sunt scrise n numere naturale nenule de cel mult 9
cifre separate prin câte un spațiu. Scrieți un program C++ care citește din atestat.in
numărul n și apoi cele n numere și care scrie în fișierul atestat.out:
• pe prima linie media aritmetică a numerelor de pe poziții impare din șir;
• pe a doua linie, în ordine crescătoare elementele distincte ale șirului dat.
Exemplu:
Dacă fișierul atestat.in conține:
5
4 2 2 2 6
atunci atestat.out va avea următorul conținut:
4
4 6
#include <bits/stdc++.h>
using namespace std;
ifstream f("atestat.in");
ofstream g("atestat.out");
int n, v[55];
void citire()
{int s=0,nr=0;
f>>n;
for(int i=1;i<=n;i++)
{f>>v[i];if(i%2!=0){s=s+v[i];nr++;}}
g<<(float)s/nr<<'\n';
}
void numere(int n,int v[55])
{int i=1;
while(i<=n)
{if(v[i]!=v[i+1]&&v[i]!=v[i-1])
g<<v[i]<<" ";

i++;
}

}
int main()
{ citire();
sort(v,v+n+1);
numere(n,v);

g.close();
return 0;
}
18. Fișierul text numere.in conține pe prima linie un număr natural n (0<n<1000), iar pe
a doua linie n numere naturale cu cel mult 9 cifre fiecare, despărțite prin câte un spațiu.
Scrieți un program C/C++ care citește toate numerele din fișierul numere.in,
construiește un vector cu aceste numere, și care:
a) scrie pe prima linie în fișierul de ieșire numere.out, mesajul DA dacă
numerele din vector sunt prime între ele două câte două și mesajul NU în caz
contrar;
b) în cazul în care numerele din vector nu sunt prime între ele două câte două,
eliminați din vector numere astfel încât elementele rămase să fie prime între ele
două câte două. Vectorul obținut se va scrie pe a doua linie a fișierului de ieșire
numere.out. În cazul în care vectorul reprezenta o mulțime se va scrie
nemodificat.
Exemplu:
numere.in numere.out
7 NU
5 131 56 14 55 456 513 5 131 14 55
456

#include <fstream>
using namespace std;
ifstream f("numere.in");
ofstream g("numere.out");
int n,v[1001],nr;
void citire()
{f>>n;
for(int i=1;i<=n;i++)
{f>>nr;v[i]=nr;}
}
int cmmdc(int a,int b)
{int r=0,aux=0;
if(a<b) {aux=a;a=b;b=aux;}
r=a%b;
while(r)
{a=b;
b=r;
r=a%b;
}
return b;
}
void prime(int n,int v[1001])
{int ok=0;
for(int i=2;i<n;i++)
if(cmmdc(v[i-1],v[i])!=1) ok++;
if(ok!=0) g<<"NU";
else g<<"DA";
g<<endl;
}
void vectorprim(int n,int v[1001])
{for(int i=2;i<n;i++)
if(cmmdc(v[i-1],v[i])!=1) {v[i]=v[i+1];n--;}
for(int i=1;i<=n;i++)
g<<v[i]<<' ';
}
int main()
{citire();
prime(n,v);
vectorprim(n,v);
f.close();
g.close();
return 0;
}

19. Fișierul atestat.in conține două linii. Pe prima linie este scris un număr natural
nenul n, (5<n<30). Pe cea de–a doua linie a fișierului sunt scrise n numere naturale
separate prin câte un spațiu, formate fiecare din cel mult 4 cifre, reprezentând un șir de
n numere naturale. Șirul conține cel puțin două numere impare.
Să se scrie un program care:
• să afișeze pe ecran, în linie, în ordinea inversă citirii, toate numerele din șir,
separate prin câte un spațiu;
• să afișeze pe ecran, în linie, numărul de cifre din care este format fiecare număr
din șirul inițial, separate prin câte un spațiu.
Exemplu:
Dacă fișierul atestat.in conține:
6
13 555 71 2 242 1001
Se va afișa pe ecran:
1001 242 2 71 555 13
232134

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream f("atestat.in");
int n, v[30];
void citire()
{ f>>n;
for(int i=1;i<=n;i++)
f>>v[i];
for(int i=n;i>=1;i--)
cout<<v[i]<<" ";
cout<<'\n';
}
int cifre(int a)
{int nr=0;
while(a)
{nr++;
a/=10; }
return nr;
}
int main()
{ citire();
for(int i=1;i<=n;i++)
cout<<cifre(v[i])<<" ";
f.close();
return 0;
}

20. Numim prefix al unui număr natural x orice cât nenul obținut prin împărțirea
întreagă a lui x la o putere a lui 10.
Fișierul numere.in conține pe o singură linie un șir de cel mult 100 de numere naturale
cu maxim 9 cifre, separate prin câte un singur spațiu.
Scrieți un program care citește valorile din fișierul numere.in și scrie în fișierul
numere.out:
• pe prima linie o valoare ce reprezintă numărul de valori care au un prefix divizibil
cu 10;
• pe a doua linie două valori semnificând prima pereche de numere consecutive,
citite din fișierul numere.in, cu proprietatea că primul număr citit are un prefix
egal cu al doilea număr.
Exemplu: Prefixele numărului 12546 sunt 12546, 1254, 125, 12, 1.
Dacă fișierul numere.in conține pe prima linie valorile:
103 234 567 613 61 100 345 2103 21
atunci fișierul numere.out va avea următorul conținut:
3
613 61
deoarece sunt trei numere care au un prefix divizibil cu 10 și anume 103, 100 și 2103
iar 613 61 este prima pereche de numere citite consecutiv din fișier care are
proprietatea cerută.

#include <fstream>
using namespace std;
ifstream f("numere.in");
ofstream g("numere.out");
int n,v[101],p,nr;
void citire()
{
while(f>>nr)
v[++n]=nr;
}
int div(int x)
{
int ok=0;
while(x)
{if(x%10==0)
ok=1;
x=x/10;
}
if(ok==1) return 1;
else return 0;
}
void val()
{
for(int i=1;i<=n;i++)
if(div(v[i]))
p++;
g<<p<<'\n';
}
int prefix(int a, int b)
{
while(a)
{
if(a==b)
return 1;
a=a/10;
} return 0;
}
void pereche()
{
for(int i=1;i<n;i++)
{if(prefix(v[i],v[i+1])==1)
{
g<<v[i]<<" "<<v[i+1];
break;
}
}
}
int main()
{citire();
val();
pereche();
f.close();g.close();
return 0;
}

21. In fișierul date.in, pe prima linie, este memorat un număr natural n, iar pe linia
următoare n numere naturale de cel puțin 3 cifre şi cel mult 9 cifre, cu toate cifrele
nenule.
Se cere:
• scrieți un program C/C++ care afișează pe prima linie a fișierului date.out,
valorile obținute prin eliminarea primei cifre din fiecare dintre cele n numere citite;
• scrieți pe a doua linie a fișierului date.out cel mai mare număr obținut din prima
cifră distinctă a fiecărui număr din cele n citite.
Exemplu: dacă se citește pentru n valoarea 4 și de pe rândul următor valorile
234 1567 278 5673
se obține în fișierul date.out:
34 567 78 673
521

#include <bits/stdc++.h>
using namespace std;
ifstream f("date.in");

ofstream g("date.out");
int v[105],fr[10],n;
void citire()
{f>>n;
for(int i=1;i<=n;i++)
f>>v[i];
}
void program(int n, int v[105], int fr[10])
{for(int i=1;i<=n;i++)
{ int z=0,p=1;
while(v[i]>9)
{ z=v[i]%10*p+z;
p*=10;
v[i]/=10;
}
fr[v[i]]++;
g<<z<<" ";
}
for(int i=9;i>=0;i--)if(fr[i])g<<i;
}
int main()
{ citire();
program(n,v,fr);
g.close();
return 0;
}

22. Fișierul text Numere.txt conține pe prima linie două numere naturale, n (0<n<100)
și k (0<k<15), și pe următorul rând n numere naturale, numerele de pe același rând
fiind separate prin câte un spațiu.
• Verificați dacă cifrele primului număr scris pe a doua linie în fișierul Numere.txt
au aceeași paritate (toate pare sau toate impare), și afișați pe ecran un mesaj
corespunzător (DA sau NU).
• Scrieți un program care afișează în fișierul de ieșire Numere.out, în ordine
crescătoare, separate de cate un spațiu, acele numere din fișierul Numere.txt
care au cel puțin k divizori proprii. Dacă un număr care corespunde cerinței
apare de mai multe ori, se va afișa o singură dată.
Exemplu: dacă fișierul Numere.txt are următorul conținut:
49
15 36 24 33 36 1 12 1 2
fișierul Numere.out va conține :
12 24 36
Pe ecran se va afișa DA (deoarece 1 și 5 sunt de aceeași paritate).

#include<fstream>
using namespace std;
ifstream f("numere.in");
ofstream g("numere.out");
int n,k,v[101],x[101],m;
void citire()
{f>>k>>n;
for(int i=1;i<=n;i++)
f>>v[i];
}
int paritate(int a)
{int ok=0,c=a%10;
a=a/10;
if(c%2==0)
{while(a)
{if(a%10%2!=0) ok=1;
a=a/10;
}
}
else
{while(a)
{if(a%10%2==0) ok=1;
a=a/10;
}
}
if(ok==0) return 1;
else return 0;
}
int divizor(int b,int k)
{int nr=0;
for(int d=2;d<=b/2;d++)
if(b%d==0) nr++;
if(nr>=k) return 1;
else return 0;
}
void ordonare(int m,int x[101])
{int aux;
for(int i=1;i<m;i++)
for(int j=i+1;j<=m;j++)
if(v[i]<v[j]) {aux=x[i];x[i]=x[j];x[j]=aux;}
}
void vectorsol(int v[101],int n)
{if(paritate(v[1])!=0) g<<"DA"<<endl;
else g<<"NU"<<endl;
for(int i=1;i<=n;i++) if(divizor(v[i],k)) x[++m]=v[i];
ordonare(m,x);
for(int i=1;i<=m;i++)
g<<x[i]<<' ';
g<<endl;
for(int i=1;i<m;i++)
if(x[i]==x[i+1]){x[i]=x[i+1];m--;}
for(int i=1;i<=m;i++)
g<<x[i]<<' ';
}
int main()
{citire();
vectorsol(v,n);
f.close();
g.close();
return 0;
}

23. Fișierul atestat.in conține două linii. Pe prima linie este scris un număr natural nenul
n (5<n<30). Pe cea de-a doua linie a fișierului sunt scrise n numere naturale separate
prin câte un spațiu, formate fiecare din cel mult 4 cifre și cel puțin 2 cifre, reprezentând
un șir de n numere naturale. Cel puțin unul din cele n numere din șir este număr par.
Să se scrie un program, care preia valorile din fișierul atestat.in și scrie în fișierul
atestat.out:
• pe prima linie, separate printr-un spațiu, toate numerele pare din șir în ordinea
descrescătoare a valorii lor;
• pe a doua linie, separate prin câte un spațiu, toate numerele supraperfecte din
șirul citit din fișier. Un număr natural se numește supraperfect dacă suma
divizorilor săi, exceptând numărul însuși, este mai mare decât numărul dat, de
exemplu: 18<1+2+3+6+9. Dacă nu există astfel de numere, se va scrie pe a
doua linie a fișierului mesajul “NU EXISTA NUMERE SUPRAPERFECTE”.
Exemplu:
atestat.in atestat.out
6 6138 496 18 12
6138 12 496 2523 18 1243 6138 12 18

#include <bits/stdc++.h>

using namespace std;

ifstream f("atestat.in");
ofstream g("atestat.out");
int v[35],s[35],n;
void citire()
{f>>n;
for(int i=1;i<=n;i++)
f>>v[i];
}
int supraperfect(int x)
{int s=0;
for(int d=2;d<=x/2;d++)
if(x%d==0)s+=d;
if(s>x)return 1;
return 0;
}
void program(int n, int v[35])
{ int t=0,ok=0;
for(int i=1;i<=n;i++)
if(v[i]%2==0)s[++t]=v[i];
sort(s,s+t+1);
for(int i=t;i>0;i--)g<<s[i]<<" ";
g<<'\n';
for(int i=1;i<=n;i++)
if(supraperfect(v[i])){ok=1;g<<v[i]<<" ";}
if(ok==0)g<<"NU EXISTA NUMERE SUPRAPERFECTe";
}
int main()
{ citire();
program(n,v);
g.close();
return 0;
}

24. Fișierul text numere.in conține pe prima linie un număr natural n (0<n<1000), iar pe
a doua linie n numere naturale cu cel mult 9 cifre fiecare, despărțite prin câte un spațiu.
Scrieți un program care citește numerele din fișierul numere.in și rezolvă
următoarele cerințe:
• verifică dacă numerele de pe a doua linie sunt în ordine crescătoare și scrie
pe prima linie a fișierului numere.out unul din mesajele Da sau Nu;
• scrie pe a doua linie a fișierului numere.out cel mai mare număr care se
poate forma cu prima cifră a fiecărui număr de pe a doua linie a fișierului
numere.in.
Exemplu:
numere.in numere.out
12 Nu
10 301 23 44 676 43 88 201 702 124 986744322111
147 90
#include <bits/stdc++.h>
using namespace std;
ifstream f("numere.in");
ofstream g("numere.out");
int v[1005],n,fr[10];
void citire()
{f>>n;
for(int i=1;i<=n;i++)
f>>v[i];
}
void program(int n, int v[1005])
{ int ok=0;
for(int i=1;i<n;i++)
if(v[i]>v[i+1])ok=1;
if(ok==0)g<<"DA"<<'\n';
else g<<"NU"<<'\n';

for(int i=1;i<=n;i++)
{while(v[i]>9)v[i]/=10;
fr[v[i]]++;
}
for(int i=9;i>0;i--)
if(fr[i]!=0)for(int j=1;j<=fr[i];j++)g<<i;
}

int main()
{ citire();
program(n,v);
g.close();
return 0;
}
25. De pe prima linie a fișierului cifre.in se citește un număr natural nenul n de maxim
18 cifre.
a) Pe prima linie a fișierului cifre.out se va afișa suma cifrelor și cifra maximă,
separate prin spațiu;
b) Pe a doua linie a fișierului cifre.out se vor afișa frecvențele cifrelor numărului
n în ordine crescătoare a cifrelor, separate prin câte un spațiu.
Exemplu:
cifre.in cifre.out
32490396303754 58 9
2 0 1 4 2 1 1 1 0 2
#include <fstream>
using namespace std;
ifstream f("cifre.in");
ofstream g("cifre.out");
long long n;
int fr[10],s;
void program()
{f>>n;
int maxi=n%10;
while(n!=0)
{int c=n%10;
s=s+c;
if(c>maxi)maxi=n%10;
fr[c]++;
n=n/10;
}
g<<s<<" "<<maxi<<'\n';
for(int i=9;i>=0;i--)g<<fr[i]<<" ";
}
int main()
{ program();
g.close();
return 0;
}
26. Fișierul text numere.in conține, cel mult un milion de numere naturale nenule cu cel
mult 6 cifre fiecare. Scrieți programul C++ care:
• scrie pe prima linie în fișierul de ieșire numere.out, cel mai mare număr care
este termen al șirului lui Fibonacci. Dacă nu există astfel de numere se va scrie
mesajul "NU EXISTA";
• scrie pe a doua linie în fișierul de ieșire numere.out, în ordine crescătoare, toate
numerele din fișierului de intrare, care sunt termeni ai șirului lui Fibonacci.
Exemplu:
numere.in numere.out
3 434 21 4 144 2 3 56 34 200 5 144
2 3 3 5 21 34 144
#include <bits/stdc++.h>
using namespace std;
ifstream f("numere.in");
ofstream g("numere.out");
int n,v[100],k;
int fibo(int x)
{if(x==1) return 1;
else
{ int b=1,t=1,f=b+t;
while(f<x)
{
b=t;
t=f;
f=b+t;
}
if(f==x)return 1;
}
return 0;
}
void citire()
{while(f>>n){if(fibo(n))v[++k]=n;}
sort(v,v+k+1);
if(v[k]==0)g<<"NU EXISTA";
else g<<v[k]<<'\n';
for(int i=1;i<=k;i++)g<<v[i]<<" ";
}
int main()
{citire();
g.close();
return 0;
}
27. Fișierul atestat.in conține trei linii. Pe prima linie este scris un număr natural nenul
n, (5<n). Pe cea de-a doua linie a fișierului sunt scrise n numere naturale, separate prin
câte un spațiu, formate fiecare din cel mult 9 cifre și cel puțin 2 cifre, reprezentând un
șir de n numere naturale. Primul număr din șir se găsește pe poziția 1, iar ultimul număr
din șir se găsește pe poziția n. Cel puțin unul din cele n numere din șir are cifra zecilor
impară. Pe ultima linie este scris un număr natural k, 1≤k<n. Să se scrie în fișierul
atestat.out:
• pe prima linie, separate printr-un spațiu, toate numerele din șir, care au cifra
zecilor impară;
• separate prin câte un spațiu elementele din șir după interschimbarea elementului
de pe poziția k, cu elementul de pe poziția k+1.
Exemplu:
Date de intrare 6
6138 12 496 2523 18 1243
3
Date de ieșire: 6138 12 496 18
6138 12 2523 496 18 1243
#include<fstream>
using namespace std;
ifstream f("atestat.in");
ofstream g("atestat.out");
int n,v[102],k;
void citire()
{f>>n;
for(int i=1;i<=n;i++)
{f>>v[i];
int s=v[i];
if((s/10%10)%2!=0)g<<v[i]<<" ";
}
f>>k;g<<'\n';
int aux=v[k];v[k]=v[k+1];v[k+1]=aux;
for(int i=1;i<=n;i++)g<<v[i]<<" ";
}
int main()
{citire();
g.close();
return 0;
}
28. Se citește din fișierul tip2.in de pe prima linie un număr natural n iar pe a doua
linie n numere naturale. Se cere să se afișeze în fișierul de ieșire tip2.out:
• valorile cu suma cifrelor un număr par în ordine descrescătoare;
• numerele prime din a doua linie din fișier în ordine crescătoare sau mesajul
NU EXISTA.
Exemplu :
Date de intrare: 5
417 2152 26 664 7
Date de ieșire: Pe prima linie a fișierului: 2152 664 417 7
Pe a doua linie a fișierului: 7
#include<fstream>
using namespace std;
ifstream f("tip2.in");
ofstream g("tip2.out");
int v[102],n;
int suma(int x)
{int s=0;
while(x)
{s+=x%10;
x/=10;
}
return s;
}
int prim(int x)
{for(int d=2;d*d<x;d++)
if(x%d==0)return 0;
return 1;
}
void program()
{f>>n;
for(int i=1;i<=n;i++)f>>v[i];
for(int i=1;i<n;i++)
for(int j=i;j<=n;j++)if(v[i]>v[j]){int aux=v[i];v[i]=v[j];v[j]=aux;}
for(int i=n;i>0;i--)if(suma(v[i])%2==0)g<<v[i]<<" ";
g<<'\n';
int ok=1;
for(int i=1;i<=n;i++)if(prim(v[i])){g<<v[i]<<" ";ok=0;}
if(ok==1)g<<"NU EXISTA";
}
int main()
{program();
g.close();
return 0;
}
29. Se citesc din fișierul vector.in următoarele date: pe prima linie un număr natural n
(dimensiunea vectorului ) iar pe a doua linie n numere naturale (elementele
vectorului). Se cere să se afișeze în fișierul de ieșire vector.out:
• elementele în ordine descrescătoare a primei cifre;
• elementele în ordine crescătoare după numărul de apariții a cifrei 1 în
reprezentarea în baza 2 a numerelor. În cazul în care doua numere au
același număr de cifre egale cu 1 în reprezentarea lor binara atunci ele vor
apărea ordonate descrescător.
Exemplu :
Date de intrare: 5 4 3 15 16 8
Date de ieșire: Pe prima linie a fișierului: 16 15 8 5 4 3
Pe a doua linie a fișierului: 16 8 4 5 3 15
#include<bits/stdc++.h>
using namespace std;
ifstream f("vector.in");
ofstream g("vector.out");
int n,v[100];
void citire()
{f>>n;
for(int i=1;i<=n;i++)f>>v[i];
}
int nr1_b2(int x)
{int nr1=0;
while(x)
{if(x%2==1)nr1++;
x/=2;
}
return nr1;
}
void program()
{for(int i=1;i<n;i++)
for(int j=i;j<=n;j++)
{int ii=v[i],jj=v[j];
while(ii>9)ii/=10;
while(jj>9)jj/=10;
if (ii<jj){int aux=v[i];v[i]=v[j];v[j]=aux;}
}
for(int i=1;i<=n;i++)g<<v[i]<<" ";g<<'\n';
for(int i=1;i<n;i++)
{int nr1i=nr1_b2(i);
for(int j=i;j<=n;j++)
{int nr1j=nr1_b2(j);
if(nr1i>nr1j){int aux=v[i];v[i]=v[j];v[j]=aux;}
if(nr1i==nr1j)if(v[i]<v[j]){int aux=v[i];v[i]=v[j];v[j]=aux;}
}
}
for(int i=1;i<=n;i++)g<<v[i]<<" ";
}
int main()
{citire();
program();
g.close();
return 0;
}
30. Din fișierul text tablou.in se citesc: un număr natural n reprezentând numărul de
componente ale unui vector cu numere naturale nenule cu cel mult 9 cifre fiecare și cele
n componente ale vectorului (n<100).
Se cere:
a. afișați elementele vectorului pe primul rând al fișierului text tablou.out,
ordonate crescător;
b. determinați cel mai mare și cel mai mic element din cele n citite care au
ultima cifră pară. Acestea se vor afișa, separate printr-un spațiu, pe a doua
linie a fișierului tablou.out. Dacă nu există niciun element care să aibă ultima
cifră pară, se va afișa în fișier mesajul Nu există!.
Exemplu:
tablou.in tablou.out
5 2 25 42 122 313
25 2 42 313 122 122 2

#include<fstream>
using namespace std;
ifstream f("tablou.in");
ofstream g("tablou.out");
long long n,v[102];
void citire()
{f>>n;
long long mi=1000000000,ma=0;
for(int i=1;i<=n;i++)
{f>>v[i];
if(v[i]%2==0){if(v[i]>ma)ma=v[i];if(v[i]<mi)mi=v[i];}
}
for(int i=1;i<n;i++)
for(int j=i;j<=n;j++)
if(v[i]>v[j]){int aux=v[i];v[i]=v[j];v[j]=aux;}
for(int i=1;i<=n;i++)
g<<v[i]<<" ";
g<<'\n';
g<<ma<<" "<<mi;
}
int main()
{citire();
g.close();
return 0;
}
31. Pe prima linie a fișierului atestat.in se află un număr natural n, iar pe următoarele n
linii câte n numere naturale de maxim 2 cifre separate prin spații reprezentând
elementele unui tablou bidimensional. Scrieți un program C++ care citește din
atestat.in numărul n și apoi elementele tabloului și care scrie în fișierul atestat.out:
• scrie pe prima linie numărul de numere prime situate sub diagonala
secundară; dacă nu este niciun număr prim se va scrie „nu există”. (un
număr natural n>=2 se numește prim dacă nu are alți divizori decât 1 și el
însuși);
• scrie pe a doua linie, separate de câte un spațiu, elementele distincte ale
tabloului, în ordine crescătoare.
Exemplu :
Daca fișierul atestat.in conține:
4
6 4 4 1
2 6 8 1
0 4 2 2
8 6 7 4
atunci atestat.out va avea următorul conținut:
3
• 1 2 4 6 7 8
#include<bits/stdc++.h>
using namespace std;
ifstream f("atestat.in");
ofstream g("atestat.out");
int n,fr[100],a[100][100];
int prim(int x)
{if(x==1)return 0;
for(int d=2;d*d<=x;d++)
if(x%d==0)return 0;
return 1;
}
void citire()
{f>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{ f>>a[i][j];fr[a[i][j]]++;}
}
void program()
{ int nr=0;
for(int i=2;i<=n;i++)
for(int j=1;j<=n;j++)
{if(i+j>n+1)if(prim(a[i][j])==1)nr++;}
g<<nr<<'\n';
for(int i=0;i<100;i++)
if(fr[i]!=0)g<<i<<" ";
}
int main()
{citire();
program();
g.close();
return 0;
}
32. O matrice pătratică, A, de dimensiune n, cu p elemente naturale nenule, este
memorată economic în fișierul de intrare Matrice.txt sub următoarea formă: pe prima
linie a fișierului se găsesc două numere, n și p, dimensiunea matricei respectiv
numărul de elemente nenule, iar pe următoarele p linii triplete de numere naturale (v, l,
c) care reprezintă valoarea, linia respectiv coloana pe care se găsesc elementele
nenule.
Se cere:
a) scrieți un program care citește informațiile din fișierul de intrare, reface și scrie
în fișierul de ieșire Matrice.out matricea A;
b) un număr este considerat perfect dacă este egal cu suma tuturor divizorilor săi
naturali. Ex : 6 =1+2+3 ; 28=1+2+4+7+14 . Verificați dacă suma elementelor nenule ale
matricei este un număr perfect și afișați pe ecran un mesaj corespunzător (DA sau NU).
Exemplu: dacă fișierul Matrice.txt are următorul conținut:
5 8
1 1 1
5 1 2
1 2 3
3 2 5
4 3 2
4 4 1
2 4 3
8 5 4
atunci fișierul Matrice.out va avea următorul conținut:
1 5 0 0 0
0 0 1 0 3
0 4 0 0 0
4 0 2 0 0
0 0 0 8 0
Pe ecran se va afișa DA (deoarece suma este 1+5+1+3+4+4+2+8=28 care este un
număr perfect).
#include <fstream>
using namespace std;
ifstream f("Matrice.txt");
ofstream g("Matrice.out");
unsigned short int A[10][10],n,p,s;
unsigned short int perfect(unsigned short int s)
{unsigned short int sd=0;
for(int d=1;d<=s/2;d++)
if(s%d==0)sd+=d;
if(s==sd)return 1;
return 0;
}
void citire()
{unsigned short int v,l,c;
f>>n>>p;
for(int i=1;i<=p;i++)
{f>>v>>l>>c;s+=v;
A[l][c]=v;
}
}
void program()
{for(int i=1;i<=n;i++)
{for(int j=1;j<=n;j++)
g<<A[i][j]<<" ";
g<<'\n';
}
if(perfect(s))g<<"DA";
else g<<"NU";
}
int main()
{ citire();
program();
g.close();
return 0;
}
33. Fișierul atestat.in conține pe prima linie un număr natural n (2<n<20), care
reprezintă numărul de linii, respectiv numărul de coloane ale unei matrice. Pe fiecare
din următoarele n linii, sunt scrise câte n numere întregi, formate din cel mult 4 cifre,
separate prin câte un spațiu, reprezentând valorile elementelor matricei.
Să se scrie un program, care preia valorile din fișierul atestat.in și scrie în fișierul
atestat.out:
• pe prima linie, separate printr-un spațiu, numărul de elemente prime de pe
fiecare coloană a matricei;
• pe a doua linie, mesajul DA dacă suma elementelor din zona EST a matricei
este un număr palindrom sau mesajul NU în caz contrar.
Liniile și coloanele matricei vor fi numerotate începând cu 1.

Exemplu:
atestat.in atestat.out
3 102
714 DA
462
9 22 193

#include<bits/stdc++.h>
using namespace std;
ifstream f("atestat.in");
ofstream g("atestat.out");
int n,a[25][25];
void citire()
{f>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
f>>a[i][j];
}
int palindrom(int x)
{int inv=0,aux=x;
while(x)
{inv=inv*10+x%10;
x/=10;
}
if(aux==x)return 1;
return 0;
}
int prim(int x)
{if(x==1)return 0;
for(int d=2;d*d<=x;d++)
if(x%d==0)return 0;
return 1;
}
void program()
{for(int j=1;j<=n;j++)
{int nr=0;
for(int i=1;i<=n;i++)
if(prim(a[i][j]))nr++;
g<<nr<<" ";
}
g<<'\n';
int s=0;
for(int i=2;i<n;i++)
for(int j=n/2;j<=n;j++)
if(i+j>n+1&&j<n)s=s+a[i][j];
if(palindrom(s)!=0)g<<"DA";
else g<<"NU";
}
int main()
{citire();
program();
g.close();
return 0;
}
34. Fișierul text matrice.in conține pe prima linie un număr natural n (0<n<20), iar pe
următoarele n linii câte n numere întregi de cel mult patru cifre, separate prin spațiu,
reprezentând elementele unei matrice cu n linii și n coloane.
Scrieți un program care citește datele din fișierul matrice.in și rezolvă următoarele
cerințe:
• scrie pe prima linie a fișierului matrice.out cel mai mare număr situat pe
diagonala secundară a matricei;
• ordonează crescător elementele de pe diagonala principală a matricei și scrie
matricea rezultată începând cu a doua linie a fișierului matrice.out.
Exemplu:
matrice.in matrice.out
4 76
10 20 30 40 10 20 30 40
51 82 42 56 51 75 42 56
45 76 90 18 45 76 82 18
32 11 43 75 32 11 43 90

#include<bits/stdc++.h>
using namespace std;
ifstream f("atestat.in");
ofstream g("atestat.out");
int n,a[25][25];
void citire()
{f>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
f>>a[i][j];
}
void program()
{int maxi=a[1][n];
for(int i=2;i<=n;i++)
if(a[i][n+1-i]>maxi)maxi=a[i][n+1-i];
g<<maxi<<'n';
for(int i=1;i<n;i++)
for(int j=i;j<=n;j++)
{if(a[i][i]>a[j+1][j+1])
{int aux=a[i][i];a[i][i]=a[j+1][j+1];a[j+1][j+1]=aux;}
}
for(int i=1;i<=n;i++)
{for(int j=1;j<=n;j++)
g<<a[i][j]<<" ";
g<<'\n';
}
}
int main()
{citire();
program();
g.close();
return 0;
}
35. Fișierul text matrice.in conține pe prima linie două numere naturale n și m
(0<n<20, 0<m<20), iar pe următoarele n linii câte m numere întregi distincte de cel
mult patru cifre, separate prin spațiu, reprezentând elementele unei matrice cu n linii și
m coloane.
Scrieți un program care citește datele din fișierul matrice.in și rezolvă următoarele
cerințe:
• inversează elementul maxim cu elementul minim din matrice și scrie matricea
rezultată în fișierul matrice.out, începând cu prima linie;
• elimină din matrice, linia și coloana pe care se găsește elementul minim și scrie
matricea obținută în fișierul matrice.out, în continuarea matricei de la punctul a)
după o linie liberă.
Exemplu:
matrice.in matrice.out
43 10 20 30 40
10 20 30 40 51 82 42 90
51 82 42 5 45 76 5 18
45 76 90 18
10 20 30
45 76 90

36. Fișierul atestat.in conține pe prima linie numărul natural nenul n (2<n<20), care
reprezintă numărul de linii, respectiv numărul de coloane ale unei matrice A. Pe fiecare
din următoarele n linii, sunt scrise câte n numere întregi, formate din cel mult 4 cifre,
separate prin spații, reprezentând valorile elementelor matricei A.
Să se scrie un program, în limbajul C/C++, care scrie în fișierul atestat.out:
• pe prima linie, numărul elementelor numere perfecte din matricea A; Un număr
întreg a se numește perfect dacă este egal cu suma divizorilor mai mici decât el,
de exemplu 6=1+2+3. Dacă nu există numere perfecte se va scrie mesajul “Nu
exista numere perfecte”.
• Scrie pe următoarea linie în fișierul atestat.out, numărul obținut prin adunarea
ultimei cifre a fiecărui număr din prima coloana a matricei A.
Exemplu:

atestat.in atestat.out
34 35 23 9 6
9 4 2 35 26
57 -58 23 34
34 9 -5 69
6 26 33 28
37. Se citesc din fișierul tip3.in de pe prima linie doua numere naturale n și m iar pe
linia următoarea valorile n x m numere naturale de maxim patru cifre reprezentând
elementele unei matrice. Se cere sa se afișeze în fișierul de ieșire tip3.out:
• numărul de ordine al primei linii din matrice ce conține o valoare ce este
palindrom sau mesajul NU EXISTA;
• să se afișeze numărul de valori prime de pe contur.
Exemplu:
Date de intrare: 3 3
12 234 71
131 32 5
12 17 33
Date de ieșire: pe prima linie a fișierului: 1
pe a doua linie a fișierului: 4

38. Se citesc din fișierul matrice.in următoarele date: pe prima linie 2 numere naturale
n și m (dimensiunile matricei ) iar pe următoarele linii valori binare reprezentând câte
un număr natural reprezentat în baza 2. Se cere sa se afișeze în fișierul de ieșire
matrice.out :
• numărul de ordine ai primei liniei cu număr maxim de valori 1;
• să se afișeze numerele în baza 10, fiecare pe cate un rând.
Exemplu:
Date de intrare: 34
1010
1101
0110
Date de ieșire: pe prima linie a fișierului: 2
pe a doua linie a fișierului: 10 13 6

39. Se citește din fișierul text linie.in numărul n și un tablou bidimensional a cu n x n (n


<50) elemente numere naturale de cel mult 9 cifre. Să se realizeze un program care
afișează în fișierul text linie.out:
a) liniile cu cele mai multe elemente prime sau mesajul NU EXISTA (pe prima linie);
b) pe a doua linie se vor afișa elementele de pe chenarul tabloului în ordine
descrescătoare.
Exemplu:
linie.in linie.out
3 3
9 4 2 975432 21
1 2 3
7 5 2

40. Fișierul atestat.in conține pe prima linie un text de maxim 100 de caractere format
din litere, cifre și spații. Cuvintele sunt separate prin câte un spațiu. Primul caracter este
o literă. Scrieți un program C++ care citește din atestat.in șirul de caractere și care
scrie în fișierul atestat.out:
• pe prima linie șirul din care s-au eliminat toate caracterele cifră;
• pe a doua linie a fișierului se vor scrie acele cuvinte care încep cu o vocală
separate prin câte un spațiu. Dacă nu există astfel de cuvinte se va scrie „nu
sunt”.
Exemplu :
Daca fișierul atestat.in conține:
Gigel are 2 mere si 3 alune
atunci fișierul atestat.out va avea următorul conținut:
Gigel are mere si alune
Are alune

41. Fișierul atestat.in conține o singură linie pe care se află scris un text format din cel
mult 200 de caractere, primul caracter fiind literă, iar cuvintele din text sunt separate
prin câte un spațiu. Fiecare cuvânt este format doar din litere mari sau mici ale
alfabetului limbii engleze.
Să se scrie un program care:
• să afișeze textul pe o singură linie a ecranului, scris cu majuscule;
• să afișeze în fișierul atestat.out numărul consoanelor din text.
Exemplu:
atestat.in
Imi place Informatica
Ecran
IMI PLACE INFORMATICA
atestat.out
10

42. Fișierul sir.in conține pe prima linie un text alcătuit din cel mult 250 de caractere, în
care cuvintele sunt formate doar din litere mici ale alfabetului englez și sunt separate
prin spațiu.
Se cere:
• scrieți un program C/C++ care citește din fișierul sir.in textul, elimină perechile
de câte două litere identice, ce apar în șir și le afișează pe câte o linie a fișierului
sir.out;
• scrieți pe linia următoare șirul obținut după eliminarea tuturor secvențelor formate
din câte două litere identice.
Exemplu: dacă textul citit din fișier este: aaateeestat inffforrrmatica
se afişează în fișierul sir.out
aa
ee
ff
rr
atestat informatica
43. Fișierul atestat.in conține o singură linie pe care se află scris un text format din cel
mult 70 de caractere, primul caracter fiind literă, iar cuvintele din text sunt separate prin
câte un spațiu. Fiecare cuvânt este format doar din litere mari sau mici ale alfabetului
limbii engleze.
Să se scrie un program, care preia valorile din fișierul atestat.in și:
• afișează pe ecran: numărul de apariții a primului caracter din text și apoi textul
transformat astfel: litere mari în litere mici și litere mici în litere mari;
• modifică fiecare cuvânt care începe și se termină cu o aceeași vocală prin
eliminarea acestei vocale de la începutul şi sfârșitul cuvântului. Cuvintele astfel
modificate se vor scrie în fișierul atestat.out, pe câte un rând. Dacă nu există
cuvinte care încep și se termină cu o aceeași vocală se va scrie pe prima linie a
fișierului mesajul „NU EXISTA”.
Exemplu:
atestat.in Date de ieșire
Ana ateStaT colaC elevele feReaStra 6 aNA ATEsTAt COLAc ELEVELE FErEAsTRA
Fișierul atestat.out conține:
n
level

44. Fișierul text cuvinte.in conține pe prima linie un număr natural n (0<n<100), iar pe
următoarea linie n cuvinte separate prin spațiu și alcătuite doar din litere mici ale
alfabetului englez.
Scrieți un program care citește datele din fișierul cuvinte.in și rezolvă următoarele
cerințe:

• scrie pe prima linie a fișierului cuvinte.out cuvântul din fișierul cuvinte.in care
conține cele mai multe vocale. În situația în care există mai multe cuvinte se va
scrie primul dintre acestea;

• scrie pe a doua linie a fișierului cuvinte.out, în ordine alfabetică, literele distincte


care apar în fișierul cuvinte.in.
Exemplu:
cuvinte.in cuvinte.out
5 bacalaureat
examenul de bacalaureat la informatica abcefilmnotux

45. Fișierul text cuvinte.in conține pe prima linie un text cu maxim 255 de caractere în
care cuvintele sunt formate din litere mici si mari ale alfabetului englez și sunt separate
prin spatii. Scrieți un program C/C++ care citește textul din fișierul cuvinte.in, și care :
• scrie pe prima linie în fișierul de ieșire cuvinte.out, numărul de cuvinte din text
care încep cu litera mare;
• Scrie pe a doua linie în fișierul de ieșire cuvinte.out, separate prin câte un
spațiu, cuvintele de lungime maximă.
Exemplu:
cuvinte.in cuvinte.out
Ana si Ion merg in excursie la Brasov 3
excursie

46. Din fișierul cuvant3.in se citește un șir de caractere (maxim 255 litere mici ale
alfabetului englez).
a) Pe prima linie a fișierului cuvant3.out se va afișa numărul de caractere diferite de
spațiu și numărul de spatii din cadrul șirului citit separate printr-un spațiu.
b) Pe următoarele linii ale fișierului cuvant3.out se vor afișa cuvintele din șirul de
caractere ordonate crescător (cuvintele nu vor conține mai mult de 20 de caractere).
Exemplu:
Dacă fișierul cuvant3.in conține șirul de caractere el e bun
în fișierul cuvant3.out se va afișa:
63
bun
e
el

47. Fișierul text cuvinte.in conține pe prima linie un număr natural n şi pe următoarele
n linii, n cuvinte cu maxim 25 de litere mici ale alfabetului englez, fiecare cuvânt fiind
scris pe câte o linie. Scrieți un program C/C++ care citește cuvintele din fișierul
cuvinte.in, și care:
• scrie pe prima linie în fișierul de ieșire cuvinte.out, numărul de cuvinte cu aspect
de palindrom;
• scrie pe a doua linie în fișierul de ieșire cuvinte.out, în ordine lexicografică,
separate prin câte un spațiu, cuvintele cu aspect de palindrom.
Exemplu:
cuvinte.in cuvinte.out
7 4
mare capac
carte cojoc
cojoc potop
rotor rotor
potop
tare
capac

48. Se citește din fișierul de intrare tip4.in un cuvânt de maxim 100 de caractere. Sa
se scrie un program C++ care sa afișeze în fișierul de ieșire tip4.out:
• prima vocala si numărul ei de apariții(pe prima linie);
• frecventele de apariții ale consoanelor(pe a doua linie).
Exemplu:
Date de intrare: informatica
Date de ieșire: i 2
n1f1r1m1t1c1

49. Fișierul atestat.in conține pe prima linie numărul natural nenul n (5<n<10). Pe o
tablă de șah două regine se atacă dacă se afla pe aceeași linie, aceeași coloană sau
aceeași diagonală.
Să se scrie un program, în limbajul /C/C++, care scrie în fișierul atestat.out :
• toate modalitățile de a aranja n regine pe o tabla de șah cu n linii și n coloane
și câte astfel de modalități exista. Afișarea pentru o modalitate de aranjare va
fi sub forma:
• pe prima linie mesajul „Soluția numărul x :”;
• pe următoarele n linii, litera D pentru poziția reginei și caracterul ”@”
pentru pozițiile libere;
• pe ultima linie din fișierul atestat.out, se va scrie în câte din soluțiile de la
punctul a) reginele de pe liniile pare stau pe poziții impare. Dacă în nici o
soluție nu este îndeplinită aceasta condiție scrieți mesajul „Nu exista”.
Exemplu:

atestat.in atestat.out :
8 135
Solutia nr 1:
@D@@@@@@
@@@@D@@@
@@@@@@D@
@@@D@@@@
D@@@@@@@
@@@@@@@D
@@@@@@D@
@@D@@@@@
Solutia nr 2 :
….

50. Se citesc de la tastatură valorile n, a, b numere naturale. Scrieți un program care


afișează pe ecran pe prima linie toate permutările mulțimii {1,2,…,n} care au
proprietatea că a și b sunt consecutive, iar pe a doua linie afișați numărul permutărilor
de acest tip.
Exemplu: pentru n=3, a=1 și b=2 se va afișa pe ecran:
123 312
2