Linguaggio C++

Confronto Tra Strutture Dati

Differenza tra variabili singole, array e struct in C++. Quando usare ciascuna e come si collegano tra loro.

Dopo aver visto cosa sono le struct, è importante capire quando e perché usarle. Spesso i principianti confondono variabili, array e struct: ecco come distinguerle e quando ciascuna è più utile.


1️⃣ Variabili singole

Le variabili singole si usano per memorizzare un singolo valore alla volta.

int eta;
float media;
string nome;

eta = 17;
media = 8.2;
nome = "Marco";

Quando usarle: quando hai bisogno di un solo valore per volta (es. un singolo studente).

Limite: non sono adatte per gestire insiemi di dati o più caratteristiche contemporaneamente.


2️⃣ Array

Un array contiene più valori dello stesso tipo. È utile per gestire un elenco omogeneo di dati, come le età di più studenti.

int eta[5] = {17, 18, 17, 16, 18};

Quando usarli: quando devi gestire molti valori dello stesso tipo (solo numeri, solo nomi, solo medie…).

Limite: se ogni elemento ha più caratteristiche (es. nome, età e media), servono più array paralleli:

string nomi[5];
int eta[5];
float medie[5];

Questo approccio è scomodo, perché i dati di uno stesso studente si trovano in tre array diversi.


3️⃣ Struct

Una struct permette di raggruppare dati diversi ma logicamente collegati (es. tutti i dati di uno studente).

struct Studente {
    string nome;
    int eta;
    float media;
};

Studente s1;
s1.nome = "Marco";
s1.eta = 17;
s1.media = 8.2;

Quando usarle: quando devi rappresentare un oggetto reale con più informazioni (es. una persona, una stanza, una squadra...).

Limite: una struct singola rappresenta solo un oggetto (uno studente, una stanza...).


4️⃣ Array di struct

Per gestire più oggetti dello stesso tipo (più studenti, più stanze, ecc.), creiamo un array di struct:

Studente classe[5]; // 5 studenti

classe[0].nome = "Marco";
classe[0].eta = 17;
classe[0].media = 8.2;

Quando usarli: quando vuoi gestire più oggetti complessi dello stesso tipo.

🔹 Ogni elemento dell array rappresenta un oggetto completo (con i suoi campi).


5️⃣ Confronto riassuntivo

Struttura Tipo di Dati Uso Tipico Esempio
Variabile singola Un solo valore Memorizzare un dato isolato int eta = 17;
Array Più valori dello stesso tipo Elenco omogeneo (es. 10 età) int eta[10];
Struct Più campi di tipo diverso Rappresentare un oggetto reale struct Studente {string nome; int eta; float media;};
Array di struct Molti oggetti completi Gestire un insieme di oggetti Studente classe[25];

6️⃣ Esempio pratico comparativo

Vediamo il problema: rappresentare i dati di tre studenti.

Metodo 1: con tre array separati

string nomi[3];
int eta[3];
float media[3];

Metodo 2: con array di struct

struct Studente {
    string nome;
    int eta;
    float media;
};

Studente classe[3];

👉 Con la struct, i dati di ogni studente sono insieme e ordinati logicamente.


Conclusione

Le struct sono fondamentali per imparare a modellare oggetti reali in C++. Sono il passo intermedio tra le semplici variabili e le classi della programmazione orientata agli oggetti.

Regola pratica:

  • Usa variabili singole per un dato unico.
  • Usa array per molti dati dello stesso tipo.
  • Usa struct per combinare più informazioni diverse ma collegate.
  • Usa array di struct per molti oggetti completi.
LABORATORIO

Creiamo la nostra prima struct

In questo laboratorio imparerai a creare una struct in C++, ad assegnare valori ai suoi campi e a visualizzarli sullo schermo.


1 Dichiarazione della struct

Creiamo una struct che rappresenta uno studente con nome, età e media.

struct Studente {
    string nome;
    int eta;
    float media;
};

2 Creazione e uso di una variabile struct

Nel main creiamo una variabile di tipo Studente e assegniamo i valori ai suoi campi:

Studente s1;
s1.nome = "Marco";
s1.eta = 17;
s1.media = 8.2;

cout << s1.nome << " (" << s1.eta << " anni) - Media: " << s1.media;

3 Array di struct

Ora creiamo un array di 3 studenti e leggiamo i dati da tastiera.

Studente classe[3];
for (int i = 0; i < 3; i++) {
    cout << "Inserisci nome dello studente " << i+1 << ": ";
    cin >> classe[i].nome;
    cout << "Età: ";
    cin >> classe[i].eta;
    cout << "Media: ";
    cin >> classe[i].media;
}

4 Esercizi

  • Stampa l elenco degli studenti con la loro media.
  • Calcola la media totale della classe.
  • Trova lo studente con la media più alta.