Exercitii rezolvate

**A. Fie declarările: int a[20]; float b[30];**

1. Precizați care dintre elementele din lista de mai jos sunt corecte din punct de vedere sintactic:

a. cin>>a[22];

b. cin>>b;

c. b[6]=20;

d. cout<<a[2] % b[2];

e. a[5]+1=0;

f. cout<<b[1];

g. b[2]=a[10];

h. cout<<a;

i. cout<<a[2]%5;

j. cout<<int(b[1]);

**Soluție:** sunt corecte, din punct de vedere sintactic variantele: a, c, f, g, h, i, j. Trebuie făcute observațiii asupra sintaxelor de la punctele a și h, care, deși, neintuitive, sunt permise de compilator.

**B. Interpretați secvențele de cod următoare și răspundeți cerințelor formulate !**

1. Ce va afișa secvența:

s=0;

for(i=0;i<5;i++)

for(j=i+1;j<5;j++)

if(a[i][j] %2) s=s+a[i][j];

cout<<n;

for (i=1;i<=n;i++)
cin>>a[i];

m=a[1];

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

if (a[i]% 2 !=0)

if (m>=a[i])
m=a[i];
cout<<m;

daca ar fi citite, în ordine, valorile: 8,1,7,10,3,12,1,2,6 ?

**Soluție:** Secvența determină valoarea minimă dintre elementele impare ale vectorului. Prin urmare, valoarea afișată va fi 1

3. Ce va afișa secvența:

s = 0;

for(i = 0; i < 4; i++)

s+=a[i][n-i-1];

cout<<s;

dacă matricea a ar avea conținutul de mai jos

2 3 4 1

3 5 4 2

4 5 3 2

3 5 4 3

**Soluție:** Secvența determină suma elementelor aflate pe diagonala secundară a matricei. Valoarea afișată va fi: 13

**C. Scrieți programe C++ pentru rezolvarea următoarelor probleme !**

1. Se citește un număr natural n de cel mult 9 cifre. Formați și afișați cel mai mare numar posibil din cifrele sale. Exemplu: n=3972032. Ar trebui afișat: 9733220

Soluție:

#include <iostream>

using namespace std;

//functia ordonare sorteaza, folosind metoda bulelor, un sir x, dat ca parametru

void ordonare(int x[10], int n) {

int pozitie, i, inv, aux;

do {

inv=0;

for(i=0;i<n-1;i++)
if(x[i]<x[i+1])

{ aux=x[i]; x[i]=x[i+1]; x[i+1]=aux; inv=1; } }

while(inv); }

int main()

{

int cifre[10],i,j;

long n;

cin>>n;
i=0;

//formam, pas cu pas, sirul cifrelor numarului dat

while(n)

cifre[i]=n%10; i++; n/=10; }

//sortam descrescator sirul cifrelor

ordonare(cifre, i);

for(j=0;j<i;j++) cout<<cifre[j];

return 0; }

2. Scrieţi un program C++ care citeşte de la tastatură un număr natural n şi apoi cele n elemente, numere naturale cu cel mult 4 cifre fiecare, ale unui tablou unidimensional a. Programul afişează pe linii separate permutările circulare ale tabloului.

Soluție:
#include <iostream>
using namespace std;
int main()
{ int i,j,aux,n,a[100];
cin>>n; for(i=0;i<n;i++)
cin>>a[i]; for(i=1;i<=n;i++)
{ aux=a[0];
for(j=1;j<n;j++)
a[j-1]=a[j];
a[n-1]=aux;
for(j=0;j<n;j++)
cout<<a[j]<<’ ’;
cout<<’\n’; }
return 0;
}

3. Se citeşte de la tastatură un număr natural n (n≤1000000000) şi apoi n cifre separate prin spaţii. Se cere să se afişeze pe ecran cele n cifre citite, în ordine crescătoare, separate prin câte un spaţiu.

Exemplu: pentru n=19 şi cifrele 3 3 0 9 2 1 2 1 3 7 1 5 2 7 1 0 3 2 3 se va afişa pe ecran
0 0 1 1 1 1 2 2 2 2 3 3 3 3 3 5 7 7 9.

Soluție:
#include <iostream>
using namespace std;
int main()
{ int i,j,n,c,frecv[10];
 //initializam vectorul f, folosit pentru a determina frecventa cu care apar cifrele
for(i=0;i<10;i++)
frecv[i]=0;
cin>>n;
for(i=0;i<n;i++)
{cin>>c; frecv[c]++;}
for(i=0;i<10;i++)
{ if(frecv[i]) for(j=1;j<=frecv[i];j++) cout<<i; }
return 0;
}

4. Se citesc de la tastatură două numere naturale nenule n şi m (2≤m≤100, 2≤n≤100), iar apoi se construieşte în memorie şi se afişează o matrice A cu n linii (numerotate de la 1 la n) şi m coloane (numerotate de la 1 la m) cu proprietatea că fiecare element Aij memorează cea mai mică dintre valorile indicilor i şi j (1≤i≤n, 1≤j≤m). Matricea se va afişa pe ecran astfel: fiecare linie a matricei pe o linie separata a ecranului, elementele fiecărei linii vor fi separate prin câte un spaţiu. Exemplu: pentru n=4 şi m=5 se va afişa matricea de mai jos.
1 1 1 1 1
1 2 2 2 2
1 2 3 3 3
1 2 3 4 4

Soluție:
#include <iostream>
using namespace std; int main()
{ int i,j,m,n,mat[100][100];
cin>>m>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
mat[i][j]=i<j?i:j;
for(i=1;i<=m;i++)
{ for(j=1;j<=n;j++)
cout<<mat[i][j]<<' ';
cout<<'\n'; }
return 0; }

5. Se consideră tabloul bidimensional cu n linii şi n coloane ce conţine numere naturale cu cel mult patru cifre fiecare. Scrieţi programul C/C++ care citeşte de la tastatură numărul natural n (2≤n≤23) şi cele n\*n elemente ale tabloului şi apoi afişează pe ecran elementele primului pătrat concentric, separate prin câte un spaţiu. Pătratul este parcurs în sensul acelor de ceasornic începând din colţul său stânga-sus, ca în exemplu. Primul pătrat concentric este format din prima şi ultima linie, prima şi ultima coloană a tabloului. Exemplu: pentru n=5 şi tabloul alăturat,

1 2 3 4 5
6 7 8 9 1
2 3 4 5 6
7 8 9 1 2
3 4 5 6 7 se va afişa:

1 2 3 4 5 1 6 2 7 6 5 4 3 7 2 6

Soluție:
#include <iostream>
using namespace std;
int main()
{ int i,j,m,n,mat[100][100];
cin>>m>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
cin>>mat[i][j];
for(i=1;i<=n;i++)
cout<<mat[1][i]<<' ';
for(i=2;i<=m;i++)
cout<<mat[i][n]<<' ';
for(i=n-1;i>=1;i--)
cout<<mat[m][i]<<' ';
for(i=m-1;i>1;i--)
cout<<mat[i][1]<<' ';
return 0;
}