Sunteți pe pagina 1din 12

TABLOURI UNIDIMENSIONALE ȘI BIDIMENSIONALE

Tablouri unidimensionale (vectori)

Problema 1: Se consideră un tablou unidimensional cu n numere reale și se cere să se afișeze cel mai mare și cel
mai mic element din vector.

Soluție în Pascal: Soluție în C++:


Program p1; # include <iostream>
Var i, n: integer; using namespace std;
X: array [1..50] of real; int i, n;
minim, maxim: real; float x[50], minim, maxim;
begin int main()
write (‘Dati numarul de elemente ale tabloului’); {
read (n); cout<<"Dati numarul de elemente ale tabloului ";
for i:=1 to n do cin>>n;
begin for (i=0; i<n; i++)
write (‘x[‘, i, ‘]=’); {
read (x[i]); cout<<"x[“<<i<<"]=“;
end; cin>>x[i];
min:=x[1]; }
max:=x[1]; minim=x[0];
for i:=1 to n do maxim=x[0];
if (minim>x[i]) then minim:=x[i] for (i=0; i<n; i++)
else if (maxim<x[i]) then maxim:=x[i]; if (minim>x[i]) minim=x[i];
writeln (‘Minimul este ‘, minim); else if (maxim<x[i]) maxim=x[i];
writeln (‘Maximul este ‘, maxim); cout<<endl<<"Minimul este "<<minim;
readln; cout<<endl<<"Maximul este "<<maxim;
end. return 0;
}

Problema 2: Fie tabloul unidimensional x cu n elemente numere reale și numerele întregi a și b. Să se calculeze
media aritmetică a elementelor din tablou cuprinse între valorile a și b.

Soluție în Pascal: Soluție în C++:


Program p2; # include <iostream>
Var a,b,i, n: integer; using namespace std;
x: array [1..50] of real; int a, b, i, n, suma=0;
media: real; float x[50], media;
begin int main()
write (‘Dati numarul de elemente ale tabloului’); {
read (n); cout<<"Dati numarul de elemente ale tabloului ";
for i:=1 to n do cin>>n;
begin for (i=1; i<=n; i++)
write (‘x[‘, i, ‘]=’); {
read (x[i]); cout<<"x[“<<i<<"]=“;
end; cin>>x[i];
write (‘Dati numarul a = ‘); read (a); }
write (‘Dati numarul b = ‘); read (b); cout<<"Dati numarul a = "; cin>>a;
for i:=1 to n do cout<<"Dati numarul b = "; cin>>b;
if ( (a<=x[i]) and (x[i]<=b) ) then for (i=1; i<=n; i++)
suma:=suma+x[i]; if ( (a<=x[i]) && (x[i]<=b) ) suma+=x[i];
media:=suma/n; media=suma/n;
write (‘Media aritmetica a elementelor din tablou, cout<<"Media aritmetica a elementelor din tablou,
aflate intre ‘, a, ‘ si ‘, b, ‘ este ‘, media); aflate intre “<<a<<” si ”<<b<<” este ”<<media;
readln; return 0;
end. }
Problema 3: Se citesc două tablouri unidimensionale cu componente numere naturale. Fiecare vector are elementele
sortate crescător. Se cere să se construiască un al treilea vector care conține elementele celor două în ordine
crescătoare. (Problema interclasării)

Soluție în Pascal: Solutie în C++:


