Tablouri bidimensionale (doar matematică-informatică)
Doar la matematică-informatică. Linii, coloane, diagonale și formula care leagă valoarea de poziție: II.3 (6 p), cu limita de atribuiri, și III.2 (10 p), cu prelucrarea coloană cu coloană. Patru grile oficiale și două programe.
- 28 min
- La BAC: Subiectul al II-lea, 3 (6p) · Subiectul al III-lea, 2 (10p)
- De revizuit

ții minte doar fișa asta și ești acoperit
Fișa de aur
- 01
Doar la matematică-informatică. La științele naturii nu se cer tablouri bidimensionale; apar doar grile afișate cu două for-uri.
- 02
II.3 = 6 p: acces la element 1, valori conform cerinței 4, secvență completă 1.
- 03
Metoda: scrie indicii pe marginea grilei și caută legătura cu i, j, i+j, i-j sau cu paritatea lor.
Truc: Diagonalele se recunosc după i+j sau i-j constant.
- 04
Respectă limita de atribuiri: de obicei o atribuire pe fiecare caz.
- 05
Coloană cu coloană: for(j=0;j<n;j++) în exterior, for(i=0;i<m;i++) în interior.
- 06
Pentru fiecare coloană, poziția minimului pornește de la capăt: p=0 se scrie în interiorul buclei pe coloane.
Pe scurt
Culorile din lecție:termencifră, datăidee-cheie
- Această lecție e doar pentru matematică-informatică. Programa de la științe ale naturii se oprește la tablouri unidimensionale.
a[i][j]: liniai, coloanaj.- La II.3 completezi o formulă în două
fordate, cu un număr limitat de atribuiri. - La III.2 scrii un program care citește și prelucrează o matrice.
Ideea, apoi notația
Un tablou bidimensional e un tabel. O poziție are două coordonate: rând și coloană, ca la jocul de vapoare.
int a[51][51],m,n,i,j;
cin>>m>>n;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>a[i][j];
for(i=0;i<m;i++)
{ for(j=0;j<n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
Oficial: a[i][j] e elementul de pe linia i și coloana j. Liniile se numesc și rânduri în enunțuri. Declararea cu două perechi de paranteze drepte e singura corectă; la iunie 2025 var. 1, I.3, varianta bună e float m[4][25];, nu float m[2,50];.
În Pascal: var a:array[0..50,0..50] of integer;, iar accesul e a[i,j].
Cum găsești formula
Pune indicii pe marginea grilei și întreabă-te ce au în comun pozițiile cu aceeași valoare.
Ce veziCe încerci
j%2 sau i%2j/2i+j mai mic sau mai mare decât o valoarei-j5*j+i| Ce vezi | Ce încerci |
|---|---|
| pe coloane sau pe linii alternante | j%2 sau i%2 |
| coloane grupate câte două | j/2 |
| triunghi în colț | i+j mai mic sau mai mare decât o valoare |
| paralele cu diagonala principală | i-j |
| număr care crește din 5 în 5 | 5*j+i |
Ce relație au i și j pe diagonala secundară, cu numerotare de la 0, în n×n?
Oficial: patru grile de la II.3
Iunie 2026, varianta 3. Grila 5×5, numerotare de la 0, cel mult patru atribuiri:
Grila din iunie 2026, cu indicii pe margine
Pe coloana 0 valorile cresc în jos: i. Pe coloana 1 scad de la 9: 9-i, adică 5*1+4-i. Pe coloana 2 pornesc de la 10: 10+i, adică 5*2+i. Pe coloanele pare 5*j+i, pe cele impare 5*j+4-i.
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(j%2==0) a[i][j]=5*j+i;
else a[i][j]=5*j+4-i;
Două atribuiri. Barem: acces la element 1 p; valori 4 p (câte 2 p pentru relația dintre valoare și poziție și pentru valori suport cu numărul indicat de atribuiri); secvență completă 1 p.
Model 2027. Grila 8×8, numerotare de la 0, cel mult trei atribuiri, cu valorile inițiale -1. Fiecare linie arată la fel:
2 2 0 0 2 2 7 7
Coloanele merg două câte două, deci poți folosi j/2: 0 dă 2, 1 dă 0, 2 dă 2, 3 dă 7.
for(i=0;i<8;i++)
for(j=0;j<8;j++)
if(j/2==1) a[i][j]=0;
else if(j/2==3) a[i][j]=7;
else a[i][j]=2;
Iulie 2024, varianta 3. Grila 9×9, de la 0, cel mult patru atribuiri. În colțul din stânga-sus și în cel din dreapta-jos e 4, restul e 2. Primul rând are patru de 4 (j până la 3), deci i+j<4. Ultimul rând are patru de 4 de la j=5, deci i+j de la 13 în sus, adică i+j>12.
for(i=0;i<9;i++)
for(j=0;j<9;j++)
if(i+j<4 || i+j>12) a[i][j]=4;
else a[i][j]=2;
Aceeași condiție e varianta c din I.5, de la lucrarea SN din acea sesiune.
August 2026, varianta 1. Grila 5×5, numerotare de la 1, cel mult trei atribuiri:
2 3 2 3 2
3 0 3 0 3
2 3 2 3 2
3 0 3 0 3
2 3 2 3 2
Pe liniile pare alternează 3 și 0, pe liniile impare alternează 2 și 3.
for(i=1;i<=5;i++)
for(j=1;j<=5;j++)
if(i%2==0) a[i][j]=3*(j%2);
else a[i][j]=2+(j+1)%2;
Expresiile sunt cele din varianta d a itemului I.2 de la lucrarea SN din aceeași sesiune.
Cum declari o matrice cu cel mult 50 de linii și 50 de coloane?
Oficial: sesiunea specială 2026, varianta 4, III.2
Se citesc m, n (din [2,50]) și matricea, cu valori din [0,100]. Pentru fiecare coloană, minimul se interschimbă cu primul element al coloanei, dacă e par, sau cu ultimul, dacă e impar. Se afișează tabloul obținut.
#include <iostream>
using namespace std;
int main()
{ int a[51][51],m,n,i,j,p,l,aux;
cin>>m>>n;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>a[i][j];
for(j=0;j<n;j++)
{ p=0;
for(i=1;i<m;i++)
if(a[i][j]<a[p][j]) p=i;
if(a[p][j]%2==0) l=0;
else l=m-1;
aux=a[p][j]; a[p][j]=a[l][j]; a[l][j]=aux;
}
for(i=0;i<m;i++)
{ for(j=0;j<n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}
Observă că bucla exterioară merge pe coloane. Ce e în interiorul ei e exact algoritmul de la tablouri unidimensionale, aplicat pe o coloană. Pentru exemplul din enunț, rezultatul coincide cu cel dat. Tabloul citit:
7 5 3 0 9
1 2 1 9 7
2 2 0 1 5
5 6 1 2 8
Tabloul obținut:
7 2 0 0 9
5 5 1 9 7
2 2 3 1 8
1 6 1 2 5
Barem (10 p)Puncte
| Barem (10 p) | Puncte |
|---|---|
| tablou bidimensional declarat | 1 |
| date citite | 1 |
| tablou determinat: câte 1 p pentru minim într-o serie, poziția minimului, primul/ultimul element al coloanei, interschimbare, elemente interschimbate/păstrate, obținere în memorie | 6 |
| afișare | 1 |
| variabile simple, corectitudine globală | 1 |
Câte puncte valorează expresia de acces la un element, la II.3?
Oficial: august 2025, varianta 4, III.2
Toate elementele coloanei care conține minimul din tablou se înlocuiesc cu elementul de pe ultima linie și ultima coloană.
#include <iostream>
using namespace std;
int main()
{ int a[101][101],m,n,i,j,cmin=0,lmin=0,x;
cin>>m>>n;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{ cin>>a[i][j];
if(a[i][j]<a[lmin][cmin])
{ lmin=i;
cmin=j;
}
}
x=a[m-1][n-1];
for(i=0;i<m;i++)
a[i][cmin]=x;
for(i=0;i<m;i++)
{ for(j=0;j<n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}
Pentru 3 linii, 4 coloane și liniile 17 12 5 19, 10 16 2 4, 11 21 8 9, minimul e 2, pe coloana a treia, iar ultimul element e 9. Rezultatul: 17 12 9 19, 10 16 9 4, 11 21 9 9, ca în enunț.
Aici programul găsește minimul chiar în timpul citirii. Poți face asta pentru că a[lmin][cmin] este deja citit când îl compari cu elementul nou. Pornind cu lmin=0 și cmin=0, primul element se compară cu el însuși, ceea ce nu strică nimic.
Barem: câte 1 p pentru determinarea unei valori minime, valori suport verificate, identificarea coloanei suport a minimului, a elementului de pe ultima linie și ultima coloană, elemente înlocuite sau nemodificate, modificare în memorie.
Ce se cere la BAC
- II.3 (5 din cele 15 lucrări MI numărate în 2024–2027): formula pentru o grilă, cu o limită de atribuiri.
- III.2 (6 din cele 15): citire, prelucrare pe linii sau coloane și, de obicei, afișare linie cu linie.
- La rezerva 2025 var. 7 și rezerva 2026 var. 5, III.2 lucrează pe linii sau pe coloane cu un enunț din viață: locuri de parcare, coloane stabile.
Greșeli care costă puncte
- Numerotare diferită: enunțul spune „de la 1”, iar tu scrii formula de la 0.
- Prea multe atribuiri la II.3.
- Lipsește
endlsau afișarea pe linii, când enunțul o cere. ișijinversate într-o parcurgere pe coloane.a[i,j]în C/C++: e sintaxa din Pascal.
Termeni-cheie
- Tablou bidimensional
- Tabel de valori de același tip, cu linii și coloane; a[i][j] este elementul de pe linia i și coloana j.
- Diagonala principală
- Elementele cu i==j într-un tablou cu n linii și n coloane.
- Diagonala secundară
- Elementele cu i+j==n-1 la numerotarea de la 0, sau i+j==n+1 la numerotarea de la 1.
- Parcurgere pe coloane
- Bucla exterioară merge pe coloane (j), iar cea interioară pe linii (i).
- Relație între valoare și poziție
- Formula prin care se obține elementul din i și j. Baremul o punctează separat la II.3.
Notițele mele
Salvat localSurse
- BAC 2026, sesiunea iunie-iulie, varianta 3, MI: II.3, cu barem
- Model BAC 2027, MI: II.3, cu barem
- BAC 2024, sesiunea iulie, varianta 3, MI: II.3, cu barem
- BAC 2026, sesiunea august, varianta 1, MI: II.3, cu barem
- BAC 2026, sesiunea specială, varianta 4, MI: III.2, cu barem
- BAC 2025, sesiunea august, varianta 4, MI: III.2, cu barem