Există situaţii în care tipurile de date învăţate până în prezent nu ne sunt de mare folos.
Presupunem că dorim să prelucrăm date referitoare la mai multi studenţi.
Astfel, pentru fiecare student cunoaştem:
1. Numele – char [15];
2. Prenumele – char[20];
3. Media la matematică – float;
4. Media la informatică –float;
5. Vârsta – int;
Observăm că informaţiile referitoare la un student sunt de tipuri eterogene: şiruri de caractere, numere reale sau întregi. Cum am putea rezolva problema cu ajutorul cunoştinţelor de care dispunem? Ar fi necesari 5 vectori, câte unul pentru fiecare informaţie. O astfel de abordare este greoaie şi inflexibilă.
Este mult mai util să folosim un tip de dată prin care fiecărui student să-i corespundă o singură înregistrare.
Soluţia C++ constă în folosirea tipului de date struct, care permite gruparea sub aceeaşi denumire a mai multor variabile (numite câpuri) de tipuri diferite, cât şi accesul şi operarea cu aceste câmpuri. Tipul struct mai poartă şi denumirea de tip înregistrare.
O structură este compusă dintr-un număr de componente de anumite tipuri. Componentele structurii se numesc câmpuri.
Fiecare câmp trebuie să aparţină unui tip de date deja definit sau unui tip standard.
Următoarele informaţii sunt preluate de la Candale Silviu
https://www.pbinfo.ro/articole/7653/tipul-struct
Sintaxa generală a declarării unui tip de date struct este următoarea:

În acest mod s-a declarat un tip de date cu numele NUME_STRUCTURA și eventual niște variabile de acest tip. În continuare NUME_STRUCTURA poate fi folosit ca un tip de date oarecare, de exemplu pentru a declara variabile sau în lista parametrilor formali ai unei funcții.
Pentru exemplul dat mai sus, declararea va fi:
struct Persoana{
char nume[21], prenume[21], sex;
int varsta;
double salariu;
};
S-a declarat o structură cu numele Persoana, dar nu s-a declarat nicio variabilă de acest tip. Pentru a declara variabile de tip Persoana putem să le adăugăm la declararea structurii:
struct Persoana{
char nume[21], prenume[21], sex;
int varsta;
double salariu;
} A, B;
(am declarat odată cu tipul de date Persoana și două variable A și B de acest tip), sau putem să le declarăm ulterior declarării tipului de date, astfel:
În declarările de mai sus avem următoarele:
Up Home Structura Site Algoritmi elementari
Cea mai importantă operație cu structuri este referirea unui câmp.
Se face cu ajutorul operatorului . (punct), numit și operator de acces la membrii unei structuri. Forma generală a acestei operații este:
variabila_de_tip_structura.câmp
Observații:
Exemplu: Considerăm următoarea secvență:
struct Persoana{
char nume[21], prenume[21], sex;
int varsta;
double salariu;
};
Persoana A, B;
Următoarele operații sunt corecte:
cin >> A.varsta;
strcpy(A.nume, "Popescu");
strcpy(B.nume, A.nume);
A.sex = 'M';
A.salariu = B.salariu + 125.80;
B.varsta ++;
Up Home Structura Site Algoritmi elementari
O variabilă de tip structură nu poate fi nici citită, nici afișată. Putem în schimb să realizăm aceste operații cu câmpurile structurii, folosind operatorul de access ..
cin >> A.nume >> A.prenume >> A.sex >> A.varsta >> A.salariu;
cout << A.nume << " " << A.prenume << " " << A.sex << " " << A.varsta << " " << A.salariu;
GREȘIT!:
cin >> A;
cout << B;
Up Home Structura Site Algoritmi elementari
Singura operație uzuală care se poate efectua cu o variabilă de tip structură este atribuirea:
A = B
unde A și B sunt două variabile de același tip structură. Atribuirea se face bit cu bit – fiecare bit din reprezentarea în memorie a variabilei B se copiază corespunzător în reprezentarea în memorie a variabilei A.
Up Home Structura Site Algoritmi elementari
Uneori într-o structură putem avea câmpuri de alt tip structură.
Exemplu:
struct Data{
int zi, luna, an;
};
struct Persoana{
char nume[21], prenume[21], sex;
int varsta;
Data data_angajarii;
double salariu;
};
Persoana A;
Am declarat doua tipuri de date: Data – pentru a memora o dată calendaristică, Persoana – pentru a memora informații despre o persoană și o variabilă A de tip Persoana. Variabila A are un câmp de tip Data, numit data_angajarii. Prin intermediul acestuia avem acces la anul, luna și ziua angajării persoanei respective.
Corect:
A // de tip Persoana
A.data_angajarii // de tip Data
A.data_angajarii.an // de tip int
Gresit:
A.Data
A.Data.an
A.an.data_angajarii
A.an.Data
A.salariu.an



Popescu Ion n 1.83 3000
Ionescu Dan d 1.75 2500
Banescu Lia n 1.67 2000



O aplicatie online poate fi exersata la xxx sau la structStruct1
Up Home Structura Site Algoritmi elementari


O aplicatie online poate fi exersata la xxx sau la structStruct2
Up Home Structura Site Algoritmi elementari



O aplicatie online poate fi exersata la xxx sau la structStruct3
Up Home Structura Site Algoritmi elementari