tablouri bidimensionale

Post on 29-Nov-2014

6.989 Views

Category:

Education

26 Downloads

Preview:

Click to see full reader

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.

top related