Tablouri

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
Ilustrație: Tablouri bidimensionale (doar matematică-informatică)
Ilustrație generată pentru ZECE (artistică, nu o planșă științifică: pentru detalii exacte vezi schemele din lecție).

ții minte doar fișa asta și ești acoperit

Fișa de aur

  1. 01

    Doar la matematică-informatică. La științele naturii nu se cer tablouri bidimensionale; apar doar grile afișate cu două for-uri.

  2. 02

    II.3 = 6 p: acces la element 1, valori conform cerinței 4, secvență completă 1.

  3. 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.

  4. 04

    Respectă limita de atribuiri: de obicei o atribuire pe fiecare caz.

  5. 05

    Coloană cu coloană: for(j=0;j<n;j++) în exterior, for(i=0;i<m;i++) în interior.

  6. 06

    Pentru fiecare coloană, poziția minimului pornește de la capăt: p=0 se scrie în interiorul buclei pe coloane.

1 din 8

Pe scurt

2 minesențialul, de recitit oricând

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]: linia i, coloana j.
  • La II.3 completezi o formulă în două for date, cu un număr limitat de atribuiri.
  • La III.2 scrii un program care citește și prelucrează o matrice.

Ideea, apoi notația

2 min

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

2 min o întrebare la final

Pune indicii pe marginea grilei și întreabă-te ce au în comun pozițiile cu aceeași valoare.

Ce veziCe î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

8 min o întrebare la final

Iunie 2026, varianta 3. Grila 5×5, numerotare de la 0, cel mult patru atribuiri:

Grila din iunie 2026, cu indicii pe margine

0910192018111821271217223613162345141524j=01234i=01234
Pe coloanele marcate (impare), valorile scad în jos. Pe celelalte cresc.

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

6 min o întrebare la final

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

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

5 min

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

2 mincum apare la examen

  • 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

1 mincapcanele de evitat

  • Numerotare diferită: enunțul spune „de la 1”, iar tu scrii formula de la 0.
  • Prea multe atribuiri la II.3.
  • Lipsește endl sau afișarea pe linii, când enunțul o cere.
  • i și j inversate î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 local

Surse