MeditatiiDirect.ro Logo
MeditatiiDirect.ro
Educație la un click distanță
MeditatiiMateriiAdmitereTutorialePregatire BACSubiecte BACVariante BACBlog
InformaticăliceuClasa 9mediu

Matrice în C++ - Parcurgere pe Linii, Coloane și Diagonale

Ghid complet pentru lucrul cu matrice în C++: declarare, citire, parcurgere pe linii, coloane, diagonale și zone speciale. Tutorial stil pbinfo.

3 luni în urmă
0 vizualizări
45 minute

Matrice în C++ - Parcurgere pe Linii, Coloane și Diagonale

Definiție

O matrice (sau tablou bidimensional) este o structură de date care organizează elementele pe linii și coloane, formând un tabel.

Notații:

  • •n = numărul de linii
  • •m = numărul de coloane
  • •a[i][j] = elementul de pe linia i, coloana j
  • •Indicii încep de la 0 (sau de la 1 în unele probleme)

Teorie

Declarare și Citire

1int a[100][100];  // Matrice de maxim 100x100
2int n, m;         // Dimensiunile efective

Zone Speciale (pentru matrice pătratică n×n)

  • •Diagonala principală: i == j
  • •Diagonala secundară: i + j == n - 1 (indexare de la 0) sau i + j == n + 1 (indexare de la 1)
  • •Deasupra diagonalei principale: i < j
  • •Sub diagonala principală: i > j

Exemple C++ Compilabile

Exemplul 1: Citirea și afișarea unei matrice

1#include <iostream>
2using namespace std;
3
4int main() {
5    int a[100][100];
6    int n, m;
7    
8    // Citirea dimensiunilor
9    cout << "Introduceti numarul de linii si coloane: ";
10    cin >> n >> m;
11    
12    // Citirea elementelor
13    cout << "Introduceti elementele matricei:" << endl;
14    for (int i = 0; i < n; i++) {
15        for (int j = 0; j < m; j++) {
16            cin >> a[i][j];
17        }
18    }
19    
20    // Afișarea matricei
21    cout << "Matricea este:" << endl;
22    for (int i = 0; i < n; i++) {
23        for (int j = 0; j < m; j++) {
24            cout << a[i][j] << " ";
25        }
26        cout << endl;
27    }
28    
29    return 0;
30}

Exemplul 2: Suma elementelor pe fiecare linie

1#include <iostream>
2using namespace std;
3
4int main() {
5    int a[100][100];
6    int n, m;
7    
8    cin >> n >> m;
9    for (int i = 0; i < n; i++)
10        for (int j = 0; j < m; j++)
11            cin >> a[i][j];
12    
13    // Calculăm suma pe fiecare linie
14    for (int i = 0; i < n; i++) {
15        int suma = 0;
16        for (int j = 0; j < m; j++) {
17            suma = suma + a[i][j];
18        }
19        cout << "Suma liniei " << i << " = " << suma << endl;
20    }
21    
22    return 0;
23}

Exemplul 3: Suma elementelor pe fiecare coloană

1#include <iostream>
2using namespace std;
3
4int main() {
5    int a[100][100];
6    int n, m;
7    
8    cin >> n >> m;
9    for (int i = 0; i < n; i++)
10        for (int j = 0; j < m; j++)
11            cin >> a[i][j];
12    
13    // Calculăm suma pe fiecare coloană
14    for (int j = 0; j < m; j++) {
15        int suma = 0;
16        for (int i = 0; i < n; i++) {
17            suma = suma + a[i][j];
18        }
19        cout << "Suma coloanei " << j << " = " << suma << endl;
20    }
21    
22    return 0;
23}

Exemplul 4: Diagonalele unei matrice pătratice

1#include <iostream>
2using namespace std;
3
4int main() {
5    int a[100][100];
6    int n;
7    
8    cin >> n;
9    for (int i = 0; i < n; i++)
10        for (int j = 0; j < n; j++)
11            cin >> a[i][j];
12    
13    // Diagonala principală (i == j)
14    cout << "Diagonala principala: ";
15    for (int i = 0; i < n; i++) {
16        cout << a[i][i] << " ";
17    }
18    cout << endl;
19    
20    // Diagonala secundară (i + j == n - 1)
21    cout << "Diagonala secundara: ";
22    for (int i = 0; i < n; i++) {
23        cout << a[i][n - 1 - i] << " ";
24    }
25    cout << endl;
26    
27    return 0;
28}

Exemplul 5: Elemente deasupra și sub diagonala principală

1#include <iostream>
2using namespace std;
3
4int main() {
5    int a[100][100];
6    int n;
7    
8    cin >> n;
9    for (int i = 0; i < n; i++)
10        for (int j = 0; j < n; j++)
11            cin >> a[i][j];
12    
13    // Deasupra diagonalei principale (i < j)
14    cout << "Deasupra diagonalei principale:" << endl;
15    for (int i = 0; i < n; i++) {
16        for (int j = 0; j < n; j++) {
17            if (i < j)
18                cout << a[i][j] << " ";
19        }
20    }
21    cout << endl;
22    
23    // Sub diagonala principală (i > j)
24    cout << "Sub diagonala principala:" << endl;
25    for (int i = 0; i < n; i++) {
26        for (int j = 0; j < n; j++) {
27            if (i > j)
28                cout << a[i][j] << " ";
29        }
30    }
31    cout << endl;
32    
33    return 0;
34}

Exemplul 6: Bordarea unei matrice

