TABLOURI BIDIMENSIONALE(MATRICE)
Declararea matricelor. Referirea elementelor
tipDeBază denumire[NumarLinii][NumarColoane];
de exemplu:
int A[5][10];
Mai sus s-a declarat un tablou bidimensional (o matrice) cu 5 linii și 10 coloane. Ni-l putem
imagina astfel (valorile sunt aleatorii):
Matricea are:
5 • 10 = 50 de elemente;
5 linii, indexate (numerotate) de la 0 la 4 – mai jos sunt evidențiate liniile cu
indici 1 și 3;
10 coloane, indexate de la 0 la 9 – mai jos sunt evidențiate coloanele cu
indici 0, 4 și 9;
Referirea elementelor se face prin intermediul operatorului C++ de indexare [], la fel ca
în cazul vectorilor, dar trebuie precizați doi indici – cel de linie și cel de coloană.
Astfel, A[2][4] reprezintă elementul matricei aflat pe linia 2 și pe coloana 4 – la
intersecția dintre linia 2 și coloana 4. Astfel primul indice al unui element este cel de linie,
iar al doilea indice este cel de coloană.
Exemple:
Dimensiunile unei matrice
La fel ca în cazul tablourilor unidimensionale, și tablourile bidimensionale au două categorii
de dimensiuni:
dimensiunile fizice, maxime – numărul maxim de linii, respectiv coloane pe care le
poate avea tabloul; de regula se precizează în enunțul problemei
dimensiunile logice, curente – numărul de linii linii și de coloane pe care le are
matricea la un moment dat, pe parcursul execuției programului. Nu pot să
depășească dimensiunile fizice.
Exemplu
int A[100][100], n , m;
Parcurgerea matricei
Parcurgerea presupune accesarea elementelor curente ale matricei, într-o anumită ordine
– de regulă aceasta se face pe linii, de sus în jos și de la stânga la dreapta:
int n, m, A[100][100];
...
for(int i = 0 ; i < n ; i ++)
{
// linia i
for(int j = 0 ; j < m ; j ++)
// A[i][j]
// .....
}
Parcurgerea unei linii
Toate elementele de pe o anumită linie au același indice de linie și diferă prin indicele de
coloană. Pentru a parcurge o anumită linie k, vom parcurge indici de coloană:
for(int j = 0 ; j < m ; j ++)
{
// A[k][j]
}
Parcurgerea unei coloane
Toate elementele de pe o anumită coloană au același indice de coloană și diferă prin
indicele de linie. Pentru a parcurge o anumită coloană k, vom parcurge indici de linie:
for(int i = 0 ; i < n ; i ++)
{
// A[i][k]
}
Citirea unei matrice
De regulă, elementele matricei se dau în ordine: de sus în jos și de la stânga la dreapta.
Citirea presupune nu doar citirea elementelor matricei, dar și citirea dimensiunilor n și m:
cin >> n >> m;
for(int i = 0 ; i < n ; i ++)
for(int j = 0 ; j < m ; j ++)
cin >> A[i][j];
Afișarea unei matrice
Pentru a obține aspectul specific tabloului bidimensional, după afișarea elementelor de
fiecare linie vom trece la linia următoare a ecranului. Elementele fiecărei linii sunt de regulă
separate printr-un spațiu:
for(int i = 0 ; i < n ; i ++)
{
for(int j = 0 ; j < m ; j ++)
cout << A[i][j] << " ";
cout << "\n";
}
Tablouri patratice
Un tablou bidimensional este tablou pătratic sau matrice pătratică dacă numărul de linii
este egal cu numărul de coloane.
În această situație folosim pentru ambele dimensiuni o singură variabilă, de regulă n:
int n, A[100][100];
Într-o matrice pătratică se disting o categorie specială de elemente, diagonalele. Un
element al matricei aparține sau nu diagonalelor sau zonelor delimitate de acestea dacă
respectă anumite reguli, în care intervin indicii elementului, nu valoarea elementului. În
cele ce urmează, pentru un element oarecare al matricei vom nota cu i indicele de linie și
cu j indicele de coloană.
Diagonala principală
i = j
Parcurgerea elementelor de pe diagonala principală:
for(int i = 0 ; i < n ; i ++)
{
// A[i][i]
}
Diagonala secundară
Indexare de la 0 Indexare de la 1
i + j = n - 1 i + j = n + 1
Parcurgerea elementelor de pe diagonala secundară:
//indexare de la 0
for(int i = 0 ; i < n ; i ++)
{
// A[i][n - 1 - i]
}
//indexare de la 1
for(int i = 1 ; i <= n ; i ++)
{
// A[i][n + 1 - i]
}
Observație: Dacă n este impar, cele două diagonale au un element comun. Dacă n este
par, cele două diagonale nu au elemente comune.