Matricea pătratică
O matrice pătratică este un tablou bidimensional care are același număr de linii și de coloane.
O matrice cu n linii și n coloane se numește matrice de ordin n. Pentru că forma ei este „un pătrat”, matricea pătratică are o particularitate pe care celelalte matrice nu o au: două diagonale. Acestea apar des în problemele de Bacalaureat, așa că merită înțelese bine, împreună cu relațiile dintre indicii de linie și de coloană.
Diagonala principală
Diagonala principală este formată din elementele aflate pe direcția colțului de sus-stânga spre cel de jos-dreapta. Pe această diagonală, indicele de linie este egal cu indicele de coloană, adică elementele de forma a[i][i] (unde ).
Pentru a parcurge diagonala principală a unei matrice de ordin n este suficientă o singură buclă:
for (int i = 0; i < n; i++)
cout << a[i][i] << ' ';
Diagonala principală împarte matricea în două zone triunghiulare:
- deasupra diagonalei se află elementele pentru care coloana este mai mare decât linia ();
- dedesubtul ei, cele pentru care coloana este mai mică decât linia ().
Le putem afișa adaptând limitele buclei interioare. De exemplu, elementele de deasupra diagonalei principale:
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++)
cout << a[i][j] << ' ';
cout << '\n';
}
iar cele de sub diagonala principală:
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++)
cout << a[i][j] << ' ';
cout << '\n';
}
Diferența dintre cele două bucle stă doar în limitele lui j: pornim de la i + 1 pentru zona de deasupra (), respectiv ne oprim înainte de i pentru zona de dedesubt ().
Diagonala secundară
Diagonala secundară merge invers, de la colțul de sus-dreapta spre cel de jos-stânga. Aici, suma indicilor de linie și coloană este constantă și egală cu n-1, deci elementele au forma a[i][n-1-i] (unde ).
Parcurgerea diagonalei secundare se face tot cu o singură buclă:
for (int i = 0; i < n; i++)
cout << a[i][n - 1 - i] << ' ';
Și diagonala secundară împarte matricea în două zone:
- deasupra ei se află elementele pentru care suma indicilor este mai mică decât
n-1(); - dedesubt, cele pentru care suma indicilor este mai mare decât
n-1().
Elementele de deasupra diagonalei secundare se afișează astfel:
for (int i = 0; i < n; i++) {
for (int j = 0; j < n - 1 - i; j++)
cout << a[i][j] << ' ';
cout << '\n';
}
iar cele de sub diagonala secundară:
for (int i = 0; i < n; i++) {
for (int j = n - i; j < n; j++)
cout << a[i][j] << ' ';
cout << '\n';
}
Și aici totul se reduce la relația dintre i și j: comparând suma i + j cu n - 1, știm exact în ce zonă a matricei ne aflăm.
Concluzii
Matricea pătratică, cu cele n linii și n coloane ale ei, introduce noțiunile de diagonală principală () și diagonală secundară (). Odată ce reții aceste două relații simple dintre indici, poți parcurge cu ușurință oricare dintre diagonale și zonele triunghiulare determinate de ele, un instrument esențial în multe probleme cu matrice. Matricele pătratice revin, de altfel, și mai târziu, de exemplu în reprezentarea grafurilor prin matricea de adiacență.