Sunteți pe pagina 1din 15

Proiect la

informatica
TABLOURI
BIDIMENSIONALE
CLASA A X-A A

Implementarea tablourilor
bidimensionale
*Un

tablou bidimensional
este o succesiune de
locatii de memorie
recunoscute prin
acelasi identificator si
prin pozitia fiecareia in
cadrul sirului.

*Pozitia este data printr-o


suita de numere
pozitive(indecsi), care
reprezinta cele doua
dimensiuni (linie si
coloana).

*Tabloul are un numar


bine determinat de
elemente si se
identifica printr-un
singur nume.
*Valorile atribuite
elementelor tabloului
trebuie sa fie de
acelasi tip.
*Tablourile
bidimensionale se
numesc MATRICE.

Matrice
* 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.

Matricea cu m linii si n coloane


arata astfel:

Citirea 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 cte linii i cte coloane va trebui s aib
tabloul. n acest caz , tabloul se declar cu un numr maxim de
linii i un numr maxim de coloane, n aa fel nct acesta s
corespund oricrui set de date de intrare. Evident , ntr-un astfel
de caz exist o risip de memorie intern.

Introducerea si afisarea
valorilor
*Programul alaturat
citeste si afiseaza o
matrice. Initial se
citesc numarul de linii
si coloane ale tabloului
(m si n).

*In memorie, tablourile


sunt memorate pe linii
(prima linie, a doua
s.a.m.d).

#include<iostream.h>
main()
{ int m,n,i,j,a[10][10];
cout<<"m="; cin>>m;
cout<<"n="; cin>>n;
for (i=1; i<=m;i++)
for (j=1; j<=n; j++)
{ cout<<"a["<<i<<','<<j<<
"]=";
cin>>a[i][j];}
for (i=1;i<=m;i++)
{ for (j=1;j<=n;j++)
cout<<a[i][j]<<' ';
cout<<endl; } }

* 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]
X

[0 ]

[1 ]

[2 ]

[3 ]

[4 ]

[5 ]

[6 ]

[7 ]

[0 ]
23
7
Exemplu de instructiuni
de 6atribuire:
x[0]
[1 ]
[0]=23; x[0][5]=67;
[2 ]
[3 ]
[4 ]
[5 ]

Prelucrari asupra
matricelor
Exemplu : Pentru o matrice data
sa se calculeze suma
elementelor care apartin unui
interval dat (xinf<=tab[i][j]
&& xsup>=tab[i][j]).
Prezentarea algoritmului:
- se citesc capetele intervalului
in care trebuie sa se incadreze
elementele cautate in matrice
xinfi xsup
- se citesc dimensiunile matricei
msi n
- se citesc elementele matricei
pentru i=0,m-1 executa
pentru j=0,n-1 executa
citeste tab[i][j];
sfarsit pentru
sfarsit pentru
- suma = 0;

- Se parcurge matricea element


cu element. Se testeaza daca
elementul curent se
incadreaza in intervalul dorit
si n caz afirmativ elementul
curent se aduna la suma
calculata anterior
pentru i=0,m-1 executa
pentru j=0,n-1 executa
daca tab[i][j] > xi si tab[i][j]
< xf atunci
suma = suma + tab[i][j];
sfarsit daca
sfarsit pentru
sfarsit pentru
- afiseaza suma.
Observatie : Variabila suma
reprezinta suma calculata.

Interschimbarea 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.

Programul C/C++pentru
interschimbarea a doua linii
#include<iostream.h>
main()

for(i=1;i<=m;i++)
{for(j=1;j<=n;j++)

{
int m,n,i,j,aux,a[10][10];
cout<<``m=``;cin>>m;
cout<<``n=``;cin>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
cout<<``a[``<<i<<`,`<<j<<``]=``;
cin>>a[i][j];
}
cout<<``x=``;cin>>x;
cout<<``y=``;cin>>y;
cout<<endl;

cout<<a[i][j]<<``;
cout<<endl;}
{
aux=a[x][j];
a[x][j]=a[y][j]
a[y][j]=aux;}
cout<<endl;
for(i=1;i<=m;i++)
{for(j=1;j<=n;j++)
cout<<a[i][j]<<``;
cout<<endl;
}}

Matricea
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]

*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
A11
A12 principale(rosu),elementele
A13
A14
celei secundare(albastru).
A21

A22

A23

A24

A31

A32

A33

A34

A41

A42

A43

A44

Matrice 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
7

2
5
4
8

3 4
6 7
8 9
9 10

Matricea va fi liniarizata sub forma: 1 2 3 4| 5 6 7| 8 9 10

*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*ni*(n+1)/2+j,

pentru j<=i.
Daca j>i,atunci se interschimba i cu j.

BIBLIOGRAFIE
* Tudor Sorin Informatic, Varianta C++, Manual pentru
clasa a XI-a, Editura L&S Infomat, Bucuresti, 2006.
*Laborator\Programarea calculatoarelor-Prf.A.Runceanu.
Grupa:VIRTUALART
Duta Cristina
Vasile Raluca
Marinescu Catalin
Ivascu Constantin
Matei Alexandru

Colegiul National Vladimir


Streinu
Gaesti-Dambovita

S-ar putea să vă placă și