Sunteți pe pagina 1din 29

Probleme Atestat

Informatic 20132014
Subiecte i soluii
PROGRAMARE
ianuarie 31
2014



Cuprins


Subiectul 1 .............................................................................................. 3
Subiectul 2 .............................................................................................. 3
Subiectul 3 .............................................................................................. 4
Subiectul 4 .............................................................................................. 4
Subiectul 5 .............................................................................................. 5
Subiectul 6 .............................................................................................. 6
Subiectul 7 .............................................................................................. 6
Subiectul 8 .............................................................................................. 7
Subiectul 9 .............................................................................................. 8
Subiectul 10 ............................................................................................. 8
Subiectul 11 ............................................................................................. 9
Subiectul 12 ........................................................................................... 10
Subiectul 13 ........................................................................................... 10
Subiectul 14 ........................................................................................... 11
Subiectul 15 ........................................................................................... 12
Subiectul 16 ........................................................................................... 12
Subiectul 17 ........................................................................................... 13
Subiectul 18 ........................................................................................... 13
Subiectul 19 ........................................................................................... 14
Subiectul 20 ........................................................................................... 14



Subiectul 21 ........................................................................................... 15
Subiectul 22 ........................................................................................... 16
Subiectul 23 ........................................................................................... 16
Subiectul 24 ........................................................................................... 17
Subiectul 25 ........................................................................................... 17
Subiectul 26 ........................................................................................... 18
Subiectul 27 ........................................................................................... 19
Subiectul 28 ........................................................................................... 19
Subiectul 29 ........................................................................................... 20
Subiectul 30 ........................................................................................... 21
Subiectul 31 ........................................................................................... 22
Subiectul 32 ........................................................................................... 22
Subiectul 33 ........................................................................................... 23
Subiectul 34 ........................................................................................... 24
Subiectul 35 ........................................................................................... 25
Subiectul 36 ........................................................................................... 25
Subiectul 37 ........................................................................................... 26
Subiectul 38 ........................................................................................... 27
Subiectul 39 ........................................................................................... 27
Subiectul 40 ........................................................................................... 28

Subiectul 1
Scriei un program care citete de la tastatura un numr natural n (n<100) i un ir cu n numere ntregi din
intervalul [100, 999]. Programul construiete un ir de numere rezultat prin nlocuirea fiecrui numr din irul
citit cu numrul obinut prin interschimbarea cifrei unitilor cu cifra sutelor. Numerele din noul ir se vor afia
pe ecran separate printr-un singur spaiu.
Exemplu : pentru n=3 si irul 123 , 904 , 500
se afieaz 321 , 409 , 5.


#i ncl ude <i ost r eam>
using namespace std;
int mai n( )
{
int n, v[ 100] , i , x, j =0;
cout<<" n=" ; cin>>n;
for( i =1; i <=n; i ++)
{
cout<<" x=" ; cin>>x;
j ++;
v[ j ] =x%10*100+x/ 10%10*10+x/ 100;
}
n=j ;
for( i =1; i <=n; i ++)
cout<<v[ i ] <<" " ;
}

Subiectul 2

Scriei un program care afieaz toate numerele naturale, mai mari dect 10 i mai mici dect o valoare data n,
n<=2.000.000 , formate doar din cifre identice.
Exemplu: pentru n=195 se afieaz : 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 , 99 , 111.


#i ncl ude <i ost r eam>
using namespace std;
int mai n( )
{
int n, uc, i , ok, x;
cout<<" n=" ; cin>>n;
for( i =10; i <=n; i ++)
{
x=i ; ok=1;
uc=x%10;
while( x && ok)
{
if( uc! =x%10)
ok=0;
x/ =10;
}
if( ok)
cout<<i <<" " ;
}
}




Cuprins
Subiectul 3
n fiierul Numere.txt pe prima linie este memorat un numr natural n (n<10000), iar pe linia urmtoare un ir
de n numere naturale distincte cu maximum 4 cifre fiecare, separate prin cte un spaiu. Afiai pe prima linie a
fiierului de ieire Rezultat.out poziia pe care s-ar gsi primul element din irul aflat pe linia a doua a fiierului,
daca irul ar fi ordonat cresctor. Numerotarea poziiilor elementelor n cadrul irului este de la 1 la n.
Exemplu: Dac fiierul Numere.txt are urmtorul coninut:
6
267 13 45 628 7 79
Fiierul Rezultat.out va avea urmtorul coninut:5
#i ncl ude <i ost r eam>
#i ncl ude <f st r eam>
using namespace std;
int mai n( )
{
int n, i , x, y, j =0;
ifstream f ( " Numer e. t xt " ) ;
ofstream g( " Rezul t at . out " ) ;
f >>n; f >>x;
for( i =2; i <=n; i ++)
{
f >>y;
if( y<x)
j ++;
}
g<<j +1;
f . cl ose( ) ;
g. cl ose( ) ;
}
Subiectul 4
Se citete p un numr natural. Construii n memorie o matrice ptratica cu n linii i n coloane,unde n este
numrul de cifre al numrului citit. Matricea va fi construit astfel: pe diagonal principal va conine 0, deasupra
diagonalei principale cea mai mare cifr a numrului p, iar sub diagonala principal cea mai mic cifr a
numrului p. Matricea va fi afiata pe urmtoarele n linii elementele fiecrei linii fiind separate de cte un
singur spaiu. Vei utiliza un subprogram care primete ca parametru un numr natural p de cel mult 9 cifre i
returneaz prin intermediul parametrilor n, max, min numrul de cifre, cifra maxim, respectiv cifra minim a
numrului p.
Exemplu: p=824
Se va afia:
0 8 8
2 0 8
2 2 0

#i ncl ude <i ost r eam>
using namespace std;
void s( int p, int &n, int &max, int &min)
{
n=0; max=0; min=9;
while( p)
{
n++;
if( p%10>max)
max=p%10;
if( p%10<min)
min=p%10;
p/ =10;
}
}

