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;
};
Studente s;
cout << s.nome;
La variabile nome non è inizializzata
Studente s;
s.nome = "Mario"; // o cin >> s.nome;
cout << s.nome;
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.
Cosa stampa questo codice?
Studente s = {"Anna", 20, {8,7,9}};
cout << s.nome << " " << s.voti[2];
Anna 9
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";
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;
}
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.
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).
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;
};
double media = somma / 5;
double media = somma / 5.0;
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;
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).
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] << " ";
}
Studente s[3];
s[3].eta = 18;
indice 3 non esiste
Studente s[3];
s[2].eta = 18; // ultimo elemento valido
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.
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.
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;
struct Studente {
string nome,
int eta;
};
struct Studente {
string nome;
int eta;
};
Si può avere un array di struct? Spiega con un esempio.
Sì, si può dichiarare un array di struct come qualsiasi altro tipo.
Studente s = {"Marco", 19, {6, 8, 7}};
cout << s.voti[1] + s.voti[2];
15