tablouri bidimensionale
DESCRIPTION
TRANSCRIPT
Proiect la informatica
TABLOURI BIDIMENSIONALE
CLASA A X-A A
Implementarea tablourilor bidimensionale
*Un tablou bidimensionaltablou 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 spatiucontinuu de memorie. Numele matricei e un pointer catre adresa primuluielement.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 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ă.
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]
Exemplu de instructiuni de atribuire: x[0][0]=23; x[0][5]=67;
X2 3 6 7
[0 ] [1 ] [2 ] [3 ] [4 ] [5 ] [6 ] [7 ]
[0 ]
[1 ]
[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
xinf şi xsup - se citesc dimensiunile matricei m si n - se citesc elementele matriceipentru i=0,m-1 executa
pentru j=0,n-1 executaciteste 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 executapentru j=0,n-1 executa
daca tab[i][j] > xi si tab[i][j] < xf atunci
suma = suma + tab[i][j];
sfarsit dacasfarsit 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 numerenaturale,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 interschimbarealiniilor x si y.
Programul C/C++pentru interschimbarea a 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;
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 principale(rosu),elementele celei secundare(albastru).
A11 A12 A13 A14
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
corespondentelede 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
*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.
BIBLIOGRAFIE
* Tudor Sorin – Informatică, Varianta C++, Manual pentru clasa a XI-a, Editura L&S Infomat, Bucuresti, 2006.
*Laborator\Programarea calculatoarelor-Prf.A.Runceanu.