Program p3; # include <iostream>
Var i, j, n, m, k: integer; using namespace std;
x, y, z: array [1..50] of real; int i, j, n, m, k;
begin float x[50], y[50], z[50];
write (‘Dati numarul de elemente ale tabloului x’); int main()
read (n); {
for i:=1 to n do cout<<"Dati numarul de elemente ale tabloului x";
begin cin>>n;
write (‘x[‘, i, ‘]=’); for (i=1; i<=n; i++)
read (x[i]); {
end; cout<<"x["<<i<<"]=";
write (‘Dati numarul de elemente ale tabloului y’); cin>>x[i];
read (m); }
for i:=1 to m do cout<<"Dati numarul de elemente ale tabloului y";
begin cin>>m;
write (‘y[‘, i, ‘]=’); for (i=1; i<=m; i++)
read (y[i]); {
end; cout<<"y["<<i<<"]=";
i:=1; j:=1; k:=0; cin>>y[i];
while ( (i<=n) and (j<=m) ) do }
if (x[i]<y[j]) then i=1; j=1; k=0;
begin k:=k+1; z[k]:=x[i]; i:=i+1; end while ( (i<=n) && (j<=m) )
else if (x[i]<y[j])
begin k:=k+1; z[k]:=y[j]; j:=j+1; end; {k++;z[k]=x[i];i++;}
if (i<n) then else
for j:=i to n do begin k:=k+1; z[k]:=x[j] end {k++;z[k]=y[j];j++;}
else if (i<n)
for i:=j to m do begin k:=k+1; z[k]:=y[i] end; for (j=i; j<=n; j++) {k++; z[k]=x[j];}
writeln (‘Vectorul Z cu elementele interclasate este ‘); else
for i:=1 to k do write (z[i], ‘ ’); for (i=j; i<=m; i++) {k++; z[k]=y[i];}
readln; cout<<endl<<"Vectorul Z cu elementele interclasate
end. este ";
for(i=1;i<=k; i++) cout<<z[i]<<" ";
return 0;
}

Problema 4: Se dă un tablou unidimensional cu n componente numere întregi și un numar întreg A. Să se numere


câte elemente sunt mai mari decât A și să se construiască un vector cu aceste elemente.

Soluție în Pascal: Solutie în C++:


Program p4; # include <iostream >
Var i, n, j, a: integer; using namespace std;
x, y: array [1..50] of real; int i, n, j, a;
begin float x[50], y[50];
write (‘Dati numarul de elemente ale tabloului ’); int main()
read (n); {
for i:=1 to n do cout<<"Dati numarul de elemente ale tabloului ";
begin cin>>n;
write (‘x[‘, i, ‘]=’); for (i=1; i<=n; i++)
read (x[i]); {
end; cout<<"x["<<i<<"]=";
write (‘Dati numarul a = ‘); read(a); cin>>x[i];
j:=0; }
for i:=1 to n do cout<<"Dati numarul a = "; cin>>a;
if (a<=x[i]) then begin j:=j+1; y[j]:=x[i] end; j=0;
writeln (‘Sunt ‘, j, ‘ numere mai mari decat ‘, a); for (i=1; i<=n; i++)
writeln (‘Elementele sunt: ‘); if (a<=x[i]) { j++; y[j]=x[i]; }
for i:=1 to j do write (y[i], ‘ ’); cout<<"Sunt "<<j<<" numere mai mari decat "<<a<<endl;
readln; cout<<"Elementele sunt: "<<endl;
end. for (i=1; i<=j; i++) { cout<<y[i]<<" ";}
return 0;
}

Problema 5: Se dă un tablou unidimensional cu n (1n100) componente numere naturale. Să se calculeze suma


componentelor divizibile cu a, pentru un numar a citit de la tastatură.

Soluție în Pascal: Solutie în C++:


Program p5; # include <iostream>
Var i, n, j, a: integer; using namespace std;
x, y: array [1..50] of real; int i, n, a, suma=0;
begin int x[50];
write (‘Dati numarul de elemente ale tabloului ’); int main()
read (n); {
for i:=1 to n do cout<<"Dati numarul de elemente ale tabloului ";
begin cin>>n;
write (‘x[‘, i, ‘]=’); for (i=1; i<=n; i++)
read (x[i]); {
end; cout<<"x[“<<i<<"]=“;
write (‘Dati numarul a = ‘); read(a); cin>>x[i];
for i:=1 to n do }
if x[i] mod a = 0 then suma=suma+x[i]; cout<<"Dati numarul a = "; cin>>a;
writeln (‘Suma elementelor din vector care sunt for (i=1; i<=n; i++)
divizibile cu ‘,a, ‘ este egala cu ‘,suma); if ( x[i]%=a) suma=suma+x[i];
readln; cout<<"Suma elementelor din vector care sunt divizibile
end. cu “<<a<<”este egala cu "<<suma<<endl;
return 0;
}

Problema 6: Se dă un tablou unidimensional cu n (1n100) componente numere naturale. Să se sorteze crescător


elementele vectorului.

