Sunteți pe pagina 1din 23

Judetul DAMBOVITA

Atestat profesional la Informatica


BILETELE
pentru susinerea probei practice
n vederea obinerii atestatului profesional la informatic
- sesiunea mai 2008
-

conform metodologiei aprobat cu OM 5149/2002 -

OBS:
Subiectul nr.1 se rezolva in unul din mediile impuse de cerinte(Word, Excel, PowerPoint,
WindowsExplorer etc.)
Subiectul nr.2 se poate rezolva in oricare din urmatoarele: FoxPro, VisualFox, Access, Oracle
Subiectul nr.3 se poate rezolva in oricare din urmatoarele limbaje: Pascal, C, C++

Judetul DAMBOVITA
Biletul nr. 1

Atestat profesional la Informatica

3. De la tastatur se citete un numr natural n, n<30000. Scriei un program care determin divizorii lui
n, precum i numrul divizorilor primi care apar n descompunerea lui n. Datele de ieire se scriu n
fiierul text out.txt astfel : pe prima linie, toi divizorii lui n, separai printr-un caracter spaiu; pe a doua
linie, numrul divizorilor primi ai lui n.
Exemplu : pentru n=10, fiierul out.txt este
1 2 5 10
3
#include <fstream.h>
#include <math.h>
//1 nu este nici nr prim, nici nr compus!!!
int prim (int x)
{if (x<=1) return 0;
else
{for (int cont=2; cont*cont<=x; cont++)
if (x%cont==0) return 0;
return 1;
}
}
void main ()
{long n;
int nr=0;
ofstream fout("out.txt");
fout<<1<<" ";
do {cout<<"n="; cin>>n;} while (n>=300000);
for (int i=2; i<=n/2; i++)
if (n%i==0)
{fout<<i<<" ";
if (prim (i)==1) nr++;
}
fout<<n<<endl<<nr<<endl;
fout.close();
}

Judetul DAMBOVITA

Atestat profesional la Informatica

Biletul nr.2
3. Un numr este superprim dac numrul i toate prefixele sale sunt numere prime. S se genereze
primele n numere superprime. Exemplu : 2339 este superprim pentru ca 2339, 233, 23 i 2 sunt numere
prime.
#include <iostream.h>
//nr superprime
long n;
int prim (long n)
{if (n<2) return 0;
else
{for (int i=2; i*i<=n; i++)
if (n%i==0) return 0;
return 1;
}
}
int superprim (long n)
{if (prim (n)==0) return 0;
else
{if (n>1 && n<10) return 1;
else return prim (n/10);
}
}
void main ()
{cout<<"n="; cin>>n;
long cont=2, n1=0;
while (n1<n)
{if (superprim (cont)==1)
{cout<<cont<<" ";
n1++;
}
cont++;
}
cout<<endl;
}
Biletul nr.3
3. Scriei un program care calculeaz media aritmetic a tuturor numerelor palindrom din intervalul (a,b),
unde a i b sunt numere naturale citite de la tastatur, a<b. Programul va utiliza un subprogram care
verific dac un numr este palindrom. Un numr este palindrom dac citit de la stnga la dreapta este
acelai cu numrul citit de la dreapta la stnga.

#include <iostream.h>
long a, b, n;
int pal (long n)
{if (n>=0 && n<=9) return 1;
else
3

Judetul DAMBOVITA

Atestat profesional la Informatica

{long n1=n, m=0;


while (n1!=0)
{m=m*10+n1%10;
n1/=10;
}
if (m==n) return 1;
else return 0;
}
}
void main ()
{cout<<"a="; cin>>a;
float s=0; int nr=0;
do {cout<<"b="; cin>>b;} while (b<=a);
for (long i=a+1; i<=b-1; i++)
if (pal(i))
{s+=i; nr++;
}
if (nr==0) cout<<"Nu exista palindroame"<<endl;
else cout<<(float)(s/nr)<<endl;
}
Biletul nr.4
3. Se citete de la tastatur un ir de n numere naturale de maxim 9 cifre (n<=100). S se afieze pe
ecran numerele care au cifra de control x (x se citete de la tastatur, 0<=x<=9). Se va utiliza un
subprogram care determin suma cifrelor unui numr natural. Cifra de control a unui numr se obine
fcnd 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 : cifra de control a lui 156 se obine astfel : calculm suma
cifrelor lui 156, 1+5+6=12, apoi suma cifrelor lui 12, 1+2=3; deci 156 are cifra de control 3.

