Esercizio con struct

Messaggioda floyd123 » 21/05/2018, 00:06

Ciao a tutti, devo svolgere questo esercizio con il tipo strutturato "struct":
Definire una struttura studente, caratterizzata da nome, cognome, matricola e numero di esamisuperati. Il programma deve chiedere l'inserimento di n studenti. Dopodiché deve stampare gli nstudenti nel seguente modo:
studente 1Nome: [nome]
Cognome: [cognome]
matricola : [matricola]
il numero di esami superato è: [numero]
.
.
.
studente nNome: [nome]
Cognome: [cognome]
matricola : [matricola]
il numero di esami superato è: [numero]
deve inoltre calcolare la media del numero di esami superato e stamparlo a video alla fine.

Premetto che sono alle primissime armi, comunque ho iniziato così:

Codice:
#include <iostream>
using namespace std;


typedef struct studente
{
char nome[20];
char cognome[20];
long matricola;
int numero_esami;
float media;
};


Come faccio a stampare i risultati a video e a calcolare la media del numero di esami superati per n studenti?
floyd123
Junior Member
Junior Member
 
Messaggio: 151 di 456
Iscritto il: 27/09/2017, 18:53

Re: Esercizio con struct

Messaggioda Super Squirrel » 21/05/2018, 11:45

Nel C++ (presumo sia questo il linguaggio in cui tu debba scrivere il programma visto che hai incluso la libreria iostream), a differenza del C, la dichiarazione di una struct definisce un nuovo tipo (astratto), quindi non serve il typedef (peraltro utilizzato in modo sbagliato).

La media, che se ho ben capito si riferisce al numero di esami medio superato dagli n studenti, non dovrebbe essere un membro della struct in quanto non si riferisce al singolo studente, ma ha senso solo per un insieme di studenti.

Per essere alle struct presumo che una base di C++ tu già ce l'abbia... detto questo che le questioni fondamentali siano 2:
- se devi memorizzare un valore intero utilizzi una semplice variabile di tipo intera, se devi memorizzare 50 valori interi cosa utilizzi? Lo stesso discorso vale anche se devi memorizzare n dati di tipo studente;
- sai come si accede ad un membro di una struct?
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 215 di 1486
Iscritto il: 16/05/2013, 22:05

Re: Esercizio con struct

Messaggioda floyd123 » 21/05/2018, 18:20

Ciao! Grazie per la risposta.
- Se devo memorizzare più elementi dello stesso tipo utilizzo un array, giusto?
- Sì, posso accedere ad un campo della struct in questa maniera: nome_record.nome_campo
floyd123
Junior Member
Junior Member
 
Messaggio: 152 di 456
Iscritto il: 27/09/2017, 18:53

Re: Esercizio con struct

Messaggioda floyd123 » 21/05/2018, 19:37

Sono riuscito a portarmi abbastanza avanti:

Codice:
#include <iostream>
using namespace std;

struct studente
{
char nome[20];
char cognome[20];
long matricola;
int numero_esami;
int allievo;
} s[10];

int main()
{
    cout << "Inserisci informazioni dello studente : " << endl;
    // Inserisci informazioni
    for(int i = 0; i < 10; ++i)
    {
        s[i].allievo = i+1;
        cout << " Per l'allievo numero " << s[i].allievo << "," << endl;

        cout << " Inserisci nome :";
        cin >> s[i].nome;

        cout << " Inserisci cognome : ";
        cin >> s[i].cognome;

        cout << " Inserisci matricola : ";
        cin >> s[i].matricola;

        cout << " Inserisci numero esami:";
        cin >> s[i].numero_esami;

        cout << endl;
    }

    cout << " Informazioni : " << endl;

    // Mostra informazioni
    for(int i = 0; i < 10; ++i)
    {
        cout << "\nAllievo numero : " << i+1 << endl;
        cout << " Nome : " << s[i].nome << endl;
        cout << " Cognome : " << s[i].cognome << endl;
        cout << " Matricola : " << s[i].matricola << endl;
        cout << " Numero esami : " << s[i].numero_esami << endl;
    }

    return 0;
}


Ora come posso calcolare la media degli esami superati per n studenti?
floyd123
Junior Member
Junior Member
 
Messaggio: 153 di 456
Iscritto il: 27/09/2017, 18:53

Re: Esercizio con struct

Messaggioda Super Squirrel » 21/05/2018, 20:37

Ora come posso calcolare la media degli esami superati per n studenti?