Cuprins
int mai n( )
{
int a[ 10] [ 10] , n, i , j , max, min, p;
cout<<" p=" ; cin>>p;
s( p, n, max, min) ;
for( i =1; i <=n; i ++)
for( j =1; j <=n; j ++)
if( i ==j )
a[ i ] [ j ] =0;
else
if( i <j )
a[ i ] [ j ] =max;
else
a[ i ] [ j ] =min;
for( i =1; i <=n; i ++)
{
for( j =1; j <=n; j ++)
cout<<a[ i ] [ j ] <<" " ;
cout<<endl ;
}
}
Subiectul 5
Se citete un cuvnt format doar din litere mici, separate prin unul sau mai multe spaii. Definim randamentul
unui cuvnt ca fiind numrul de caractere distincte din cuvnt / lungimea cuvntului. De exemplu irul
caractere are randamentul 1/9=0.11. Afiai n fiierul Rezultate.out, randamentul cuvntului citit cu dou
zecimale.
Exemplu: dac se citete cuvntul:
probleme
Fiierul Rezultate.out va avea urmtorul coninut:
0.75

#i ncl ude <i ost r eam>
#i ncl ude <cst r i ng>
#i ncl ude <i omani p>
#i ncl ude <f st r eam>
using namespace std;
int mai n( )
{
char s[ 100] ;
int k=0, n, i , f r [ 32] ={0};
ofstream g( " Rezul t at e. out " ) ;
cout<<" I nt r oducet i cuvant ul : " ;
cin. get ( s, 100) ;
n=st r l en( s) ;
for( i =0; s[ i ] ; i ++)
f r [ s[ i ] - ' a' ] ++;
for( i =0; i <=32; i ++)
if( f r [ i ] ==1)
{
cout<<( char) ( i +' a' ) <<" " ;
k++;
}
cout<<" Numar ul de car act er e di st i nct e est e " <<k<<" . " <<endl ;
cout<<" Lungi mea si r ul ui de car act er e est e " <<n<<" . " <<endl ;
cout<<" Randament ul cu doua zeci mal e " ;
cout<<" est e " <<f i xed<<set pr eci si on( 2) <<( float) k/ n<<" . " ;
g<<f i xed<<set pr eci si on( 2) <<( float) k/ n;
g. cl ose( ) ;
}
Cuprins
Subiectul 6
O matrice ptratic A de dimensiune n cu p elemente nenule este memorat economic n fiierul de intrare
Matrice.txt sub urmtoarea form.: pe prima linie a fiierului se gsesc dou numere n i p, dimensiunea
matricei respectiv numrul de elemente nenule iar pe urmtoarele p linii triplete de numere naturale (v, l, c)
care reprezint valoarea, linia respectiv coloana pe care se gsesc elementele nenule. Scriei un program care
citete informaiile din fiierul de intrare, reface i scrie n fiierul de ieire Matrice.out matricea A.
Exemplu: dac fiierul Matrice.txt are urmtorul coninut:
5 8
1 1 1
5 1 2
1 2 3
2 2 5
3 3 2
4 4 1
2 4 3
8 5 4
Fiierul Matrice.out va avea urmtorul coninut:
#i ncl ude <i ost r eam>
#i ncl ude <f st r eam>
using namespace std;
int mai n( )
{
int a[ 100] [ 100] ={0}, n, p, v, l , c, i , j , k;
ifstream f ( " Mat r i ce. t xt " ) ;
ofstream g( " Mat r i ce. out " ) ;
f >>n>>p;
for( k=1; k<=p; k++)
{
f >>v>>l >>c;
i =l ; j =c;
a[ i ] [ j ] =v;
}
for( i =1; i <=n; i ++)
{
for( j =1; j <=n; j ++)
g<<a[ i ] [ j ] <<" " ;
g<<endl ;
}
f . cl ose( ) ;
g. cl ose( ) ;
}
Subiectul 7
Pentru un ir de caractere s, citit de la tastatur s se construiasc i s se afieze un ablonacesta fiind un alt
ir de caractere de aceiai lungime cu s, ce conine doar caractere din mulimea {*, ?, #}, astfel nct fiecare
poziie din s n care se gsete o vocal s fie codificat cu caracterul *, pe fiecare poziie din s n care apare o
consoan s fie codificat cu # i pe fiecare poziie din s n care apare orice alt caracter s fie codificat cu ?. Se
consider vocal orice liter din mulimea {a,e,i,o,u}.
Exemplu: pentru irul: informatica_
Pe ecran se va afia
*##*##*#*#*?
Cuprins
#i ncl ude <i ost r eam>
#i ncl ude <cst r i ng>
using namespace std;
int mai n( )
{
char s[ 100] ;
int i ;
cout<<" I nt r oducet i si r ul : " ;
cin. get ( s, 100) ;
for( i =0; s[ i ] ; i ++)
{
if( i sal num( s[ i ] ) ==0)
cout<<" ?" ;
else
if( st r chr ( " aei ou" , s[ i ] ) ==0)
cout<<" #" ;
else
cout<<" *" ;
}
}
Subiectul 8
Fiierul atestat.in conine dou linii. Pe prima linie este scris un numr natural nenul n, (5<n<30).Pe cea de-a
doua linie a fiierului sunt scrise n numere naturale separate prin cte un spaiu, formate fiecare din cel mult 4
cifre, reprezentnd un ir de n numere naturale. irul conine cel puin dou numere impare.
S se scrie un program care:
a) s afieze pe ecran, n linie, n ordinea invers citirii, toate numerele din ir,separate prin cte un spaiu;
b) s afieze pe ecran, n linie, numrul de cifre din care este format fiecare numrdin irul iniial, separndu-le
prin cte un spaiu;
Exemplu:
Dac fiierul atestat.in conine:
6
13 555 71 2 242 1001
Se va afia:
1001 242 2 71 555 13
2 3 2 1 3 4
#i ncl ude <i ost r eam>
#i ncl ude <f st r eam>
using namespace std;
int cont or ( int x)
{
if( x==0)
return 0;
else
return cont or ( x/ 10) +1;
}
int mai n( )
{
int n, v[ 30] , i ;
ifstream f ( " at est at . i n" ) ;
f >>n;
for( i =1; i <=n; i ++)
f >>v[ i ] ;
//a
for( i =n; i >=1; i - - )
cout<<v[ i ] <<" " ;
cout<<endl ;
//b
for( i =1; i <=n; i ++)
cout<<cont or ( v[ i ] ) <<" " ; f . cl ose( ) ;
}
Cuprins
Subiectul 9
Fiierul atestat.in conine 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 cte un spaiu. Fiecare cuvnt este format
doar din litere mari sau mici ale alfabetului limbii engleze.
S se scrie un program care:
c) s afieze textul pe o singur linie a ecranului, scris cu majuscule;
d) s afieze n fiierul atestat.out numrul consoanelor din text;
Exemplu:
atestat.in
Imi place Informatica
Se va afia:
IMI PLACE INFORMATICA
10
#i ncl ude <i ost r eam>
#i ncl ude <cst r i ng>
#i ncl ude <f st r eam>
using namespace std;
int mai n( )
{
char s[ 200] ;
int i , nr =0;
ifstream f ( " at est at . i n" ) ;
ofstream g( " at est at . out " ) ;
f . get ( s, 200) ;
cout<<st r upr ( s) <<endl ;
for( i =0; s[ i ] ; i ++)
if( st r chr ( " AEI OU" , s[ i ] ) ==0 and s[ i ] ! =' ' )
nr ++;
g<<nr ;
//sau
i =0;
while( s[ i ] )
{
if( s[ i ] >=' A' && s[ i ] <=' Z' | | s[ i ] ==' ' )
i ++;
else
s[ i ] =t oupper ( s[ i ] ) ; / / s[ i ] =s[ i ] - 32;
}
for( i =0; s[ i ] ; i ++)
if( st r chr ( " AEI OU" , s[ i ] ) ==0 and s[ i ] ! =' ' )
nr ++;
cout<<s<<endl ;
g<<nr ;
f . cl ose( ) ;
g. cl ose( ) ;
}
Subiectul 10
10. Se citete de la tastatur un ir de n numere naturale de maxim 9 cifre (n<=100). S se afieze pe ecran cifra
de control a numerelor din ir. Se va utiliza un subprogram care determin suma cifrelor unui numr natural.
Cifra de control a unui numr se obine calculnd suma cifrelor numrului, apoi se realizeaz suma cifrelor
sumei numrului, .a.m.d. pn cnd se obine ca sum un numr de o cifr.
Exemplu: n=6
13, 452, 1198, 986, 24, 881
Se va afia:
4, 2, 1, 5, 6, 8
Cuprins
#i ncl ude <i ost r eam>
using namespace std;
int suma( int x)
{
int s=0;
while( x)
{
s=s+x%10;
x/ =10;
}
return s;
}
int mai n( )
{
int n, i , v[ 100] ;
cout<<" n=" ; cin>>n;
for( i =1; i <=n; i ++)
{
cout<<" v[ " <<i <<" ] =" ;
cin>>v[ i ] ;
}
for( i =1; i <=n; i ++)
{
while( v[ i ] >9)
{
v[ i ] =suma( v[ i ] ) ;
}
cout<<v[ i ] <<" " ;
}
}
Subiectul 11
Scriei programul care citete de la tastatur un numr natural n (1 <n<10), apoi n*n numere ntregi, mai mici
dect 32000, reprezentnd elementele unui tablou bidimensional cu n linii i n coloane, i care determin i
afieaz pe ecran ultima cifr a produsului numerelor prime de pe diagonala principal a tabloului sau mesajul
imposibil dac nu exist numere prime.
Exemplu: n=4
15 10 9 2
40 12 13 2
20 14 7 7
31 15 14 2
Se va afia 4(deoarece produsul este 14)
#i ncl ude <i ost r eam>
using namespace std;
int pr i m( int x)
{
int d;
for( d=2; d<=x/ 2; d++)
if( x%d==0)
return 0;
return 1;
}
Cuprins

