using namespace std;. Indexarea este 0-based.O matrice (tablou bidimensional) a cu maxime NMAX linii și MMAX coloane:
#include <iostream>
using namespace std;
int main(){
const int NMAX=100, MMAX=100;
int a[NMAX][MMAX];
int n, m; // n=linii, m=coloane (dimensiuni efective)
cin >> n >> m;
return 0;
}
Recomandare: păstrează capacități maxime suficiente și folosește doar primele n×m elemente.
Citire (două bucle imbricate):
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin >> a[i][j];
Afișare în format tabelar:
for(int i=0;i<n;i++){
for(int j=0;j<m;j++) cout << a[i][j] << " ";
cout << "\n";
}
sum = Σ a[i][j], j=0..m-1sum = Σ a[i][j], i=0..n-1b[m][n] cu b[j][i] = a[i][j]// transpunere b = a^T
int b[101][101];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
b[j][i] = a[i][j];
Au proprietăți legate de diagonale și simetrii. Se folosesc formulele de mai jos.
i == ji + j == n - 1Suma pe DP:
int sDP = 0; for(int i=0;i<n;i++) sDP += a[i][i];
Suma pe DS:
int sDS = 0; for(int i=0;i<n;i++) sDS += a[i][n-1-i];
a[i][j] == a[j][i] pentru toate i < ja[i][j] == a[n-1-j][n-1-i] pentru toate i, j// test simetrie DP
bool ok = true;
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
if(a[i][j] != a[j][i]) ok = false;
cout << (ok ? "simetrica DP" : "nu e simetrica DP");
// test simetrie DS
bool ok2 = true;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
int ii = n-1-j, jj = n-1-i;
if(a[i][j] != a[ii][jj]) ok2 = false;
}
cout << (ok2 ? "simetrica DS" : "nu e simetrica DS");
Diagonalele împart matricea pătratică în 4 regiuni (fără elementele de pe diagonale):
i < j și i + j < n - 1i > j și i + j > n - 1i > j și i + j < n - 1i < j și i + j > n - 1// sume pe fiecare triunghi
int sN=0,sS=0,sV=0,sE=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
if(i < j && i + j < n - 1) sN += a[i][j];
if(i > j && i + j > n - 1) sS += a[i][j];
if(i > j && i + j < n - 1) sV += a[i][j];
if(i < j && i + j > n - 1) sE += a[i][j];
}
cout << sN << " " << sS << " " << sV << " " << sE;
i==j (DP) sau i+j==n-1 (DS) nu aparțin niciunui triunghi.
Prelucrarea elementelor unei matrice (tablouri bidimensionale) se face, în mod uzual,
cu două bucle imbricate: indicele de linie i în exterior și indicele de coloană
j în interior. Parcurgerea standard (rând cu rând) este:
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
/* prelucrează a[i][j] */;
j % 2 == 1 la indexare 0-based).Enunț: Se citește matricea a cu m linii și n coloane
(m, n ≤ 30), numere întregi de cel mult 4 cifre. Determinați valoarea maximă și
de câte ori apare în tablou.
Exemplu:
m = 3, n = 4
Matricea:
2 7 7 -1
5 9 3 9
9 0 4 1
Rezultat: maxim = 9, apare de 3 ori
#include <iostream>
using namespace std;
int main() {
int m, n, a[30][30];
cin >> m >> n;
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
cin >> a[i][j];
int maxi = a[0][0], freq = 0;
// determin maximul
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (a[i][j] > maxi) maxi = a[i][j];
// număr câte ori apare maximul
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (a[i][j] == maxi) freq = freq + 1;
cout << maxi << " " << freq;
return 0;
}
1. Maximul și de câte ori apare (ca mai sus).
Exemplu: vezi problema rezolvată.
2. Verificați dacă toate valorile sunt memorate în ordine crescătoare (parcurgere pe linii, stânga→dreapta, sus→jos).
Exemplu:
m=2, n=3
1 2 3
3 3 8
Rezultat: Da (fiecare element ≤ următorul în parcurgerea rând-cu-rând).
3. Înlocuiți toate valorile minime din matrice cu valoarea maximă (afișați matricea rezultată).
Exemplu:
4 -2 7
-2 1 7
Minim = -2, Maxim = 7 ⇒
4 7 7
7 1 7
4. Calculați procentul elementelor prime din matrice.
Exemplu:
2 4 5
6 7 8
Elementele prime: 2,5,7 din 6 ⇒ procent ≈ 50%.
5. Afișați ultima cifră a produsului elementelor impare de pe coloanele pare
(indexare 0-based: coloanele cu j = 0,2,4,...).
Exemplu:
m=2, n=4
3 6 5 2
7 4 8 9
Coloane pare: j=0 și j=2 ⇒ elemente impare: 3,5,7 ⇒ produs=105 ⇒ ultima cifră = 5.
6. Afișați liniile impare (i=0,2,4,...) de la stânga la dreapta și liniile pare (i=1,3,5,...) de la dreapta la stânga.
Exemplu:
Matrice:
[0] 1 2 3 4
[1] 5 6 7 8
[2] 9 0 1 2
Afișare:
linia 0: 1 2 3 4
linia 1: 8 7 6 5
linia 2: 9 0 1 2
7. Pentru matrice pătratică n×n (2≤n≤20), afișați valorile care sunt strict mai mici decât toți vecinii
direcți (sus, jos, stânga, dreapta – dacă există).
Exemplu:
n=4
5 4 7 9
6 9 3 4
1 9 8 5
2 3 8 6
Rezultat: 2, 1
8a. În fișierul date.in: n pe prima linie, apoi matricea n×n. Determinați suma pe DP și suma pe DS (memorând în tablou).
Exemplu:
n=3; matrice:
1 2 3
4 5 6
7 8 9
DP: 1+5+9=15, DS: 3+5+7=15
8b. Aceeași cerință ca 8a, dar fără a memora matricea (doar variabile simple).
Exemplu: identic cu 8a, rezultat DP=15, DS=15.
9. Verificați dacă există elemente egale cu suma indicilor (a[i][j] == i + j).
Exemplu:
m=2, n=3
0 1 5
7 3 4
Pentru (i,j)=(0,0) ⇒ 0==0+0 ✔, (0,1) ⇒ 1==0+1 ✔ ⇒ Da.
10. Determinați dacă toate componentele sunt distincte (Da/Nu).
Exemplu:
1 2 3
4 5 6 ⇒ Da
1 2 3
4 5 3 ⇒ Nu (valoarea 3 se repetă)
11. Două matrice a și b (m×n) memorează aceleași valori dar posibil în altă ordine?
(Comparați mulțimile cu multiplicitate – “multiset”).
Exemplu:
a: 1 2 2 / 3 4 5
b: 2 5 4 / 2 1 3 ⇒ Da (aceleași valori, numai permutate)
12. Din matricea a (m×n) de întregi (până la 9 cifre) generați matricea b cu suma cifrelor și matricea c cu numărul cifrelor (pentru fiecare element a[i][j]).
Exemplu:
a = [ 507 -12 ]
Suma cifrelor (modul): b = [ 12 3 ] (5+0+7=12; |−12|→1+2=3)
Nr. cifre (modul, 0 are 1 cifră): c = [ 3 2 ]
13. Pentru două matrice pătratice n×n (max 2 cifre/element), determinați suma și produsul lor (clasic, O(n³)).
Exemplu:
n=2
A = [1 2; 3 4], B = [5 6; 7 8]
A+B = [6 8; 10 12]
A×B = [1*5+2*7, 1*6+2*8; 3*5+4*7, 3*6+4*8] = [19 22; 43 50]
Teorie. Prelucrările „pe linie” folosesc aceleași tipare ca la vectori, dar repetate pentru fiecare linie:
se parcurge linia cu un acumulatoare (suma, minim, maxim, frecvențe), apoi se reinițializează și se trece la linia următoare.
Atenție la inițializări corecte (de ex. minimul începe cu o valoare foarte mare) și la momentul afișării
(după ce s-a terminat prelucrarea liniei). Complexitatea rămâne, în general, O(m·n), unde m = număr de linii și
n = număr de coloane.
1. Scrieţi un program care citeşte un tablou bidimensional cu m linii şi n coloane
(m ≤ 30, n ≤ 30) cu numere întregi de cel mult 4 cifre. Să se afişeze minimul fiecărei linii
și apoi maximul dintre aceste minime.
Exemplu:
Matrice:
2 4 5
7 3 8
9 6 1
Minime pe linii: 2, 3, 1 → Maxim dintre minime: 3.
#include <iostream>
using namespace std;
int main() {
int a[30][30], m, n;
cin >> m >> n;
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
cin >> a[i][j];
int maxim_din_minime = -1000000000;
for (int i = 0; i < m; i++) {
int minim_linie = 1000000000;
for (int j = 0; j < n; j++)
if (a[i][j] < minim_linie) minim_linie = a[i][j];
cout << "Minimul liniei " << (i+1) << " = " << minim_linie << "\n";
if (minim_linie > maxim_din_minime) maxim_din_minime = minim_linie;
}
cout << "Maximul dintre minime = " << maxim_din_minime << "\n";
return 0;
}
2. Se citesc m, n (≤30) și matricea de întregi. Să se afişeze indicele/indicii liniei cu suma maximă a elementelor.
Exemplu:
2 4 5 1 → sumă = 12
1 1 4 5 → sumă = 11
2 6 1 3 → sumă = 12
Se afişează: 1 3 (numerotare de la 1).
3. Se citeşte matricea A (m×n, m,n≤30). Să se „bordeze” cu linia m+1 și coloana n+1, unde
A[m+1][j] este suma pe coloana j, A[i][n+1] este suma pe linia i,
iar A[m+1][n+1] este suma totală.
Exemplu:
A =
1 2 3
4 0 1
Devine (cu sume):
1 2 3 | 6
4 0 1 | 5
-----+--
5 2 4 | 11
4. Se citeşte matricea (m,n≤30) și doi indici p, q (1-indexați). Să se interschimbe liniile p și q.
Exemplu:
A înainte (m=3, n=3), p=1, q=3:
1 2 3
4 5 6
7 8 9
A după:
7 8 9
4 5 6
1 2 3
5. (Sumă pe linii egale – perechi) Să se afişeze perechile de indici de linii cu aceeaşi sumă a elementelor.
Exemplu:
Pentru matricea:
2 4 5 1
1 1 4 5
2 6 1 3
2 0 5 4
8 0 0 4
Se afişează: (1, 3), (1, 5), (3, 5), (2, 4).
6. (Sumă pe linii egale – grupuri) Să se afişeze grupurile de linii care au aceeaşi sumă (numerotare de la 1).
Exemplu:
Matrice:
2 4 5 1
1 1 4 5
2 6 1 3
2 0 5 4
8 0 0 4
3 4 5 6
Se afişează: (1, 3, 5), (2, 4), (6).
7. Se citeşte o matrice pătratică (2≤n≤24). Să se afişeze elementul maxim de pe primul pătrat concentric (prima și ultima linie, prima și ultima coloană).
Exemplu:
Pentru n=4:
5 7 2 9
3 1 4 8
6 0 2 5
1 3 7 4
Pătratul exterior: (5,7,2,9,8,5,4,1,3,7,1,3,6,0,2,5) → max = 9.
8. Se citesc m,n (≤30), valoarea x și matricea. Să se afişeze indicii liniilor care conțin valoarea x cel puțin o dată.
Exemplu:
m=3, n=4, x=5, matricea:
2 3 5 5
1 2 4 6
5 0 7 8
Se afişează: 1 3.
9. Matrice binară (valori 0/1). Să se afişeze perechile de linii care memorează aceleaşi valori, nu neapărat în aceeaşi ordine (adică acelaşi număr de 0 și 1 pe linie).
Exemplu:
m=5, n=3:
1 1 0
1 0 1
0 0 1
0 1 1
1 0 0
Se afişează: (1, 2), (1, 4), (2, 4), (3, 5).
10. Matrice binară (0/1). Să se afişeze grupurile de linii care memorează aceleaşi valori (multiset egal).
Exemplu:
m=6, n=3:
1 1 0
1 0 1
0 0 1
0 1 1
1 0 0
1 1 1
Se afişează: (1, 2, 4), (3, 5), (6).
11. Matrice binară (0/1). Pentru fiecare linie considerată ca un număr în baza 2 (bitul din stânga este cel mai semnificativ), să se afişeze cea mai mare valoare zecimală obținută.
Exemplu:
m=5, n=3:
0 1 0 → 2
0 0 1 → 1
1 0 1 → 5
0 1 1 → 3
1 0 0 → 4
Se afişează: 5.
12. Matrice de întregi (m,n≤30). Să se stabilească dacă există elemente comune tuturor liniilor (intersecţia mulțimilor de pe linii).
Exemplu:
m=5, n=3:
0 1 2
5 0 1
6 0 1
0 1 1
1 9 0
Se afişează: 0 1.
13. Matrice de reale (m,n≤40). Să se afişeze câte linii au toate componentele strict pozitive.
Exemplu:
1.5 0.1
3.2 -1.0
0.3 2.7
Se afişează: 2 (liniile 1 și 3).
14. Matrice de reale (m,n≤40). Să se afişeze indicii liniilor ale căror elemente sunt ordonate crescător (strict sau larg crescător – precizați în rezolvare; implicit neasemenea: larg crescător).
Exemplu (larg crescător):
1 2 2 4 → OK
3 1 5 7 → NU
0 0 0 1 → OK
Se afişează: 1 3.
Prelucrarea coloanelor într-o matrice presupune aplicarea unor operații pe verticală, de-a lungul unui indice fix de coloană. Astfel, putem calcula sume, produse, valori minime sau maxime pentru fiecare coloană. În alte situații, putem verifica proprietăți specifice (de exemplu, dacă toate valorile dintr-o coloană sunt identice, dacă există zerouri sau dacă elementele sunt ordonate crescător). Acest tip de prelucrare este foarte frecvent întâlnit în problemele care implică organizarea și analiza datelor în structuri tabelare.
Enunț: Scrieţi un program care citeşte un tablou bidimensional cu m linii şi n coloane (m<=30, n<=30) care memorează numere întregi de cel mult patru cifre fiecare. Să se afişeze indicii coloanei/coloanelor care nu conţin zerouri.
Exemplu:
Pentru m=3, n=4 și tabloul:
1 2 0 4
3 5 6 7
8 9 1 2
Se vor afișa coloanele: 2, 4 (deoarece aceste coloane nu conțin elemente egale cu zero).
#include <iostream>
using namespace std;
int main() {
int m, n, a[31][31];
cin >> m >> n;
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
cin >> a[i][j];
for (int j = 0; j < n; j++) {
bool areZero = false;
for (int i = 0; i < m; i++) {
if (a[i][j] == 0) {
areZero = true;
break;
}
}
if (!areZero) {
cout << (j + 1) << " ";
}
}
return 0;
}
Enunț: Scrieţi un program care citeşte un tablou bidimensional cu m linii şi n coloane (m<=30, n<=30). Interschimbaţi coloanele tabloului astfel încât elementele de pe linia k să fie ordonate crescător.
Exemplu:
Pentru m=3, n=4, k=2 și tabloul:
7 3 5 9
4 1 8 2
6 0 7 3
Coloanele se rearanjează în funcție de linia a doua: 1,2,4,8 → ordonare crescătoare.
Matricea devine:
3 9 7 5
1 2 4 8
0 3 6 7
Enunț: Scrieţi un program care citeşte un tablou bidimensional și să se interschimbe valorile de pe coloana p cu valorile de pe coloana q.
Exemplu:
Pentru m=3, n=3, p=1, q=3 și tabloul:
1 2 3
4 5 6
7 8 9
Matricea devine:
3 2 1
6 5 4
9 8 7
Enunț: Scrieţi un program care afişează elementele din tablou egale cu suma celorlalte elemente de pe coloana lor.
Exemplu:
Pentru matricea:
2 3 1 5
1 8 7 2
1 5 3 3
Se afişează: 2, 5, 8
Enunț: Scrieţi un program care citeşte un tablou bidimensional cu m linii şi n coloane. Să se afişeze indicii coloanelor având produsul elementelor cu valoare maximă.
Exemplu:
Pentru m=3, n=3 și tabloul:
1 2 1
2 2 2
1 2 3
Produsul col.1 = 2, col.2 = 8, col.3 = 6 → se afişează: 2
Enunț: Să se afişeze indicii coloanelor cu valori identice pe întreaga coloană. Dacă nu există astfel de coloane se va afişa un mesaj.
Exemplu:
Pentru matricea:
2 1 9 2 1
2 3 2 2 1
2 1 1 2 1
Se afişează: 1, 4, 5
Enunț: Să se determine dacă elementele de pe coloana X sunt ordonate crescător.
Exemplu:
Pentru X=2 și matricea:
1 2 3
4 5 6
7 8 9
Coloana 2: 2, 5, 8 → răspuns: Da
Enunț: Să se ordoneze crescător elementele de pe coloana X.
Exemplu:
Pentru X=3 și matricea:
7 2 9
4 5 3
6 8 1
Coloana 3 devine ordonată: 1, 3, 9
Noua matrice:
7 2 1
4 5 3
6 8 9
Ștergerea unei linii dintr-o matrice presupune eliminarea tuturor elementelor aflate pe o anumită poziție de linie și rearanjarea matricei astfel încât să rămână compactă. Această operație este utilă atunci când anumite date nu mai sunt necesare (de exemplu linii cu zerouri, linii duplicate sau linii care îndeplinesc o anumită condiție). În implementarea practică, ștergerea se face prin deplasarea liniilor de sub linia eliminată cu o poziție în sus.
Enunț: Scrieţi un program care citeşte un tablou bidimensional cu m linii şi n coloane (m<=30, n<=30). Să se afişeze tabloul obţinut prin ștergerea liniei k.
Exemplu:
Pentru m=4, n=3, k=2 și tabloul:
1 2 3
4 5 6
7 8 9
0 1 2
Rezultatul este:
1 2 3
7 8 9
0 1 2
#include <iostream>
using namespace std;
int main() {
int m, n, k, a[31][31];
cin >> m >> n >> k;
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
cin >> a[i][j];
// Ștergere linia k (index de la 1 la m)
for (int i = k - 1; i < m - 1; i++)
for (int j = 0; j < n; j++)
a[i][j] = a[i + 1][j];
m--; // scădem numărul de linii
// Afișare matrice rezultat
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++)
cout << a[i][j] << " ";
cout << "\n";
}
return 0;
}
Enunț: Scrieţi un program care citeşte un tablou bidimensional cu m linii şi n coloane. Să se afişeze tabloul obţinut prin eliminarea elementelor de pe liniile impare.
Exemplu:
Pentru m=4, n=3 și tabloul:
1 2 3
4 5 6
7 8 9
0 1 2
Rezultatul este:
4 5 6
0 1 2
Enunț: Scrieţi un program care citeşte o matrice și să se afişeze tabloul obţinut prin ștergerea liniilor care conţin zerouri.
Exemplu:
Pentru matricea:
1 2 3
4 0 6
7 8 9
0 1 2
Rezultatul este:
1 2 3
7 8 9
Enunț: Scrieţi un program care afişează matricea obţinută prin ştergerea liniei şi coloanei care memorează valoarea minimă.
Exemplu:
Pentru matricea:
5 9 3
8 1 7
6 2 4
Valoarea minimă = 1 (linia 2, coloana 2). Rezultatul este:
5 3
6 4
Enunț: Scrieţi un program care citeşte o matrice și să se afişeze tabloul obţinut prin ștergerea liniilor care memorează dubluri.
Exemplu:
Pentru matricea:
1 2 3
4 4 6
7 8 9
5 5 5
Rezultatul este:
1 2 3
7 8 9
Enunț: Fie un tablou bidimensional cu m linii şi n coloane. Să se elimine liniile din matrice astfel încât să nu existe linii identice.
Exemplu:
Pentru m=5, n=2 şi matricea:
2 3
4 5
2 3
2 3
4 5
Rezultatul este:
2 3
4 5
Ștergerea unei coloane dintr-o matrice presupune eliminarea tuturor elementelor aflate pe o anumită poziție de coloană și rearanjarea matricei astfel încât să rămână compactă. Această operație este folosită frecvent atunci când dorim să eliminăm informații inutile sau coloane care îndeplinesc o anumită condiție (ex: conțin numere negative). Practic, ștergerea se face prin deplasarea coloanelor din dreapta coloanei eliminate cu o poziție spre stânga.
Enunț: Scrieţi un program care citeşte un tablou bidimensional cu m linii şi n coloane (m<=30, n<=30). Să se afişeze tabloul obţinut prin ștergerea coloanei k.
Exemplu:
Pentru m=3, n=4, k=2 și tabloul:
1 2 3 4
5 6 7 8
9 0 1 2
Rezultatul este:
1 3 4
5 7 8
9 1 2
#include <iostream>
using namespace std;
int main() {
int m, n, k, a[31][31];
cin >> m >> n >> k;
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
cin >> a[i][j];
// Ștergere coloana k (index de la 1 la n)
for (int i = 0; i < m; i++) {
for (int j = k - 1; j < n - 1; j++) {
a[i][j] = a[i][j + 1];
}
}
n--; // scădem numărul de coloane
// Afișare matrice rezultat
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++)
cout << a[i][j] << " ";
cout << "\n";
}
return 0;
}
Enunț: Scrieţi un program care afişează tabloul obţinut prin eliminarea elementelor de pe coloanele pare.
Exemplu:
Pentru matricea:
1 2 3 4
5 6 7 8
Rezultatul este:
1 3
5 7
Enunț: Scrieţi un program care afişează tabloul obţinut prin ștergerea coloanelor care conţin numere negative.
Exemplu:
Pentru matricea:
1 -2 3
4 5 -6
Rezultatul este:
1 3
4 5
Enunț: Scrieţi un program care elimină coloanele care au suma elementelor mai mică decât un număr întreg x citit.
Exemplu:
Pentru x=10 și matricea:
1 5 9
2 3 7
4 1 2
Sumele coloanelor: [7, 9, 18]. Se elimină primele două coloane. Rezultatul este:
9
7
2
Enunț: Scrieţi un program care elimină coloanele care memorează numai valori numerice formate dintr-o singură cifră.
Exemplu:
Pentru matricea:
1 12 9
3 45 7
8 67 2
Se elimină coloanele 1 și 3. Rezultatul este:
12
45
67
Enunț: Scrieţi un program care elimină coloana ce conţine cea mai mare valoare de pe prima linie. Dacă există mai multe valori maxime egale, se șterge coloana cu cel mai mic indice.
Exemplu:
Pentru matricea:
5 9 9 7
2 3 4 6
1 8 0 5
Valoarea maximă pe prima linie este 9 (coloanele 2 și 3). Se șterge coloana 2. Rezultatul este:
5 9 7
2 4 6
1 0 5
Problemele de generare presupun construirea unor matrice după reguli bine definite, de obicei pe baza unor șiruri numerice (numere naturale, numere pare, pătrate perfecte, șirul lui Fibonacci etc.). Acestea necesită observarea tiparelor și implementarea lor într-o formă algoritmică eficientă. Astfel de probleme sunt utile pentru dezvoltarea gândirii logice și pentru înțelegerea mai profundă a lucrului cu structurile bidimensionale.
Enunț: Se citesc două numere naturale n și m. Să se construiască o matrice cu numerele de la 1 la n×m, completate pe coloane.
Exemplu:
Pentru n=3, m=4 matricea este:
1 4 7 10
2 5 8 11
3 6 9 12
#include <iostream>
using namespace std;
int main() {
int n, m, val = 1;
cin >> n >> m;
int a[50][50];
for (int j = 0; j < m; j++) {
for (int i = 0; i < n; i++) {
a[i][j] = val;
val++;
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
Problemele din această categorie urmăresc rearanjarea elementelor unei matrice, fie prin sortare, fie prin inversare sau rotație. Este important să se păstreze structura matricei, dar ordinea elementelor să fie modificată conform cerinței. Se aplică adesea algoritmi de sortare, rotație sau rearanjare pe linii și coloane. Astfel de transformări sunt utile pentru organizarea datelor și pentru a evidenția diferite proprietăți ale matricei.
Se citește o matrice cu m linii și n coloane (m≤30, n≤30) care memorează numere întregi de cel mult patru cifre fiecare. Să se modifice ordinea elementelor astfel încât fiecare linie să fie ordonată crescător.
Exemplu:
Pentru m=3, n=4:
5 6 8 3 → 3 5 6 8
2 9 1 6 → 1 2 6 9
8 1 8 2 → 1 2 8 8
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int m, n, a[30][30];
cin >> m >> n;
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
cin >> a[i][j];
for(int i=0; i<m; i++)
sort(a[i], a[i] + n);
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++)
cout << a[i][j] << " ";
cout << endl;
}
return 0;
}
O matrice pătratică are două diagonale importante: diagonala principală (elementele cu indici egali, a[i][i]) și diagonala secundară (elementele cu indici complementari, a[i][n−i−1]). Prelucrarea lor presupune operații precum afișarea, sortarea, verificarea elementelor prime sau schimbul dintre diagonale. În multe probleme, diagonalele definesc și zone utile pentru calcule suplimentare.
Problema: Se citește o matrice pătratică de dimensiune n×n. Să se afișeze elementele de pe diagonala principală.
Exemplu:
Pentru n=3: 1 2 3 4 5 6 7 8 9 Diagonala principală: 1 5 9
Rezolvare C++:
#include <iostream>
using namespace std;
int main() {
int n, a[30][30];
cin >> n;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
cin >> a[i][j];
cout << "Diagonala principala: ";
for(int i=0; i<n; i++)
cout << a[i][i] << " ";
return 0;
}
Diagonalele unei matrice pătratice împart tabloul în patru zone: deasupra și sub diagonala principală, respectiv deasupra și sub diagonala secundară. În aceste regiuni putem calcula sume, produse, verifica parități sau genera valori. Este esențială identificarea corectă a indicilor pentru a include doar zona cerută și pentru a exclude diagonalele când problema o specifică.
Problema: Se citește o matrice pătratică de dimensiune n×n. Să se calculeze suma elementelor aflate strict sub diagonala principală.
Exemplu:
Pentru n=3: 1 2 3 4 5 6 7 8 9 Elemente sub DP: 4, 7, 8 Suma = 19
Rezolvare C++:
#include <iostream>
using namespace std;
int main() {
int n, a[30][30], suma = 0;
cin >> n;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
cin >> a[i][j];
for(int i=1; i<n; i++)
for(int j=0; j<i; j++)
suma += a[i][j];
cout << "Suma = " << suma;
return 0;
}