Sari la conținut

Capitolul 8 · Lecția 8.1 din 2

Tablouri bidimensionale (matrice)

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

Capitolul 8: Tablouri bidimensionaleConținut verificat

Pe scurt pentru BAC · 5 idei

  • 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=ji = j, deasupra ei i<ji < j, iar sub ea i>ji > 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.
Pe această pagină5 secțiuni

Declarare și citire

Citirea unei matrice

#include <iostream>
using namespace std;

int main() {
    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];
    cout << a[0][0] << " " << a[n - 1][m - 1];
    return 0;
}

Atenție: In Pascal elementul se scrie a[i, j], cu virgula intre indici; in C, C++ si Python se scrie a[i][j].

se trimit programului la citire

Primul indice = LINIA, al doilea = COLOANA.

Diagonalele (matrice pătratică n×n)

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

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

Suma diagonalei principale:

Suma diagonalei principale

#include <iostream>
using namespace std;

int main() {
    int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, n = 3;
    int s = 0;
    for (int i = 0; i < n; i++)
        s += a[i][i];
    cout << s;
    return 0;
}

Atenție: Pe diagonala principala indicele de linie e egal cu cel de coloana. Pe diagonala secundara suma lor e constanta.

se trimit programului la citire

Prelucrări clasice

Suma pe fiecare linie:

Suma pe fiecare linie

#include <iostream>
using namespace std;

int main() {
    int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, n = 3, m = 3;
    for (int i = 0; i < n; i++) {
        int s = 0;
        for (int j = 0; j < m; j++) s += a[i][j];
        cout << s << " ";
    }
    return 0;
}

Atenție: Suma se pune pe zero inaintea fiecarei linii, nu o singura data la inceput. Altfel s-ar aduna toate liniile la un loc.

se trimit programului la citire

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 (123456789)\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.

Reține

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.

Instrumente pentru lecția asta

Parcurgerea matricei

Pe linii, pe coloane, diagonalele și bordarea, animate celulă cu celulă, cu codul C++ corespunzător fiecărei parcurgeri.

Se încarcă instrumentul…

Bifează când ai terminat, ca s-o vezi citită pe toate dispozitivele.

Testează-te pe capitolul 8

Lecția în clipuri

Clipuri scurte, cu voce și subtitrări.

Folosim cookie-uri esențiale, fără de care site-ul nu merge, și cookie-uri de analiză anonimizate, ca să vedem ce pagini ajută. Detalii în politica de confidențialitate