2. I mplementarea tablourilor
bidimensionale
*Tabloul are un numar bine
*Un tablou bidimensional
determinat de elemente si
este o succesiune de
locatii de memorie se identifica printr-un
recunoscute prin acelasi singur nume.
identificator si prin *Valorile atribuite
pozitia fiecareia in cadrul elementelor tabloului
sirului. trebuie sa fie de acelasi
tip.
*Pozitia este data printr-o *Tablourile bidimensionale se
suita de numere numesc MATRICE.
pozitive(indecsi), care
reprezinta cele doua
dimensiuni (linie si
coloana).
3. M atrice
* Descriere generala
Sintaxa de declarare a unei matrice este: tip nume[m][n], unde:
* tip – tipul de data folosit; poate fi unul din tipurile de baza (int, float, char, …) sau
un tip definit de utilizator (articole, obiecte)
* nume – numele prin care va fi referita matricea
* m – numarul de linii din matrice
* n- numarul de coloane din matrice
Exemple de declaratii:
// matrice de intregi cu 10 linii si 10 coloane
int vanzari[10][10];
// vector de valori reale
float temperature[3][15];
Memorarea matricelor se face, ca si in cazul vectorilor, intr-un spatiu
continuu de memorie. Numele matricei e un pointer catre adresa primului
element.Elementele matricei sunt stocate in memorie linie dupa linie.
5. C itirea si afisarea unui tablou
bidimensional
*Citirea elementelor unui tablou nu este posibila decat prin citirea fiecarui
element. De aceea, la fel ca si in cazul vectorilor, operatia de citire a
matricelor impune folosirea a doua secvente ciclice suprapuse. Acestea
corespund indicelor liniei (i), respectiv coloanei (j).
*Exemplu: Declararea unei matrice cu 10 linii şi 9 coloane, cu elemente
de tip intreg este: Int a[10][9];
Matricea are liniile 1,2…,10 şi coloanele 1, 2,…,9 si, de exemplu,
elementul de pe linia a treia si coloana a patra se adresează prin a[3][4]
De multe ori nu ştim câte linii şi câte coloane va trebui să aibă tabloul. În
acest caz , tabloul se declară cu un număr maxim de linii şi un număr
maxim de coloane, în aşa fel încât acesta să corespundă oricărui set de
date de intrare. Evident , într-un astfel de caz există o risipă de
memorie internă.
6. I ntroducerea si afisarea valorilor
*Programul alaturat citeste si #include<iostream.h>
afiseaza o matrice. Initial main()
se citesc numarul de linii si { int m,n,i,j,a[10][10];
coloane ale tabloului (m si cout<<"m="; cin>>m;
n). cout<<"n="; cin>>n;
for (i=1; i<=m;i++)
for (j=1; j<=n; j++)
{ cout<<"a["<<i<<','<<j<<"]=";
*In memorie, tablourile sunt
cin>>a[i][j];}
memorate pe linii (prima
for (i=1;i<=m;i++)
linie, a doua s.a.m.d).
{ for (j=1;j<=n;j++)
cout<<a[i][j]<<' ';
cout<<endl; } }
7. * Organizarea unui tablou bidimensional in
memorie este reprezentata in figura de mai jos:
Ex:Introducerea unui tablou de 6 linii si 8 coloane,avand
ele-mente intregi,este de forma:Int x[6][8]
Exemplu de instructiuni de atribuire: x[0][0]=23; x[0]
[5]=67;
X [0 ] [1 ] [2 ] [3 ] [4 ] [5 ] [6 ] [7 ]
[0 ] 23 67
[1 ]
[2 ]
[3 ]
[4 ]
[5 ]
8. P relucrari asupra matricelor
Exemplu : Pentru o matrice data - Se parcurge matricea element cu
sa se calculeze suma element. Se testeaza daca
elementelor care apartin unui elementul curent se incadreaza in
interval dat (xinf<=tab[i][j] && intervalul dorit si în caz afirmativ
xsup>=tab[i][j]). elementul curent se aduna la
Prezentarea algoritmului : suma calculata anterior
- se citesc capetele intervalului in pentru i=0,m-1 executa
care trebuie sa se incadreze pentru j=0,n-1 executa
elementele cautate in matrice
daca tab[i][j] > xi si tab[i][j]
xinf şi xsup < xf atunci
- se citesc dimensiunile matricei suma = suma + tab[i][j];
m si n sfarsit daca
- se citesc elementele matricei sfarsit pentru
pentru i=0,m-1 executa sfarsit pentru
pentru j=0,n-1 executa - afiseaza suma.
citeste tab[i][j]; Observatie : Variabila suma
sfarsit pentru reprezinta suma calculata.
sfarsit pentru
9. I nterschimbarea de linii
*Se citeste un tablou cu m linii si n
coloane.
*Se citesc,de asemenea,2 numere
naturale,distincte,x si y,cuprinse
intre 1 si m.
*Se cere sa se interschimbe linia x
cu linia y.
*La inceput vom afisa tabloul
initial,apoi pe cel obtinut prin
interschimbarea
liniilor x si y.
10. P rogramul C / ++pentru interschimbarea a
C
doua linii
#include<iostream.h> for(i=1;i<=m;i++)
main() {for(j=1;j<=n;j++)
{ cout<<a[i][j]<<``;
int m,n,i,j,aux,a[10][10]; cout<<endl;}
cout<<``m=``;cin>>m; {
cout<<``n=``;cin>>n; aux=a[x][j];
for(i=1;i<=m;i++) a[x][j]=a[y][j]
for(j=1;j<=n;j++) a[y][j]=aux;}
{ cout<<endl;
cout<<``a[``<<i<<`,`<<j<<``]=``; for(i=1;i<=m;i++)
cin>>a[i][j]; {for(j=1;j<=n;j++)
} cout<<a[i][j]<<``;
cout<<``x=``;cin>>x; cout<<endl;
cout<<``y=``;cin>>y; }}
cout<<endl;
11. M atricea patratica
* Se citeste un tablou cu n linii si n coloane, numere intregi.
Un astfel de tablou, in care numarul liniilor este egal cu
numarul coloanelor, poarta denumirea de matrice
patratica.
* O matrice patratica are doua diagonale: principala si
secundara.
* Pentru un tablou patratic A, numim diagonala principala,
elementele aflate pe “linia” care uneste A[1][1] cu A[n][n].
* Pentru un tablou patratic A, numim diagonala secundara,
elementele aflate pe “linia” care uneste A[n][1] cu A[1][n]
12. *In figura de mai jos este reprezentat un tablou cu patru linii si
patru coloane. In fiecare dintre casute este precizat indicele de
linie si de coloană pentru fiecare element.
Observatie! Se poate memora matricea incepand cu valoarea 1
pentru indicele de linie si de coloana.(Elementul A32 este elementul
de pe linia 3 ,
coloana2).
Elementele diagonalei principale(rosu),elementele celei
secundare(albastru).
A11 A12 A13 A14
A21 A22 A23 A24
A31 A32 A33 A34
A41 A42 A43 A44
13. M atrice simetrica
* In practica apar cazuri in care matricele au anumite caracteristici care
permit o stocare mai eficienta decat cea standard.Un astfel de exemplu
este reprezentat de matricea simetrica.
Matricele simetrice sunt matrice patratice in care corespondentele
de sub si de peste diagonala principala sunt egale (adica m[i][j] = m[j][i]
pentru oricare i si j).
1 2 3 4
2 5 6 7
3 4 8 9
7 8 9 10
Matricea va fi liniarizata sub forma: 1 2 3 4| 5 6 7| 8 9 10
14. *Calculul pozitiei elementului i,j dintr-o matrice de
dimensiune n se face dupa formula:
p=(n-1)+(n-2)+…+(n-i)+j=i*n-(1+2+…+i)+j=i*n-i*(n+1)/2+j,
pentru j<=i.
Daca j>i,atunci se interschimba i cu j.
15. B I B L I OGR A F I E
* Tudor Sorin – Informatică, Varianta C++, Manual pentru
clasa a XI-a, Editura L&S Infomat, Bucuresti, 2006.
*LaboratorProgramarea calculatoarelor-Prf.A.Runceanu.