Proiect la informatica
    TABLOURI
 BIDIMENSIONALE


             CLASA A X-A A
I mplementarea tablourilor
               bidimensionale
                                *Tabloul are un numar bine
*Un tablou bidimensional
                                   determinat de elemente si
  este o succesiune de
  locatii de memorie               se identifica printr-un
  recunoscute prin acelasi         singur nume.
  identificator si prin         *Valorile atribuite
  pozitia fiecareia in cadrul      elementelor tabloului
  sirului.                         trebuie sa fie de acelasi
                                   tip.
*Pozitia este data printr-o     *Tablourile bidimensionale se
  suita de numere                  numesc MATRICE.
  pozitive(indecsi), care
  reprezinta cele doua
  dimensiuni (linie si
  coloana).
M atrice
* 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:
C itirea 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ă.
I ntroducerea si afisarea valorilor
*Programul alaturat citeste si     #include<iostream.h>
   afiseaza o matrice. Initial     main()
   se citesc numarul de linii si   { int m,n,i,j,a[10][10];
   coloane ale tabloului (m si     cout<<"m="; cin>>m;
   n).                             cout<<"n="; cin>>n;
                                   for (i=1; i<=m;i++)
                                   for (j=1; j<=n; j++)
                                   { cout<<"a["<<i<<','<<j<<"]=";
*In memorie, tablourile sunt
                                   cin>>a[i][j];}
   memorate pe linii (prima
                                   for (i=1;i<=m;i++)
   linie, a doua s.a.m.d).
                                   { 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;
              X [0 ] [1 ] [2 ] [3 ] [4 ] [5 ] [6 ] [7 ]

                  [0 ]   23      67

                  [1 ]

                  [2 ]

                  [3 ]

                  [4 ]

                  [5 ]
P relucrari asupra matricelor
Exemplu : Pentru o matrice data             - Se parcurge matricea element cu
    sa se calculeze suma                        element. Se testeaza daca
    elementelor care apartin unui               elementul curent se incadreaza in
    interval dat (xinf<=tab[i][j] &&            intervalul dorit si în caz afirmativ
    xsup>=tab[i][j]).                           elementul curent se aduna la
Prezentarea algoritmului :                      suma calculata anterior
- se citesc capetele intervalului in        pentru i=0,m-1 executa
    care trebuie sa se incadreze                pentru j=0,n-1 executa
    elementele cautate in matrice
                                                       daca tab[i][j] > xi si tab[i][j]
xinf şi xsup                                    < xf atunci
- se citesc dimensiunile matricei                      suma = suma + tab[i][j];
m si n                                                 sfarsit daca
- se citesc elementele matricei                 sfarsit pentru
pentru i=0,m-1 executa                       sfarsit pentru
    pentru j=0,n-1 executa                   - afiseaza suma.
                       citeste tab[i][j];    Observatie : Variabila suma
                       sfarsit pentru           reprezinta suma calculata.
           sfarsit pentru
I nterschimbarea 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.
P rogramul C / ++pentru interschimbarea a
               C
                 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;
M atricea 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
M atrice 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 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.
B I B L I OGR A F I E
* Tudor Sorin – Informatică, Varianta C++, Manual pentru
  clasa a XI-a, Editura L&S Infomat, Bucuresti, 2006.
*LaboratorProgramarea calculatoarelor-Prf.A.Runceanu.

Tablouri bidimensionale

  • 1.
    Proiect la informatica TABLOURI BIDIMENSIONALE CLASA A X-A A
  • 2.
    I mplementarea tablourilor bidimensionale *Tabloul are un numar bine *Un tablou bidimensional determinat de elemente si este o succesiune de locatii de memorie se identifica printr-un recunoscute prin acelasi singur nume. identificator si prin *Valorile atribuite pozitia fiecareia in cadrul elementelor tabloului sirului. trebuie sa fie de acelasi tip. *Pozitia este data printr-o *Tablourile bidimensionale se suita de numere numesc MATRICE. pozitive(indecsi), care reprezinta cele doua dimensiuni (linie si coloana).
  • 3.
    M atrice * Descrieregenerala 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.
  • 4.
    Matricea cu mlinii si n coloane arata astfel:
  • 5.
    C itirea siafisarea 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ă.
  • 6.
    I ntroducerea siafisarea valorilor *Programul alaturat citeste si #include<iostream.h> afiseaza o matrice. Initial main() se citesc numarul de linii si { int m,n,i,j,a[10][10]; coloane ale tabloului (m si cout<<"m="; cin>>m; n). cout<<"n="; cin>>n; for (i=1; i<=m;i++) for (j=1; j<=n; j++) { cout<<"a["<<i<<','<<j<<"]="; *In memorie, tablourile sunt cin>>a[i][j];} memorate pe linii (prima for (i=1;i<=m;i++) linie, a doua s.a.m.d). { for (j=1;j<=n;j++) cout<<a[i][j]<<' '; cout<<endl; } }
  • 7.
    * Organizarea unuitablou 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; X [0 ] [1 ] [2 ] [3 ] [4 ] [5 ] [6 ] [7 ] [0 ] 23 67 [1 ] [2 ] [3 ] [4 ] [5 ]
  • 8.
    P relucrari asupramatricelor Exemplu : Pentru o matrice data - Se parcurge matricea element cu sa se calculeze suma element. Se testeaza daca elementelor care apartin unui elementul curent se incadreaza in interval dat (xinf<=tab[i][j] && intervalul dorit si în caz afirmativ xsup>=tab[i][j]). elementul curent se aduna la Prezentarea algoritmului : suma calculata anterior - se citesc capetele intervalului in pentru i=0,m-1 executa care trebuie sa se incadreze pentru j=0,n-1 executa elementele cautate in matrice daca tab[i][j] > xi si tab[i][j] xinf şi xsup < xf atunci - se citesc dimensiunile matricei suma = suma + tab[i][j]; m si n sfarsit daca - se citesc elementele matricei sfarsit pentru pentru i=0,m-1 executa sfarsit pentru pentru j=0,n-1 executa - afiseaza suma. citeste tab[i][j]; Observatie : Variabila suma sfarsit pentru reprezinta suma calculata. sfarsit pentru
  • 9.
    I nterschimbarea delinii *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.
  • 10.
    P rogramul C/ ++pentru interschimbarea a C 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;
  • 11.
    M atricea 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]
  • 12.
    *In figura demai 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
  • 13.
    M atrice 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 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
  • 14.
    *Calculul pozitiei elementuluii,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.
  • 15.
    B I BL I OGR A F I E * Tudor Sorin – Informatică, Varianta C++, Manual pentru clasa a XI-a, Editura L&S Infomat, Bucuresti, 2006. *LaboratorProgramarea calculatoarelor-Prf.A.Runceanu.