int mai n( )
{
int a[ 10] [ 10] , n, i , j , p=1;
cout<<" n=" ; cin>>n;
for( i =1; i <=n; i ++)
for( j =1; j <=n; j ++)
{
cout<<" a[ " <<i <<" ] [ " <<j <<" ] =" ;
cin>>a[ i ] [ j ] ;
}
for( i =1; i <=n; i ++)
for( j =1; j <=i ; j ++)
if( i ==j && pr i m( a[ i ] [ j ] ) )
p=p*a[ i ] [ j ] ;
cout<<p%10;
}
Subiectul 12
Scriei un program C/C++ care citete de la tastur un numr natural n cu cel mult 8 cifre (n10) i care creeaz
fiierul text NR.TXT ce conine numrul n i toate prefixele nenule ale acestuia, pe o singur linie, separate prin
cte un spaiu, n ordine descresctoare a valorii lor.
Exemplu: pentru n=10305 fiierul NR.TXT va conine numerele:
10305 1030 103 10 1
#i ncl ude <i ost r eam>
#i ncl ude <f st r eam>
using namespace std;
int mai n( )
{
int n;
ofstream f ( " NR. TXT" ) ;
cout<<" n=" ; cin>>n;
while( n)
{
f <<n<<" " ;
n/ =10;
}
f . cl ose( ) ;
}
Subiectul 13
Se consider un text alctuit din cel mult 250 de caractere, n care cuvintele sunt formate doar din litere mici ale
alfabetului englez i sunt separate prin unul sau mai multe caractere *. Scriei un program C/C++ care citete
de la tastatur textul i afieaz pe ecran, pe cte o linie, toate secvenele formate din cte dou litere identice,
ca n exemplu.
Exemplu: dac textul citit este:
cand*lucreaza**pe*grupe***copiii*trebuie*sa*coopereze
se afieaz perechile de mai jos
ii
ii
oo
Cuprins
#i ncl ude <i ost r eam>
#i ncl ude <cst r i ng>
using namespace std;
int mai n( )
{
char s[ 250] , *p, cuv[ 25] ;
int i ;
cout<<" I nt r oducet i t ext ul : " ;
cin. get ( s, 250) ;
p=st r t ok( s, " *" ) ;
while( p)
{
st r cpy( cuv, p) ;
for( i =0; cuv[ i ] ; i ++)
if( cuv[ i ] ==cuv[ i +1] )
cout<<cuv[ i ] <<cuv[ i +1] <<endl ;
p=st r t ok( NULL, " *" ) ;
}
}
Subiectul 14
Se citesc de la tastatur dou numere naturale: n i m de maxim 9 cifre fiecare. S se afieze cte cifre comune
au cele dou numere citite i care sunt aceste cifre.
Exemplu : Numerele 21348 i 14513 au 3 cifre comune : 1, 3, 4.
#i ncl ude <i ost r eam>
using namespace std;
int mai n( )
{
int n, m, nr =0, f r n[ 10] ={0}, f r m[ 10] ={0}, i ;
cout<<" n=" ; cin>>n;
cout<<" m=" ; cin>>m;
while( n)
{
f r n[ n%10] ++;
n/ =10;
}
while( m)
{
f r m[ m%10] ++;
m/ =10;
}
for( i =0; i <10; i ++)
if( f r n[ i ] ! =0 and f r m[ i ] ! =0)
{cout<<i <<" " ; nr ++; }
cout<<endl <<nr ;
}
Cuprins
Subiectul 15
Se citesc de la tastatura n numere naturale, cu cel mult 9 cifre fiecare. Scrieti un program care pentru o cifr k
citit de la tastatur, afieaz pe ecran cte numere n scrierea crora apare cifra k, se gsesc n irul dat.
Exemplu: pentru n=4 , cifra k=2 si valorile citite 23, 603, 122, 27 se obtine numarul nr = 3.
#i ncl ude <i ost r eam>
using namespace std;
int mai n( )
{
int n, i , k, nr =0, ok, x;
cout<<" n=" ; cin>>n;
cout<<" k=" ; cin>>k;
for( i =1; i <=n; i ++)
{
cout<<" x=" ; cin>>x;
ok=0;
while( x && ! ok)
{
if( x%10==k)
ok=1;
x/ =10;
}
if( ok==1)
nr ++;
}
cout<<nr ;
}
Subiectul 16
Se citesc de la tastatur n numere naturale, cu cel mult 9 cifre fiecare. Scriei un program care afieaz cifra care
apare de cele mai multe ori n numerele citite. Dac exist mai multe astfel de cifre se vor afia toate.
Exemplu: Pentru n=4 i valorile 23, 431, 154, 452 se afieaz 4 pentru c cifra 4 apare de 3 ori n numerele
citite.
#i ncl ude <i ost r eam>
using namespace std;
int mai n( )
{
int n, f r [ 10] ={0}, i , x, max=0;
cout<<" n=" ; cin>>n;
for( i =1; i <=n; i ++)
{
cout<<" x=" ; cin>>x;
while( x)
{
f r [ x%10] ++;
if( f r [ x%10] >max)
max=f r [ x%10] ;
x/ =10;
}
}
for( i =0; i <10; i ++)
if( f r [ i ] ==max)
cout<<i <<" " ;
}
Cuprins
Subiectul 17
Fiierul numere.in conine pe prima linie mai multe numere naturale n ordine cresctoare dintre care cel puin
o putere a lui 3. Scriei un program care afieaz pe ecran numerele din fiier ce sunt puteri ale lui 3.
Exemplu: 27, 43, 54, 81, 452, 729 se afieaz 27, 81,729.
#i ncl ude <i ost r eam>
#i ncl ude <f st r eam>
using namespace std;
int mai n( )
{
int x, c;
ifstream f ( " numer e. i n" ) ;
while( f >>x)
{
c=x;
while( x%3==0)
x=x/ 3;
if( x==1)
cout<<c<<" " ;
}
f . cl ose( ) ;
}
Subiectul 18
S se scrie un program care s verifice dac suma cifrelor de pe poziiile impare i suma cifrelor de pe poziiile
pare ale unui numr natural n citit de la tastatur sunt egale. Poziiile se numr de la dreapta la stnga
ncepnd cu poziia 1. Se afieaz sumele i un mesaj corespunztor pe ecran.
Exemplu: se citete: n=12345 i se afieaz: sp=6 i simp=9 Nu coincid!.
#i ncl ude <i ost r eam>
using namespace std;
int mai n( )
{
int n, sp=0, si mp=0, i =0;
cout<<" n=" ; cin>>n;
while( n)
{
i ++;
if( i %2! =0)
si mp=si mp+n%10;
else
sp=sp+n%10;
n/ =10;
}
cout<<" sp=" <<sp<<" si si mp=" <<si mp<<" " ;
if( sp! =si mp)
cout<<" Nu coi nci d! " ;
else
cout<<" Coi nci d! " ;
}
Cuprins
Subiectul 19
Se consider o matrice oarecare de dimensiune mxn cu elemente numere naturale. S se afieze numerele cu
numr impar de divizori din matrice i s se indice numrul lor. Exemplu: se citete: m=2 i n=3 i matricea
12 7 25
4 11 8
se afieaz: 4, 25, 2 numere.
#i ncl ude <i ost r eam>
using namespace std;
int mai n( )
{
int a[ 10] [ 10] , n, m, i , j , d, k, nr =0;
cout<<" m=" ; cin>>m;
cout<<" n=" ; cin>>n;
for( i =1; i <=m; i ++)
for( j =1; j <=n; j ++)
{
cout<<" a[ " <<i <<" ] [ " <<j <<" ] =" ;
cin>>a[ i ] [ j ] ;
}
for( i =1; i <=m; i ++)
for( j =1; j <=n; j ++)
{k=2;
for( d=2; d<=a[ i ] [ j ] / 2; d++)
if( a[ i ] [ j ] %d==0)
k++;
if( k%2! =0)
{cout<<a[ i ] [ j ] <<" , " ; nr ++; }
}
cout<<nr <<" numer e" ;
}
Subiectul 20
Scriei un program C/C++ care citete de la tastatur numerele ntregi m i n (1<=m<=50,1<=n<=50) i
elementele unui tablou bidimensional cu m linii i n coloane, numere ntregi distincte de cel mult 4 cifre fiecare.
Programul va afia pe prima linie a ecranului numrul de elemente prime de pe fiecare coloana a matricii,
separate prin cte un spaiu. Definii o funcie care verific dac un numr ntreg este prim i folosii apeluri ale
ei pentru rezolvarea cerinei.Exemplu: pentru m=3 i n=4 i tabloul de mai jos
1 7 1 4
4 6 12 3
9 22 8 5
Pe ecran se va afia:
1 1 1 2
#i ncl ude <i ost r eam>
using namespace std;
int pr i m( int x)
{
int d;
for( d=2; d<=x/ 2; d++)
if( x%d==0)
return 0;
return 1;
}
Cuprins
int mai n( )
{
int a[ 50] [ 50] , m, n, i , j , nr ;
cout<<" m=" ; cin>>m;
cout<<" n=" ; cin>>n;
for( i =1; i <=m; i ++)
for( j =1; j <=n; j ++)
{
cout<<" a[ " <<i <<" ] [ " <<j <<" ] =" ;
cin>>a[ i ] [ j ] ;
}
for( j =1; j <=n; j ++)
{ nr =0;
for( i =1; i <=m; i ++)
if( pr i m( a[ i ] [ j ] ) )
nr ++;
cout<<nr <<" " ;
}
}
Subiectul 21
Se d o nregistrare cu numele cerc, n care sunt stocate abscisa i ordonata centrului cercului i raza acestuia.
Pentru un n numr natural <100, citii datele pentru n cercuri i sortai structurile descresctor n funcie de
diametru. Exemplu: pentru n=4 i perechile de forma (x,y,r): (2,3,4) (1,2,7) (3,2,6) (7,8,5)
Se afieaz:
(1,2) d=14
(3,2) d=12
(7,8) d=10
(2,3) d=8
#i ncl ude <i ost r eam>
using namespace std;
int mai n( )
{
struct cer c
{
int absci sa, or donat a, r , d;
} x[ 100] , aux;
int n, i , j ;
cout<<" n=" ; cin>>n;
for( i =1; i <=n; i ++)
{
cout<<" Cer cul nr . " <<i <<" : " ;
cout<<" Absci sa cer cul ui nr . " <<i <<" : " ; cin>>x[ i ] . absci sa;
cout<<" Or donat a cer cul ui nr . " <<i <<" : " ; cin>>x[ i ] . or donat a;
cout<<" Raza cer cul ui nr . " <<i <<" : " ; cin>>x[ i ] . r ;
x[ i ] . d=2*x[ i ] . r ;
}
for( i =1; i <n; i ++)
for( j =i +1; j <=n; j ++)
if( x[ i ] . d<x[ j ] . d)
{
aux=x[ i ] ; x[ i ] =x[ j ] ; x[ j ] =aux;
}
for( i =1; i <=n; i ++)
cout<<" ( " <<x[ i ] . absci sa<<" , " <<x[ i ] . or donat a<<" ) d=" <<x[ i ] . d<<endl ;
}
Cuprins
Subiectul 22
Se citesc de la tastatur elementele unui vector cu n numere naturale sortat cresctor i un numr natural k. S
se insereze numrul k n irul dat astfel nct irul s rmn sortat cresctor. Exemplu: n=4 i k=100 i
numere: 90 95 110 120
Se va afia : 90 95 100 110 120.
#i ncl ude<i ost r eam>
using namespace std;
int mai n( )
{
int v[ 100] , n, i , s, d, m, k;
cout<<" n=" ; cin>>n;
cout<<" k=" ; cin>>k;
for( i =1; i <=n; i ++)
{
cout<<" v[ " <<i <<" ] =" ;
cin>>v[ i ] ;
}
s=1; d=n;
while( s<=d)
{
m=( s+d) / 2;
if( k<v[ m] )
d=m- 1;
else
s=m+1;
}
for( i =n+1; i >s; i - - )
v[ i ] =v[ i - 1] ;
v[ s] =k;
for( i =1; i <=n+1; i ++)
cout<<v[ i ] <<" " ;
}
Subiectul 23
Fiierul note.in conine pe prima linie un numr natural n (2 < n < 100), iar pe a doua linie sunt n numere
naturale cuprinse ntre 1 i 10, reprezentnd notele a n elevi dintr-o clas, cel puin 3 note fiind distincte. S se
scrie un program care determin i afieaz pe ecran media aritmetic a celor n note, tiind c notele cele mai
mici (<5) i notele cele mai mari(>=9) nu se iau n considerare la calculul mediei.
Exemplu: note.in
5
2 8 4 9 7
Se va afia: 7.5 (deoarece notele 2, 4 i nota 9 se elimin).
#i ncl ude <i ost r eam>
#i ncl ude <f st r eam>
using namespace std;
int mai n( )
{
int x, n, k=0, i , s=0;
ifstream f ( " not e. i n" ) ;
f >>n;
for( i =1; i <=n; i ++)
{
f >>x;
if( x>=5 && x<9)
{s=s+x; k++; }
}
cout<<( float) s/ k; f . cl ose( ) ;
}
Cuprins
Subiectul 24
Se citesc din fiierul numere.in mai multe numere naturale nenule de cel mult 6 cifre pn la ntlnirea
numrului 0. S se afieze n fiierul numere.out numerele prime.
Exemplu:
numere.in
25 31 100 123456 23 0
numere.out
31 23
#i ncl ude <i ost r eam>
#i ncl ude <f st r eam>
using namespace std;
int pr i m( int x)
{
int d;
for( d=2; d<=x/ 2; d++)
if( x%d==0)
return 0;
return 1;
}
int mai n( )
{
int x;
ifstream f ( " numer e. i n" ) ;
ofstream g( " numer e. out " ) ;
f >>x;
while( x)
{
if( pr i m( x) )
g<<x<<" " ;
f >>x;
}
f . cl ose( ) ;
g. cl ose( ) ;
}
Subiectul 25
Fiierul numere.in conine pe prima linie numrul natural n (2 < = n < = 25000), pe a doua linie un ir de n
numere naturale cuprinse ntre 1 i 1000, iar pe a treia linie un numr natural x cuprins ntre 1 i 1000. S se
memoreze irul ntr-un vector i s se nlocuiasc toate elementele egale cu x cu produsul dintre x i numrul
divizorilor lui x. Vectorul rezultat va fi afiat n fiierul numere.out.
Exemplu:
numere.in
7
3 3 3 999 3 67 24
3
numere.out
6 6 6 999 6 67 24
#i ncl ude <i ost r eam>
#i ncl ude <f st r eam>
using namespace std;
Cuprins
int mai n( )
{
int n, v[ 100] , i , x, d, nr ;
ifstream f ( " numer e. i n" ) ;
ofstream g( " numer e. out " ) ;
f >>n;
for( i =1; i <=n; i ++)
{
f >>v[ i ] ;
}
f >>x;
for( i =1; i <=n; i ++)
{
if( v[ i ] ==x)
{
nr =2;
for( d=2; d<=v[ i ] / 2; d++)
if( v[ i ] %d==0)
nr ++;
v[ i ] =nr *x;
}
g<<v[ i ] <<" " ;
}
f . cl ose( ) ;
g. cl ose( ) ;
}
Subiectul 26
Se tie c orice numr par n>=4 se poate scrie ca sum a doua numere prime. S se afieze n fiierul sume.txt
toate sumele posibile de numere prime ce dau ca rezultat n.Exemplu:pentru n=20 se vor afia sumele 1+19,
3+17, 7+13, 13+7, 17+3,19+1.
#i ncl ude <i ost r eam>
#i ncl ude <f st r eam>
using namespace std;
int pr i m( int x)
{
int d;
for( d=2; d<=x/ 2; d++)
if( x%d==0)
return 0;
return 1;
}
int mai n( )
{
ofstream f ( " sume. t xt " ) ;
int n, a, b; cout<<" n=" ; cin>>n;
if( n%2! =0)
cout<<" Numar ul t r ebui e sa f i e par ! " ;
else
if( n==4)
cout<<2<<" + " <<2;
else
{
for( a=1; a<=n; a++, a++)
if( pr i m( a) )
{
b=n- a; if( pr i m( b) )
f <<a<<" + " <<b<<endl ;
}
} f . cl ose( ) ;
}
Cuprins
Subiectul 27
Din fiierul propozitie.in se citete un ir de caractere, reprezentnd mai multe cuvinte separate ntre ele prin
urmtorii separatori: ,, ;, ,!,?. S se verifice dac dup eliminarea acestora irul este palindromic ( se va afia DA
n caz afirmativ i NU n caz contrar).Exemplu: pentru propozitia
Ele fac cafele ? se afieaz DA.
#i ncl ude <i ost r eam>
#i ncl ude <f st r eam>
#i ncl ude <cst r i ng>
using namespace std;
int mai n( )
{
ifstream f ( " pr opozi t i e. i n" ) ;
char s[ 200] , i nv[ 200] ;
int i ;
f . get ( s, 200) ;
i =0;
while( s[ i ] )
if( st r chr ( " , : ; . ! ? " , s[ i ] ) )
st r cpy( s+i , s+i +1) ;
else
i ++;
st r upr ( s) ; st r cpy( i nv, s) ;
if( st r cmp( s, st r r ev( i nv) ) ==0)
cout<<" DA" ;
else
cout<<" NU" ;
f . cl ose( ) ;
}
Subiectul 28
Definim operaia de compactare a unui tablou ca fiind eliminarea zerourilor din tablou. Dac ntlnim un
element nul toate elementele situate la dreapta sa vor deplasa cu o poziie la stnga, n locul su. Se citesc
elementele unui tablou cu n numere intregi, se cere s-l compactai. Exemplu: pentru n=4 i numerele: 9 0 0 5
Se va afia 9 5.
Metoda nr.1 - cu ajutorul unui vector auxiliar n care se rein valorile diferite de 0. Metoda este simpl, dar nu
respect n totalitate cerinele problemei.
#i ncl ude <i ost r eam>
using namespace std;
int mai n( )
{
int n, v[ 100] , a[ 100] , j =0, i ;
cout<<" n=" ; cin>>n;
for( i =1; i <=n; i ++)
{
cout<<" v[ " <<i <<" ] =" ;
cin>>v[ i ] ;
}
for( i =1; i <=n; i ++)
if( v[ i ] ! =0)
{
j ++; a[ j ] =v[ i ] ;
}
n=j ;
for( i =1; i <=n; i ++)
cout<<a[ i ] <<" " ;
}
Cuprins
Metoda nr.2, mai complex, dar respect n totalitate cerinele problemei.
#i ncl ude <i ost r eam>
using namespace std;
int v[ 100] , n, poz1, poz2, i ;
int pozi t i e( int poz)
{
while( poz<n && v[ poz] ==0)
poz++;
if( poz<=n && v[ poz] ! =0)
return poz;
else
return 0;
}
int mai n( )
{
cout<<" n=" ; cin>>n;
for( i =1; i <=n; i ++)
{
cout<<" v[ " <<i <<" ] =" ;
cin>>v[ i ] ;
}
/*
cautam pozitia primului element 0 in vector
si memoram pozitia acestuia in poz1
*/
for( poz1=1; poz1<n && v[ poz1] ! =0; poz1++) ;
if( v[ poz1] ==0)
{
/*
cautam pozitia primului element diferit de 0
si memoram pozitia in poz2
*/
poz2=pozi t i e( poz1+1) ;
/*
cat timp poz2 exista
atribuim elementului de la poz1
valoarea elementului de la poz2
*/
while( poz2! =0)
{
v[ poz1] =v[ poz2] ;
poz1++;
poz2=pozi t i e( poz2+1) ;
}
n=poz1- 1; //pozitia ultimului element din vectorul compactat
}
for( i =1; i <=n; i ++)
cout<<v[ i ] <<" " ;
}
Subiectul 29
Se citesc mai multe cuvinte din fiierul iruri.txt. Afisati pe ecran, cuvintele ordonate lexicografic.Exemplu:
Siruri.txt conine maine am examen, pe ecran se afieaz am examen maine.
Cuprins
#i ncl ude <i ost r eam>
#i ncl ude <f st r eam>
#i ncl ude <cst r i ng>
using namespace std;
int mai n( )
{
ifstream f ( " si r ur i . t xt " ) ;
char s[ 200] , *p, cuv[ 20] [ 20] , aux[ 20] ;
int i =0, n, j ;
f . get ( s, 200) ;
p=st r t ok( s, " " ) ;
while( p)
{
i ++;
st r cpy( cuv[ i ] , p) ;
p=st r t ok( NULL, " " ) ;
}
n=i ;
for( i =1; i <n; i ++)
for( j =i +1; j <=n; j ++)
if( st r cmp( cuv[ i ] , cuv[ j ] ) >0)
{
st r cpy( aux, cuv[ i ] ) ;
st r cpy( cuv[ i ] , cuv[ j ] ) ;
st r cpy( cuv[ j ] , aux) ;
}
for( i =1; i <=n; i ++)
cout<<cuv[ i ] <<" " ;
f . cl ose( ) ;
}
Subiectul 30
Folosind vectori de structur, s se calculeze pentru n numere complexe modulul lor. Vectorii se vor citi dintr-
un fiier complexe.in care va conine pe fiecare rnd partea real i coeficientul prii imaginare a fiecrui
numr complex.
Exemplu: complexe.in 3 i apoi pe cte o linie 3 4, 6 3, 2 7, se va afia, pe cte o linie 5, 6.7, 7.3.
#i ncl ude <i ost r eam>
#i ncl ude <f st r eam>
#i ncl ude <cmat h>
#i ncl ude <i omani p>
using namespace std;
int mai n( )
{
struct complex
{
float r eal , i magi nar , modul ul ;
}c[ 20] ;
int n, i =0;
ifstream f ( " compl exe. i n" ) ;
f >>n;
for( i =1; i <=n; i ++)
{
f >>c[ i ] . r eal >>c[ i ] . i magi nar ;
c[ i ] . modul ul =sqr t ( pow( c[ i ] . r eal , 2) +pow( c[ i ] . i magi nar , 2) ) ;
}
for( i =1; i <=n; i ++)
cout<<f i xed<<set pr eci si on( 1) <<c[ i ] . modul ul <<endl ;
f . cl ose( ) ;
}
Cuprins
Subiectul 31
tiind c orice numr natural se poate scrie ca sum de puteri distincte ale lui 2, s se determine o modalitate de
scriere a numrului n, citit de la tostatura, ca sum de puteri ale lui 2 n fiierul suma.txt.
Exemplu: n=5
suma.txt 2
2
+2
0
#i ncl ude <i ost r eam>
#i ncl ude <f st r eam>
#i ncl ude <cmat h>
using namespace std;
int mai n( )
{
int n, x, nr , i ;
ofstream f ( " suma. t xt " ) ;
cout<<" n=" ; cin>>n;
/*determinam cea mai mare putere a lui 2
in scrierea lui n si o salvam in variabila x*/
for( i =0; i <=n/ 2; i ++)
if( pow( 2, i ) <=n)
x = i ;
//afisam cea mai mare putere a lui 2
f <<2<<" ^ " <<x<<" " ;
nr = pow( 2, x) ;
/*determinam exponentii care sunt mai mici
decat exponentul maxim si ii afisam*/
for( i =x- 1; i >=0; i - - )
if( nr + pow( 2, i ) <= n)
{
f <<2<<" ^ " <<i <<" " ;
nr =nr +pow( 2, i ) ;
}
f . cl ose( ) ;
}
Subiectul 32
Fiind dat o matrice patratic de dimensiune n, s se afieze n fiierul matrice.txt aceast matrice, fr a afia
cele 2 diagonale i s se calculeze media artimetic a elementelor pozitive i media geometric a elementelor
negative din matrice.
Exemplu:n=3
1 2 3
-4 5 -6
7 -8 9
matrice.txt
2
-4 -6
-8
4.5 media arithmetic a elementelor pozitive
5.769 media geometric a elementelor negative
Cuprins
#i ncl ude <i ost r eam>
#i ncl ude <f st r eam>
#i ncl ude <cmat h>
using namespace std;
int mai n( )
{
int a[ 10] [ 10] , n, i , j , p=1, sp=0, k=0, w=0;
ofstream f ( " mat r i ce. t xt " ) ;
cout<<" n=" ; cin>>n;
for( i =1; i <=n; i ++)
for( j =1; j <=n; j ++)
cin>>a[ i ] [ j ] ;
for( i =1; i <=n; i ++)
{
for( j =1; j <=n; j ++)
if( i ! =j && i +j ! =n+1)
f <<a[ i ] [ j ] <<" " ;
f <<endl ;
}
for( i =1; i <=n; i ++)
for( j =1; j <=n; j ++)
if( a[ i ] [ j ] >=0)
{sp=sp+a[ i ] [ j ] ; k++; }
else
{p=p*a[ i ] [ j ] ; w++; }
f <<endl <<( float) sp/ k<<endl ;
if( p<0)
p=- p;
f <<endl <<pow( p, 1. 0/ w) ;
f . cl ose( ) ;
}
Subiectul 33
Pe fiecare linie a fiierului numere.txt este scris cte un numr natural n. S se gseasc pentru fiecare numr
citit cel mai mare numr prim strict mai mic decat n i cel mai mic numr prim mai mare strict decat n i s se
afieze aceste dou numere n fiierul rezultate.txt.
Exemplu:
numere.txt
7
36
10
18
rezultate.txt
5 11
31 37
7 11
17 19
#i ncl ude <i ost r eam>
#i ncl ude <f st r eam>
#i ncl ude <l i mi t s. h>
using namespace std;
int pr i m( int x)
{
int d;
for( d=2; d<=x/ 2; d++)
if( x%d==0)
return 0;
return 1;
}
Cuprins
int mai n( )
{
ifstream f ( " numer e. t xt " ) ;
ofstream g( " r ezul t at e. t xt " ) ;
int n, a, b, i ;
while( f >>n)
{
for( i =n- 1; i >=0; i - - )
if( pr i m( i ) )
{a=i ; break; }
for( i =n+1; i <I NT_MAX; i ++)
if( pr i m( i ) )
{b=i ; break; }
g<<a<<" " <<b<<endl ;
}
f . cl ose( ) ;
g. cl ose( ) ;
}
Subiectul 34
Se citesc din fiierul fractii.txt cte dou numere, reprezentnd numratorul i numitorul fiecrei fracii. S se
afieze n fiierul rezultate.txt aceste fracii simplificate.
Exemplu:
fractii.txt
6 4
10 5
150 20
rezultate.txt
3 2
2 1
15 2
#i ncl ude <i ost r eam>
#i ncl ude <f st r eam>
using namespace std;
int cmmdc( int a, int b)
{
int r ;
while( b)
{
r =a%b;
a=b;
b=r ;
}
return a;
}
int mai n( )
{
int x, y, z;
ifstream f ( " f r act i i . t xt " ) ;
ofstream g( " r ezul t at e. t xt " ) ;
while( f >>x>>y)
{
z=cmmdc( x, y) ;
g<<x/ z<<" " <<y/ z<<endl ;
}
f . cl ose( ) ;
g. cl ose( ) ;
}
Cuprins
Subiectul 35
Se citesc din fisierul text numere.txt, numere ntregi. S se calculeze cel mai mare divizor comun dintre
numerele de pe poziii impare(primul numr, al treilea, etc,) i cel mai mic multiplu comun dintre numerele de
pe poziii pare (al doilea numar, al patrulea, etc) i s se afieze.
Exemplu:
numere.txt: 2 3 18 5 27
cmmdc(2,18,27)=1
cmmmc(3,5)=15

