You are on page 1of 17

probleme rezolvate atestat informatica c++

Scris de Administrator
Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06

SUBIECTE SI REZOLVARI C++ PENTRU EXAMENUL DE


ATESTAT LA INFORMATICĂ

1.Scrieţi un program C/C++ care citeşte de la tastatura un număr natural n (2<n<21) si apoi n
linii cu cate n numere întregi de cel mult 7 cifre ce formează un tablou bidimensional a. Sa se
afişeze pe ecran diferenţa dintre suma elementelor de pe diagonala principala si suma
elementelor de pe diagonala secundara a matricei a .

#include<iostream.h>
void main()

{int n,i,j;
long a[20][20],s1=0,s2=0,d;
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<=n;j++)
if(i==j)
s1=s1+a[i][j];};
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
if(i+j==n+1)
s2=s2+a[i][j];}
cout<<s1-s2;
}

3.Scrieţi programul C/C++ care citeşte de la tastatura un număr natural n (n<100) si un sir cu n
numere întregi din intervalul [100 ;999] ; programul construieşte un sir de numere rezultat prin
înlocuirea fiecărui număr din şirul citit cu numărul obţinut prin interschimbarea cifrei unitatilor cu
cifra sutelor. Numerele din noul sir se vor afişa pe ecran separate printr-un singur spaţiu. De
exemplu , pentru n=3 si şirul 123 , 904 , 500 , se afişează 321 , 409 , 5.

1 / 17
probleme rezolvate atestat informatica c++

Scris de Administrator
Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06

#include<iostream.h>
void main()
{int n,i,o,v[20],c;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{cout<<"v["<<i<<"]=";cin>>v[i];}
for(i=1;i<=n;i++)
{o=0;
c=v[i]%10;
o=o*10+c;
v[i]=v[i]/10;
c=v[i]%10;
o=o*10+c;
v[i]=v[i]/10;
o=o*10+v[i];
v[i]=o;
cout<<v[i]<<endl;
}
}

4.Doua tablouri unidimensionale a si b , cu elementele a1 , a2 , … , an , respectiv b1 , b2 , …


bn sunt in relaţia a<=b daca : a1<=b1 , a2<=b2 , … ,
an<=bn. Scrieţi program in limbajul C/C++ care citeşte doua tablouri unidimensionale
a
si
b
cu acelaşi număr de elemente de
tip întreg
si verifica daca
a<=b
sau
b<=a
afişând un mesaj adecvat.

#include<iostream.h>
void main()
{int a[10],i,n,j,k,aux,min;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{cout<<"a["<<i<<"]=";cin>>a[i];}
for(i=1;i<=n-1;i++)
{min=a[i];

2 / 17
probleme rezolvate atestat informatica c++

Scris de Administrator
Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06

k=i;
for(j=i+1;j<=n;j++)
if(a[j]<min)
{min=a[j];
k=j;}
aux=a[k];
a[k]=a[i];
a[i]=aux;}
for(i=1;i<=n;i++)
cout<<a[i]<<" ";}

8.Scrieţi un program in limbajul C/C++ care afişează toate numerele naturale formate din cifre
identice , mai mari decât 10 si mai mici decât o valoare data n, n<=2.000.000. De exemplu
pentru n=195 , se afişează : 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 , 99 , 111.

#include<iostream.h>
int n,i;
int identic(int n)
{int d,c;
c=n%10;
while (n>0)
{d=n%10;
if(d==c)
n=n/10;
else
return 0;}
if(n==0)
return 1;}
void main()
{cout<<"n=";cin>>n;
for (i=10;i<=n;i++)
{if(identic(i))
cout<<i<<endl;}}

10.Scrieţi un program C/C++ care citeşte de la tastatura trei numere naturale x, y si k,


(1<x<y<2000000, k<1000) si afişează pe ecran
k
numere prime din intervalul
[x, y]
. Daca nu exista

3 / 17
probleme rezolvate atestat informatica c++

Scris de Administrator
Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06