1#include <iostream>
2using namespace std;
3
4int main() {
5    int a[100][100];
6    int n, m;
7    
8    cin >> n >> m;
9    for (int i = 0; i < n; i++)
10        for (int j = 0; j < m; j++)
11            cin >> a[i][j];
12    
13    // Prima și ultima linie (bordura orizontală)
14    int suma_bordura = 0;
15    for (int j = 0; j < m; j++) {
16        suma_bordura = suma_bordura + a[0][j];      // Prima linie
17        suma_bordura = suma_bordura + a[n-1][j];    // Ultima linie
18    }
19    
20    // Prima și ultima coloană (fără colțuri, deja numărate)
21    for (int i = 1; i < n - 1; i++) {
22        suma_bordura = suma_bordura + a[i][0];      // Prima coloană
23        suma_bordura = suma_bordura + a[i][m-1];    // Ultima coloană
24    }
25    
26    cout << "Suma bordurii: " << suma_bordura << endl;
27    
28    return 0;
29}

Exemplul 7: Transpusa unei matrice

1#include <iostream>
2using namespace std;
3
4int main() {
5    int a[100][100], t[100][100];
6    int n, m;
7    
8    cin >> n >> m;
9    for (int i = 0; i < n; i++)
10        for (int j = 0; j < m; j++)
11            cin >> a[i][j];
12    
13    // Calculăm transpusa
14    for (int i = 0; i < n; i++) {
15        for (int j = 0; j < m; j++) {
16            t[j][i] = a[i][j];
17        }
18    }
19    
20    // Afișăm transpusa (are m linii și n coloane)
21    cout << "Transpusa:" << endl;
22    for (int i = 0; i < m; i++) {
23        for (int j = 0; j < n; j++) {
24            cout << t[i][j] << " ";
25        }
26        cout << endl;
27    }
28    
29    return 0;
30}

Greșeli Frecvente

1. Confuzia între linii și coloane

1// GREȘIT - parcurgem liniile cu j și coloanele cu i
2for (int j = 0; j < n; j++)
3    for (int i = 0; i < m; i++)
4        cin >> a[j][i];  // Confuz!
5
6// CORECT - convenția: i pentru linii, j pentru coloane
7for (int i = 0; i < n; i++)
8    for (int j = 0; j < m; j++)
9        cin >> a[i][j];

2. Greșeala la diagonala secundară

1// Pentru indexare de la 0:
2// Diagonala secundară: i + j == n - 1
3
4// GREȘIT
5a[i][n - i]  // Depășește limita când i = 0
6
7// CORECT
8a[i][n - 1 - i]

3. Dimensiuni greșite pentru transpusă

1// Dacă a are n linii și m coloane,
2// transpusa are m linii și n coloane!

Exerciții Tip PBInfo

Exercițiul 1 - Suma elementelor pare

Să se calculeze suma elementelor pare din matrice.

Exercițiul 2 - Maximul pe diagonala principală

Să se afle elementul maxim de pe diagonala principală.

Exercițiul 3 - Matrice simetrică

Să se verifice dacă o matrice pătratică este simetrică față de diagonala principală.

Exercițiul 4 - Zona Nord

Să se afișeze suma elementelor din "zona Nord" (triunghiul de deasupra ambelor diagonale).

Exercițiul 5 - Rotire 90°

Să se rotească o matrice pătratică cu 90° în sensul acelor de ceasornic.

Tutorialul te-a ajutat?

Dacă ai nevoie de ajutor personalizat, găsește un profesor calificat pentru meditații

MeditatiiDirect.ro Logo
MeditatiiDirect.ro

Platforma educationala din Romania pentru meditatii particulare. Profesori verificati, recenzii reale, inscriere gratuita.

Cauta sau publica anunturi gratuit pentru toate materiile scolare.

Meditatii

  • Meditatii
  • Meditatii Matematica
  • Meditatii Informatica
  • Meditatii Romana
  • Meditatii Engleza
  • Anunturi Meditatii
  • Meditatii Online
  • Ore Online
  • Meditatii BAC
  • Meditatii Bucuresti
  • Meditatii Cluj-Napoca
  • Meditatii Timisoara
  • Meditatii Iasi
  • Meditatii Fizica
  • Meditatii Chimie
  • Meditatii Biologie

Materii Populare

  • Matematică
  • Limba Română
  • Limba Engleză
  • Informatică
  • Fizică
  • Toate Materiile →

Platforma

  • Cum functioneaza
  • Pentru elevi si parinti
  • Pentru profesori
  • Intrebari frecvente
  • Despre noi
  • Publica anunt gratuit

Resurse

  • Profesor Particular
  • Pregatire BAC
  • Admitere Facultate
  • Universitati Romania
  • Facultati Medicina
  • Facultati Informatica
  • Facultati Politehnica
  • Facultati Drept
  • Facultati Economice
  • Facultati Psihologie
  • Grile UPB
  • Grile Medicina
  • Grile Auto 2026
  • Variante BAC 2026
  • Simulare BAC 2026
  • Subiecte BAC
  • Subiecte Admitere
  • Titularizare 2025
  • Tutoriale
  • Blog educational
  • Ore Online
  • Profesori Online
  • Contact

MeditatiiDirect.ro este o platforma educationala din Romania unde gasesti meditatii si profesori particulari verificati pentru matematica, limba romana, engleza, informatica, fizica, chimie si alte materii. Disponibil in Bucuresti, Cluj-Napoca, Timisoara, Iasi si toata Romania, inclusiv meditatii online. Publica sau gaseste anunturi meditatii gratuit, programeaza ore online cu profesori verificati, cauta un profesor particular sau incepe meditatii BAC si admiterea la facultate.

© 2026 MeditatiiDirect. Toate drepturile rezervate.