Soluție în Pascal: Solutie în C++:


Program p6; # include <iostream>
Var i, n, j: integer; using namespace std;
x: array [1..50] of real; int i, j,n;
a: real; float x[50], a;
begin int main()
write (‘Dati numarul de elemente ale vectorului ’); {
read (n); cout<<"Dati numarul de elemente ale vectorului ";
writeln (‘Dati elementele vectorului ’); cin>>n;
for i:=1 to n do cout<<"Dati elementele vectorului"<<endl;
begin for (i=0; i<n; i++)
write (‘x[‘, i, ‘]=’); {
read (x[i]); cout<<"x["<<i<<"]=";
end; cin>>x[i];
}
for i:=1 to n-1 do for (i=0; i<n-1; i++)
for j:=i to n do for (j=i; j<n; j++)
if x[i]>x[j] then {
begin if (x[i]>x[j]) {a=x[i]; x[i]=x[j]; x[j]=a;}
a:=x[i]; x[i]:=x[j]; x[j]:=a; }
end; cout<<"Vectorul sortat crescator este>"<<endl;
writeln (‘Vectorul sortat crescator este ’); for (i=0; i<n; i++) cout<<x[i]<<" ";
for i:=1 to n do write (x[i],’ ‘); return 0;
readln; }
end.

Tablouri bidimensionale (matrici)

Problema 1: Se dau temperaturile înregistrate pentru două orașe pe parcursul a unei săptămâni. Să se determine
temperaturile medii pe săptămână pentru fiecare oraș.

Soluție în Pascal: Solutie în C++:


Program p1; #include <iostream>
Const oras=2; Zile=7; using namespace std;
Var temperature: array [1..oras, 1..zile] of real; const int oras = 2;
m, media: real; const int zile = 7;
i,j:integer; float temperature [oras][zile], m, media;
begin int i,j;
writeln (‘Dati temperaturile zilnice înregistrate int main()
pentru fiecare oraș’); {
for i:=1 to oras do cout << "Dati temperaturile zilnice înregistrate pentru
begin fiecare oraș \n";
write (‘Orasul ‘, i, ‘ : ‘); for (i=0; i<oras; i++)
For j:=1 to zile do {
read (temperature[i,j]); cout << "Orasul " << i+1 << ": "<<endl;
end; for (j=0; j<zile; j++)
cin >> temperature[i][j];
writeln (‘Ati introdus datele:’); }
for i:=1 to oras do cout << "Ati introdus datele:"<<endl;
begin for (i = 0; i<oras; i++)
for j:=1 to zile do {
begin for (j = 0; j<zile; j++)
writeln (‘Orasul ‘, i, ‘ Ziua ‘, j, ‘ = ‘, {
temperature[i,j]); cout << "Orasul " << i+1 << ", Ziua " << j+1 << " =
end; " << temperature[i][j] << endl;
end; }
}
writeln (‘Temperaturile medii saptamanale sunt:’);
for i:=1 to oras do cout << "Temperaturile medii saptamanale sunt:"<<endl;
begin for (i=0; i<oras; i++)
m:=0; {
for j:=1 to zile do m=0;
m:=m+temperature[i,j]; for (j=0; j<zile; j++)
media:=m/7; {
writeln (‘Orasul ‘,i, ‘ a inregistrat temperatura medie m=m+temperature[i][j];
de ‘, media); }
end; media=m/7;
readln; cout <<"Orasul " <<i+1<<" a inregistrat temperatura
end. medie de "<<media<< endl;
}
return 0;
}

