Structuri de date neomogene

Ce sunt structurile de date neomogene?

Până acum, am lucrat cu tipuri de date simple (int, float, char etc.) și cu tipuri de date derivate (tablouri, șiruri de caractere). Însă, deseori, informațiile pe care dorim să le reprezentăm într-un program sunt mai complexe și nu pot fi exprimate doar prin aceste tipuri de date. De exemplu, pentru a reprezenta informații despre o persoană, am putea avea nevoie de nume (șir de caractere), vârstă (număr întreg), înălțime (număr real) și așa mai departe.

Structurile de date neomogene ne permit să grupăm mai multe elemente de tipuri diferite sub un singur nume. Cu alte cuvinte, ne permit să creăm tipuri de date personalizate, adaptate nevoilor noastre specifice.

Definirea unei structuri

Pentru a defini o structură, utilizăm cuvântul cheie struct urmat de numele structurii și, între acolade, o listă de membri (câmpuri). Fiecare membru are un nume și un tip de date asociat.

C++

struct Persoana {
    char nume[30];
    int varsta;
    float inaltime;
};

În exemplul de mai sus, am definit o structură numită Persoana care are trei membri: nume (un șir de caractere), varsta (un număr întreg) și inaltime (un număr real).

Declararea unei variabile de tip structură

După ce am definit o structură, putem declara variabile de acest tip:

C++

Persoana student;

Aici, student este o variabilă de tip Persoana. Aceasta înseamnă că variabila student poate stoca informații despre o singură persoană.

Operații cu variabile declarate de tip structură

Putem accesa și modifica valorile membrilor unei structuri folosind operatorul punct (.):

C++

student.nume = "Ion Popescu";
student.varsta = 20;
student.inaltime = 1.80;

Înregistrări imbricate

O structură poate conține și alte structuri ca membri. De exemplu:

C++

struct DataNasterii {
    int zi;
    int luna;
    int an;
};

struct Persoana {
    char nume[30];
    DataNasterii dataNastere;
};

În acest exemplu, structura Persoana conține un membru de tip DataNasterii, care la rândul său este o structură. Pentru a accesa ziua nașterii a unei persoane, am folosi:

C++

student.dataNastere.zi

Structuri care conțin câmpuri de tip tablouri unidimensionale

O structură poate avea ca membri și tablouri unidimensionale:

C++

struct Student {
    char nume[30];
    int note[5]; // Un tablou pentru a stoca notele la 5 materii
};

Vectori de structuri

Putem declara un vector de structuri pentru a stoca informații despre mai multe entități de același tip:

C++

Persoana studenti[100];

Aici, studenti este un vector care poate stoca informații despre 100 de studenți.

Exemplu complet

C++

#include <iostream>
using namespace std;

struct Persoana {
    char nume[30];
    int varsta;
    float inaltime;
};

int main() {
    Persoana student1, student2;

    // Initializare pentru student1
    strcpy(student1.nume, "Maria Popescu");
    student1.varsta = 19;
    student1.inaltime = 1.75;

    // Afisare informații despre student1
    cout << "Nume: " << student1.nume << endl;
    cout << "Varsta: " << student1.varsta << endl;
    cout << "Inaltime: " << student1.inaltime << " m" << endl;

    return 0;
}