Sunteți pe pagina 1din 17

Colegiul Național “Frații Buzești”

Atestat la informatică

Profesor coordonator: Elev:


Grindeanu Mihaela Camen Marius-Andrei
Clasa a XII-a E

Craiova
2018
“Tablouri pătratice”

2
Cuprins

1. Definiție generală...................................................................... 4

2. Proprietăți ale zonelor speciale din matrici pătratice.............. 5

3. Modalități de prelucrare a elementelor.................................... 6

4. Declararea tablourilor bidimensionale.................................... 7

5. Inițializarea elementelor unei matrici pătratice....................... 8

6. Citirea și afișarea unei matrici pe ecran.................................. 9

7. Probleme propuse..................................................................... 10

3
Definiție generală:

Numim tablou o colecţie (grup, mulţime ordonată) de date, de acelaşi tip, situate într-o zonă
de memorie continuă (elementele tabloului se află la adrese succesive). Tablourile sunt variabile
compuse (structurate), deoarece grupează mai multe elemente. Variabilele tablou au nume, iar tipul
tabloului este dat de tipul elementelor sale. Elementele tabloului pot fi referite prin numele tabloului
şi indicii (numere întregi) care reprezintă poziţia elementului în cadrul tabloului.

În funcţie de numărul indicilor utilizaţi pentru a referi elementele tabloului, putem întâlni tablouri
unidimensionale (vectorii) sau multidimensionale (matricile sunt tablouri bidimensionale).

Exemplu de tablou pătratic în care indexarea a fost facut de la 0:

Matricea pătratică este un caz particular de matrice pentru care numărul de linii este egal cu
numărul de coloane.

4
Proprietăți ale zonelor speciale din matricile pătratice

Diagonala principală are proprietatea de avea indicii de linie și coloana egali. (pentru elementrul
ai,j, i=j)
Diagonala secundară conţine elementele a1n, a2 n-1 , a3 n-2,...,an1 cu proprietatea că suma
indicilor este egală cu numărul de linii+1. (pentru elementrul ai,j, i+j=n+1)

Zona de deasupra diagonalei principale

Elementele de deasupra diagonalei principale sunt a12, a13, a14,...,a1n, a23, a24, a25,...,a2n, ....,
an-1 n-1, an-1 n.
Proprietatea elementelor din zona aceasta, este că indicele liniei este mai mic decât cel al
coloanei(pentru elementrul ai,j, i<j).

Zona de sub diagonala principală

Elementele a21, a31, a32,...,a41, a42, a43, .....,an1, an2, an n-1 se află sub diagonala
principală şi au au ca proprietate faptul că indicele liniei este nai mare decât indicele
coloanei.( pentru elementrul ai,j, i>j).

Elemente de baza: diagonala principală și diagonala secundară.

5
Modalităţi de prelucrare a elementelor în matrice pătratică de dimensiune nxn

Diagonala principala:
for (i=1;i<=n;i++)
< secvență de instrucțiuni asupra a[i][i]>

Diagonala secundara:
for (i=1;i<=n;i++)
< secvență de instrucțiuni asupra a[i][n-i+1]>

Deasupra diagonalei principale:


for (i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++)
< secvență de instrucțiuni asupra a[i][j]>

Sub diagonala principala:


for (i=2;i<=n;i++)
for(j=1;j<=i-1;j++)
< secvență de instrucțiuni asupra a[i][j]>

Prelucrarea intr-o singura parcurgere a mai multor zone:


for (i=1;i<=n;i++)
for(j=1;j<=n;j++)
if (i==j)*<prelucrează a[i,j] – diag. princ.>
else
if (i+j==n+1)
*<prelucrează a[i,j] – diag. sec.>
else
if (i>j)
*<prelucrează a[i,j] – deasupra diag. princ.>
else

*<prelucrează a[i,j] – sub diag. princ.>


if (i+j<n+1)
*<prelucrează a[i,j] – deasupra diag. sec.>
6
Declararea tabourilor
Ca şi variabilele simple, variabilele tablou bidimensionale trebuie declarate înainte de utilizare.
Modul de declarare:
tip nume_tablou[număr linii][număr coloane];numa
unde:tip reprezintă tipul elementelor tabloului; număr_linii, număr_coloane sunt numere întregi sau
expresii constante întregi (a căror valoare este evaluată la compilare) care reprezintă limitele
superioare ale indicilor tabloului.
Exemple:
double matrice[2][3]; // declararea tabloului matrice (bidimensional),
// maximum 2 linii şi maximum 3 coloane, elemente tip double
Din punct de vedere conceptual, elementele unui tablou bidimensional sunt plasate în spaţiu pe două
direcţii. Matricea reprezintă o aplicaţie naturală a tablourilor bidimensionale.
În matematică:

q 11 q 12 q 13 ... q 1n
q 21 q 22 q 23 ... q 2n
Q= .......................... Q mn
q m1 q m2 q m3 ... q mn

În limbajele C/C++ (indicii de linie şi de coloană pornesc de la 0):


q 00 q 01 q 02 ... q 0,n 1

q 10 q 11 q 12 ... q 1,n 1 Q mn


Q=
............................
q m1,0 q m1,1 q m1,2 . . . q m1,n 1

// declararea matricii q, cu maxim3 linii şi 2 coloane, elemente tip


Exemplu:
double q[3][2];
double

7
Inițializarea elementelor unei matrici

