You are on page 1of 3

Runda 2: Tablouri bidimensionale

În secţiunile anterioare aţi întâlnit noţiunea de tablou unidimensional şi


aţi rezolvat probleme ce prelucrează date memorate cu ajutorul acestora.
Ce este o matrice? La matematică veţi învăţa în anii de liceu mai multe
despre acest capitol. Acum, imaginaţi-vă o tablă de şah, un tabel în Excel, sau pur şi
simplu un dreptunghi împărţit în secţiuni prin trasarea de linii orizontale şi verticale.
Un tablou bidimensional reprezintă o structură de date, poziţia fiecăreia fiind
stabilită cu ajutorul a doi indici, pentru linie, respectiv coloană.
Elementele unei matrici sunt memorate într-o zonă continuă de memorie, unul după
altul, în ordinea parcurgerii liniilor (ca şi cum aţi citi matricea precum un text cu mai
multe propoziţii).
Componentele unei astfel de structuri au acelaşi tip de date, spunem că structura
este omogenă.
La ce ne foloseşte? Sunt foarte multe probleme ce pot fi rezolvate cu ajutorul
matricilor, ca formă de memorare a datelor. Exemple:

- o grădină pătrată în care se află copaci. Putem să numărăm câţi dintre ei fac
mere 
- o furnică se deplasează în interiorul unui dreptunghi precum un şoarece într-
un labirint, încercând să găsească ieşirea
- mai mulţi iepuraşi au plecat în căutarea ouălor pentru Paşti.
Le adună fiecare în câte un coş, la sfârşit primind un premiu
dacă au fost harnici şi isteţi 

Iată cum ar putea arăta un tablou, numit el X, cu 6 linii şi 8


coloane, în care se găsesc câteva valori nenule:
X [ 0 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ]

[ 0 ] 2 3 6 7

[ 1 ]
23 se găseşte pe linia 0, coloana 0.
67 se găseşte pe linia 0, coloana 5. [ 2 ]

[ 3 ]

[ 4 ]

[ 5 ]

Şi acum să trecem la treabă!


Cum se declară?

Declararea matricilor
Exemplu: int x[10][20]; //un tablou cu maxim 10 linii şi 20 de coloane.
Nu este obligatorie ocuparea în întregime a acestei matrice !
Elementele vor fi de tip int.
O matrice se declară prin precizarea tipului, numelui şi numărului maxim de linii şi
coloane.
Elementele pot fi accesate direct, prin precizarea liniei şi coloanei (x[lin][col]).
Dacă numărul de linii este acelaşi cu numărul de coloane, matricea este pătratică.
O matrice pătratică are două diagonale: principală şi secundară.
Condiţia ca un element să fie pe diagonala principală este ca indicele liniei să fie
egal cu indicele coloanei. În figura de mai jos este reprezentat un tablou cu 4 linii şi
patru coloane, numit el A. În fiecare dintre căsuţe este precizat indicele de linie şi de
coloană pentru fiecare element. Observaţi că se poate memora matricea începând cu
valoarea 1 pentru indicile de linie şi de coloană. (Elementul A32 este elementul de pe
linia 3, coloana 2).

A11 A12 A13 A14


A21 A22 A23 A24
A31 A32 A33 A34
A41 A42 A43 A44
Elementele diagonalei principale sunt scrise cu roşu. Pentru diagonala secundară
am folosit culoarea albastră.

Cum citim o matrice?

Citirea matricei
Citirea elementelor unui tablou se poate face de la tastatură sau dintr-un fişier text.
De asemenea, o matrice poate fi construită pe baza anumitor proprietăţi pe care le au
elementele acesteia.
Citirea de la tastatură a unei matrici cu m linii şi n coloane:
cout<<”m=”;
cin>>m;
cout<<”n=”;
cin>>n;
for(i=1; i<=m; i++)
for(j=1; j<=n; j++)
cin>>mat[i][j];

Afişarea matricei
for(i=1; j<=m; i++)
{for(j=1; j<=n; j++)
cout<<mat[i][j]<<” ”;
cout<<endl;
}

Probleme
1. Determinaţi cel mai mare element dintr-o matrice a cu m linii şi n
coloane ce conţine numere naturale.
#include<iostream.h>
int main()
{
int a[100][100],m,n,max=-5000;
cin>>m>>n;
for(int i=1;i<=,;i++)
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
if(a[i][j]>max) max=a[i][j];
}
cout<<max;
}

2. Se consideră o matrice pătratică a cu n linii şi n coloane. Afişaţi elementele


aflate deasupra diagonalei principale, respectiv sub aceasta.
#include<iostream.h>
void main()
{
int a[100][100],n,j,i;
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
cout<<”Elementele aflate deasupra diagonalei principale:”
for(i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++)
cout<<a[i][j]<<” “;
cout<<endl;
cout<<”Elementele aflate sub diagonala principală:”
for(i=2;i<=n;i++)
for(j=1;j<i;j++)
cout<<a[i][j]<<” “;
}

Încercaţi să rezolvaţi cu profesorii voştri!


Se dă o matrice A cu n linii şi n coloane, cu elemente numere întregi. Să se
realizeze un program care afişează:
- elementele pare din matrice
- elementele prime aflate pe diagonala secundară
- suma elementelor palindrom de pe liniile impare
- elementele aflate pe linii pare şi coloane impare