k
numere prime în intervalul
[x,y]
se vor afişa toate numerele prime găsite iar pe linia următoare se va afişa mesajul “s-au găsit
mai puţine numere prime: ” urmat de numărul acestora. De exemplu, pentru x=3, y=12 si k=5 se
vor afişa pe ecran:
3 5 7 11
s-au găsit mai puţine numere prime:4

#include<iostream.h>
void main()
{int x,y,k,n,d,a,p;
cout<<"x=";cin>>x;
cout<<"y=";cin>>y;
cout<<"k=";cin>>k;
a=0;
n=x;
while ((n>=x)&&(n<=y)&&(a<k) )
{d=2;p=1;
while((d<=n/2)&&(p==1))
if(n%d==0)
p=0;
else
d++;
if(p)
{cout<<n<<endl;a++;}
n++;}
if(a<k)
cout<<"au fost gasite mai putine nr prime"<<a;}

12.Scrieţi un program C/C++ care citeşte din fişierul text BAC.TXT , cel mult 100 de numere
naturale aflate pe o singura linie, formate din cel mult 9 cifre fiecare, separate prin spatii si
dintre acestea le afişează pe ecran doar pe acelea care au proprietatea de a fi palindrom. Daca
nu se găsesc numere palindrom, se va afişa pe ecran valoarea
–1
. Un număr are proprietatea de a fi palindrom daca citit de la dreapta la stânga sau de la stânga
la dreapta are aceeaşi valoare. De exemplu 1221 este palindrom, in timp ce 1210 nu este
palindrom.

Exemplu : daca din fişierul BAC.TXT se citesc numerele : 7341 , 8228 , 660 , 2 , 80 , 131 ,

4 / 17
probleme rezolvate atestat informatica c++

Scris de Administrator
Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06

atunci pe ecran se vor afişa : 828 , 2 , 131.

#include<iostream.h>
int palindrom(int n)
{int copie=n,oglindit,c;
oglindit=0;
{while(n!=0)
c=n%10;
oglindit=oglindit*10+c;
n=n/10;}
return (copie==oglindit);}
void main()
{int v[100],n,i,p;
p=0;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{cout<<"v["<<i<<"]=";cin>>v[i];}
for(i=1;i<=n;i++)
if(palindrom(v[i]))
{cout<<v[i];
p=1;}
if(p==0)
cout<<"-1";}

14.Pentru orice număr natural nenul n definim n factorial (notat n!) ca fiind produsul tuturor
numerelor naturale nenule mai mici sau egale cu
n
(n! = 1*2*3*…*n) De exemplu : 3!=1*2*3=6 5!=1*2*3*4*5=120 . Scrieţi un program C/C++
care determina numărul de cifre nule aflate pe ultimele poziţii consecutive ale valorii obţinute in
urma evaluării lui
n!
, n fiind un număr natural de cel mult 4 cifre. De exemplu daca n=10, n!=3628800 rezultatul va fi
2 deoarece 3628800 are două zerouri la sfârşit.

#include<iostream.h>
void main()

{long int n,x=1,nr=0,c,p=1;

5 / 17
probleme rezolvate atestat informatica c++

Scris de Administrator
Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06

cout<<"n=";cin>>n;
for(int i=1;i<=n;i++)
p=p*i;
while(x==1)
{c=p%10;
if(c==0)
{nr=nr+1;
p=p/10;}
else
x=0;}
cout<<nr;}

15.Scrieţi un program C/C++ care citeşte din fişierul text DATE.IN cel mult 100 de numere
naturale nenule aflate pe o singura linie, formate din cel mult 4 cifre fiecare, separate prin spatii
si scrie in fişierul DATE.OUT
numerele, in ordinea inversa fata de cea in care au fost citite, pe o singura linie separate prin
spatii. De exemplu daca din fişierul
DATE.IN
se citesc numerele 93 207 15 1982 3762, atunci conţinutul fişierului
DATE.OUT
va fi 3762 1982 15 207 93.