#i ncl ude <i ost r eam>
#i ncl ude <f st r eam>
using namespace std;
int cmmdc( int a, int b)
{
int r ;
while( b)
{
r =a%b;
a=b;
b=r ;
}
return a;
}
int cmmmc( int a, int b)
{
return ( a*b) / cmmdc( a, b) ;
}
int mai n( )
{
ifstream f ( " numer e. t xt " ) ;
int i , a, b, x, y, z, w, t ;
i =5;
f >>x>>y>>z>>t ;
a=cmmdc( x, z) ;
b=cmmmc( y, t ) ;
while( f >>w)
{
if( i %2)
a=cmmdc( a, w) ;
else
b=cmmmc( b, w) ;
i ++;
}
cout<<a<<" " <<b;
f . cl ose( ) ;
}

Subiectul 36
Un numr a este imperfect dac suma divizorilor si, exceptnd numrul nsui este mai mic dect a. Fiind dat
un numr n de la tastatur s se construiasc vectorul cu primele n numere imperfecte.
Exemplu:n=5 se afieaz 2 3 4 5 7


Cuprins
#i ncl ude <i ost r eam>
using namespace std;
int i mper f ect ( int x)
{
int s=1, d;
for( d=2; d<=x/ 2; d++)
if( x%d==0)
s+=d;
return ( s<x) ;
}
int mai n( )
{
int n, i , k, j =0, v[ 100] ;
cout<<" n=" ; cin>>n;
for( i =1, k=1; k<=n; i ++)
if( i mper f ect ( i ) )
{j ++; v[ j ] =i ; k++; }
for( i =1; i <=n; i ++)
cout<<v[ i ] <<" " ;
}
Subiectul 37
Se citesc mai multe cuvinte din fiierul de intrare fraze.txt. S se afieze, pe cte un rnd, cuvintele din fiier,
lungimile lor i s se afieze n final lungimea maxim i minim a cuvintelor citite din fiier.
Exemplu:
eu sunt printre cei cuminti din scoala
Eu 2
Sunt 4
Printre 7
Cei 3
Cuminti 7
Din 3
Scoala 6
Lungimea minima a cuvintelor este 2
Lungimea maxima a cuvintelor este 7
#i ncl ude <i ost r eam>
#i ncl ude <f st r eam>
#i ncl ude <cst r i ng>
using namespace std;
int mai n( )
{
ifstream f ( " f r aze. t xt " ) ;
char s[ 255] , *p;
int min, max;
f . get ( s, 255) ;
f . cl ose( ) ;
p=st r t ok( s, " " ) ;
min=255; max=0;
while( p)
{
*p=t oupper ( *p) ;
cout<<p<<" " <<st r l en( p) <<endl ;
if( st r l en( p) >max)
max=st r l en( p) ;
if( st r l en( p) <min)
min=st r l en( p) ;
p=st r t ok( NULL, " " ) ;
}
cout<<" Lungi mea mi ni ma a cuvi nt el or est e " <<min<<endl ;
cout<<" Lungi mea maxi ma a cuvi nt el or est e " <<max;
}