#include <iostream.h>
//cifra de control
int scif (long copie)
{int s=0, n1=copie;
while (n1!=0)
{s+=n1%10;
n1/=10;
}
return s;
}
void main ()
{int n, x, sc, nr=0;
long v[100];
cout<<"n="; cin>>n;
do {cout<<"x="; cin>>x;} while (x>9);
for (int i=1; i<=n; i++)
cin>>v[i];
for (i=1; i<=n; i++)
{long copie=v[i];
4

Judetul DAMBOVITA

Atestat profesional la Informatica

while (copie>10) copie=scif (copie);


if (copie==x)
{cout<<v[i]<<" ";
nr++;
}
}
if (nr==0) cout<<"Nu exista nr care sa indepineasca conditia"<<endl;
}
Biletul nr.5
3. S se verifice dac elementele unui tablou unidimensional cu n elemente numere naturale de maxim
2 cifre, reprezint o mulime (n sensul cunoscut de la matematic, adic numerele din tablou sunt
distincte dou cte dou). Dac nu, s se transforme acest tablou n mod corespunztor.
Exemplu : pentru n=12 i v=(1,2,90,4,2,16,5,1,20,13,2,3) nu este mulime. Prin transformare acestuia n
mulime (se elimin elementele care apar de mai multe ori i se ordoneaz irul) se obine :
v=(1,2,3,4,5,13,16,20,90).

#include <iostream.h>
void main ()
{int n;
cout<<"n="; cin>>n;
int v[100], i;
for (i=1; i<=n; i++)
cin>>v[i];
i=1;
int n1=n, ok;
while (i<n1)
{ok=1;
for (int j=i+1; j<=n1 && ok==1; j++)
if (v[i]==v[j]) ok=0;
if (ok==0)
{for (j=i; j<n1; j++)
v[j]=v[j+1];
n1--;
}
else i++;
}
if (n1==n) cout<<"Este o multime"<<endl;
else cout<<"Nu este o multime"<<endl;
//sortare
do
{ok=1;
for (i=1; i<n1; i++)
if (v[i]>v[i+1])
{ok=0;
int aux=v[i]; v[i]=v[i+1]; v[i+1]=aux;
}
}
while (ok==0);
5

Judetul DAMBOVITA

Atestat profesional la Informatica

for (i=1; i<=n1; i++)


cout<<v[i]<<" ";
cout<<endl;
}
Biletul nr.6
3. Se consider un tablou bidimensional cu n linii i m coloane (n, m <=10), completat cu numere ntregi. S
se determine cel mai mare element numr ntreg, n valoare absolut, precum i indicele/indicii
liniei/coloanei (liniilor/coloanelor) din matrice ce conine (conin) elementul maxim. Datele de intrare se
citesc din fiierul text in.txt organizat astfel : pe prima linie - dou numere, n i m, separate printr-un caracter
spaiu; pe urmtoarele n linii, cte m numere ntregi separate printr-un caracter spaiu pe fiecare linie.
Datele de ieire se scriu n fiierul out.txt organizat astfel : pe prima linie valoarea absolut a elementului
maxim, iar pe urmtoarele linii, pe fiecare linie, cte dou numere naturale, separate printr-un caracter
spaiu, care reprezint indicii liniei i coloanei pe care se afl maximul.
Exemplu : pentru fiierul in.txt
fisierul out.txt va fi :
34
7
7 5 2 4
11
1 3 -7 6
23
3 7 6 2
32

#include <fstream.h>
void main ()
{int m, n, a[11][11], max, i, j;
ifstream fin ("in.txt");
ofstream fout ("out.txt");
fin>>n>>m;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
fin>>a[i][j];
max=a[1][1];
fin.close();
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
if (a[i][j]>max) max=a[i][j];
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
if (a[i][j]==max) fout<<i<<" "<<j<<endl;
fout.close();
}
Biletul nr.7
3. De la tastatur se citete un cuvnt de maxim 15 caractere. S se construiasc toate prefixele i sufixele
cuvntului dat. Datele de ieire se scriu n fiierul out.txt astfel :
- pe prima linie cuvntul citit de la tastatur;
- pe a doua linie toate prefixele cuvntului, unul dup altul, n ordinea generrii, separate de un caracter
spaiu;
- pe a treia linie toate sufixele cuvntului, unul dup altul, n ordinea generrii, separate de un caracter
spaiu.
Exemplu : pentru cuvntul PASCAL, fiierul out.txt conine :
PASCAL
P PA PAS PASC PASCA PASCAL
6

