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
- Nu uita punctul și virgula DUPĂ acolada de închidere a struct-ului.
- Șirurile din structuri se copiază cu strcpy, nu cu =.
- Compararea a două structuri întregi cu == nu e permisă: compari câmp cu câmp.