Sari la conținut

Capitolul 12 · Lecția 12.1 din 2

Structuri (struct) în C++

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

Capitolul 12: Structuri (struct)Conținut verificat

Pe scurt pentru BAC · 4 idei

  • struct grupează date de tipuri diferite într-un singur tip nou, de exemplu un Elev cu nume și nota.
  • Câmpurile se accesează cu operatorul punct, iar într-un vector de structuri scrii v[i].nota.
  • La catalogul cu n elevi reții indicele imax al celui cu nota cea mai mare și afișezi la final v[imax].nume.
  • Un câmp poate fi el însuși o structură, iar accesul se face în lanț, ca la e.nastere.an.
Pe această pagină4 secțiuni

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.

Reține

Punct pentru variabile obișnuite (e.nota); săgeată -> doar pentru pointeri la structuri (p->nota), rar cerută la BAC.

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.

Bifează când ai terminat, ca s-o vezi citită pe toate dispozitivele.

Testează-te pe capitolul 12

Lecția în clipuri

Clipuri scurte, cu voce și subtitrări.

Folosim cookie-uri esențiale, fără de care site-ul nu merge, și cookie-uri de analiză anonimizate, ca să vedem ce pagini ajută. Detalii în politica de confidențialitate