tablouri bidimensionale

15
Proiect la informatica TABLOURI BIDIMENSIONALE CLASA A X-A A

Upload: tina-cris

Post on 29-Nov-2014

6.989 views

Category:

Education


26 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Tablouri bidimensionale

Proiect la informatica

TABLOURI BIDIMENSIONALE

CLASA A X-A A

Page 2: Tablouri bidimensionale

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.

Page 3: Tablouri bidimensionale

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.

Page 4: Tablouri bidimensionale

Matricea cu m linii si n coloane arata astfel:

Page 5: Tablouri bidimensionale

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

Page 6: Tablouri bidimensionale

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; } }

Page 7: Tablouri bidimensionale

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

Page 8: Tablouri bidimensionale

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.

Page 9: Tablouri bidimensionale

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.

Page 10: Tablouri bidimensionale

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;

Page 11: Tablouri bidimensionale

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]

Page 12: Tablouri bidimensionale

*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

Page 13: Tablouri bidimensionale

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

Page 14: Tablouri bidimensionale

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

Page 15: Tablouri bidimensionale

BIBLIOGRAFIE

* Tudor Sorin – Informatică, Varianta C++, Manual pentru clasa a XI-a, Editura L&S Infomat, Bucuresti, 2006.

*Laborator\Programarea calculatoarelor-Prf.A.Runceanu.