Problema 2: Să se scrie un program care calculează minimul și maximul dintr-o matrice cu n linii și m coloane
(1n,m30)
Soluție în Pascal: Solutie în C++:
Program p2; #include <iostream>
Var n, m, minim, i, j, maxim: integer; using namespace std;
a: array [1..30, 1..30] of integer; int n, m, minim, i, j, maxim, a[30][30];
begin int main()
write (‘Dati numarul de linii:’); read (n); {
write (‘Dati numarul de coloane:’); read (m); cout << "Dati numarul de linii:"; cin>>n;
for i:=1 to n do cout << "Dati numarul de coloane:"; cin>>m;
begin for (i = 1; i <= n; i++)
For j:=1 to m do {
begin for (j = 1; j <= m; j++)
write (‘a[‘, i, ‘, ‘, j, ‘]=‘); {
read (a[i,j]); cout<<"a["<<i<<","<<j<<"]=";
end; cin>>a[i][j];
end; }
writeln (‘Elementele matricei A sunt:’); }
for i:=1 to n do cout << "Elementele matricei A sunt:"<<endl;
begin for ( i = 1; i <=n; i++)
for j:=1 to m do {
write (a[i,j],’ ’); for (j = 1; j <=m; j++) cout << a[i][j] << " " ;
writeln; cout << endl;
end; }
minim:=a[1,1]; minim=a[1][1];
maxim:=a[1,1]; maxim=a[1][1];
for i:=1 to n do for (i=1; i<=n; i++)
for j:=1 to m do for (j=1; j<=m; j++)
begin {
if (a[i,j]<minim) then minim:= a[i,j]; if (a[i][j]<minim) minim= a[i][j];
if (a[i,j]>maxim) then maxim:= a[i,j]; if (a[i][j]>maxim) maxim= a[i][j];
end; }
writeln (‘Elementul minim din matrice este ’,minim); cout<<"Elementul minim din matrice este
writeln (‘Elementul maxim din matrice este "<<minim<<endl;
’,maxim); cout<<"Elementul maxim din matrice este
readln; "<<maxim<<endl;
end. return 0;
}

Problema 3: Se consideră o matrice An*n. Să se calculeze:


- suma elementelor de pe diagonala principală
- produsul elmentelor de pe diagonala secundară
- minimele din elementele aflate deasupra, respectiv sub diagonala principală
- maximele din elementele aflate deasupra, respectiv sub diagonala secundară

Soluție în Pascal: Solutie în C++:


Program p3; #include <iostream>
Var n, m, i, j, min1, min2, max1, max2: integer; using namespace std;
a: array [1..30, 1..30] of integer; int n, m, i, j, a[30][30], min1, min2;
begin int max1, max2, suma, produs;
write (‘Dati numarul de linii si colane:’); read (n); int main()
for i:=1 to n do {
begin cout << "Dati numarul de linii si colane:"; cin>>n;
For j:=1 to n do for (i = 1; i <=n; i++)
begin {
write (‘a[‘, i, ‘, ‘, j, ‘]=‘); for(j = 1; j <= n; j++)
read (a[i,j]); {
end; cout<<"a["<<i<<","<<j<<"]=";
end; cin>>a[i][j];
writeln (‘Elementele matricei A sunt:’); }
for i:=1 to n do }
begin cout << "Elementele matricei A sunt:"<<endl;
for j:=1 to n do for ( i = 1; i <= n; i++)
write (a[i,j],’ ’); {
writeln; for (j = 1; j <= n; j++) cout << a[i][j] << " " ;
end; cout << endl;
}
{ suma elementelor de pe diagonala principala } //suma elementelor de pe diagonala principala
Suma:=0; suma=0;
for i:=1 to n do for (i=1; i<=n; i++)
for j:=1 to n do for (j=1; j<=n; j++)
if (i=j) then suma:=suma+a[i,j]; if (i==j) suma+= a[i][j];
writeln (‘Suma elementelor de pe diagonala cout<<"Suma elementelor de pe diagonala principala este
principala este ‘, suma); "<<suma<<endl;

{ produsul elementelor de pe diagonala secundara } // produsul elementelor de pe diagonala secundara


Produs:=1; produs=1;
for i:=1 to n do for (i=1; i<=n; i++)
for j:=1 to n do for (j=1; j<=n; j++)
if (i+j==n+1) produs*= a[i][j];
if (i+j=n+1) then produs:=produs*a[i,j]; cout<<"Produsul elementelor de pe diaginala secundara este
writeln (‘Produsul elementelor de pe diagonala "<<produs<<endl;
principala este ‘, produs);
// minimul elementelor de deasupra diagonalei principale
{ minimul elementelor de deasupra diagonalei min1=a[1][2];
principale } for (i=1; i<=n; i++)
min1:=a[1,1]; for (j=1; j<=n; j++)
for i:=1 to n do if (i<j)
for j:=1 to n do if (min1>a[i][j]) min1=a[i][j];
if(i<j) then cout<<"Minimul elementelor de deasupra diaginalei
if (min1>a[i,j]) then min1:=a[i,j]; principale este "<<min1<<endl;
writeln (‘Minimul elementelor de deasupra diaginalei
principale este ‘,min1); // minimul elementelor de sub diagonala principala

{minimul elementelor de sub diagonala principala} min2=a[2][1];


min2:=a[2,n]; for (i=1; i<=n; i++)
for i:=1 to n do for (j=1; j<=n; j++)
for j:=1 to n do if (i>j)
if (i>j) then if (min2>a[i][j]) min2=a[i][j];
if (min2>a[i,j]) then min2:=a[i,j]; cout<<"Minimul elementelor de sub diaginala principala
writeln (‘Minimul elementelor de sub diaginala este "<<min2<<endl;
principala este ‘,min2);
// maximul elementelor de deasupra diagonalei secundare
{maximul elementelor de deasupra diagonalei max1=a[1][2];
secundare } for (i=1; i<=n; i++)
max1:=a[1,2]; for (j=1; j<=n; j++)
for i:=1 to n do if (i+j<n+1)
for j:=1 to n do if (max1<a[i][j]) max1=a[i][j];
if (i+j<n+1) then cout<<"Maximul elementelor de deasupra diaginalei
if (max1<a[i,j]) then max1:=a[i,j]; secundare este "<<max1<<endl;
writeln (‘Maximul elementelor de deasupra
diaginalei secundare este ‘, max1); // maximul elementelor de sub diagonala secundara
max2=a[2][1];
{maximul elementelor de sub diagonala secundara} for (i=1; i<=n; i++)
max2:=a[2,1]; for (j=1; j<=n; j++)
for i:=1 to n do if (i+j>n+1)
for j:=1 to n do if (max2<a[i][j]) max2=a[i][j];
if (i+j>n+1) then cout<<"Maximul elementelor de sub diaginala secundara
if (max2<a[i,j]) then max2:=a[i,j]; este "<<max2<<endl;
writeln (‘Maximul elementelor de sub diaginala
secundara este ‘, max2); return 0;
readln; }
end.