Judetul DAMBOVITA
L AL CAL SCAL ASCAL PASCAL

Atestat profesional la Informatica

#include <fstream.h>
#include <string.h>
//prefixe si sufixe ale unui cuvant
void main ()
{char c[16];
cin.get (c, 16);
ofstream fout("out.txt");
fout<<c<<endl;
int l=strlen(c), i, j;
for (i=0; i<l; i++)
{for (j=0; j<=i; j++)
fout<<c[j];
fout<<" ";
}
fout<<endl;
for (i=l-1; i>=0; i--)
fout<<c+i<<" ";
fout<<endl;
fout.close();
}
Biletul nr.8
3. Se consider un tablou bidimensional cu n linii i m coloane (n, m <=10), completat cu numere ntregi. S
se determine suma elementelor de pe fiecare linie, respectiv de pe fiecare coloan a tabloului. Datele de
intrare se citesc din fiierul text in.txt organizat astfel : pe prima linie - dou numere, n i m, separate printrun caracter spaiu; pe urmtoarele n linii, cte m numere ntregi separate printr-un caracter spaiu pe fiecare
linie. Datele de ieire se scriu n fiierul out.txt organizat astfel : pe prima linie - n numere ntregi, separate
printr-un caracter spaiu, care reprezint suma elementelor de pe cele n linii ale tabloului; pe a doua linie - m
numere ntregi, separate printr-un caracter spaiu, care reprezint suma elementelor de pe cele m coloane
ale tabloului.
Exemplu : pentru fiierul in.txt
fisierul out.txt va fi :
34
18 3 20
7 5 2 4
11 15 3 12
1 3 -7 6
3 7 8 2

#include <fstream.h>
void main ()
{ifstream fin ("in.txt");
ofstream fout("out.txt");
int m, n, i, j, a[11][11];
fin>>n>>m;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
fin>>a[i][j];
fin.close();
//suma pe linii
int sl;
7

Judetul DAMBOVITA

Atestat profesional la Informatica

for (i=1; i<=n; i++)


{sl=0;
for (j=1; j<=m; j++)
sl+=a[i][j];
fout<<sl<<" ";
}
fout<<endl;
//suma pe coloane
int sc;
for (j=1; j<=m; j++)
{sc=0;
for (i=1; i<=n; i++)
sc+=a[i][j];
fout<<sc<<" ";
}
fout<<endl;
fout.close();
}
Biletul nr.9
3. Cerine:
a) Scriei un subprogram care primete la intrare un numr natural dat, n, de maxim 9 cifre, i ntoarce
suma cifrelor acestui numr.
b) S se utilizeze acest subprogram pentru a calcula suma cifrelor numrului obinut n urma efecturii
sumei S 1 2 3 ...x , unde x este un numr natural citit de la tastatur.

#include <iostream.h>
//a
long n;
int s_cif (long n)
{int s=0;
while (n!=0)
{s+=n%10; n/=10;
}
return s;
}
//b
void main ()
{long x;
cout<<"x="; cin>>x;
cout<<s_cif ((x*(x+1))/2)<<endl;
}

Judetul DAMBOVITA

Atestat profesional la Informatica

Biletul nr.10
3. O matrice cu p linii i q coloane se completeaz cu numere ntregi citite de la tastatur. S se
interschimbe elementele coloanelor x i y (x i y sunt numere naturale citite de la tastatur). Dac
matricea este ptrat s se verifice dac elementele de pe diagonala principal sunt ordonate cresctor.

#include <iostream.h>
int p, q, a[100][100], x, y, i, j;
void schimba (int x, int y)
{int aux;
for (i=1; i<=p; i++)
{aux=a[i][x];
a[i][x]=a[i][y];
a[i][y]=aux;
}
}
int verifica (int p)
{int ok=1;
for (i=1; i<p; i++)
if (a[i][i]>a[i+1][i+1]) ok=0;
return ok;
}
void main ()
{cout<<"p="; cin>>p;
cout<<"q="; cin>>q;
for (i=1; i<=p; i++)
for (j=1; j<=q; j++)
cin>>a[i][j];
cout<<"x="; cin>>x;
cout<<"y="; cin>>y;
if (p==q)
{if (verifica (p)==0)
cout<<"Elementele nu sunt in ordine crescatoare"<<endl;
else cout<<"Elementele sunt in ordine crescatoare"<<endl;
}
schimba (x, y);
for (i=1; i<=p; i++)
{for (j=1; j<=q; j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}

Biletul nr.11
9

Judetul DAMBOVITA

Atestat profesional la Informatica

3. Cerinte:
a) S se scrie un subprogram recursiv care primete la intrare dou numere naturale a i b i ntoarce
valoarea a b .
b) S se utilizeze subprogramul pentru calculul valorii expresiei : E (p, q, k )

