Pe scurt
Într-o matrice pătratică de ordin , diagonala principală are poziții , iar diagonala secundară are poziții , cu indici de la 0. Pentru matricea de ordin 3 cu liniile , , , diagonalele sunt 1, 5, 9 și, respectiv, 3, 5, 7.
În detaliu
O matrice este pătratică dacă are același număr de linii și de coloane. Într-o matrice pătratică de ordin , cu indici de la 0, diagonala principală conține elementele a[i][i], adică pozițiile cu , iar diagonala secundară conține elementele a[i][n-1-i], adică pozițiile cu . Cu indici de la 1, condiția diagonalei secundare este . Poziția aflată deasupra diagonalei principale are , iar cea aflată **sub** ea are . Față de diagonala secundară, pozițiile de deasupra au , iar cele de dedesubt . Pentru impar, elementul central, a[n/2][n/2], aparține ambelor diagonale; pentru par, diagonalele nu au nicio poziție comună. Parcurgerea unei diagonale folosește un singur ciclu, cu pași, nu două cicluri imbricate.
Exemplul 1 — sumele diagonalelor. Pentru matricea cu liniile , , , diagonala principală conține 1, 5, 9, iar cea secundară conține 3, 5, 7.
#include <iostream>
using namespace std;
int main() {
int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int principal = 0, secundar = 0;
for (int i = 0; i < 3; ++i) {
principal += a[i][i];
secundar += a[i][2 - i];
}
cout << principal << " " << secundar;
return 0;
}
Se afișează 15 15. Elementul central, 5, apare în ambele sume. Dacă se cere suma elementelor distincte de pe cele două diagonale, centrul se numără o singură dată: .
Exemplul 2 — regiunile față de diagonala principală. În aceeași matrice, elementele de deasupra diagonalei principale () sunt , cu suma 11, iar cele de dedesubt () sunt , cu suma 19. Împreună cu diagonala principală (suma 15), cele trei regiuni acoperă toate elementele: , adică suma tuturor numerelor de la 1 la 9. Un ciclu dublu cu testul i < j parcurge exact regiunea de deasupra, iar i + j == n - 1 selectează diagonala secundară.
int sus = 0, jos = 0;
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j) {
if (i < j) sus += a[i][j];
if (i > j) jos += a[i][j];
}
Secvența lasă sus = 11 și jos = 19.
Exemplul 3 — construirea unei matrice după regulă. Pentru , cu și indici de la 0, matricea are liniile , și . Valorile de pe diagonala secundară sunt toate egale cu , pentru că pe ea. Pe diagonala principală valorile sunt . Condiția explică de ce toate elementele diagonalei secundare au aceeași valoare în această matrice. Aceeași matrice se obține cu două cicluri imbricate: for (i...) for (j...) a[i][j] = i + j;. O matrice cu 1 pe ambele diagonale și 0 în rest se completează cu testul if (i == j || i + j == n - 1) a[i][j] = 1; else a[i][j] = 0;; pentru rezultă liniile , și , cu cinci valori de 1.
Exemplul 4 — ordin par și diagonalele alăturate. Fie și , adică liniile , , , . Diagonala principală are elementele , cu suma 34, iar cea secundară are , tot cu suma 34. Pentru par nu există element central, deci cele 8 elemente sunt distincte și suma lor este . Diagonala de deasupra celei principale conține elementele cu , adică , cu suma 21; ciclul for (i = 0; i + 1 < n; ++i) s += a[i][i+1]; face doar pași. Diagonala de dedesubt, cu , are elementele și suma 30.
Pentru admitere
Condiția pentru diagonala principală este , pentru cea secundară (cu indici de la 0). Deasupra diagonalei principale avem , iar sub ea . Verifică dacă problema folosește indici de la 0 sau de la 1; formula diagonalei secundare se schimbă în consecință. Pentru ordin impar, nu număra elementul central de două ori când unești diagonalele. La numărarea elementelor dintr-o regiune, calculează întâi câte poziții are: deasupra diagonalei principale a unei matrice de ordin sunt poziții, deci 3 pentru și 6 pentru . Elementele de pe diagonale sunt pentru impar și pentru par. Un singur ciclu for (i...) cu cele două accesări a[i][i] și a[i][n-1-i] face pași, iar două cicluri imbricate cu testul i == j || i + j == n - 1 fac verificări, adică 100 pentru față de 10.
Exemplu în formatul examenului. Ce se afișează în urma executării secvenței de mai jos?
int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int t = 0;
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j)
if (i == j || i + j == 2)
t += a[i][j];
cout << t;
- a) 15
- b) 20
- c) 25
- d) 30
Răspunsul corect este c). Condiția selectează elementele de pe cele două diagonale. Instrucțiunea if este evaluată o singură dată pentru fiecare pereche , deci elementul central, pentru care ambele condiții sunt adevărate, se adună o singură dată: . Varianta d) ar rezulta dacă centrul s-ar număra de două ori, , iar varianta a) numără numai o diagonală.
Greșeli frecvente
- Greșit: diagonala secundară conține elementele
a[i][i].Corect: conținea[i][n-1-i], deci perechile cu . - Greșit: pentru ordin impar, diagonalele nu au niciun element comun.Corect: au elementul central.
- Greșit: formula se păstrează neschimbată la indici de la 1.Corect: atunci condiția este .
Testează-te pe această lecție
Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.
Înainte și după
Surse și referințe
Redactare proprie, conform programei:
- OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa X; plan de încadrare: OMECI 3410/2009, anexa 1, p. PDF 1–14; forum.isj.hd.edu.ro; filiera tehnologică: OMECI 3412/2009, anexa 2, tabel X, legislatie.just.ro
- OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa X; rocnee.eu
- UNSTPB, Regulament admitere licență 2026, Anexa II-1.2 p. Anx II-14 și Anexa XI-3 p. Anx XI-6–7 (PDF p. 64, 120–121); admitere.pub.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 3–4; edu.ro
Documente consultate
- UNSTPB, admitere 2026, anexa XI-3, p. Anx XI-6–7
- Programa școlară de informatică, clasa a X-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
- Programa școlară de informatică, clasa a IX-a, matematică-informatică (OMEC 6930/2025, anexa 42); rocnee.eu
- Programa de bacalaureat la informatică, matematică-informatică (anexa 2 la OMECTS 4800/2010), Ministerul Educației, p. 3–4; edu.ro
- Subiectele și baremele Bacalaureatului 2026; subiecte2026.edu.ro
Desene: Redactare proprie (desen original)
