Completa codice
Correzioni di errori
Teoria
Analisi di output
100

Completare il codice per dichiarare una struct Libro con titolo (string), pagine (int) e prezzo (double).

_______ Libro {

    string titolo;

    _________;

    _________;

};

struct Libro {

    string titolo;

    int pagine;

    double prezzo;

};

100

Studente s;

cout << s.nome;

La variabile nome non è inizializzata

Studente s;

s.nome = "Mario"; // o cin >> s.nome;

cout << s.nome;

100

Cos'è una struct in C++ e a cosa serve?

Una struct è un tipo di dato definito dall'utente che raggruppa più variabili (detti membri o campi) anche di tipo diverso. Serve a modellare entità del mondo reale (come uno studente, un libro, un punto) raggruppandone le caratteristiche correlate in un'unica struttura.

100

Cosa stampa questo codice?

Studente s = {"Anna", 20, {8,7,9}};

cout << s.nome << " " << s.voti[2];

Anna 9

200

Completare il codice per creare un array di 3 Studente e assegnare "Marco" al primo.

Studente _________ [___];

_________[0].nome = "_________";

Studente studenti[3];

studenti[0].nome = "Marco";

200

supponendo s sia Studente s[3]

for(int i=0; i<=3; i++) {

    cin >> s[i].nome;

}

i<=3 va fuori bounds

for(int i=0; i<3; i++) {

    cin >> s[i].nome;

}

200

Qual è la differenza concettuale tra una struct e un array?

Un array contiene elementi tutti dello stesso tipo accessibili tramite indice. Una struct contiene campi anche di tipo diverso accessibili tramite nome. L'array è omogeneo e indicizzato, la struct è eterogenea e nominativa.

200

Cosa stampa se l'utente inserisce "Luca", 18, e poi 5,6,7,8,9?


Studente s;

cin >> s.nome >> s.eta;

for(int i=0;i<5;i++) cin >> s.voti[i];

cout << s.voti[1] + s.voti[3];

Stampa 14 (6 + 8).

300

Completare la struttura Studente con un nuovo campo classe (string).

struct Studente {

    string nome;

    int eta;

    int voti[5];

    _________;

};



struct Studente {

    string nome;

    int eta;

    int voti[5];

    string classe;

};

300

double media = somma / 5;

double media = somma / 5.0;

300

Come si accede ai membri di una struct? Fai un esempio.

Si usa l'operatore punto (.) tra il nome della variabile struct e il nome del campo.

Studente s;

s.nome = "Anna";

s.eta = 20;

cout << s.nome;

300

Quale studente viene stampato come migliore nel codice originale?

Viene stampato il primo studente che ha la media più alta incontrato durante il ciclo. Se più studenti hanno la stessa media massima, viene stampato il primo tra loro (quello con indice più piccolo).

400

Completare il ciclo per stampare i voti del primo studente.


for(int j=0; j<___; j++) {

    cout << s[0].______[j] << " ";

}

for(int j=0; j<5; j++) {

    cout << s[0].voti[j] << " ";

}

400

Studente s[3];

s[3].eta = 18;

indice 3 non esiste

Studente s[3];

s[2].eta = 18; // ultimo elemento valido

400

Cosa succede se dichiaro una struct ma non inizializzo i suoi campi?

I campi contengono valori indeterminati (spazzatura). Per i tipi fondamentali (int, double) è un valore casuale, per le stringhe di solito è una stringa vuota ma dipende dall'implementazione. È buona pratica inizializzare sempre.

400

Cosa stampa se due studenti hanno la stessa media massima?

Viene stampato il primo studente con quella media, perché la condizione if(media > mediaMax) usa solo > (maggiore stretto). Se la media è uguale, non viene aggiornato l'indice migliore.

500

Completare il calcolo della media usando un array di voti.


int somma = 0;

for(int j=0; j<5; j++) {

    somma = somma + ___________;

}

double media = ___________ / 5.0;

int somma = 0;

for(int j=0; j<5; j++) {

    somma = somma + s[i].voti[j];

}

double media = somma / 5.0;

500

struct Studente {

    string nome,

    int eta;

};

struct Studente {

    string nome;

    int eta;

};

500

Si può avere un array di struct? Spiega con un esempio.

Sì, si può dichiarare un array di struct come qualsiasi altro tipo.

500

Studente s = {"Marco", 19, {6, 8, 7}};

cout << s.voti[1] + s.voti[2];

15