p1 p 2 p 3 ... p k
q1 q 2 q 3 ... q k

, unde

p, q i k sunt numere naturale citite de la tastatur.

#include <iostream.h>
int a, b;
long put (int a, int b)
{if (b==0) return 1;
else return a * put(a, b-1);
}
void main ()
{int p, q, k;
cout<<"p="; cin>>p;
cout<<"q="; cin>>q;
cout<<"k="; cin>>k;
long s1=0, p1=1;
for (int i=1; i<=k; i++)
{s1+=put (p, i);
p1*=put (q, i);
}
cout<<(float)s1/p1<<endl;
}
Biletul nr.12
3. Cerinte:
a) S se scrie un subprogram care calculeaz termenul de ordinul k al irului Fibonacci.
b) S se utilizeze acest subprogram pentru a calcula suma S fib(1) fib(3) fib(5) ... fib(n ) , unde
n se citete de la tastatur i este impar.

Termenul de ordinul k al irului se definete astfel : f (k )

1
1
f ( k 1) f (k 2)

pentru k 1
pentru k 2
pentru k 2

#include <iostream.h>
long fib (int k)
{if ( (k==1) || (k==2)) return 1;
else return (fib (k-1)+fib (k-2));
}
void main ()
{int n, i;
do {cout<<"n="; cin>>n;} while (n%2==0);
long s=0;
for (i=1; i<=n; i++)
s+=fib (i);
10

Judetul DAMBOVITA

Atestat profesional la Informatica

cout<<s<<endl;
}
Biletul nr.13
3. Fiierul text in.txt conine mai multe linii, pe fiecare linie fiind memorat un numr natural de o cifr.
Considernd c aceste numere sunt cifrele unui numr natural, s se determine acest numr. S se
adauge acest numr la sfritul fiierului in.txt.

#include <fstream.h>
ifstream fin ("in.txt");
fstream f ("in.txt", ios::app);
void main ()
{int n=0, c;
while (fin>>c) n=n*10+c;
fin.close();
f<<endl<<n<<endl;
}

11

Judetul DAMBOVITA
Biletul nr. 14

Atestat profesional la Informatica

3. Fiierul text in.txt conine mai multe linii, pe fiecare linie fiind memorat un numr natural de maxim 4
cifre. S se calculeze suma numerelor care sunt neprime. S se adauge la sfritul fiierului in.txt nc o
linie care conine aceast sum.

#include <fstream.h>
ifstream fin ("in.txt");
fstream f ("in.txt", ios::app);
int prim (int n)
{if (n<=1) return 0;
else
{int ok=1;
for (int j=2; j*j<=n; j++)
if (n%j==0) ok=0;
return ok;
}
}
void main ()
{long s=0;
int a, nr=0;
while (fin>>a) if (prim(a)==0) {s+=a; nr++;}
fin.close();
if (nr==0) f<<"Nu exista numere neprime"<<endl;
else f<<endl<<s<<endl;
f.close();
}
Biletul nr. 15
3. Se consider o matrice a cu m linii i n coloane (m, n <=10), cu elemente numere reale. S se
calculeze urmtoarele trei sume :
- suma elementelor din matrice care au 3 vecini;
- suma elementelor din matrice care au 5 vecini;
- suma elementelor din matrice care au 8 vecini.
Datele de intrare se citesc din fiierul text in.txt organizat astfel : pe prima linie - dou numere, n i m,
separate printr-un caracter spaiu; pe urmtoarele n linii, cte m numere ntregi separate printr-un caracter
spaiu pe fiecare linie. Datele de ieire se scriu n fiierul out.txt care conine trei linii, pe fiecare linie fiind
memorat cte una dintre sumele calculate, n ordinea cerut.

