Sari la conținut
LECȚIA 12.1 · INFORMATICĂ

Structuri (struct) în C++

Definirea tipurilor struct, accesarea câmpurilor și vectori de structuri.

Conținut verificat

Definirea unei structuri

struct grupează date de tipuri diferite într-un singur tip nou:

Declararea unei structuri
#include <iostream>
using namespace std;

struct Elev {
    char nume[21];
    int nota;
};

int main() {
    Elev e = {"Ana", 9};
    cout << e.nume << " " << e.nota;
    return 0;
}

Atenție: Aceeasi idee are alt nume in fiecare limbaj: struct in C si C++, record in Pascal, dataclass in Python. Accesul la camp se face peste tot cu punct.

se trimit programului la citire

Accesarea câmpurilor se face cu operatorul PUNCT: e.nota = 9;, strcpy(e.nume, "Ana");.

Vectori de structuri

Tiparul de BAC: catalogul cu n elevi.

Vector de structuri, cu citire
#include <iostream>
#include <cstdio>
using namespace std;

struct Elev {
    char nume[21];
    int nota;
};

int main() {
    Elev v[100];
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> v[i].nume >> v[i].nota;
    int s = 0;
    for (int i = 0; i < n; i++)
        s = s + v[i].nota;
    printf("media: %.2f", (double)s / n);
    return 0;
}
se trimit programului la citire

Pentru intrarea 3, Ana 9, Dan 10, Ioana 8, programul afișează Dan.

Structuri imbricate

Un câmp poate fi el însuși o structură:

Structura in structura
#include <iostream>
using namespace std;

struct Data {
    int zi, luna, an;
};

struct Elev {
    char nume[21];
    Data nastere;
};

int main() {
    Elev e = {"Ana", {14, 3, 2008}};
    cout << e.nume << " " << e.nastere.zi << "." << e.nastere.luna << "." << e.nastere.an;
    return 0;
}

Atenție: Accesul in adancime se scrie la fel peste tot: numele variabilei, punct, campul exterior, punct, campul interior.

se trimit programului la citire

Accesarea se face în lanț: e.nastere.an.

Greșeli frecvente

  1. Nu uita punctul și virgula DUPĂ acolada de închidere a struct-ului.
  2. Șirurile din structuri se copiază cu strcpy, nu cu =.
  3. Compararea a două structuri întregi cu == nu e permisă: compari câmp cu câmp.