162074 afișări Candale Silviu (silviu) 15 mar www.pbinfo.ro
Etichete: nicio etichetă

Declararea tablourilor bidimensionale (matrice) face în C/C++ similar cu a tablourilor unidimensionale, dar trebuie precizate două dimensiuni fizice, maximale: numărul maxim de linii și numărul maxim de coloane ale matricei:

tipDeBază denumire[NumarLinii][NumarColoane];

de exemplu:

int A[5][10];

Mai sus s-a declarat un tablou bidimensional (o matrice) cu 5 linii și 10 coloane. Ni-l putem imagina astfel (valorile sunt aleatorii):

Matricea are:

  • 5 • 10 = 50 de elemente;
  • 5 linii, indexate (numerotate) de la 0 la 4 – mai jos sunt evidențiate liniile cu indici 1 și 3;
  • 10 coloane, indexate de la 0 la 9 – mai jos sunt evidențiate coloanele cu indici 0, 4 și 9;

Referirea elementelor se face prin intermediul operatorului C++ de indexare [], la fel ca în cazul vectorilor, dar trebuie precizați doi indici – cel de linie și cel de coloană. Astfel, A[2][4] reprezintă elementul matricei aflat pe linia 2 și pe coloana 4 – la intersecția dintre linia 2 și coloana 4. Astfel primul indice al unui element este cel de linie, iar al doilea indice este cel de coloană.

Exemple:

Observație: Cade în sarcina programatorului (adică tu!) să se asigure că valorile indicilor folosiți în expresiile de indexare fac parte din intervalul corect, conform declarării tabloului. Dacă valorile indicilor nu sunt corecte, comportamentul programului este impredictibil: rezultatele obținute vor fi eronate sau se vor produce erori la execuția programului. Aceste erori la execuție sunt de regulă semnalate pe pbinfo cu mesajul Killed by signal 11 sau Caught fatal signal 11.

De exemplu, pentru matricea de mai sus, expresiile A[-1][7], A[2][20], A[7][7], A[7][30] sunt greșite. Rezultatele (efectele) sunt impredictibile.

Legătura dintre matrice și tablourile unidimensionale în C/C++

Ne putem gândi la un tablou bidimensional în două moduri:

  • A este o matrice;
  • A are linii și coloane. A[1][9] este elementul aflat pe linia 1 și coloana 9;

sau:

  • A este un vector; elementele lui A sunt vectori;
  • A[1] este un vector – reprezintă o linie din matricea A;
  • A[1][9] este un element al vectorului A[1], de tip int

Câtă memorie ocupă un tablou bidimensional?

După cum ați observat deja, toate problemele de pe pbinfo și toate problemele date în concursuri au precizate o serie de restricții, printre care limita maximă de memorie care poate fi folosită. Apare firesc întrebarea: cât de mare poate fi o matrice sau, mai degrabă, câtă memorie ocupă o matrice?

Răspunsul diferă în funcție de doi factori:

  • tipul elementelor matricei;
  • dimensiunile precizate la declarare;

De exemplu, pentru următoarea declarare:

int A[1000][1000];

matricea A are 1000 * 1000 = 1000000 de elemente de tip int. O dată de tip int se reprezintă pe (ocupă) 4B, deci matricea A va ocupa 4 * 1000 * 1000 B = 4.000.000B, adică ceva mai puțin de 4MB.


162074 afișări Candale Silviu (silviu) 15 mar www.pbinfo.ro