Pe scurt
Un tablou bidimensional organizează valori pe linii și coloane. O matrice cu două linii și trei coloane are șase elemente. În C++, pentru int a[2][3] = {{1,2,3},{4,5,6}};, a[1][2] este 6: indicele 1 selectează a doua linie, iar 2 selectează a treia coloană.
În detaliu
O matrice este un tablou bidimensional: elementele sunt așezate pe linii și coloane, iar fiecare element se identifică prin doi indici, a[i][j], unde este linia și este coloana. Declarația int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; creează o matrice cu 2 linii și 3 coloane, cu elemente; indicii valizi sunt 0–1 pentru linii și 0–2 pentru coloane, iar a[1][2] este 6. Elementele unei linii sunt memorate consecutiv în memorie. Parcurgerea cere două cicluri imbricate: cel exterior fixează linia, iar cel interior parcurge coloanele ei; numărul de execuții ale corpului interior este produsul dintre numărul de linii și numărul de coloane. Dacă ordinea buclelor se inversează, matricea se parcurge pe coloane, iar limitele fiecărei bucle se adaptează dimensiunii pe care o parcurge. Pentru citire se folosesc tot două cicluri: for (i...) for (j...) cin >> a[i][j];, iar numerele și se citesc înainte.
Exemplul 1 — suma elementelor și sumele pe coloane.
#include <iostream>
using namespace std;
int main() {
int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
int suma = 0;
for (int i = 0; i < 2; ++i)
for (int j = 0; j < 3; ++j)
suma += a[i][j];
cout << suma;
return 0;
}
Prima linie adună , a doua ; se afișează 21. Pentru suma fiecărei coloane se inversează rolurile buclelor: ciclul exterior parcurge coloanele , iar cel interior liniile; sumele coloanelor sunt 5, 7 și 9, iar suma lor este tot 21.
Exemplul 2 — maximul, poziția lui și linia cu suma cea mai mare. Pentru matricea cu 3 linii și 4 coloane
se parcurge fiecare linie și se calculează suma ei, iar în același timp se actualizează maximul elementelor. Sumele liniilor sunt 19, 21 și 19, deci linia cu suma maximă este linia 1 (numerotare de la 0), cu suma 21. Valoarea maximă este 9 și apare de două ori: la linia 1, coloana 0, și la linia 2, coloana 2. Dacă testul este strict, a[i][j] > mx, rămâne prima apariție, deci poziția găsită este (1, 0).
Pentru a număra elementele care respectă o condiție se păstrează un contor în afara ambelor cicluri. Dacă, în matricea de mai sus, se numără elementele mai mari decât 5, contorul ajunge la 5: valorile 8 și 7 din prima linie, 9 și 6 din a doua și 9 din a treia. Pentru a afla linia cu suma maximă se păstrează două valori, suma maximă și numărul liniei, și se actualizează numai când o linie are suma strict mai mare.
Exemplul 3 — lungimea memoriei. Pentru o matrice cu linii și coloane se rezervă elemente. Declarația int b[3][4] ocupă de octeți dacă un int are 4 octeți. Nu confunda numărul de linii cu numărul de coloane: dacă ciclurile folosesc limitele inversate, a[i][j] iese în afara matricei și citește valori care nu îi aparțin. Elementele sunt memorate pe linii, deci b[i][j] se află la elemente de la începutul tabloului: pentru b[2][1] deplasamentul este .
Pentru admitere
Desenează tabelul și notează indicii pe ambele margini înainte de a urmări un fragment. Dacă se cere suma coloanei cu indice 1, aduni a[0][1] + a[1][1] = 2 + 5 = 7. Nu confunda numărul de linii cu numărul de coloane, mai ales când matricea nu este pătratică. Când două cicluri imbricate modifică elemente, urmărește ordinea parcurgerii: o atribuire poate folosi valori deja schimbate de pași anteriori. Parcurgerea pe linii (ciclul exterior după ) și cea pe coloane (ciclul exterior după ) vizitează aceleași elemente în ordine diferită; ordinea contează când se afișează elementele sau când o atribuire depinde de elementul precedent. Un tablou declarat a[2][3] are 2 linii; dacă dimensiunile se citesc, se declară capacitatea maximă din enunț, iar în cicluri se folosesc dimensiunile citite.
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 j = 0; j < 3; ++j)
s += a[1][j] - a[0][j];
cout << s;
- a) 3
- b) 6
- c) 9
- d) 21
Răspunsul corect este c). Pentru fiecare coloană se calculează diferența dintre elementul din linia 1 și cel din linia 0: , , . Suma lor este 9. Varianta d) este suma tuturor elementelor matricei, iar varianta a) ar fi diferența pe o singură coloană.
Al doilea exemplu — diagonala secundară. Pentru matricea pătratică a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}, elementele diagonalei secundare au suma indicilor egală cu , adică a[i][2-i]. Ciclul for (int i = 0; i < 3; ++i) s += a[i][2-i]; adună . Diagonala principală, a[i][i], dă în această matrice, dar rezultatele coincid doar din cauza valorilor alese; la altă matrice ele diferă, deci nu confunda cele două sume.
Greșeli frecvente
- Greșit: în
a[2][3]primul indice este coloana.Corect: primul indice este linia, iar al doilea este coloana. - Greșit: într-o matrice cu 2 linii și 3 coloane există elementul
a[2][3].Corect: indicii valizi sunt 0–1 pe linii și 0–2 pe coloane. - Greșit: două cicluri imbricate cu limitele inversate parcurg același număr de elemente, deci sunt corecte la orice matrice.Corect: la o matrice care nu este pătratică, limitele inversate ies din matrice.
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
- OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa XI; plan de încadrare: OMEC 7723/2024, anexa 2, tabelele 1–25, legislatie.just.ro; filiera tehnologică: OMEC 7724/2024, anexa 4, tabelul calificării, legislatie.just.ro
- 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)