#include<fstream.h>
void main()
{int n,i,v[100];
fstream f("date.in",ios::in);
fstream g("date.out",ios::out);
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
for(i=n;i>0;i--)
g<<v[i];
f.close();
g.close();}

17.Scrieţi un program C/C++ care citeşte de pe prima linie a fişierului text BAC.TXT trei
numere naturale
a, b, c
formate din cel mult patru cifre fiecare, separate prin cate un spaţiu si afişează pe ecran cel
mai mare divizor comun al acestora. De exemplu, daca din fişier se citesc numerele : 9 27 15,

6 / 17
probleme rezolvate atestat informatica c++

Scris de Administrator
Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06

atunci se afişează 3.

#include<iostream.h>
int cmmdc (int x,int y)
{while (x!=y)
if(x>y)
else
y=y-x;
return x;}
void main()
{int a,b,c,d;
fstream("bac.txt";ios::in);
f>>a>>b>>c;
f.close;
d=cmmdc(a,b);
cout<<cmmdc(c,d);}

19.Scrieţi un program care verifica daca un număr natural k(1<k<100000) citit de la tastatura
este prim. Programul va afişa pe ecran mesajul DA sau mesajul NU;

#include<iostream.h>
int prim(int n)
{int prim=1;
for(int d=2;d<=n/2;d++)
if(n%d==0)
prim=0;
if(prim)
return 1;
else
return 0;}
void main()
{int n;
cout<<"n=";cin>>n;
if(prim(n))
cout<<"da";
else
cout<<"nu";}

7 / 17
probleme rezolvate atestat informatica c++

Scris de Administrator
Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06

21.Se considera fişierul text date.in care conţine exact 19 numere distincte formate fiecare din
maxim 2 cifre. Sa se afişeze in fişierul text date.out
numărul care lipseşte din fişierul
date.in
.

#include<fstream.h>
void main()
{int v[100],n,i,j,p;
fstream f("date.in",ios::in);
fstream g("date.out",ios::out);
for(i=1;i<=19;i++)
f>>v[i];
f.close();
for(i=10;i<=99;i++)
{p=1;
for(j=1;j<=19;j++)
if(i==v[j])
p=0;
if(p)
g<<i;}
g.close();}

22.Se citeşte de la tastatura un număr natural nenul n (n<1000). Scrieţi un program C/C++ care
construieşte fişierul text bac.txt care sa
contina, pe prima linie, toţi divizorii lui
n
in ordine strict descrescătoare. Divizorii vor fi separaţi prin spaţiu. De exemplu, daca
n
=10 , atunci fişierul
bac.txt
va conţine : 10 , 5 , 2 , 1

#include<iostream.h>
#include<fstream.h>
void main()
{int d,n;
cout<<"n=";cin>>n;
fstream g("bac1.txt",ios::out);
for(d=n;d>=1;d--)

8 / 17
probleme rezolvate atestat informatica c++

Scris de Administrator
Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06

if(n%d==0)
g<<d<<" ";
g.close();}

25.Se citeşte de la tastatura un număr natural nenul n care are cel mult 9 cifre. Sa se afişeze in
fişierul Date.out numărul k, natural,
astfel încât produsul 1*2*…*(k-1)*k sa aibă o valoare cat mai apropiata de numărul
n
. De exemplu, daca se citeşte numărul n=25 fişierul
Date.out
are următorul conţinut: 4. iar daca se citeşte numărul n=119 fişierul
Date.out
are următorul conţinut: 5

#include<iostream.h>
#include<fstream.h>

void main()
{int k,p,r,n;
cout<<"n=";cin>>n;
k=1;
fstream g("date.out",ios::out);
p=1;
while(p<=n)
{p=p*k;
k++;}
p=p/(k-1);
r=p*k;
if((n-p)<=(r-n))
g<<"numarul k este "<<k-2;
else
g<<"numalul k este "<<k-1;
g.close();
}

27.Scrieţi un program care citeşte un număr natural n>1 cu maximum 9 cifre, si afişează
valoarea celui mai mic divizor prim a lui n,
precum si puterea la care acest divizor apare in descompunerea in factori primi a numărului

