Tablouri bidimensionale – matrice C/C++

Intr-un tutorial anterior am invatat ce sunt tablourile unidimensionale, adica tablourile cu o singura dimensiune. De aceasta data, tragem un ochi si pe aceste tablouri bidimensionale (2 dimensiuni) sau, forma des folosita, matrice.

Cum arata o matrice?

Matrice, tablou bidimensional

Matricea reprezentata mai sus este de forma A[i][j], i reprezentand linia si j coloana. Cu acesti indici (i si j) putem afla pozitia unui anumit element in matricea noastra. Spre exemplu, daca luam desenul anterior, A[1][1] este reprezentat de elementul 1, aflandu-se pe linia 1 si coloana 1. Majoritatea programatorilor pornesc cu i = 0 si j = 0, ceea ce este si recomandat. Insa, pentru inceput, pentru a te obisnui cu acesta tablouri bidimensionale, este bine sa pornesti cu i = 1, reprezentand linia 1 si j = 1, reprezentand coloana 1.


Citirea unei matrice

Citirea unei matrice se realizeaza citind elementele matricei, linie cu linie. Sa consideram ca exemplu o matrice a cu n linii si m coloane, cu elemente de tip int.


Afisarea unei matrice

Afisarea unei matrice se realizeaza afisand elementele matricei, linie cu linie:


Parcurgerea unei matrice pe linii

Unele probleme impun parcurgerea unei matrice linie cu linie si prelucrarea separata a elementelor de pe fiecare linie in parte. De exemplu, sa calculam suma elementelor de pe fiecare linie a unei matrice:


Parcurgerea unei matrice pe coloane

Ca si la exemplul anterior, unele probleme impun parcurgerea matricei pe coloane. Haideti sa calculam, de aceasta data, suma elementelor de pe fiecare coloana.

Observatie: Am plecat prima data cu o structura repetitiva cu j = 1 (adica coloana 1) si in al doilea for, ne-am plimbat pe fiecare linie de pe coloana j.


Parcurgerea diagonalelor

O matrica patratica (numarul de linii = numarul de coloane) are doua diagonale: diagonala principala (care uneste primul element al matricei a[i][i], cu ultimul, a[n][n]) si diagonala secundara (uneste ultimul element de pe prima linie a[1][n] cu primul element de pe ultima linie a[n][1]).

Diagonalele matricei

Pentru a determina diagonalele, ne folosim de urmatoarele conditii:

  • i == j -> Elementele de pe diagonala principala
  • i + j == n+1 -> Elementele de pe diagonala secundara (daca plecam cu i = 1 si j = 1).
  • i + j == n – 1 -> Elementele de pe diagonala secundara (daca plecam cu i = 0 si j = 0

Astfel, daca vrem sa facem suma elementelor aflate pe diagonala secundara:

Sau suma elementelor aflate pe diagonala principala:

sau


Parcurgerea elementelor de langa diagonale

Reprezentare matrice

Pentru n = 4, avem reprezentata matricea A de mai sus, alaturi de indicii de pozitie (cifrele rosii). Cu dunga rosie avem reprezentata diagonala secundara, iar cu verde cea principala. Am incercuit celelalte elemente dupa cum urmeaza:

  • Mov deschis -> Elementele aflate deasupra diagonalei principale si deasupra deagonalei secundare.
  • Mov inchis -> Sub diagonala principala si sub diagonala secundara
  • Albastru inchis -> Sub diagonala principala si deasupra diagonalei secundare.
  • Albastru deschis -> Deasupra diagonalei principale si sub diagonala secundara.

Pentru determinarea acestor elemente inconjurate ne vom folosi tot de niste formule. De precizat este faptul ca, aceste formule pot fi usor determinate prin desenarea unei matricii patratice, respectiv indicii de pozitie. Nu necesita memorarea lor pe derost.

  • Deasupra diagonalei principale si deasupra diagonalei secundare: i < j && i+j <= n
  • Sub diagonala secundara si sub diagonala principala: i > j && i + j > n
  • Sub diagonala principala si deasupra diagonalei secundare: i > j && i+j <= n
  • Sub diagonala secundara si deasupra diagonalei principale: i < j && i+j > n

Pe langa aceste zone, mai avem urmatoarele:

Adica:

  • Deasupra diagonalei principale: i < j && i+j >= n-2
  • Sub diagonala principala: i > j && i+j >= n-2
  • Deasupra diagonalei secundare: i+j <= n
  • Sub diagonala secundara: i+j > n+1

Cum spuneam, indicii acestor tablouri bidimensionale se pot determina oricand cu un desen. Pentru nelamuriri, lasati un comentariu.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *