Sunteți pe pagina 1din 4

Lectia 1

Tablouri cu doua dimensiuni ( matrici ).


Daca intr-un program adresam doua elemente le putem asocia nume individuale, de exemplu a si b. Daca este vorba de trei elemente le putem spune ala, bala si portocala. Daca numarul variabilelor este mai mare atunci este greu de gasit si retinut o lista lunga de identificatori. Solutia gasita a fost o structura numita tablou cu o dimensiune, numita vector. In acest caz toate variabilele poarta un acelasi nume, iar identificarea elementelor componente se face cu ajutorul unui indice, care arata pozitia elementului curent in cadrul vectorului. In vectorul v, v[3] poate fi al treilea element din sir, daca numerotarea incepe de la 1. Daca sunt doi vectori, putem alege nume diferite pentru cei doi vectori. Daca numarul de vectori este mai mare, apare din nou problema gasirii de nume pentru fiecare vector in parte, iar solutia este sa facem un vector...de vectori. O astfel de structura se numeste matrice. Toti vectorii din interior poarta un acelasi nume, iar identificarea elementelor se face cu ajutorul a doi indici. Primul arata numarul vectorului, al doilea arata pozitia elementului in cadrul vectorului respectiv. Cine a vazut Burghezul gentilom la Bulandra sau Sluga la doi stapani la Notarra, a stat fara sa-si dea seama in interiorul unei matrice. Daca cineva a ocupat locul 4 pe randul 2 si tabloul a purtat numele sala, atunci pozitia sa a fost sala[2][4]. Observati ca intotdeauna se specifica mai intai randul si apoi numarul scaunului. Intr-o matrice se specifica mai intai linia si apoi coloana. Cine poate sa explice un tablou cu trei dimensiuni sa o faca pe adresa dirig@lbi.ro. Declararea se face la fel ca la vectori, prin precizarea tipului de date din tablou, a numelui si a numarului maxim de linii si respectiv de coloane. Numerotarea incepe de la valoarea zero. Pentru matricea ma cu cel mult 14 linii si cel mult 12 coloane, se poate face declaratia: int ma[14][12]. Primul element din tablou va fi ma[0][0], iar ultimul element va fi ma[13][11].

In exemplul urmator se citesc de la tastatura elementele unei matrici cu n linii si m coloane : cin>>n>>m; for(i=1; i<=n; i++) for(j=1; j<=m; j++) cin>>ma[i][j]; Pentru a afisa pe linii matricea citita se foloseste secventa urmatoare, in care se observa ca dupa fiecare element se lasa un spatiu ( ), iar dupa ce se termina de editat elementele unei linii se trece la o linie noua (endl): for(i=1;i<=n;i++) {for(j=1;j<=m;j++) cout<<ma[i][j]<<' '; cout<<endl; } O matrice in care numarul de linii este egal cu numarul de coloane se numeste matrice patratica. Iata si un exemplu in care se va afisa suma elementelor din matrice patratica, pentru fiecare linie : int i, j, x, n, ma[33][33]; main(){ cin>>n; for(i=1; i<=n; i++) for( j=1; j<=n; j++) cin>>ma[i][j]; for( i=1; i<=n; i++) { x=0; for ( j=1; j<=n; j++) x=x+ma[i][j]; cout<< linia <<i<< suma=<<x; cout<<endl; } }

Lectia 2
Matrici patratice. Asa cum am aratat o matrice se numeste asa, atunci cand numarul de linii este egal cu numarul de coloane. Problema lor este ca au doua diagonale, una principala ce pleaca din coltul stanga sus si alta secundara ce pleaca din coltul dreapta sus. Dar sa vedem o astfel de matrice, umpluta cu niste numere alese aparent la intamplare: 11 12 13 14 15 21 22 23 24 25 31 32 33 34 35 41 42 43 44 45 51 52 53 54 55 Se observa ca numerele nu sunt venite aici chiar intamplator. Toate numerele au cate doua cifre, cu semnificatia ca cifra zecilor reprezinta numarul liniei iar cifra unitatilor numarul coloanei pe cre se afla elementul. Elementele de pe diagonala principala au proprietatea ca numarul liniei este egal cu numarul coloanei. Iata o secventa ce parcurge elementele de pe diagonala principala si le afiseaza:
int i, j , n, ma[100][100]; main(){ cin>>n; for(i=1; i<=n; i++) for(j=1; j<=n; j++) cin>>ma[i][j]; for(i=1; i<=n; i++) cout<<ma[i][i]<< ;

Elementele de pe diagonala secundara au proprietatea ca numarul total de linii marit cu 1 este egal cu suma dintre numarul liniei si numarul coloanei. Elementele situate sub diagonala principala au proprietatea ca i<j ( numarul liniei este mai mic decat numarul coloanei ).

int i, j , n, ma[100][100]; main(){ cin>>n; for(i=1; i<=n; i++) for(j=1; j<=n; j++) cin>>ma[i][j]; for(i=1; i<=n; i++) cout<<ma[i][n - i+1]<< ;

In exemplul de mai jos se calculeaza suma acestor elemente si se parcurge toata matricea, pe alocuri in mod inutil...
int i, j , n, ma[100][100], s=0; main(){ cin>>n; for(i=1; i<=n; i++) for(j=1; j<=n; j++) cin>>ma[i][j]; for(i=1; i<=n; i++) for(j=1; j<=n; j++) if( i<j) s=s+ma[i][j]; cout<<s; }

Elementele situate sub diagonala secundara au proprietatea ca i+j>n+1. In exemplul urmator vom afisa elementele situate deasupra diagonalei secundare: {int i,j,n,ma[22][22]; cin>>n; for( i=1; i<=n; i++) for( j=1; j<=n; j++) cin>>ma[i][j]; for( i=1; i<n; i++) for(j=1; j<=n - i; j++) cout<<ma[i][j]<<' '; }

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