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.
#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];
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 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 , 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;
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;}