#include <fstream.h>
void main ()
{ifstream fin ("in.txt"); ofstream fout ("out.txt");
int m, n, i, j, a[10][10], s3=0, s5=0, s8=0;
fin>>m>>n;
//m linii, n coloane
for (i=1; i<=m; i++)
for (j=1; j<=n; j++)
fin>>a[i][j];
12

Judetul DAMBOVITA

Atestat profesional la Informatica

fin.close();
s3=a[1][1]+a[1][n]+a[m][1]+a[m][n];
for (i=2; i<n; i++)
s5+=a[1][i]+a[m][i];
for (i=2; i<m; i++)
s5+=a[i][1]+a[i][n];
for (i=2; i<=m-1; i++)
for (j=2; j<=n-1; j++)
s8+=a[i][j];
fout<<s3<<endl<<s5<<endl<<s8<<endl;
fout.close();
}
Biletul nr. 16
3. Se consider o tabl de ah de 8x8 ptrele. Tabla se completeaz cu numerele de la 1 la 64 pe linii,
ncepnd cu prima linie. S se afieze tabla de ah. S se calculeze suma numerelor din ptrelele negre,
respectiv suma numerelor din ptrelele albe. Ptrelul din colul stnga sus are culoarea alb.

#include <iostream.h>
void main ()
{int i, j, s=1, a[10][10];
for (i=1; i<=8; i++)
{for (j=1; j<=8; j++)
{cout<<s<<" ";
a[i][j]=s;
s++;
}
cout<<endl;
}
long sn=0, sa=0;
for (i=1; i<=8; i++)
for (j=1; j<=8; j++)
if ((i+j)%2==0) sa+=a[i][j];
else sn+=a[i][j];
cout<<"suma negre="<<sn<<endl<<"suma albe="<<sa<<endl;
}
Biletul nr. 17
3. Determinai toate irurile de numere de lungime n, n<=9, cu elemente formate numai din numerele 1,
2, ...n. ntr-un ir un numr poate apare n orice poziie, iar dou elemente vecine nu pot fi ambele pare
sau ambele impare. Exemplu : pentru n=4, irurile generate sunt : 1234, 1432, 2143, 2341, 3241, 3412,
4123, 4321.

#include <iostream.h>
int n, v[5], i, uz[10];
void back (int k)
{if (k>n)
{for (i=1; i<=n; i++)
cout<<v[i];
13

Judetul DAMBOVITA

Atestat profesional la Informatica

cout<<endl;
}
else
for (i=1; i<=n; i++)
if (k==1)
{v[k]=i;
uz[i]=1;
back (k+1);
uz[i]=0;
}
else
if ((uz[i]==0) && (v[k-1]%2 != i%2))
{v[k]=i;
uz[i]=1;
back (k+1);
uz[i]=0;
}
}
void main ()
{do {cout<<"n="; cin>>n; } while (n>9);
back (1);
}
Biletul nr. 18
3. De la tastatur se citete un numr natural n, n<=30000. S se determine un numr mai mic dect n
care are un numr maxim de divizori proprii primi. Pot exista mai multe astfel de numere, caz n care se
va afisa unul dintre ele.
n=11 se va afia 6 sau 10.

#include <iostream.h>
int prim (int x)
{if (x<=1) return 0;
else
{for (int i=2; i*i<=x; i++)
if (x%i==0) return 0;
return 1;
}
}
void main ()
{long n, nr;
int max=0;
cout<<"n="; cin>>n;
for (long i=4; i<n; i++)
{int nr_div=0;
for (long j=2; j<=i/2; j++)
if ((i%j==0) && (prim (j)))
nr_div++;
if (nr_div>max)
{max=nr_div; nr=i;
14

Judetul DAMBOVITA

Atestat profesional la Informatica

}
}
cout<<nr<<endl;
}
Biletul nr. 19
3. De la tastatur se citesc elementele a dou mulimi A i B, cu p, respectiv q elemente, elementele
fiecrei mulimi fiind distincte dou cte dou (p, q <=100). S se determine elementele i
cardinalul mulimilor A B, A B .

#include <iostream.h>
void main ()
{int p, q, a[100], b[100], i, j, ok, nr;
cout<<"p="; cin>>p;
for (i=1; i<=p; i++)
cin>>a[i];
cout<<"q="; cin>>q;
for (i=1; i<=q; i++)
cin>>b[i];
cout<<"A reunit cu B"<<endl;
for (i=1; i<=p; i++)
cout<<a[i]<<" ";
for (i=1; i<=q; i++)
{ok=1;
for (j=1; j<=p && ok==1; j++)
if (a[j]==b[i]) ok=0;
if (ok==1) cout<<b[i]<<" ";
}
cout<<endl<<"A minus B"<<endl;
for (i=1; i<=p; i++)
{ok=1; int nr=0;
for (int j=1; j<=q && ok==1; j++)
if (a[i]==b[j]) ok=0;
if (ok==1)
{cout<<a[i]<<" ";
nr++;
}
}
if (nr==0) cout<<"Multimea vida"<<endl;
}

