Tablouri

Tablouri unidimensionale

Declarare, citire, parcurgere, vecini, minim cu poziție, interschimbări. Tipul de program cerut la III.2 la științele naturii, rezolvat pe patru lucrări oficiale, cu punctele din barem.

  • 28 min
  • La BAC: Subiectul al III-lea, 2 (10p, științele naturii) · I · Subiectul al III-lea, 3
  • De revizuit
Ilustrație: Tablouri unidimensionale
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

    Declarare: int a[21]; pentru cel mult 20 de elemente rezervă cel puțin atât. Primul indice e 0.

  2. 02

    III.2 SN = 10 p: tablou declarat 1, citire 1, prelucrare 6, afișare sau mesaj 1, restul 1.

  3. 03

    Vecini: for(i=0;i<n-1;i++) și folosești a[i], a[i+1]. Bucla se oprește la penultimul.

    Truc: n elemente, n-1 perechi de vecini.

  4. 04

    Minim cu poziție: pornești cu p=0 și schimbi p când găsești un element mai mic. Valoarea e a[p].

  5. 05

    Interschimbare: aux=a[i]; a[i]=a[j]; a[j]=aux;

  6. 06

    Verificare de proprietate: ok=1 la început, ok=0 la primul contraexemplu, mesajul se afișează la final.

1 din 9

Pe scurt

1 minesențialul, de recitit oricând

Culorile din lecție:termencifră, datăidee-cheie

  • Un tablou memorează mai multe valori de același tip, accesate prin poziție.
  • Forma de bază: declari, citești cu un for, prelucrezi cu un for, afișezi.
  • Apare la ambele specializări. La științele naturii e tema fixă a lui III.2, în toate lucrările SN 2024–2027.

Ideea, apoi numele oficial

3 min

Dacă ai de memorat 3 note, îți ajung 3 variabile. Pentru 20, ai vrea un singur nume și un număr de ordine: nota 0, nota 1, nota 2. Asta e un tablou unidimensional, iar numărul de ordine se numește indice.

int a[21],n,i;
cin>>n;
for(i=0;i<n;i++)
  cin>>a[i];
for(i=0;i<n;i++)
  cout<<a[i]<<" ";

Un tablou cu 5 elemente

-3215−716-20a[0]a[1]a[2]a[3]a[4]
La n=5, ultimul element este a[4], adică a[n-1].
  • int a[21] rezervă 21 de locuri, de la a[0] la a[20].
  • Dimensiunea o alegi din enunț: dacă n este cel mult 20, ai nevoie de cel puțin 20 de locuri.
  • Unele enunțuri numerotează pozițiile de la 1. Dacă le cere explicit, lași a[0] nefolosit și mergi de la 1 la n, cu dimensiune cu 1 mai mare.

În Pascal: var a:array[0..20] of integer;. Accesul este tot a[i].

Patru lucruri de știut să faci

2 min

Vecini
Idee
n-1 perechi
Cod
for(i=0;i<n-1;i++) ... a[i], a[i+1] ...
Ultimul element
Idee
indicele n-1
Cod
a[n-1]
Poziția minimului
Idee
pornești de la primul
Cod
p=0; for(i=1;i<n;i++) if(a[i]<a[p]) p=i;
Interschimbare
Idee
trei atribuiri
Cod
aux=a[i]; a[i]=a[j]; a[j]=aux;
1 / 4

Mai există verificarea unei proprietăți: ok pornește 1 și devine 0 la primul contraexemplu. Baremul o numește „algoritm de bază pentru verificarea unei proprietăți”.

Oficial: iunie 2026, varianta 3, SN III.2

5 min o întrebare la final

Se citesc n (din [2,20]) și n numere întregi nenule din [-10⁹,10⁹]. Se afișează alterneaza dacă nu există două numere pozitive sau două negative pe poziții consecutive, altfel nu alterneaza. Pentru (-32,15,-7,16,-20) mesajul e alterneaza, iar pentru (-32,15,-7,16,20) e nu alterneaza.

#include <iostream>
using namespace std;

int main()
{ int n,i,a[21],ok=1;
  cin>>n;
  for(i=0;i<n;i++)
    cin>>a[i];
  for(i=0;i<n-1;i++)
    if((a[i]>0 && a[i+1]>0) || (a[i]<0 && a[i+1]<0))
      ok=0;
  if(ok==1) cout<<"alterneaza";
  else cout<<"nu alterneaza";
  return 0;
}

Barem (10 p)Puncte

tablou declarat
1
date citite
1
proprietate verificată: câte 1 p pentru algoritmul de verificare, identificarea unui număr pozitiv sau negativ, accesul la poziții consecutive, perechi pozitive, perechi negative, valori suport verificate
6
mesaj afișat
1
variabile simple, corectitudine globală
1

Ce valori trebuie comparate ca să vezi dacă în șir există doi vecini pozitivi?

Oficial: sesiunea specială 2026, varianta 4, SN III.2

4 min 2 întrebări la final

Se citesc n (din [2,50]) și n numere naturale din [0,100]. Interschimbă minimul cu primul element, dacă minimul e par, sau cu ultimul, dacă e impar, apoi afișează tabloul. Pentru (8,6,2,2,7,4) se poate obține (2,6,8,2,7,4), iar pentru (8,6,1,2,7,4) se obține (8,6,4,2,7,1).