Cuprins
Subiectul 38
Se citete un ir de numere naturale pn la citirea lui 0 (care nu face parte din ir). S se calculeze media
aritmetic a numerelor de 3 cifre din ir care au cel puin o cifr egal cu k, citit de la tastatur.
Exemplu:k=5
Pentru irul 2, 751, 215, 210, 2157, 85, 550, 620, 0 media aritmetic este 505.3
#i ncl ude <i ost r eam>
#i ncl ude <i omani p>
using namespace std;
int cont or ( int x, int k)
{
int i =0, ok=0;
while( x)
{
i ++;
if( k==x%10)
ok=1;
x/ =10;
}
return ( i ==3 and ok==1) ;
}
int mai n( )
{
int n, s=0, k, i =0;
cout<<" k=" ; cin>>k;
cout<<" n=" ; cin>>n;
while( n)
{
if( cont or ( n, k) )
{
s+=n; i ++;
}
cout<<" n=" ; cin>>n;
}
cout<<f i xed<<set pr eci si on( 1) <<( float) s/ i ;
}
Subiectul 39
S se realizeze un program care s afieze numerele din fiierul atestat.in care au numrul cifrelor pare egal cu
numrul cifrelor impare. Afiai i numrul acestor numere. Exemplu: atestat.in : 12 1524 99 6543
Se va afisa : 12 1524 6543
#i ncl ude <i ost r eam>
#i ncl ude <f st r eam>
using namespace std;
int egal e( int x)
{
int cp=0, ci =0;
while( x)
{
if( x%2==0)
cp++;
else
ci ++;
x/ =10;
}
return ( cp==ci ) ;
}
Cuprins
int mai n( )
{
ifstream f ( " at est at . i n" ) ;
int x, k=0;
while( f >>x)
{
if( egal e( x) )
{cout<<x<<" " ; k++; }
}
f . cl ose( ) ;
cout<<endl <<" S- au gasi t " <<k<<" numer e. " ;
}
Subiectul 40
Realizai un program care s foloseasc un subprogram recursiv pentru afiarea numerelor ce conin numrul
maxim de cifre distincte, citirea celor n valori intregi se face de la tastatur. Exemplu: n=5 , 121 38 7 1188 22 se
va afia: 1188 38 121.

#i ncl ude <i ost r eam>
using namespace std;
int v[ 100] , n;
int cont or _di st i nct e( int x)
{
int f r [ 10] ={0}, i , c=0;
while( x)
{
f r [ x%10] =1;
x/ =10;
}
for( i =0; i <10; i ++)
if( f r [ i ] ==1)
c++;
return c;
}
void af i sar e( int i , int max)
{
if( i ! =n)
{
af i sar e( i +1, max) ;
if( cont or _di st i nct e( v[ i ] ) ==max)
cout<<v[ i ] <<" " ;
}
}
int mai n( )
{
int x, j =0, k, max=0;
cout<<" n=" ; cin>>n;
for( k=1; k<=n; k++)
{
cout<<" x=" ; cin>>x;
v[ j ] =x; j ++;
if( cont or _di st i nct e( x) >max)
max=cont or _di st i nct e( x) ;
}
af i sar e( 0, max) ;
}
Cuprins