Utilizzando una variabile (opportunamente inizializzata) e un ciclo for (puoi anche sfruttare uno dei due for già scritti) calcoli la somma degli esami sostenuti dagli n studenti. Nota la somma calcoli semplicemente la media aritmetica come somma/n.
A tal proposito ricorda che / restituisce la divisione non intera solo se almeno uno dei due operandi non è un intero.

Qualche osservazione:
- il membro allievo secondo me puoi anche toglierlo dalla struct;
- al fine di rendere il codice più chiaro, l'array s lo dichiarerei nel main;
- invece di scrivere 10 ogni volta potresti utilizzare una costante.
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 216 di 1486
Iscritto il: 16/05/2013, 22:05

Re: Esercizio con struct

Messaggioda floyd123 » 21/05/2018, 21:20

Allora:
- Ok per il membro allievo, mi rendo conto che è abbastanza inutile;
- Ho provato a dichiarare l'array s nel main ma mi dà errore, così invece va bene;
- Ho provato ad utilizzare la costante 'N' scrivendo così s['N'], ma in questa maniera non riesco a fermarmi ad una N definita e il programma mi fa inserire valori all'infinito.

Per quanto riguarda la somma e la media, ho scritto una cosa di questo tipo:
Codice:
int somma;
    float media;
    int numero_studenti, i;
    cout << " Quanti sono gli studenti? " << endl;
    cin >> numero_studenti;

    cout << " Qual è la somma degli esami superati dagli n studenti? " << endl;
    for (i=0 ;  i<2 ; i++)
    {
        somma=0;
        somma=somma+s[i].numero_esami;
        cout<< " La somma è :" << somma;
    }

    if (numero_studenti > 0, numero_studenti <= 2)
    {
        for(int i = 0; i < 2; i++)
        {
            media = somma / numero_studenti;
            cout << " La media è : " << media;
        }

    }

    return 0;


(ho ipotizzato n=2 studenti)

Ma purtroppo non va bene. Come posso risolvere? Il problema è la somma.
floyd123
Junior Member
Junior Member
 
Messaggio: 154 di 456
Iscritto il: 27/09/2017, 18:53

Re: Esercizio con struct

Messaggioda Super Squirrel » 22/05/2018, 20:15

Ho provato a dichiarare l'array s nel main ma mi dà errore, così invece va bene

Evidentemente lo hai fatto nel modo sbagliato. In ogni caso basta fare una cosa del genere:
Codice:
studente s[10];


Ho provato ad utilizzare la costante 'N' scrivendo così s['N'], ma in questa maniera non riesco a fermarmi ad una N definita e il programma mi fa inserire valori all'infinito.

Intendevo una cosa del genere:
Codice:
int main()
{
    const int n = 10;
    studente s[n];
    for(unsigned int i = 0; i < n; ++i)
    {
        ...
    }
    for(unsigned int i = 0; i < n; ++i)
    {
        ...
    }
    ...
}

In questo modo se il numero di studenti cambia da 10 a 20 devi modificare una sola riga di codice.

Per quanto riguarda la somma e la media, ho scritto una cosa di questo tipo...

:shock:...
- il numero di studenti è uguale a n, perché chiedere all'utente di inserire nuovamente il numero di studenti?
- se azzeri la variabile somma all'inizio di ogni iterazione (mi riferisco al primo for) è ovvio che il risultato sarà errato, in quanto all'uscita dal ciclo, la variabile somma sarà uguale al numero di esami sostenuti dall' n-esimo (ossia l'ultimo) studente;
- per quanto riguarda l'if non ho mai visto una condizione scritta in questo modo (mi riferisco a due espressioni logiche separate da una virgola). Ho notato che compila, ma in pratica viene considerata solo la seconda espressione logica. In ogni caso tra più espressioni logiche di solito si usano gli operatori logici && e ||;
- perchè metti il calcolo della media all'interno di un ciclo for?!
- come già detto nel post precedente, ricorda che l'operatore / restituisce la divisione non intera solo se almeno uno dei due operandi non è un intero.
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 217 di 1486
Iscritto il: 16/05/2013, 22:05

Re: Esercizio con struct

Messaggioda floyd123 » 23/05/2018, 10:14

Ho risolto! Grazie mille :)
floyd123
Junior Member
Junior Member
 
Messaggio: 155 di 456
Iscritto il: 27/09/2017, 18:53

Re: Esercizio con struct

Messaggioda Super Squirrel » 23/05/2018, 11:40

Mi fa piacere, in ogni caso se vuoi postare il codice possiamo darci un'occhiata.
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 218 di 1486
Iscritto il: 16/05/2013, 22:05


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite