biletul nr. 1.
pentru atestat informatica la
programare 2015
Enuntul problemei
Fişierul [Link] conţine pe prima linie o valoare naturală nenulă n, iar pe următoarele n linii, separate
printr-un spaţiu, câte o pereche de numere naturale nenule reprezentând numărătorul, respectiv,
numitorul unei fracţii (2 ≤ n ≤ 10). Să se determine suma acestor fracţii. Numărătorul şi numitorul fracţiei
obţinute în forma ireductibilă (valori mai mici sau egale dacât 1000000000) vor fi scrise în fişierul [Link]
pe prima linie a acestuia separate printr-un spaţiu.
#include<fstream.h>
#include<iostream.h>
int cmmdc(int d, int i)
{
if(i= =0)
return d;
else
return cmmdc(i,d%i);
}
int cmmmc(int a,int b)
{
return (a*b)/cmmdc(a,b);
}
int main( )
{fstream fin("[Link]",ios::in), fout("[Link]",ios::out);
int a,b,c,d,n;
fin>>n;
fin>>a;
fin>>b;
for (int i=2;i<=n;i++)
{
fin>>c;
fin>>d;
a=a*cmmmc(b,d)/b + c*cmmmc(b,d)/d;
b=cmmmc(b,d);
}
for (d=2;d<=a/2;d++) sau fout<<a/cmmdc(a,b); fout<<b/cmmdc(a,b);
{
if (a%d==0)
if (b%d==0)
{
a=a/d;
b=b/d;
Biletul nr. 2. pentru atestat informatica la
programare 2015
Biletul numarul 2 la atestat informatica proba de programare. Enuntul si rezolvarea problemei cu cifra de
control in C++.
Enuntul problemei:
Fişierul [Link] conţine pe unica sa linie un număr natural n (n ≤ 1000000000). Să se determine „cifra
de control” a acestui număr, efectuând suma cifrelor sale, apoi suma cifrelor acestei sume, etc., până
se obţine o sumă formată dintr-o singură cifră. Rezultatul obţinut a fi scris în fişierul [Link].
# include <iostream.h>
#include<fstream.h>
int sc(int x)
{
if(x<10)
return x;
else
return sc(x/10)+x%10;
}
int main()
{fstream fin("[Link]",ios::in), fout("[Link]",ios::out);
int x,s;
fin>>x;
while(x>10)
x=sc(x);
fout<<x<<endl;
[Link]();
[Link]();
system("pause");
}
Biletul nr. 3. pentru atestat informatica la
programare 2015
Mai jos este prezentat codul sursa al aplicatiei in C++, cod care va scrie cifrele finale in fisierul [Link]
Enuntul problemei:
3. Fişierul [Link] conţine pe unica sa linie, separate prin spaţii, trei numere naturale nenule, a,
b şi n, 0 ≤ a < b ≤ 10000, 0 < n ≤ 10000. Să se determine primele n zecimale ale fracţiei a/b.
Cifrele determinate vor fi scrise în fişierul [Link] pe o singură linie.
# include <iostream.h>
# include <iomanip.h>
#include<fstream.h>
int main()
{
fstream fin("[Link]",ios::in), fout("[Link]",ios::out);
int a,b,n;
fin>>a;
fin>>b;
fin>>n;
fout<<setprecision(n)<<(float)a/b*pow(10,n);
[Link]();
[Link]();
system("pause");
}
Biletul nr. 4. pentru atestat informatica la
programare 2015
Mai jos este prezentat codul sursa al aplicatiei in C++, cod care va afisa toate numerele naturale prime de
trei cifre care citite invers sunt tot prime in fisierul [Link]
Enuntul problemei:
4. Să se determine toate numerele naturale prime de trei cifre care citite invers sunt tot numere prime.
Rezultatele obţinute vor fi scrise în fişierul [Link], câte unul pe fiecare linie a fişierului.
#include<fstream.h>
# include <iostream.h>
# include <math.h>
int ogl(int x)
{
int o=0, c;
while(x!=0)
{
c= x%10;
o=o*10+c;
x=x/10;
}
return o;
}
int prim(int x,int d=2)
{
if(d>sqrt(x))
return 1;
else
if(x%d==0)
return 0;
else
return prim(x,d+1);
}
int main()
{fstream fout("[Link]",ios::out);
int x;
for(x=100;x<1000;x++)
{
if(prim(x)==1 && prim(ogl(x))==1)
fout<<x<<" ";
}
[Link]();
system("pause");
}
Biletul nr. 5. pentru atestat informatica la
programare 2015
Mai jos este prezentat codul sursa al aplicatiei in C++, cod care va afisa daca un numar citit de la
tastatura este sau nu un numar deosebit, rezultatul va fi scris in fisierul [Link].
Enuntul problemei:
5. Un număr natural n este deosebit dacă există un număr natural m cu proprietatea că adunând acest
număr m cu suma cifrelor numărului m se obţine numărul n. Fişierul [Link] conţine pe unica sa linie un
număr natural n (n ≤ 1000000000). Să se verifice dacă acest număr este deosebit. Rezultatul verificării va
fi scris în fişierul [Link] pe unica linie a acestui fişier sub forma unui mesaj corespunzător (DA sau NU
după cum numărul are proprietatea respectivă sau nu).
#include<fstream.h>
# include <iostream.h>
int sc(int x)
{
if(x<10)
return x;
else
return sc(x/10)+x%10;
}
int main()
{fstream fin("[Link]",ios::in), fout("[Link]",ios::out);
int n;
fin>>n;
if(n-sc(n)>0)
fout<<"DA";
else
fout<<"NU";
[Link]();
[Link]();
system("pause");
}
Biletul nr. 6. pentru atestat informatica la
programare 2015
Mai jos este prezentat codul sursa al aplicatiei in C++, cod care va afisa numarul de pagini al unei carti,
rezultatul va fi scris in fisierul [Link].
Enuntul problemei:
6. Fişierul [Link] conţine pe unica sa linie un număr natural nenul n reprezentând numărul de pagini ale
unei cărţi (20 ≤ n ≤ 10000). Să se determine câte cifre au fost folosite la paginarea cărţii. Rezultatul
obţinut va fi scris în fişierul [Link].
#include<fstream.h>
# include <iostream.h>
int v[10];
int main()
{fstream fin("[Link]",ios::in), fout("[Link]",ios::out);
int i,s=0,n,aux,c;
fin>>n;
for(i=1;i<=n;i++)
{
aux=i;
while(aux!=0)
{
c=aux%10;
v[c]=v[c]+1;
aux=aux/10;
}
}
for(i=0;i<=9;i++)
s=s+v[i];
fout<<s;
[Link]();
[Link]();
system("pause");
}
Biletul nr. 7. pentru atestat informatica la
programare 2015
Mai jos este prezentat codul sursa al aplicatiei in C++, cod care va afisa daca doua numere sunt termeni
consecutivi din sirul lui Fibonacci, rezultatul va fi scris in fisierul [Link].
Enuntul problemei:
7. Fişierul [Link] conţine pe unica sa linie, separate printr-un spaţiu, două numere naturale nenule, a şi b
(1 ≤ a,b ≤ 1000000000). Să se verifice dacă aceste numere pot fi termeni consecutivi ai şirului Fibonacci
(1,1,2,3,5,8,…). Rezultatul verificării va fi scris în fişierul [Link] pe unica linie a acestui fişier sub forma
unui mesaj corespunzător (DA sau NU după cum cele două numere sunt termeni consecutivi ai şirului
Fibonacci sau nu).
#include<fstream.h>
# include <iostream.h>
int fibo(int a, int b)
{
if(a==1 && b==1)
return 1;
else
if(a>b)
return 0;
else
return fibo(b-a,a);
}
int main()
{fstream fin("[Link]",ios::in), fout("[Link]",ios::out);
int a,b;
fin>>a>>b;
if(fibo(a,b))
fout<<"DA";
else
fout<<"NU";
[Link]();
[Link]();
system("pause");
}
Biletul nr. 8. pentru atestat informatica la
programare 2015
Mai jos este prezentat codul sursa al aplicatiei in C++, cod care va afisa toate reprezentarile unui numari
ca suma de numere naturale consecutive, rezultatul va fi scris intr-un fisier.
Enuntul problemei:
8. Fişierul [Link] conţine pe unica sa linie un număr natural n (n ≤ 1000000000). Să se determine toate
reprezentările posibile ale acestui număr ca sumă de numere naturale nenule consecutive. Aceste
reprezentări vor fi scrise în fişierul [Link], câte una pe fiecare linie a fişierului; numerele din cadrul
fiecărei reprezentări vor fi separate prin spaţii.
#include<fstream.h>
# include <iostream.h>
int main()
{fstream fin("[Link]",ios::in), fout("[Link]",ios::out);
int j,n,s,k;
fin>>n;
for(int i=1;i<=n/2;i++)
{
s=i;
k=i+1;
while(s<n)
s=s+k++;
if(s==n)
{
for(j=i;j<k;j++)
fout<<j<<" ";
fout<<endl;
}
}
[Link]();
[Link]();
system("pause");
}
Biletul nr. 9. pentru atestat informatica la
programare 2015
Mai jos este prezentat codul sursa al aplicatiei in C++, cod care verifica daca un numar este super prim,
rezultatul va fi scris intr-un fisier.
Enuntul problemei:
9. Un număr natural se numeşte „super prim” dacă numărul respectiv şi toate prefixele acestuia sunt
numere prime. Fişierul [Link] conţine pe unica sa linie un număr natural n (n ≤ 1000000000). Să se
verifice dacă acest număr este „super prim” şi, în caz afirmativ, să se determine prefixele sale. Rezultatul
verificării va fi scris în fişierul [Link] pe prima linie a acestui fişier sub forma unui mesaj corespunzător
(DA sau NU după cum numărul este „super prim” sau nu); dacă numărul este „super prim”, fiecare
următoare linie a fişierului va conţine câte un prefix al numărului respectiv.
#include<fstream.h>
# include <iostream.h>
# include <math.h>
int prim(int x,int d=2)
{
if(d>sqrt(x))
return 1;
else
if(x%d==0)
return 0;
else
return prim(x,d+1);
}
int main()
{fstream fin("[Link]",ios::in), fout("[Link]",ios::out);
int n,ok=1,aux;
fin>>n;
aux=n;
while(n!=0)
{
if(prim(n)==0)
ok=0;
n=n/10;
}
if(ok==1)
{
fout<<"da";
while(aux!=0)
{if (aux!=n)
{ fout<<aux<<" ";
aux=aux/10;
}
}
}
else
fout<<"nu";
[Link]();
[Link]();
system("pause");
}
Biletul nr. 10 pentru atestat informatica la
programare 2015
Mai jos este prezentat codul sursa al aplicatiei in C++, cod care determina cel mai apropiat numar prim
fata de un numar citit de la tastatura, rezultatul va fi scris intr-un fisier.
Enuntul problemei:
10. Fişierul [Link] conţine pe unica sa linie un număr natural n (n ≤ 1000000000). Să se determine cel
mai apropiat număr prim faţă de n. Programul va conţine cel puţin un subprogram, iar rezultatul obţinut va
fi scris în fişierul [Link]. Dacă sunt două numere prime egal departate de n, se poate afişa oricare
dintre ele.
#include<iostream.h>
#include<math.h>
#include<fstream.h>
int prim(int x,int d=2)
{
if(d>sqrt(x))
return 1;
else
if(x%d==0)
return 0;
else
return prim(x,d+1);
}
int nr(int n)
{
int a=n, b=n;
while(!prim(a))
a--;
while(!prim(b))
b++;
if(n-a<=b-n)
return a;
else
return b;
}
fstream fin("[Link]",ios::in), fout("[Link]",ios::out);
int main()
{
int n,x;
fin>>n; x=nr(n);
fout<<x;
[Link]();
[Link]();
system("pause");
}
Biletul nr. 11 pentru atestat informatica la
programare 2015
Mai jos este prezentat codul sursa al aplicatiei in C++, cod care afiseaza cate numere dintr-un vector sunt
numere Fibonacci, rezultatul va fi scris intr-un fisier.
Enuntul problemei:
11. Fişierul [Link] conţine pe prima sa linie un număr natural n (1 ≤ n ≤ 100), iar pe următoarea linie,
separate prin spaţii, cele n elemente ale unui vector de numere naturale. Să se determine câte din
elementele vectorului dat sunt numere Fibonacci. Rezultatul obţinut va fi scris în fişierul [Link].
# include <iostream.h>
# include <fstream.h>
int fibo(int x)
{
int tv=1,tn=1,ok=0;
while(tn<x)
{
tn=tv+tn;
tv=tn-tv;
}
if(tn==x)
return 1;
else
return 0;
}
int main()
{ fstream fin("[Link]",ios::in),fout("[Link]",ios::out);
int x[30],n,cate=0;
fin>>n;
for(int i=1;i<=n;i++)
{ fin>>x[i];
if(fibo(x[i]))
cate++;
}
fout<<cate;
[Link]();
[Link]();
system("pause");
}
Biletul nr. 12 pentru atestat informatica la
programare 2015
Codul sursa al aplicatiei in C++ de mai jos verifica daca un vector este o multime matematica
iar rezultatul este scris intr-un fisier [Link].
Enuntul problemei:
12. Fişierul [Link] conţine pe prima sa linie un număr natural n (1 ≤ n ≤ 100), iar pe următoarea linie,
separate prin spaţii, cele n elemente ale unui vector de numere naturale. Să se verifice dacă vectorul dat
este o mulţime (în sensul cunoscut din matematică), dacă nu, să se transforme acest vector în mod
corespunzător. Elementele vectorului rezultat se vor afişa pe prima linie a fişierului [Link], separate prin
spaţii.
# include <iostream.h>
# include <fstream.h>
void sterge(int x[],int &n,int k)
{
int i;
for(i=k;i<n;i++)
x[i]=x[i+1];
n--;
}
int apare(int x[],int y,int k,int n)
{
for(int i=k+1;i<=n;i++)
if(x[i]==y)
return 1;
return 0;
}
int main()
{fstream fin("[Link]",ios::in),fout("[Link]",ios::out);
int x[30],n,i,ok=1;
fin>>n;
for(i=1;i<=n;i++)
{ cout<<"x["<<i<<"]=";
fin>>x[i];}
for(i=1;i<=n;i++)
{
if(apare(x,x[i],i,n))
{
sterge(x,n,i);
i--;
}
}
for(i=1;i<=n;i++)
fout<<x[i]<<" ";
[Link]();
[Link]();
system("pause");
}
Biletul nr. 13 pentru atestat informatica la
programare 2015
Codul sursa al aplicatiei in C++ de mai jos afiseaza cate elemente dintr-un vector sunt mai mici decat
elementele unui alt vector iar rezultatul este scris intr-un fisier [Link].
Enuntul problemei:
13. Fişierul [Link] conţine: pe prima sa linie un număr natural n (1 ≤ n ≤ 100), pe a doua linie, separate
prin spaţii, cele n elemente ale unui vector a de numere întregi, pe a treia linie un număr natural m (1 ≤ m
≤100), iar pe a patra linie, separate prin spaţii, cele m elemente ale unui vector b de numere întregi. Să se
afişeze pe prima linie a fişierului [Link] câte din elementele vectorului b sunt strict mai mici decât toate
elementele vectorului a.
# include <iostream.h>
# include <fstream.h>
int min(int x[],int n)
{
int m=x[1];
for(int i=2;i<=n;i++)
if(m>x[i])
m=x[i];
return m;
}
int main()
{fstream fin("[Link]",ios::in),fout("[Link]",ios::out);
int x[30],y[30],m,n,mn,cate=0,i,j;
fin>>n;
for(int i=1;i<=n;i++)
fin>>x[i];
fin>>m;
for(j=1;j<=m;j++)
{
fin>>y[j];}
for(j=1;j<=m;j++)
if(y[j]<min(x,n))
cate++;
fout<<cate;
[Link]();
[Link]();
system("pause");
}
Biletul nr. 14 pentru atestat informatica la
programare 2015
Codul sursa al aplicatiei in C++ de mai jos afiseaza suma a doua numere mari de peste 10
cifre iar rezultatul este scris intr-un fisier [Link].
Enuntul problemei:
14. În fişierul [Link] se gǎsesc douǎ numere mari (care pot avea mai mult de 10 cifre), câte unul pe o
linie. Să se afişeze pe prima linie a fişierului [Link] suma celor douǎ numere.
# include <fstream.h>
# include <iomanip.h
# include <conio.h>
int x[20];
int main()
{
int t,s,lx=0;
long a,b,r;
fstream f("[Link]",ios::in);
f>>a;
f>>b;
while(a!=0 && b!=0)
{
r =a%10+b%10+t;
lx++
x[lx]=r%10;
t =(a%10+b%10)/10;
a=a/10;
b=b/10;
}
while(a>0)
{
r=a%10+t;
t=r%10;
lx++
x[lx]=r%10;
a=a/10;
}
while(b>0)
{
r=b%10+t;
t=r%10;
lx++
x[lx]=r%10;
b=b/10;
}
for(int i=lx;i>=1;i--)
cout<<x[i];
getch();
return 1;
}
Biletul nr. 15 pentru atestat informatica la
programare 2015
Codul sursa al aplicatiei in C++ de mai jos realizeaza ordonarea unui vector prin interclasarea celor doua
subsecvente ale lui iar rezultatul este scris intr-un fisier [Link].
Enuntul problemei:
15. Se considera un vector cu n componente. Stiind ca el contine doua subsecvente de numere ordonate
crescator , sa se ordoneze intregul vector prin interclasarea celor doua subsecvente.
# include <iostream.h>
# include "[Link]"
void interclasare(int r[],int &l,int x[],int lx,int y[],int ly)
{
int i=1,j=1;
l=0;
while(i<=lx && j<=ly)
{
if(x[i]<=y[j])
{ l++;
r[l]=x[i++];}
else { l++;
r[l]=y[j++];
}
while(i<=lx)
{ l++;
r[l]=x[i++];}
while(j<=ly)
{ l++;
r[l]=y[j++];}
}
void main()
{
int x[30],n,l,i,r[30],y[30],ly=0,z[30],lz=0;
citeste(x,n);
for(i=1;i<n;i++)
if(x[i]>x[i+1])
{ ly++;
y[ly]=x[i];}
for(int j=i+1;j<=n;j++)
{lz++;
z[lz]=x[j];}
}
else
{ ly++;
y[ly]=x[i];
}
scrie(y,ly);
cout<<endl;
scrie(z,lz); cout<<endl;
interclasare(r,l,y,ly,z,lz);
scrie(r,l);
cout<<endl;
}
Biletul nr. 16 pentru atestat informatica la
programare 2015
Codul sursa al problemei in C++ de mai jos afiseaza elementul care apare de cele mai multe ori intr-un
tablou iar rezultatul este scris intr-un fisier [Link].
Enuntul problemei:
16. Se citeste de la tastatura un tablou unidimensional cu n elemente numere intregi. Sa se afiseze
elementul care apare de cele mai multe ori in tablou. Daca exista mai multe astfel de elemente, se vor
afisa toate.
Ex. Pentru n=8 si elementele (23,7,11,7,19,7,11,11) se vor afisa elementele 7 si 11, care apar fiecare de
cate 3 ori.
# include <iostream.h>
# include "[Link]"
int apare(int x[],int n,int k)
{
int ap=0;
for(int i=1;i<=n;i++)
if(x[i]= =k)
ap++;
return ap;
}
void sterge(int x[],int n,int k)
{
for(int i=1;i<=n;i++)
{
if(x[i]= =k)
{
for(int j=i;j<n;j++)
x[j]=x[j+1];
n--;
}
}
}
int max(int x[],int n)
{
int mx=x[1];
for(int i=2;i<=n;i++)
if(x[i]>mx)
mx=x[i];
return mx;
}
void main()
{
int x[50],j,n,ap[50],max,i;
citeste(x,n);
for(i=1;i<=n;i++)
ap[i]=apare(x,n,x[i]);
for(i=1;i<=n;i++)
if(max(ap,n)==ap[i])
{cout<<x[i]<<" ";
for(j=i;j<=n;j++)
{if(x[i]= =x[j])
{
sterge(x,n,x[j]);
sterge(x,n,x[i]);
}
}
}
}
Biletul nr. 17 pentru atestat informatica la
programare 2015
Codul sursa al problemei in C++ de mai jos construieste un nou vector pe baza numarul de aparatii ale
elementelor dintr-un alt vector iar rezultatul este scris intr-un fisier [Link].
Enuntul problemei:
17. Fie v un vector de numere intregi. Sa se construiasca un vector w, astfel incat w[i]=numarul de aparitii
ale lui v[i] in vectorul v. Sa se afiseze cei doi vectori, fiecare pe o linie.
Ex: pentru v=(1,5,2,1,5,7,2,1,5) se obtine w=(3,3,2,3,3,1,2,3,3)
# include <iostream.h>
# include "[Link]"
int apare(int x[],int n,int k)
{
int ap=0;
for(int i=1;i<=n;i++)
if(x[i]= =k)
ap++;
return ap;
}
void main()
{
int x[30],n,ap[30],i;
citeste(x,n);
for(i=1;i<=n;i++)
ap[i]=apare(x,n,x[i]);
cout<<"sirul dat: ";
scrie(x,n);
cout<<endl;
cout<<"Sirul aparitiilor: ";
scrie(ap,n);
cout<<endl;
}