Sunteți pe pagina 1din 3

Declararea matricelor în C++

Declararea unei matrice constă în specificarea celor două dimensiuni: numărul maxim de linii și numărul maxim de
coloane.

tip nume[numarLinii][numarColoane];

Spre exemlu, o matrice de numere cu 3 linii și 4 coloane se declară astfel:

int a[3][4];

Și poate fi reprezentată așa (elementele sunt alese aleatoriu):

Observații

Observăm următoarele lucruri:

 Matricea de mai sus are 3 * 4 = 12 elemente; o matrice cu n linii și m coloane are n * m elemente;
 Practic, o matrice este un vector de vectori;
 Liniile sunt indexate (numerotate) de la 0 la 2. Coloanele sunt indexate de la 0 la 3; cu toate acestea, ca la vectori,
putem să numerotăm indicii de la 1 în loc de 0, nelucrând cu elementele de pe linia/coloana 0.
 Liniile sunt de sus în jos, iar coloanele sunt de la stânga la dreapta;
 Memoria unei matrici crește exponențial: o matrice 1000 * 1000 este de 100 de ori mai mare decât una de 100 *
100.

Cum se salvează matricele în memorie

Ca un fun fact pentru cei interesați, cum în memorie nu există noțiunea de 2D (adică toate informațiile din memorie sunt
consecutive, una după alta), o matrice cu n linii și m coloane se salvează ca o înșiruire de n * m elemente. Așadar, în
anumite medii de programare, apelând elementul de pe linia 0, coloana m, o să obținem elementul de pe linia 1, coloana 0
(deoarece matricea are coloane de la 0 la m - 1, coloana m este practic următorul element, adică de pe linia următoare și
coloana 0).

Spre exemplu, matricea de mai sus se reprezintă în memorie astfel: 1, 3, 6, 2, 2, 4, 12, 44, 0, 3, 5, 7.
Accesarea elementelor din matrice
Cum probabil ați intuit, pentru accesarea elementului de pe linia i și coloana j a unei matrici a, apelăm a[i][j]. Spre
exemplu, în matricea de mai sus, a[0][2] = 6.

Parcurgerea unei matrice în C++


Parcurgerea unei matrice poate părea un pic mai greu de înțeles. Când vorbim de parcurgerea unei matrice, vrem să
parcurgem elementele sale linie cu linie, de sus în jos și de la stânga la dreapta — exact cum se afișează pixelii pe un
televizor

Pentru a face acest lucru, vom folosi două structuri repetitive for imbricate (una în alta): prima după i, iar a doua după j.
Cea din afară (după i) va parcurge, pe rând, liniile matricei, de la 0 la n - 1. Pentru fiecare linie în parte, vom parcurge
elementele de la stânga la dreapta (de la 0 la m - 1) folosind al doilea for (care este după j). Astfel, reușim să parcurgem
toate elementele matricei cu ușurință.

Indexare de la 0

#include <iostream>

using namespace std;

int n, m, a[101][101]; //n = nr linii, m = nr coloane, a = matricea

int main()
{
cin >> n >> m; //Citim numărul de linii și de coloane

//Parcurgem matricea exact cum am explicat anterior


for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
a[i][j] = 1;
}
}
return 0;
}

Indexare de la 1

Indexarea de la 1 înseamnă să numerotăm elementele matrice

de la 1 la n și de la 1 la m, în loc să numerotăm de la 0 la n - 1 și de la 0 la m - 1. De multe ori se preferă indexarea de la


1 (vom vedea mai târziu de ce), dar din această cauză vom folosi indexarea de la 1 de acum înainte. Să vedem cum se
parcurge o matrice indexată de la 1:

#include <iostream>

using namespace std;

int n, m, a[101][101]; //n = nr linii, m = nr coloane, a = matricea

int main()
{
cin >> n >> m; //Citim numărul de linii și de coloane

//Parcurgem matricea exact cum am explicat anterior


for(int i = 1; i <= n; i++) { //1 - n
for(int j = 1; j <= m; j++) { //1 - m
a[i][j] = 1;
}
}
return 0;
}

Citirea și afișarea unei matrici


Citirea unui tablou bidimensional

Citirea matricei folosește parcurgerea de mai devreme pentru a lua elementele pe rând și a le citi de la tastatură. Iată un
exemplu:

cin >> n >> m; //Citim dimensiunile matricei

//Citim matricea, parcurgem cum am învățat anterior


for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
cin >> a[i][j];

Afișarea unui tablou bidimensional

Afișarea unui tablou este similară, însă după ce afișăm fiecare linie în parte, trebuie să afișăm un endl pentru a trece la
următoarea linie.

//Afișăm matricea, parcurgem cum am învățat anterior


for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++)
cout << a[i][j] << " ";
cout << endl;
}

Exemplu

Iată un cod în C++ care citește de la tastatură o matrice și o afișează pe ecran:

#include <iostream>

using namespace std;

int n, m, a[101][101]; //n = nr linii, m = nr coloane, a = matricea

int main()
{
cin >> n >> m; //Citim numărul de linii și de coloane

//Citim matricea
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
cin >> a[i][j];
}
}

//Afișăm matricea
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
cout << a[i][j] << " ";
}
cout << "\n";
}
return 0;
}

S-ar putea să vă placă și