Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
Atestat la informatică
Craiova
2018
“Tablouri pătratice”
2
Cuprins
1. Definiție generală...................................................................... 4
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).
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)
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).
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).
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]>
q 11 q 12 q 13 ... q 1n
q 21 q 22 q 23 ... q 2n
Q= .......................... Q mn
q m1 q m2 q m3 ... q mn
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}}
};
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;
}
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:
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;
}
16
a) În cazul în care matricea este simetrică:
17