Problema 4: Să se realizeze programul care determina elementele maxim și minim dintr-o matrice dreptunghiulara,
de dimensiuni nxm.

Soluție în Pascal: Solutie în C++:


Program p4; #include <iostream>
Var a: array [1..30, 1..30] of integer; using namespace std;
i, j, n, m, maxim, minim: integer; int a[20][20];
int i, j, n, m, maxim, minim;
begin
write (‘Dati numarul de linii:’); read (n); int main()
write (‘Dati numarul de coloane:’); read (m); {
for i:=1 to n do cout << "Dati numarul de linii:"; cin>>n;
begin cout << "Dati numarul de coloane:"; cin>>m;
For j:=1 to m do for (i=1; i<=n; i++)
begin {
write (‘a[‘, i, ‘, ‘, j, ‘]=‘); for (j=1; j<=m; j++)
read (a[i,j]); {
end; cout<<"a["<<i<<","<<j<<"]=";
end; cin>>a[i][j];
}
writeln (‘Elementele matricei sunt:’); }
for i:=1 to n do cout << "Elementele matricei sunt:"<<endl;
begin for ( i = 1; i <= n; i++)
for j:=1 to m do {
write (a[i,j],’ ’); for (j = 1; j <=m; j++) cout << a[i][j] << " " ;
writeln; cout << endl;
end; }
maxim=a[1,1]; maxim=a[1][1];
minim=a[1,1]; minim=a[1][1];

for i:=1 to n do for (i=1; i<=n; i++)


for j:=1 to m do for (j=1; j<=m; j++)
{
begin if (a[i][j]>maxim) {maxim = a[i][j];}
if (a[i,j]>maxim) then maxim:=a[i,j]; if (a[i][j]<minim) { minim = a[i][j];}
if (a[i,j]<minim) then minim:=a[i,j]; }
end; cout<<"Minimul este: "<< minim<<endl;
writeln(‘Minimul este: ‘, minim); cout<<"Maximul este: "<< maxim<<endl;
writeln(‘Maximul este: ‘, maxim); return 0;
readln; }
end.

