Tablouri bidimensionale – Matrici

Become a Patron!

O matrice este o forma de organziare a datelor de acelasi tip. O matrice reprezinta un tablou bidimensional in care sunt stocate date de acelasi tip. Elementele dintr-o matrice pot fi identificate dupa linia si coloana pe care se afla.

Se numeste matrice cu m linii si n coloane, un tablou cu m linii si n coloane.

Pentru m=4 si n=3 se obtine o matrice cu 4 linii si 3 coloane, spre exemplu:

In exemplul dat, numarul 35 se afla pe linia 1, coloana 1, pe cand 13 se afla pe linia 3, coloana 2. Am considerat numerotarea liniilor si coloanelor incepand de la 1. Daca matricea se va citi, luand doi contori ( i si j) cu valori de la 0 la m – 1 (pentru m linii), respectiv de la 0 la n – 1 (pentrul n coloane), atunci 35 se va afla pe linia 0 si coloana 0.

In limbajul C++ declararea unei matrici se realizeaza prin specificarea tipului elementelor din matricii, indentificatorul matricii, urmat apoi de dimensiunea acesteia (numarul de linii si de coloane) intre paranteze drepte.

Spre exemplu:

  • int A[4][3]; (declara o matrice de 4 linii si 3 coloane continand numere intregi)
  • float B[5][10]; (declara o matrice de 5 linii si 10 coloane continand numere reale)
  • char C[20][12]; (declara o matrice de 20 de linii si 12 coloane continand caractere alfanumerice)

Observatie: Numerotarea liniilor si coloanelor unei matrici incepe de la valoarea 0. Astfel, prima linie si prima coloana a matricii este linia si coloana 0, a doua coloana este 1, etc. 

Observatie: Putem numerota liniile si coloanele de la 1, in acest caz, pentru a nu avea probleme de memorie, declaram matricea cu un numar in plus de linii si coloane. Astfel, daca vrem sa salvam o matrice cu 3 linii si 4 coloane, incepand numerotarea de la 1, vom scrie m[4][5] in loc de m[3][4].

Mai jos putem vedea citirea si afisare unei matrici salvata cu numerotoarea incepand de la 1.

Exemplu:

Matricile au un caz particular, atunci cand numarul de linii este egal cu numarul de coloane, acele matrici numindu-se matrici patratice.

Spor la lucru! Daca aveti intrebari nu ezitati sa le lasati in comentarii, va vom raspunde cat de repede putem 🙂

5 Comments

  1. Salut ! Legat de declararea matricelor : int a[n][m] se numeroteaza de la 0 astfel : a[0][0]…a[n-1][m-1] , iar in cazul numerotarii de la 1 : a[1][1]..a[n][m]. in niciun caz in cazul numerotarii de la 0 nu vom duce numarul de linii si coloane pana la n , respectiv m ,ci il vom duce pana la n-1 , respectiv m-1 .
    Sper ca se va lua in considerare observatia .

    8

    Reply

    1. Salut! Multumim pentru observatia facuta. Intr-adevar, in cazul pornirii numerotarii de la 0, ducem contorul pana la n-1.

      4

      Reply

  2. Salut!
    Am o matrice patratica cu elemente de la 1 la n*n cu elementele puse in ordinea liniarizarii matricei:
    1 2 3 4
    5 6 7 8
    9 10 11 12
    13 14 15 16
    Cum pot, de exemplu, sa ii determin pozitia lui 9 (adica, da, este mat[3][1], dar in program cum as face?

    1

    Reply

    1. Salut! Daca ai matricea deja construita si vrei sa afli pozitia unui termen, o cautare prin ea, cu 2 for-uri imbricate si un if prin care verifici daca elementul de pe pozitia [i][j] este elementul dorit, ar fi de ajuns (Vezi exemplul 1 de mai jos). Daca, in schimb vrei o formula exacta, ar veni cam asa. Sa zicem ca x e numarul pe care il cauti. Atunci
      in matrice s-ar gasi pe pozitia: mat[(x – 1) / n + 1)][(x – 1) % n + 1]. Multumim de comentariu. Zi faina.
      Ex1:
      for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { if (mat[i][j] == x) { cout << i << " " << j; break; } }

      3

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *