Pe scurt
Prelucrarea unei matrice înseamnă aplicarea unei operații tuturor elementelor sau unei regiuni definite: o linie, o coloană, o diagonală ori elementele care satisfac o condiție. Alegerea indicilor din bucle trebuie să corespundă exact regiunii. Pentru liniile și , suma celei de-a doua coloane este .
În detaliu
Prelucrarea unei matrice înseamnă aplicarea unei operații tuturor elementelor sau unei regiuni definite: o linie, o coloană, o diagonală, o zonă triunghiulară sau elementele care respectă o condiție. Alegerea limitelor și a ciclurilor trebuie să corespundă exact regiunii: pentru o linie se folosește un singur ciclu după , pentru toate liniile unul exterior după , iar acumulatorul unei linii se reinițializează la începutul fiecărei linii. Pentru vecinătăți, indicii vecinilor sunt , , și în vecinătatea cu patru direcții; la marginea matricei, unii dintre ei ies din matrice și trebuie verificați înainte de acces.
Exemplul 1 — suma fiecărei linii.
int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
for (int i = 0; i < 2; ++i) {
int suma = 0;
for (int j = 0; j < 3; ++j)
suma += a[i][j];
cout << suma << " ";
}
Pentru prima linie suma ia valorile 1, 3, 6; pentru a doua 4, 9, 15. Se afișează 6 15. Variabila suma este resetată la 0 la începutul fiecărei linii. Dacă ar fi inițializată doar înaintea buclei exterioare, valorile afișate ar fi 6 21, pentru că a doua sumă ar include și linia întâi.
Exemplul 2 — vecinii unei celule. În matricea cu liniile , , celula interioară , cu valoarea 5, are patru vecini: sus 2, jos 8, stânga 4, dreapta 6. Suma lor este . Celula , din colț, are doar doi vecini în matrice, și , adică 4 și 2, cu suma 6; ceilalți doi, și , ar ieși din matrice. Pentru un caz general, fiecare vecin se adună numai dacă și .
Exemplul 3 — transpunerea unei matrice pătratice. Transpusa înlocuiește elementul cu . Pentru o matrice pătratică, ea se obține schimbând între ele perechile de elemente simetrice față de diagonala principală. Se parcurg numai pozițiile de deasupra diagonalei, cu , pentru ca fiecare pereche să fie schimbată o singură dată.
for (int i = 0; i < 3; ++i)
for (int j = i + 1; j < 3; ++j) {
int aux = a[i][j];
a[i][j] = a[j][i];
a[j][i] = aux;
}
Matricea cu liniile , , devine , , . Dacă ciclul interior ar parcurge toate coloanele, fiecare pereche ar fi schimbată de două ori și matricea ar rămâne neschimbată. Pentru o matrice dreptunghiulară cu linii și coloane transpusa are linii și coloane, deci nu se poate face pe loc; rezultatul se scrie într-o a doua matrice, b[j][i] = a[i][j]. Pentru liniile și , transpusa are trei linii: , și .
Exemplul 4 — maximul pe fiecare linie. Pentru matricea cu liniile și se caută maximul fiecărei linii.
int a[2][3] = {{3, 9, 2}, {7, 1, 8}};
for (int i = 0; i < 2; ++i) {
int mx = a[i][0];
for (int j = 1; j < 3; ++j)
if (a[i][j] > mx)
mx = a[i][j];
cout << mx << " ";
}
Pe prima linie mx pornește de la 3, devine 9 la și rămâne 9 după ; pe a doua pornește de la 7, rămâne 7 la și devine 8 la . Se afișează 9 8. Pentru linia , o inițializare cu 0 ar da greșit 0; inițializarea cu primul element al liniei dă corect .
Pentru admitere
La un program care schimbă elemente, urmărește matricea după fiecare atribuire. Transpunerea schimbă liniile cu coloanele; pentru o matrice pătratică se poate face prin schimburi numai deasupra diagonalei principale, astfel încât fiecare pereche să fie tratată o dată. Pentru una dreptunghiulară, dimensiunile rezultatului se inversează. Pentru vecinătăți, înainte de acces testează limitele (în matricea a exemplului, celula centrală este singura cu patru vecini): pentru celula vecinii cu indici negativi nu există. Verifică și locul în care se resetează acumulatorii: o sumă pe linii cere resetare la fiecare linie, iar o sumă totală nu.
Exemplu în formatul examenului. Ce se afișează în urma executării secvenței de mai jos?
int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
int s = 0;
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 3; ++j)
s += a[i][j];
cout << s << ' ';
}
- a)
6 15 - b)
6 21 - c)
21 21 - d)
1 4
Răspunsul corect este b). Variabila s este declarată o singură dată, înaintea ciclurilor, și nu este resetată la trecerea la linia următoare. După prima linie și se afișează 6; pe a doua linie se continuă de la 6: , deci se afișează 21. Varianta a) ar fi corectă dacă s = 0 ar fi scris în ciclul exterior, înaintea ciclului interior.
Poți verifica numărarea vecinilor pe matricea : celula centrală are 4 vecini, cele 4 celule de pe laturi au câte 3, iar cele 4 colțuri au câte 2. Suma este , adică de două ori numărul perechilor de celule vecine, 12.
Greșeli frecvente
- Greșit: acumulatorul unei sume pe linii se inițializează o singură dată, înaintea ambelor cicluri.Corect: se reinițializează la începutul fiecărei linii.
- Greșit: transpunerea unei matrice pătratice se face parcurgând toate perechile cu schimb.Corect: se parcurge doar jumătatea de deasupra diagonalei, altfel schimburile se anulează.
- Greșit: celulele de la margine au tot patru vecini în matrice.Corect: vecinii care ies din matrice trebuie omiși.
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), conform Programa școlară de informatică, clasa a X-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