9 / 17
probleme rezolvate atestat informatica c++

Scris de Administrator
Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06

n
.

#include<iostream.h>
int n,p,c;

void cmmd(int n)
{int gasit=0,d=2;
while((d<n/2)&&(gasit==0))
{if(n%d==0)
{c=d;
gasit=1;}
else
d++;}
p=0;
while(n%c==0)
{n=n/c;
p=p+1;}}

void main()
{cout<<"n=";cin>>n;
cmmd(n);
cout<<c<<" la puterea "<<p;
}

28.Să se scrie un program care să calculeze şi să afişeze pe ecran produsul cifrelor pare şi
suma cifrelor impare a unui număr natural n citit de la tastatură.

#include<iostream.h>
unsigned int n, s, p=1, c;
void main()
{
cin>>n;
while(n)
{
c=n%10;
if(c%2==0)
p=p*c;

10 / 17
probleme rezolvate atestat informatica c++

Scris de Administrator
Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06

else
s=s+c;
n=n/10;
}
cout<< p <<" "<< s;
}

29.Sa se verifice daca doua cuvinte introduse de la tastatura (cuvintele având maxim 50 de
caractere fiecare) sunt rime, adică ultimele p caractere ale celor doua cuvinte coincid, unde p
(2<=p<=10) este dat.

#include<iostream.h>
#include<string.h>
char s1[51], s2[51];
int p, x, y, ok=0;
void main()
{
cin>> s1>>s2>>p;
x=strlen(s1)-1;
y= strlen(s2)-1;
for( int i=1;i<=p && ok==0 ;i++)
{
if(s1[x]!=s2[y])
ok=1;
x--;
y--;
}
if(ok)
cout<<"Nu sunt rime";
else
cout<<"Sunt rime";
}

30.Scrieţi un program care construieşte o matrice pătrată de ordin n formată din valorile 1 si 2
astfel încât elementele de pe diagonala principala si secundară sa fie egale cu 1 iar restul
elementelor cu 2. Valoarea lui n se citeşte de la tastatură: n număr natural (2<23), iar matricea
se va afişa pe ecran, cate o linie a matricei pe fiecare rând pe ecran cu spatii intre elementele
fiecărei linii.

11 / 17
probleme rezolvate atestat informatica c++

Scris de Administrator
Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06

Exemplu: Fie n=5. Se va afişa:

12221
21212
22122
21212
12221

#include<iostream.h>
int a[10][10], i, j, n;
void main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i==j || i+j==n+1)
a[i][j]=1;
else
a[i][j]=2;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<< a[i][j];
cout<< endl;
}
}

31.Scrieţi un program care citeşte de la tastatură un sir de cel mult 50 de caractere si


construieşte fişierul atestat.txt ce conţine şirul si prefixele acestuia de lungime cel puţin 1,
fiecare pe cate o linie, in ordinea descrescătoare a lungimii prefixelor.

Exemplu: Daca se citeşte şirul ‘proba’ atunci atestat.txt va conţine:

proba
prob
pro

12 / 17
probleme rezolvate atestat informatica c++

Scris de Administrator
Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06

pr
p

#include<fstream.h>
#include<string.h>
char s[51];
int n;
void main()
{
cin>>s;
ofstream f("atestat.txt");
n=strlen(s);
while(n>=0)
{
for(int i=0; i< n; i++)
f << s[i];
f<< endl;
n--;
}
f.close();
}

32.Să se scrie un program care să numere cuvintele dintr-un text citit din fişierul ”cuvinte.txt”.
Textul conţine cuvintele separate numai printr-un spaţiu, fără semne de punctuaţie, singurul
semn de punctuaţie este ‘.’ de la sfârşitul textului. Numărul de cuvinte se va afişa pe ecran.

Exemplu: Fişierul ”cuvinte.txt” conţine textul: Ana are mere. se afişează: 3