Problema 5: Să se scrie programul care realizează determinarea elementului maxim de pe fiecare coloană a unei
matrice dreptunghiulare de dimensiuni nxm. Elementele matricei se vor citi de la tastatură.

Soluție în Pascal: Solutie în C++:


Program p5; #include <iostream>
Var a: array [1..30, 1..30] of integer;
max: array[1..30] of integer; using namespace std;
i, j, n, m: integer; int a[20][20], maxim[30];
int i, j, n, m;
begin
write (‘Dati numarul de linii:’); read (n); int main()
write (‘Dati numarul de coloane:’); read (m); {
for i:=1 to n do cout << "Dati numarul de linii:"; cin>>n;
begin cout << "Dati numarul de coloane:"; cin>>m;
For j:=1 to m do for (i=1; i<=n; i++)
begin for (j=1; j<=m; j++)
write (‘a[‘, i, ‘, ‘, j, ‘]=‘); {
read (a[i,j]); cout<<"a["<<i<<","<<j<<"]=";
end; cin>>a[i][j];
end; }

writeln (‘Elementele matricei sunt:’); cout << "Elementele matricei sunt:"<<endl;


for i:=1 to n do for ( i = 1; i <= n; i++)
begin {
for j:=1 to m do for (j = 1; j <= m; j++) cout << a[i][j] << " " ;
write (a[i,j],’ ’); cout << endl;
writeln; }
end;
for(j=1; j<=m; j++)
for j:=1 to m do {
begin maxim[j] = a[1][j];
max[j]:=a[1,j]: for (i=1; i<=n; i++)
for i:=1 to n do if(a[i][j]>maxim[j]) {maxim[j] = a[i][j]; }
}
if (a[i,j]>max[j]) then max[j]:=a[i,j];
end; for(j=1; j<=m; j++)
cout<<"Maximul de pe coloana "<< j<<"
for j:=1 to m do este"<<maxim[j] <<endl;
writeln(‘Maximul de pe coloana ‘,j, ‘ este’, max[j]); return 0;
readln;
end. }

Problema 6: Să se scrie programul care realizează determinarea elementului maxim de pe fiecare linie a unei matrice
dreptunghiulare de dimensiuni nxm. Elementele matricei se vor citi de la tastatură.

Soluție în Pascal: Solutie în C++:


Program p6; #include <iostream>
Var a: array [1..30, 1..30] of integer;
maxim: array[1..30] of integer; using namespace std;
i, j, n, m: integer; int a[20][20], maxim[30];
int i, j, n, m;
begin
write (‘Dati numarul de linii:’); read (n); int main()
write (‘Dati numarul de coloane:’); read (m); {
for i:=1 to n do cout << "Dati numarul de linii:"; cin>>n;
begin cout << "Dati numarul de coloane:"; cin>>m;
For j:=1 to m do for (i=1; i<=n; i++)
begin for (j=1; j<=m; j++)
write (‘a[‘, i, ‘, ‘, j, ‘]=‘); {
read (a[i,j]); cout<<"a["<<i<<","<<j<<"]=";
end; cin>>a[i][j];
end; }

writeln (‘Elementele matricei sunt:’); cout << "Elementele matricei sunt:"<<endl;


for i:=1 to n do for ( i = 1; i <= n; i++)
begin {
for j:=1 to m do for (j = 1; j <= m; j++) cout << a[i][j] << " " ;
write (a[i,j],’ ’); cout << endl;
writeln; }
end;
for(i=1; i<=n; i++)
for i:=1 to n do {
begin maxim[i] = a[i][1];
max[i]:=a[i,1]: for (j=1; j<=m; j++)
for j:=1 to m do if(a[i][j]>maxim[i]) {maxim[i] = a[i][j]; }
if (a[i,j]>maxim[i]) then maxim[i]:=a[i,j]; }
end;
for(i=1; i<=n; i++)
for i:=1 to n do cout<<"Maximul de pe linia "<< i<<"
writeln(‘Maximul de pe linia ‘,i, ‘ este’, maxim[i]); este"<<maxim[i] <<endl;

readln; return 0;
end. }

