Diagonale
Putem vorbi despre diagonale în matrice doar în cazul în care avem o matrice pătratică. Matricea pătratică este matricea care are numărul liniilor egal cu cel al coloanelor. În acest caz, vom avea n linii şi n coloane, deci citirea se va face în felul următor:
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
Mai încolo folosim pentru prelucrare cele 2 for-uri în acelaşi mod ca în citire şi îl vom prelucra pe a[i][j]. Însă, dacă problema ne specifică unde are loc prelucrarea în matrice (pe, deasupra, sub diagonala principală sau secundară a matricei), atunci unele lucruri se vor schimba.
Pentru început să vedem care sunt diagonalele matricei:
1) Diagonala principală (în exemplul de mai jos avem o matrice a[3][3] unde pe diagonala principală avem valorile: a, b, c.
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
Mai încolo folosim pentru prelucrare cele 2 for-uri în acelaşi mod ca în citire şi îl vom prelucra pe a[i][j]. Însă, dacă problema ne specifică unde are loc prelucrarea în matrice (pe, deasupra, sub diagonala principală sau secundară a matricei), atunci unele lucruri se vor schimba.
Pentru început să vedem care sunt diagonalele matricei:
1) Diagonala principală (în exemplul de mai jos avem o matrice a[3][3] unde pe diagonala principală avem valorile: a, b, c.
2) Diagonala secundară (este prezentata in figura de mai jos)
Dacă ne aflăm pe diagonala principală, atunci elementele de pe aceasta pot fi accesate direct folosind o singură repetiţie: for(i=1;i<=n;i++). În acest caz, îl vom prelucra pe a[i][i].
Deasupra diagonalei principale i<j şi vom avea 2 repetiţii:
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
Îl vom prelucra pe a[i][j].
Sub diagonala principală i>j şi vom avea tot 2 repetiţii:
for(i=2;i<=n;i++)
for(j=1;j<=n;j++)
Noi îl vom prelucra pe a[i][j].
Pe diagonala secundară observăm că: Dacă i=1 atunci j=n, dacă i=2 atunci j=n-1 şi aşa mai departe. Dacă punem una din aceste situaţii sub forma unui sistem si dacă adunăm membru cu membru, reiese următoarea formulă: i+j=n+1. Din aceasta rezultă că j=n+1-i. În concluzie, dacă folosim această formulă, pe diagonala secundară îl vom prelucra pe a[i][n+1-i].
Ca şi pe diagonala principală vom avea unul şi acelaşi for: for(i=1;i<=n;i++)
Deasupra diagonalei secundare i+j<n+1 şi vom avea următoarele instrucţiuni repetitive:
for(i=1;i<=n-1;i++)
for(j=i;j<=n-1;j++)
Îl vom prelucra pe a[i][j].
Sub diagonala secundară ştim faptul că i+j>n+1 şi avem 2 repetiţii:
for(i=2;i<=n;i++)
for(j=n+2-i;j<=n;j++)
Îl vom prelucra în acest caz pe a[i][j].
Deasupra diagonalei principale i<j şi vom avea 2 repetiţii:
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
Îl vom prelucra pe a[i][j].
Sub diagonala principală i>j şi vom avea tot 2 repetiţii:
for(i=2;i<=n;i++)
for(j=1;j<=n;j++)
Noi îl vom prelucra pe a[i][j].
Pe diagonala secundară observăm că: Dacă i=1 atunci j=n, dacă i=2 atunci j=n-1 şi aşa mai departe. Dacă punem una din aceste situaţii sub forma unui sistem si dacă adunăm membru cu membru, reiese următoarea formulă: i+j=n+1. Din aceasta rezultă că j=n+1-i. În concluzie, dacă folosim această formulă, pe diagonala secundară îl vom prelucra pe a[i][n+1-i].
Ca şi pe diagonala principală vom avea unul şi acelaşi for: for(i=1;i<=n;i++)
Deasupra diagonalei secundare i+j<n+1 şi vom avea următoarele instrucţiuni repetitive:
for(i=1;i<=n-1;i++)
for(j=i;j<=n-1;j++)
Îl vom prelucra pe a[i][j].
Sub diagonala secundară ştim faptul că i+j>n+1 şi avem 2 repetiţii:
for(i=2;i<=n;i++)
for(j=n+2-i;j<=n;j++)
Îl vom prelucra în acest caz pe a[i][j].