Biletul nr. 20

15

Judetul DAMBOVITA
Atestat profesional la Informatica
3. De la tastatur se citesc pe n caractere din mulimea {a, b, c, d , e, f , A, B, C , D, E , F ,0,1,2,..,9} .
Caracterele citite reprezint un numr natural reprezentat n baza 16. S se determine valoarea acestui
numr n baza 10.

#include <iostream.h>
void main ()
{int n, i, val, nr=0;
char c;
cout<<"n="; cin>>n;
for (i=1; i<=n; i++)
{cin>>c;
if (c>='a' && c<='z') val=c-'a';
else
{if (c>='A' && c<='Z') val=c-'A';
else val=c-'0';
}
nr=nr*16+val;
}
cout<<nr<<endl;
}
Biletul nr. 21
3. Fiierul text date.txt memoreaz un graf neorientat (cu n noduri i m muchii) i are urmtoarea
structur :
- pe prima linie 2 numere naturale (n i m) separate prin cel puin un caracter spaiu;
- pe urmtoarele m linii cte 2 numere naturale din mulimea {1,2,..., n} ; fiecare pereche de 2 numere
naturale reprezint nodurile adiacente ale fiecreia dintre cele m muchii.
S se construiasc matricea de adiacene a grafului i apoi, folosind-o, s se afieze lista de adiacen
asociat grafului.

#include <fstream.h>
void main ()
{ifstream fin ("date.txt");
int m, n, i, j, a1[100][100], a, b;
fin>>n>>m;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
a1[i][j]=0;
for (i=1; i<=m; i++)
{fin>>a>>b;
a1[a][b]=1; a1[b][a]=1;
}
for (i=1; i<=n; i++)
{cout<<i<<" ";
for (j=1; j<=n; j++)
if (a1[i][j]==1) cout<<j<<" ";
cout<<endl;
}
}
16

Judetul DAMBOVITA

Atestat profesional la Informatica

Biletul nr. 22

3. Se consider un vector de dimensiune p 20 , completat cu numere ntregi. Elementele vectorului se


citesc de la tastatur astfel nct vectorul s fie ordonat descresctor. Folosind algoritmul de cutare
binar s se verifice dac un numr ntreg dat x, citit de la tastatur, se afl printre elementele
vectorului.

#include <iostream.h>
//cautare binara vector ordonat crescator
void main ()
{int p[21], a, k=1, x;
cin>>a; p[1]=a;
cin>>a;
while (p[k]>=a)
{p[k+1]=a;
k++;
cin>>a;
}
cout<<"x="; cin>>x;
int inf=1, sup=k, gasit=0;
while ((inf<=sup) && (gasit==0))
{if (p[(inf+sup)/2]==x) gasit=1;
else
{if (x>p[(inf+sup+1)/2]) sup=(inf+sup+1)/2;
else inf=(inf+sup+1)/2;
}
}
if (gasit==1) cout<<"Da"<<endl;
else cout<<"Nu"<<endl;
}
Biletul nr. 23
3. Fiierul text date.txt memoreaz un graf neorientat (cu n noduri i m muchii) i are urmtoarea
structur :
- pe prima linie 2 numere naturale (n i m) separate prin cel puin un caracter spaiu;
- pe urmtoarele m linii cte 2 numere naturale din mulimea {1,2,..., n} ; fiecare pereche de 2 numere
naturale reprezint nodurile adiacente ale fiecreia dintre cele m muchii.
Se cere s se afieze matricea de adiacen a subgrafului obinut prin eliminarea nodurilor x i y (x i y
se citesc de la tastatur i sunt mai mici sau egale cu n).