Problema 7: Să se scrie programul care sortează crescător elementele de pe diagonala principală ale unei matrici
pătratice.

Soluție în Pascal: Solutie în C++:


Program p7; # include <iostream>
Var i, j, n, k: integer; using namespace std;
x: array [1..50, 1..50] of real; int i, j,n,k;
y: array[1..50] of real; float x[50][50], y[50], a;
a: real;
int main()
begin {
write (‘Dati numarul de linii si colane ’); cout<<"Dati numarul de linii si colane ";
read (n); cin>>n;
writeln (‘Dati elementele tabloului’); cout<<"Dati elementele tabloului"<<endl;
for i:=1 to n do for (i=1; i<=n; i++)
for j:=1 to n do for (j=1; j<=n; j++)
begin {
write (‘a[‘, i, ‘, ‘, j, ‘]=‘); cout<<"x["<<i<<","<<j<<"]=";
read (x[i,j]); cin>>x[i][j];
end; }
writeln (‘Ati introdus tabloul:’); cout<<"Ati introdus tabloul:"<<endl;
for i:=1 to n do for (i=1; i<=n; i++)
begin {
for j:=1 to n do for (j=1; j<=n; j++) cout<<x[i][j]<<" ";
write (x[i,j],’ ’); cout<<endl;
writeln; }
end; k=0;
k:=0; for (i=1; i<=n; i++)
for i:=1 to n do for (j=i; j<=n; j++)
for j:=1 to n do if (i==j) {k++; y[k]=x[i][j];}

if (i=j) then begin k:=k+1; y[k]:=x[i,j] end; for (i=1; i<=n-1; i++)
for (j=i; j<=n; j++)
for i:=1 to n-1 do {
for j:=i to n do if (y[i]>y[j])
begin {a=y[i]; y[i]=y[j]; y[j]=a;}
if (y[i]>y[j]) then }
begin a:=y[i]; y[i]:=y[j]; y[j]:=a; end;
for (i=1; i<=n; i++) { x[i][i]=y[i] ;}
for i:=1 to n do x[i,i]:=y[i];
cout<<"Tabloul cu elementele de pe diagonala
writeln (‘Tabloul cu elementele de pe diagonala principala sortate crescator este:"<<endl;
principala sortate crescator este:”); for (i=1; i<=n; i++)
for i:=1 to n do {
begin for (j=1; j<=n; j++) cout<<x[i][j]<<" ";
for j:=1 to n do cout<<endl;
write (x[i,j],’ ’); }
writeln; return 0;
end; }
readln;
end.

PROBLEME PROPUSE SPRE REZOLVARE

Tablouri unidimensionale (vectori)

1. Se consideră un vector x = { x1, x2, x3, …, xn }. Să se scrie un program care ar modifica vectorul astfel încât în
final să avem :
a) x = { x2, x3, …, xn, x1 }
b) x = { xn, x1, x2, x3, …, xn-1 }
c) x = { x2, x1, x4, x3,…, xn, xn-1 }

2. Se consideră doi vectori x și y cu câte n elemente numre întregi fiecare. Să se scrie un program care ar calcula
următoarele valori :
a) e = (x1+y1)  (x2+y2)  …  (xn+yn)
b) e = x1y1 + x2y2 + … + xnyn

3. Se consideră un vector x care are elemente numere reale. Să se scrie un program care ar introduce media
geometrică între oricare două elmente vecine din vector. Vectorul se va afișa înainte și după modificare.
Reamintim: Media geometrică (mg) a două numere reprezintă rădăcina pătrată a produsului acestora. De exemplu:
Media geometrică a numerelor 32 și 50 este: 𝑚𝑔 = √32 ∗ 50 = √1600 = 40

4. Să se scrie un program care să realizeze inversarea unui vector :


a) în același vector și fără a utiliza un vector suplimentar
b) într-un alt vector.

5. Se consideră un vector x cu n numere întregi. Să se copieze într-un alt vector y elementele pozitive ale vectorului
inițial.

6. Se citește un tablou unidimensional cu n (1n100) componente numere naturale. Se cere să se construiască și să


se afișeze un nou vector cu componentele pătrate perfecte ale vectorului inițial.

