Sunteți pe pagina 1din 4

Matrici patratice

Link tabla

Introducere:
O matrice patratica este o matrice in care numarul de linii este egal cu
numarul de coloane. In mod general o matrice patratica de dimensiune
N este o matrice cu N linii si N coloane.

Intr-o matrice patratica exista 2 diagonale:


● diagonala principala - de la elementul (1,1) la elementul (n,n)
● diagonala secundara - de la elementul (1,n) la elementul (n,1)

Exemplu:

Elementele colorate cu verde sunt pe diagonala principala, iar cele


galbene sunt pe diagonala secundara

Pozitia unui element fata de cele 2 diagonale


Un element (i,j) se poate afla in 3 pozitii fata de o diagonala:
● pe diagonala
● deasupra diagonalei
● sub diagonala
Pentru a afla pozitia unui element dat fata de o diagonala putem folosi
urmatoarele relatii:
● Diagonala principala:
○ pe diagonala: i = j
○ deasupra diagonalei: i < j
○ sub diagonala: i > j
● Diagonala secundara:
○ pe diagonala: i + j = N + 1
○ deasupra diagonalei: i + j < N + 1
○ sub diagonala: i + j > N + 1

Parcurgerea in spirala a unei matrici patratice:

for (int k = 1; k <= n/2; k++)


{
for (int i = k; i < n-k+1; i++)
cout << a[k][i] << ' ';
for (int i = k; i < n-k+1; i++)
cout << a[i][n-k+1] << ' ';
for (int i = n-k+1; i > k; i--)
cout << a[n-k+1][i] << ' ';
for (int i = n-k+1; i > k; i--)
cout << a[i][k] << ' ';
}
if (n % 2 == 1)
cout << a[n/2+1][n/2+1];
Rotirea unei matrici patratice:
// 90 de grade, spre dreapta
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
b[j][n-i+1] = a[i][j];

// 180 de grade
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
c[n-i+1][n-j+1] = a[i][j];

// 90 de grade, spre stanga


for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
d[n-j+1][i] = a[i][j];

Calcularea sumelor partiale intr-o matrice:

sum[i][j] = suma submatricii cu colturile (1,1), (i,j)


// calcularea matricii de sume partiale
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
sum[i][j] = a[i][j] + sum[i-1][j] +
sum[i][j-1] - sum[i-1][j-1];

// aflarea sumei submatricii cu colturile


//(x, y), (z,t)
int s = sum[z][t] - sum[z][y-1] -
sum[x-1][t] + sum[x-1][y-1];
cout << s << '\n';
Probleme (aplicatii + tema):
● diagonale (usoara)
● zona4 (usoara)
● genmat2 (usoara)
● diagonale1 (usoara)
● matsim (usoara)
● chenar (usoara)
● spirala (usoara)
● balcon (usoara)
● cirese (usoara)
● robinson (medie)
● serpuire (medie)
● cirese1 (medie)
● gropi (medie)
● eroziune (medie)
● poza (medie)
● gradina (medie)
● cartele (grea)
● matop (grea)
● icsuri (grea)

Tema se poate rezolva pana vineri, 26 martie, inclusiv. Puteti trimite ce


probleme ati rezolvat pe canalul de teme pe Discord, sau pe mail la
teodorescuvladalex@gmail.com

Succes la OSEPI!
Tutorial inregistrare cu OBS

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