Structuri de date

Tablouri — vectori si matrice

Vectori unidimensionali, matrice, parcurgere, operatii frecvente la BAC.

Capitole Formule Teste Calculator Grafic

Vectorul (tablou unidimensional)

int v[100];       // declara vector cu maxim 100 elemente
int v[100] = {};  // initializat cu 0

Indexare: elementele sunt v[0], v[1], …, v[n-1]

La BAC se foloseste adesea indexare de la 1: v[1]..v[n]

Citire:

int n, v[1001];
cin >> n;
for (int i = 1; i <= n; i++)
    cin >> v[i];

Afisare:

for (int i = 1; i <= n; i++)
    cout << v[i] << " ";

Operatii frecvente pe vectori

Suma elementelor:

int s = 0;
for (int i = 1; i <= n; i++) s += v[i];

Maximul:

int mx = v[1];
for (int i = 2; i <= n; i++)
    if (v[i] > mx) mx = v[i];

Numararea elementelor pare:

int cnt = 0;
for (int i = 1; i <= n; i++)
    if (v[i] % 2 == 0) cnt++;

Inversarea vectorului:

for (int i = 1; i <= n / 2; i++)
    swap(v[i], v[n + 1 - i]);

Matricea (tablou bidimensional)

int a[101][101];  // matrice cu maxim 100x100

Citire:

int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
        cin >> a[i][j];

Afisare:

for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++)
        cout << a[i][j] << " ";
    cout << "\n";
}

Operatii pe matrice

Suma elementelor:

int s = 0;
for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
        s += a[i][j];

Diagonala principala (numai daca n == m):

for (int i = 1; i <= n; i++)
    cout << a[i][i] << " ";

Diagonala secundara:

for (int i = 1; i <= n; i++)
    cout << a[i][n + 1 - i] << " ";

Transpusa:

for (int i = 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++)
        swap(a[i][j], a[j][i]);

Transmitere tablou la functie

void afiseaza(int v[], int n) {
    for (int i = 1; i <= n; i++)
        cout << v[i] << " ";
}

// matrice:
void afiseazaM(int a[][101], int n, int m) { ... }

La examen

  • Declara vectorul suficient de mare (ex: v[100001] pentru n pana la 100.000)
  • Nu uita sa citesti n inainte de vector
  • La matrice patrata: diagonala principala are i == j, secundara are i + j == n + 1
  • swap(a, b) schimba doua valori (din <algorithm> sau implementeaza manual)