7. Se dă un tablou unidimensional cu n (1n100) componente numere naturale. Să se verifice dacă componentele


sunt în ordine crescătoare de la stânga la dreapta. Răspunsul va fi 1 dacă Da și 0 în caz contrar.

8. Să se rearanjeze elementele unui tablou unidimensional de numere întregi, astfel încât numerele pare să apară
înaintea numerelor impare. În cadrul subsecvenței de numere pare, respectiv impare, elementele trebuie să apară în
ordinea în care erau în vectorul inițial.

9. Se consideră un tablou unidimensional x cu n numere întregi. Se cere să se calculeze cel mai mare divizor comun
al lor.
Sugestii: Pentru determinarea CELUI MAI MARE DIVIZOR COMUN a numerelor A și B este comod a utiliza
ALGORITMUL LUI NICOMAHUS (metoda scăderilor repetate)
Pentru Pascal: Pentru C++:

While (a< >b) do while(a!=b)


If (a>b) then a:=a-b else b:=b-a; if (a>b) a=a-b;
Write (‘cmmdc:’, a); else b=b-a;
cout<<"cmmdc: "<<a;
Eemplu:
sau se poate utiliza ALGORITMUL LUI EUCLID (metoda împărțirilor succesive)

Pentru Pascal: Pentru C++:

if a <b then begin if (a<b) { aux:=a;


aux:=a; a:=b;
a:=b; b:=aux;
b:=aux; }
end; r=a%b;
r:=a mod b; while (r!=0)
while r<>0 do {
begin a=b;
a:=b; b=r;
b:=r; r=a%b;
r:=a mod b }
end; cout<<"cmmdc: "<<a;
Write (‘cmmdc:’, a);

10. Se consideră un tablou unidimensional x cu n numere întregi. Se cere să se calculeze cel mai mic multiplu
comun al lor.
Sugestii: Pentru calculul matematic a cmmmc pentru două numere A și B, se realizează descompunerea în factori
primi și apoi se consideră termenii comuni și necomuni, la puterea cea mai mare. Adică Algoritmul lui Euclid:
cmmmc (a; b) = (a × b) / cmmdc (a; b).

Pentru Pascal: Pentru C++:

x:=a; x=a;
y:=b; y=b;
while r< >0 do while (r!=0)
begin {
r:=a mod b; r=a%b;
a:=b; a=b;
b:=r b=r;
end; }
write (‘cmmmc=’, (x*y)/a); cout<<"cmmmc: "<< x*y/a

10. Se dă un tablou unidimensional X cu n numere reale și se cere să se modifice astfel încât să se intercaleze între
oricare două elemente consecutive, media lor aritmetică.

Tablouri bidimensionale(matrici)

1. Se consideră o matrice An*m (1n,m30) având componente numere întregi. Se cere să se calculeze suma
componentelor de pe marginea (rama) matricei.
1 2 3 4
Exemplu: Pentru n = 3 , m = 4 și matricea 𝐴 = (10 11 12 5)
9 8 7 6
se va afișa suma 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 47.

2. Se consideră o matrice An*m (1n,m30) având componente numere întregi. Să se determine maximul fiecărei
coloane și minimul fiecărei linii.

3. Să se construiască automat o matrice pătratică (n=m) de dimensiune n2 (1n30) formată din primele numere
pare începând cu 2.

4. Se consideră o matrice A n*m (1n,m30) cu elemente numere reale. Să se scrie un program care ar schimba în
această matrice prima linie cu ultima linie. Se va afișa apoi matricea modificată.
5. Se consideră o matrice A n*m (1n,m30) cu elemente numere reale. Să se scrie un program care ar schimba în
această matrice prima coloană cu ultima coloană. Se va afișa apoi matricea modificată.

6. Se consideră o matrice A n*m (1n,m30) cu elemente numere reale. Să se scrie un program care ar determina un
vector care să conțină elementele maxime de pe fiecare linie a matricei, iar apoi să determine cea mai mică
valoare din vectorul construit anterior.

7. Se consideră o matrice A n*m (1n,m30) cu elemente numere reale. Să se scrie un program care ar determina un
vector ar conțieă elementele minime de pe fiecare coloană a matricei, iar apoi să determine cea mai mare valoare
din vectorul construit anterior.