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