#include <fstream.h>
void main ()
{int m, n, a1, b1, i, j, a[100][100], x, y;
ifstream fin ("date.txt");
fin>>n>>m;
for (i=1; i<=m; i++)
for (j=1; j<=n; j++)
a[i][j]=0;
17

Judetul DAMBOVITA

Atestat profesional la Informatica

for (i=1; i<=m; i++)


{fin>>a1>>b1;
a[a1][b1]=1;
a[b1][a1]=1;
}
fin.close();
cout<<"x="; cin>>x;
cout<<"y="; cin>>y;
for (i=1; i<=n; i++)
{a[i][x]=0; a[x][i]=0;
a[i][y]=0; a[y][i]=0;
}
int inf=1;
if (x==n || y==n) n--;
if (x==1 || y==1) inf=2;
for (i=inf; i<=n; i++)
{for (j=inf; j<=n; j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
Biletul nr. 24

3. Fie cele 7 note muzicale: DO, RE, MI, FA, SOL, LA, SI. Citim de la tastatura o valoare naturala n, n
cuprins ntre 1 i 7. Determinai i afiai toate melodiile de n note care se pot forma cu aceste note
muzicale, avnd n vedere ca perechile de note (DO,SI) i (MI,FA) s nu fie alturate.

#include <iostream.h>
int n, v[8], uz[8];
void back (int k)
{if (k>n)
{for (int j=1; j<k; j++)
switch (v[j])
{case 1: cout<<"DO "; break;
case 2: cout<<"RE "; break;
case 3: cout<<"MI "; break;
case 4: cout<<"FA "; break;
case 5: cout<<"SOL "; break;
case 6: cout<<"LA "; break;
case 7: cout<<"SI "; break;
}
cout<<endl;
}
else
for (int i=1; i<=7; i++)
{if (k==1)
{v[k]=i;
uz[i]=1;
18

Judetul DAMBOVITA

Atestat profesional la Informatica

back (k+1);
uz[i]=0;
}
else
{if (!uz[i])
{int ok=1;
if ((v[k-1]==1 && i==7)
|| (v[k-1]==7 && i==1)
|| (v[k-1]==3 && i==4)
|| (v[k-1]==4 && i==3))
ok=0;
if (ok==1)
{v[k]=i;
uz[i]=1;
back (k+1);
uz[i]=0;
}
}
}
}
}
void main ()
{do {cout<<"n="; cin>>n;} while (n>7);
back (1);
}
Biletul nr. 25
3. Pentru un elev se rein urmtoarele date : numele, vrsta, media general. S se construiasc o list
liniar care reine informaii despre n elevi. S se afieze numele elevilor care au vrsta mai mare de 17
ani i sunt corigeni. Un elev este corigent dac are media general mai mic dect 5. Pentru
implementarea listei se poate folosi alocarea static sau alocarea dinamic, la alegere.

#include <iostream.h>
struct elev
{char nume[50];
int varsta;
float media;};
elev v[100];
int n;
void main ()
{cout<<"n="; cin>>n;
for (int i=1; i<=n; i++)
{cout<<"Numele "<<endl;
cin.get();
cin.get (v[i].nume, 40);
cout<<"Varsta : ";cin>>v[i].varsta;
cout<<"Media : "; cin>>v[i].media;
}
//>17 ani si corigenti
19

Judetul DAMBOVITA

Atestat profesional la Informatica

for (i=1; i<=n; i++)


if ((v[i].varsta>17) && (v[i].media<5))
cout<<v[i].nume<<endl;
}
Biletul nr. 26
3. Pentru un elev se rein urmtoarele date : numele, vrsta, media general. S se construiasc o list
liniar care reine informaii despre n elevi. S se tearg din list elementele care conin informaii
despre elevii corigeni. S se afieze noua list i s se determine cte elemente are. Un elev este
corigent dac are media general mai mic dect 5. Pentru implementarea listei se poate folosi alocarea
static sau alocarea dinamic, la alegere.

#include <iostream.h>
struct elev
{char nume[50];
int varsta;
float media;};
elev v[100];
int n;
void main ()
{cout<<"n="; cin>>n;
for (int i=1; i<=n; i++)
{cout<<"Numele "<<endl;
cin.get();
cin.get (v[i].nume, 40);
cout<<"Varsta : ";cin>>v[i].varsta;
cout<<"Media : "; cin>>v[i].media;
}
i=1;
while (i<=n)
{if (v[i].media<5)
{for (int j=i; j<n; j++)
v[j]=v[j+1];
n--;
}
else i++;
}
cout<<"Noua lista are "<<n<<" elemente"<<endl;
for (i=1; i<=n; i++)
cout<<v[i].nume<<" "<<v[i].varsta<<" "<<v[i].media<<" "<<endl;
}
Biletul nr. 27
3. Fiierul in.txt conine pe o singur linie mai multe numere ntregi (maxim 100 de numere) separate
printr-un caracter spaiu. Se presupune c numerele sunt distincte, un numr neaprnd de dou ori, iar
n fiier sunt cel puin dou numere. S se calculeze suma numerelor cuprinse ntre maximul i minimul
acestora, inclusiv.
Exemplu :
Dac fiierul in.txt conine numerele : 3, 7, 22, 4, 11, 8, 1, 9, suma calculat este : S=46
(=22+4+11+8+1).
20

Judetul DAMBOVITA
Atestat profesional la Informatica
Dac fiierul in.txt conine numerele : 2, 5, -3, 10, 14, 7, 6, suma calculat este : S=21 (=-3+10+14).

#include <fstream.h>
void main ()
{ifstream fin("in.txt");
int i, v[100], max, min, pmax, pmin, s=0, k=1, a;
fin>>v[1];
max=v[1]; min=v[1]; pmax=1; pmin=1;
while (fin>>a)
{k++;
v[k]=a;
if (a>max)
{max=a; pmax=k;}
if (a<min)
{min=a; pmin=k;}
}
if (pmin>pmax)
{int aux=pmin; pmin=pmax; pmax=aux;}
for (i=pmin; i<=pmax; i++)
s+=v[i];
cout<<s<<endl;
}
Biletul nr. 28

3. Un numr complex z=a+ib este reinut prin utilizarea structurii (nregistrrii):


struct complex {float a, b;};
type complex = record a, b:real; end;
S se calculeze si afieze suma numerelor complexe, citite din fiierul complex.txt. Pe fiecare linie din
fiier sunt cate doua numere reale(partea reala si imaginara a unui numr complex) separate de cate un
spaiu.

#include <fstream.h>
struct complex {float a, b;} v[100];
float x=0, y=0;
void main ()
{ifstream fin ("complex.txt");
float a1, b1;
int n=1;
while (fin>>v[n].a>>v[n].b) {x+=v[n].a; y+=v[n].b; n++;}
fin.close();
cout<<x<<"+"<<y<<"i"<<endl;
}
Biletul nr. 29

21

Judetul DAMBOVITA
Atestat profesional la Informatica
3. Un vector de dimensiune p 20 este completat cu numere ntregi citite de la tastatur. S se
calculeze media aritmetic a elementelor vectorului care sunt numere cuprinse ntre a i b,
inclusiv, i sunt multiple de k. Numerele ntregi a, b i k se citesc de la tastatur.

#include <iostream.h>
void main ()
{int a, k, b, p, i, v[21], s=0, nr=0;
do {cout<<"p="; cin>>p;} while (p>20);
for (i=1; i<=p; i++) cin>>v[i];
cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
if (a>b)
{int aux=a; a=b; b=aux;}
cout<<"k="; cin>>k;
for (i=1; i<=p; i++)
if ((a<=v[i]) && (v[i]<=b) && (v[i]%k==0))
{s+=v[i]; nr++;
}
if (nr==0) cout<<"Nu exista numere care sa indeplineasca conditiile"<<endl;
else cout<<(float)s/nr<<endl;
}
Biletul nr. 30
3. De la tastatur se citesc elementele a dou mulimi A i B, , cu p, respectiv q elemente, elementele
fiecrei mulimi fiind distincte dou cte dou (p, q <=100). S se determine elementele i cardinalul
mulimilor A B, B A .

#include <iostream.h>
//A intersectat cu B, B minus A
float a[101], b[101];
int p, q;
void dif (float a[101], int p, float b[101], int q)
{int card=0;
cout<<"B-A ";
for (int i=1; i<=q; i++)
{int ok=1;
for (int j=1; j<=p && ok==1; j++)
if (b[i]==a[j]) ok=0;
if (ok==1) {cout<<b[i]<<" "; card++;}
}
cout<<endl;
if (card==0) cout<<"B-A : multimea vida"<<endl;
else cout<<"|B-A|="<<card<<endl;
}
void intersectie (float a[101], int p, float b[101], int q)
{int card=0;
cout<<"A int B ";
for (int i=1; i<=p; i++)
{int ok=0;
for (int j=1; j<=q && ok==0; j++)
if (a[i]==b[j]) ok=1;
22

Judetul DAMBOVITA

Atestat profesional la Informatica

if (ok==1)
{cout<<a[i]<<" ";
card++;
}
}
cout<<endl;
if (card==0) cout<<"A int B : multimea vida"<<endl;
else cout<<"|A int B|="<<card<<endl;
}
void main ()
{cout<<"p="; cin>>p;
for (int i1=1; i1<=p; i1++)
cin>>a[i1];
cout<<"q="; cin>>q;
for (i1=1; i1<=q; i1++)
cin>>b[i1];
dif (a, p, b, q);
intersectie (a, p, b, q);
}

23