#include<fstream.h>
#include<string.h>
void main()
{
ifstream f("cuvinte.txt");
char s[100];
int k=1,n;
f.getline(s,100);n=strlen(s);
for(int i=0;i< n;i++)
if(s[i]==' '&& s[i+1]!=' ')

13 / 17
probleme rezolvate atestat informatica c++

Scris de Administrator
Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06

k++;
cout<< k;
f.close();
}

33.Scrieţi programul care citeşte de la tastatură o valoare naturală n (2≤n≤100), construieşte in


memorie si apoi afişează pe ecran o matrice a cu n linii si n coloane, numerotate de la 1 la n,
car conţine numerele naturale, in ordine crescătoare, de la 1 la n2, dispuse pe coloane, in
ordine crescătoare. Astfel coloana 1 va conţine numerele de la 1 la n, coloana 2 numerele de la
n+1 la 2*n, coloana 3 de la 2*n+1 la 3*n si aşa mai departe, ca in exemplu. Matricea se va
afişa pe ecran, cate o linie a matricei pe cate o linie a ecranului, elementele fiecărei linii fiind
separate intre ele prin cate un spaţiu.

Exemplu: pentru n = 4 se va afişa matricea:

1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16

#include<iostream.h>
int a[10][10], k=1,s,n;
void main()
{
cout<<"n=";
cin>>n;
for(int j=1;j<=n;j++)
for(int i=1;i<=n;i++)
{
a[i][j]=k;
k++;
}
for(int i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<< a[i][j]<<" ";
cout<< endl;
}

14 / 17
probleme rezolvate atestat informatica c++

Scris de Administrator
Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06

34.Se dă n număr natural. Să se afişeze cel mai apropiat număr prim fată de n. Programul va
conţine cel puţin un subprogram.

Exemplu: n=24 se va afişa 23, pentru n=26 se va afişa 29

#include<iostream.h>
int prim(int x)
{
if(x==0 || x==1) return 0;
for(int i=2;i<=x/2;i++)
if(x%i==0)
return 0;
return 1;
}
void main()
{
unsigned n, x, y;
cout<< "n=";
cin>>n;
x=n+1;
y=n-1;
while(prim(x)==0) x++;
while(prim(y)==0) y--;
if(x-n>n-y)
cout<< y;
else
cout<< x;
}

35.Se considera un vector cu n (1< n<100) componente numere naturale. Sa se determine


componentele vectorului cu cei mai mulţi divizori. Se va folosi un subprogram pentru citirea
vectorului si unul pentru calculul numărului de divizori ai unui număr.

#include<iostream.h>

15 / 17
probleme rezolvate atestat informatica c++

Scris de Administrator
Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06

int n, a[100];
void citire ()
{  int i;
for(i=1;i<=n;i++)
cin>>a[i];
}
int div(int x)
{   int i, nr=0;
for(i=2;i<=x;i++)
if(x%i==0)    nr++;
return nr;
}
void main()
{    int i,max=0;
cin>>n;
citire();
for(i=1;i<=n;i++)
if(div(a[i])>max)
max=div(a[i]);
for(i=1;i<=n;i++)
if(div(a[i])==max)
cout<< a[i]<<" ";
}

36.Se consideră un şir de n numere întregi. Să se verifice dacă o valoare x, citită de la


tastatură, apare sau nu în vector. În caz că se află printre valorile din vector se va preciza şi în
ce poziţie apare. În caz contrar se va afişa mesajul NU .

#include<iostream.h>
void main()
{    int n, v[100], i, x, p=0;
cin>>n>>x;
for(i=1;i<=n;i++)
{ cin>>v[i];
if(v[i]==x)p=i;
}
if(p==0)     cout<<"nu";
else
cout<< "Valoarea "<< x<< "apare in pozitia "<< p;
}

16 / 17
probleme rezolvate atestat informatica c++

Scris de Administrator
Duminică, 16 Mai 2010 08:29 - Ultima actualizare Miercuri, 22 Decembrie 2010 14:06

{joscommentenable}

17 / 17

You might also like