Esercizio con typedef

Messaggioda SalvatCpo » 30/06/2018, 08:47

// Definisci il tipo Classe come array di tipo Alunno, definito a sua volta come struttura contenente due sottostrutture:
// anagrafica, composta da nome e cognome, e valutazione, composta da un vettore delle medie in 100simi dei 5
// anni di scuola superiore e poi una variabile
// intera che esprime il voto da 60 a 101 del diploma. Scrivi una funzione che stampa il cognome degli alunni che hanno una
// media dei 5 anni superiore a 90/100 e un voto di diploma superiore a 90. La dimensione della classe sia DIM definita
// con valore 10.

#define DIM 10
typedef struct alunno {
struct anagrafica {
char nome[20];
char cognome[20];
};
struct valutazione {
int v[5];
int x;
};
} z;
typedef z classe[DIM];
int main() {
system ("PAUSE");
return 0;
}
void seleziona (classe a)
{
int i=0, j=0, s=0;
while (i<DIM)
{
if (a[i].valutazione.x>90)
{
j=0;
s=0;
while (j<5)
{
s=s+a[i].valutazione.v[j];
j++;
}
s=s/5;
if (s>90)
{
printf ("%s", a[i].anagrafica.cognome);
}
}
i++;
}
}

Quando compilo il dev c++ mi dice "invalid use of struct alunno::valutazione and alunno::anagrafica.

Dov'è l'errore? Grazie :-D
SalvatCpo
Average Member
Average Member
 
Messaggio: 146 di 726
Iscritto il: 30/12/2017, 17:55

Re: Esercizio con typedef

Messaggioda vict85 » 30/06/2018, 16:11

Due commenti prima di entrare nel codice:
  1. Usa il tag code, è obbligatorio e questo non è più il tuo primo messaggio. Per intenderci per introdurre un semplice Hello World dovresti fare qualcosa tipo:
    Codice:
    [code]int main() {
       std::cout << "Hello World" << std::endl;
    }
    [/code]
    e verrebbe visualizzato come
    Codice:
    int main() {
       std::cout << "Hello World" << std::endl;
    }
  2. Dove sono finiti gli include? Non è la prima volta che noto la loro mancanza, non li stai copiando qui oppure non le hai proprio inserite nel tuo codice? Perché se non lo hai fatto devi inserirle.

Nel tuo codice ci sono molti errori. Ma il maggiore sta nel fatto che struct valutazione è il nome della struttura e non il nome della variabile di tipo struct valutazione all'interno della struct alunni. Alcune possibilità:
  1. non dividi gli elementi della struct alunni tra anagrafica e valutazione;
    Codice:
    typedef struct alunno {
       char nome[20];
       char cognome[20];
       int v[5];
       int x;
    } z;
  2. definisci le strutture a parte e dai un nome agli elementi;
    Codice:
    struct anagrafica {
       char nome[20];
       char cognome[20];
    };

    struct valutazione {
       int v[5];
       int x;
    };

    struct alunno {
       struct anagrafica anag;
       struct valutazione val;
    };

    // se proprio senti il bisogno del typedef
    typedef struct alunno z;
  3. Se non hai bisogno di usare le due strutture separatamente puoi usare delle strutture anonime;
    Codice:
    typedef struct alunno {
       struct {
          char nome[20];
          char cognome[20];
       } anagrafica;
       struct {
          int v[5];
          int x;
       } valutazione;
    } z;
    oppure addirittura
    Codice:
    typedef struct alunno {
       struct {
          char nome[20];
          char cognome[20];
       };
       struct {
          int v[5];
          int x;
       };
    } z;
    quest'ultimo va usato come il caso 1.

Non hai dichiarato la funzione seleziona prima del main.
vict85
Moderatore
Moderatore
 
Messaggio: 9321 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite