# Tablouri bidimensionale (matrice)

> Pagina: https://bacalaurescu.ro/informatica/lectii/tablouri-bidimensionale/matrice-in-cpp
> Markdown: https://bacalaurescu.ro/informatica/lectii/tablouri-bidimensionale/matrice-in-cpp.md
> Sursa: Bacalaurescu (bacalaurescu.ro), conținut gratuit pentru BAC 2027.

Materia: [Informatică](https://bacalaurescu.ro/informatica)

Capitolul: [Tablouri bidimensionale](https://bacalaurescu.ro/informatica/lectii/tablouri-bidimensionale)
Actualizat: 2026-11-01

Declararea, parcurgerea, diagonalele și prelucrările clasice de matrice la BAC.

## Pe scurt pentru BAC

- Matricea se citește cu două bucle imbricate: `i` de la 0 cât timp `i < n` pentru linii, iar `j` de la 0 cât timp `j < m` pentru coloane.
- Într-o matrice pătratică, diagonala principală are elementele cu $i = j$, deasupra ei $i < j$, iar sub ea $i > j$.
- Suma diagonalei principale se calculează cu o singură buclă, adunând `a[i][i]`.
- Transpusa se obține cu `t[j][i] = a[i][j]`, adică liniile devin coloane.
- Maximul din matrice se inițializează cu `a[0][0]` și se compară cu toate elementele.

## Declarare și citire

```cpp
int a[25][25], n, m;
cin >> n >> m;
for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
        cin >> a[i][j];
```

Primul indice = LINIA, al doilea = COLOANA.

## Diagonalele (matrice pătratică n×n)

1. **Diagonala principală**: elementele cu $i = j$.
2. **Diagonala secundară**: elementele cu $i + j = n - 1$ (indexare de la 0).

Zonele față de diagonala principală: deasupra $i < j$, sub ea $i > j$.

**Suma diagonalei principale:**

```cpp
int s = 0;
for (int i = 0; i < n; i++)
    s += a[i][i];
```

## Prelucrări clasice

**Suma pe fiecare linie:**

```cpp
for (int i = 0; i < n; i++) {
    int s = 0;
    for (int j = 0; j < m; j++) s += a[i][j];
    cout << s << "\n";
}
```

**Maximul din matrice:** inițializezi cu `a[0][0]` și compari cu toate.

**Transpusa:** `t[j][i] = a[i][j]` (liniile devin coloane).

## Exemplu de urmărire

Pentru matricea $\begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{pmatrix}$: diagonala principală este 1, 5, 9 (suma 15); diagonala secundară este 3, 5, 7 (suma 15); suma liniei 0 este 6.

> [!RETINE]
> Indexarea C++ începe de la 0: ultimul element e a[n-1][m-1], iar diagonala secundară e i + j = n - 1. Subiectele în pseudocod pot indexa de la 1: acolo diagonala secundară e i + j = n + 1.

## Greșeli frecvente

1. Inversarea indicilor: a[i][j] e linia i, coloana j, nu invers.
2. La matrice NEpătratice nu există diagonale: cerințele cu diagonale presupun n = m.
3. La parcurgerea pe coloane, bucla exterioară e j, cea interioară i.