Dacă se doreşte iniţializarea elementelor unei matrici în momentul declarării acesteia, se poate
proceda astfel:
int mat[4][3] = {
{10, -50, 3},
{32, 20, 1},
{-1, 1, -2},
{7, -8, 19} };
Prin această construcţie, elementele matricii mat se iniţializează în modul următor:
mat[0][0]=10, mat[0][1]=-50, mat[0][2]=3
mat[1][0]=32, mat[1][1]=20, mat[1][2]=1
mat[2][0]=-1, mat[2][1]=1, mat[2][2]=-2
mat[3][0]=7, mat[3][1]=-8, mat[3][2]=19

La declararea unei matrici şi iniţializarea elementelor sale, se poate omite numărul maxim de linii,
în schimb, datorită modului de memorare, trebuie specificat numărul maxim de coloane:
int mat[][3] = {
{10, -5, 3},
{32, 20, 1},
{-1, 1, -2},
{7, -8, 9} };
Construcţia are acelaşi 9reced ca 9recedent.
Int mat[][3] = {
{1, 1},
{ -1},
{3, 2, 1}};
mat reprezintă o matrice 3 3, ale cărei elemente se iniţializează astfel:
mat[0][0]=1, mat[0][1]=1, mat[1][0]=-1, mat[2][0]=3, mat[2][1]=2, mat[2][2]=1
Elementele mat[0][2], mat[1][1], mat[1][2] nu sunt initalizate. Ele au valoarea zero dacă tabloul
este global şi valori iniţiale nedefinite dacă tabloul este automatic.

8
Construcţiile utilizate la iniţializarea tablourilor bidimensionale se extind pentru tablouri
multidimensionale, cu mai mult de doi indici.
Exemplu:
int a[2][2][3]={
{ {10, 20}, {1, -1}, {3, 4}},
{ {20, 30}, {50, -40}, {11, 12}}
};

Citirea și afișarea unei matrici pe ecran


Să se citească de la tastatură elementele unei matrici de maxim 10 linii şi 10 coloane. Să se afişeze
matricea citită.
#include <iostream.h>
void main()
{
int A[10][10], nr;
cout<<"Nr. :";
cin>>nr;
int i, j;
//urmează citirea elementelor unei matrici
for (i=0; i<nr; i++)
for (j=0; j<nr; j++)
{
cout<<"A["<<i<<","<<j<<"]="; //afişarea unui mesaj prealabil citirii
cin>>A[i][j];
}
//urmează afişarea elementelor matricii
for (i=0; i<nr; i++) {
for (j=0; j<nr; j++)
cout<<A[i][j]<<' ';
cout<<'\n'; // după afişarea elementelor unei linii, se face saltul la linia următoare}}

9
Probleme propuse

1. Să se scrie programul care citește de la tastatură o matrice cu n linii și n coloane (cel mult 20
linii și 20 coloane) și să se calculeze suma elementelor pozitive din matricea astfel citită.

Programul sursă:
#include<iostream>
using namespace std;
int main()
{
int a[20][20],i,j,n,s=0;
cout<<"n=";
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(a[i][j]>0)
s=s+a[i][j];
cout<<"s="<<s<<endl;
return 0;
}

Implementarea programului în mediul de programare CodeBlocks:

10
Rularea și afișarea rezultatului:

Se va afișa suma elementelor pozitive puse în matrice, adică, pentru datele introduce,
3+13+19+10+12=57.

11
2. Să se citească de la tastatură o matrice cu maximum 10 linii si 10 coloane, să se afișeze pe
ecran și să se calculeze urma ei, daca este cazul. Altfel, să se afișeze un mesaj corespunzător.
Programul sursă:
#include<iostream>
using namespace std;
int main()
{
int a[20][20],i,j,n,m,tr=0;
cout<<"Numarul de linii=";
cin>>n;
cout<<"Numarul de coloane=";
cin>>m;
if(m!=n)
cout<<"Matricea nu este patratica. Nu se poate calcula urma."<<endl;
else
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
cout<<"Matricea este:"<<endl;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<' ';
cout<<endl;
}
for(i=1;i<=n;i++)
tr+=a[i][i];
cout<<"Urma matricei este: "<<tr<<endl;
return 0;}

12
Implementarea programului în mediul de programare CodeBlocks:

Rularea și afișarea rezultatului:


a) În cazul în care se poate calcula urma matricei:

13
b) În cazul în care nu se poate calcula urma matricei:

14
3. Se cere să se citească o matrice pătratică de cel mult 20x20 elemente și să se verifice daca
este simtetrică fată de prima diagonală. Să se afișeze matricea pe ecran în ordinea inversă a
citirii elementelor și să se enunțe un mesaj corespunzător în cazul existenței sau neexistenței
simetriei.

Programul sursă:

#include<iostream>
using namespace std;
int main()
{
int a[20][20],i,j,n,ok;
cout<<"Numarul de linii=";
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
cout<<"Matricea, in ordinea inversa a citirii elementelor, este:"<<endl;
for(j=n;j>=1;j--)
{
for(i=n;i>=1;i--)
cout<<a[i][j]<<' ';
cout<<endl;
}
ok=1; //presupunem ca matricea este simetrica si intrerupem cautarea cand se dovedeste
contrariul
for(i=1;i<=n &&ok ;i++)
for(j=1;j<=n;j++)

15
if(a[i][j]!=a[j][i])
ok=0;
if(ok)
cout<<"Matricea este simetrica fata de prima diagonala"<<endl;
else
cout<<"Matricea nu este simetrica fata de prima diagonala"<<endl;
return 0;
}

Implementarea programului în mediul de programare CodeBlocks:

Rularea și afișarea rezultatului:

16
a) În cazul în care matricea este simetrică:

b) În cazul în care matricea nu este simetrică:

17

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