#include <iostream>
using namespace std;

int main()
{ int n,i,a[51],p,aux,j;
  cin>>n;
  for(i=0;i<n;i++)
    cin>>a[i];
  p=0;
  for(i=1;i<n;i++)
    if(a[i]<a[p]) p=i;
  if(a[p]%2==0) j=0;
  else j=n-1;
  aux=a[p]; a[p]=a[j]; a[j]=aux;
  for(i=0;i<n;i++)
    cout<<a[i]<<" ";
  return 0;
}

Barem (10 p)Puncte

tablou declarat
1
date citite
1
tablou determinat: câte 1 p pentru minim, poziția lui, primul/ultimul element, interschimbare, elemente interschimbate/păstrate, obținere în memorie
6
afișare
1
variabile simple, corectitudine globală
1

Dacă minimul e pe mai multe poziții, enunțul spune că se alege doar una; programul o alege pe prima.

Care sunt indicii unui tablou cu n elemente, numerotate de la 0?

Cum interschimbi a[i] cu a[j]?

Oficial: iunie 2025, varianta 1, SN III.2

4 min

Dacă n e par, primii n/2 termeni își schimbă locul cu ultimii n/2, păstrând ordinea. Pentru (2,3,4,4,5,1) rezultă (4,5,1,2,3,4). Dacă n e impar, se afișează nu exista.

#include <iostream>
using namespace std;

int main()
{ int n,i,a[101],aux;
  cin>>n;
  for(i=0;i<n;i++)
    cin>>a[i];
  if(n%2==1) cout<<"nu exista";
  else
  { for(i=0;i<n/2;i++)
    { aux=a[i];
      a[i]=a[i+n/2];
      a[i+n/2]=aux;
    }
    for(i=0;i<n;i++)
      cout<<a[i]<<" ";
  }
  return 0;
}

Cheia e perechea: elementul de pe poziția i se schimbă cu cel de pe poziția i+n/2. Pe un exemplu cu n=6: 0 cu 3, 1 cu 4, 2 cu 5.

Barem: câte 1 p pentru identificarea unui tablou cu număr par de elemente, interschimbare sau mutare, valori din prima jumătate, valori din a doua jumătate, transformare în memorie, tratarea cazului nu exista.

Oficial: model 2027, SN III.2

3 min

Se citesc n și n numere din [1,10⁴]. Afișează câți termeni sunt pătrate perfecte impare și strict mai mici decât ultimul număr citit. Pentru 9 27 81 25 49 100 101 25 77 16 49, răspunsul este 3 (adică 9, 25, 25).

#include <iostream>
#include <cmath>
using namespace std;

int main()
{ int n,i,a[101],r,nr=0;
  cin>>n;
  for(i=0;i<n;i++)
    cin>>a[i];
  for(i=0;i<n;i++)
  { r=sqrt(a[i]);
    if(r*r==a[i] && a[i]%2==1 && a[i]<a[n-1])
      nr++;
  }
  cout<<nr;
  return 0;
}

De aceea enunțul are nevoie de tablou: ultimul număr se află abia la final.

Barem: câte 1 p pentru numărare cu inițializare și actualizare, pătrat perfect, par/impar, identificarea ultimului element (pentru rezolvare parțială), din 6 p la determinarea numărului.

Ce se cere la BAC

3 mincum apare la examen

Lucrare SNCerința de la III.2

August 2026 var. 1
perechi cod-ore în tablou: codul cu cel mai mic necesar de ore
August 2025 var. 4
înlocuirea minimului cu ultima valoare
Iulie 2024 var. 3
toate valorile au același număr de cifre: DA k sau NU

La matematică-informatică, tablourile unidimensionale apar cel mai des la III.3, ca vector de frecvență (vezi lecția despre fișiere).

Greșeli care costă puncte

2 mincapcanele de evitat

  • Dimensiune prea mică: int a[20] pentru „cel mult 20” merge doar cu indici de la 0.
  • a[n] în loc de a[n-1] pentru ultimul element.
  • i<n la vecini: accesezi un element în afara șirului.
  • Afișezi „ca și cum”, fără să modifici tabloul, când enunțul cere transformare în memorie.
  • Mesajul în interiorul buclei, afișat de mai multe ori.
  • Interschimbare fără aux: a[i]=a[j]; a[j]=a[i]; pierde o valoare.

Termeni-cheie

Tablou unidimensional
Șir de valori de același tip, memorate una după alta, accesate prin indice: a[0], a[1], ...
Indice
Poziția unui element în tablou. În C/C++ primul indice este 0.
Dimensiune
Numărul maxim de elemente pentru care se rezervă loc la declarare: int a[100] are locuri de la a[0] la a[99].
Parcurgere
Trecerea prin elemente cu un for, de obicei de la primul la ultimul.
Poziții consecutive
Două elemente vecine: a[i] și a[i+1]. Bucla se oprește la penultimul element.
Interschimbare
Schimbarea valorilor a două elemente cu o variabilă auxiliară: aux=a[i]; a[i]=a[j]; a[j]=aux;
Transformare în memorie
Programul modifică efectiv tabloul, nu doar afișează ce ar rezulta.

Notițele mele

Salvat local

Surse