#codice
codice:
void riempiArray(studente[]);
float calcolaMedia(studente[]);
// studente studenteMax(studente[]);
int votazioneMax(studente[]);
void studentiMax(studente[], int v_max);
//main
int main(int argc, char *argv[]){
studente persona[dim_pers];
int voto_max = 0;
riempiArray(persona);
float media = calcolaMedia(persona);
printf("La media matematica dei voti e': %f\n",media);
// studente vincitore;
// vincitore=studenteMax(persona);
// printf("Lo studente che ha il voto piu' alto e' %s con %d",vincitore.nome,vincitore.voto);
voto_max = votazioneMax(persona);
studentiMax( persona, voto_max);
}
//riempio l'array direttamente da funzione
void riempiArray(studente persona[]){
int i;
for(i = 0; i<dim_pers; i++){
printf("Inserire nome studente %d:",i+1);
scanf("%s",&persona[i].nome);
printf("Inserire voto studente %d:",i+1);
scanf("%d",&persona[i].voto);
}
}
//calcolo la media utilizzando variabili di supporto come la sommatoria
float calcolaMedia(studente persona[]){
int somm = 0,i;
for( i=0; i<dim_pers; i++){
somm += persona[i].voto;
}
float m = (float)somm/dim_pers;
return m;
}
/*
studente studenteMax(studente persona[]){
int cmp = 0,i;//variabile d'appoggio, serve per la comparazione [cmp = comparazione]
char string[dim_stringa];
studente ris;
for( i = 0; i<dim_pers;i++){
if(persona[i].voto > cmp){
cmp = persona[i].voto;
strcpy(string,persona[i].nome);
}
}
strcpy(ris.nome,string);
ris.voto = cmp;
return ris;
}
*/
int votazioneMax(studente persona[]){
int max_v = 0,i;
for( i=0; i<dim_pers; i++){
if ( max_v < persona[i].voto )
max_v = persona[i].voto ;
}
return max_v;
}
void studentiMax(studente persona[], int v_max){
int cmp = 0,i;//variabile d'appoggio, serve per la comparazione [cmp = comparazione]
char string[dim_stringa];
studente ris;
for( i = 0; i<dim_pers;i++){
if(persona[i].voto == v_max){
printf("\nStudente con il voto piu' alto e' %s con %d",persona[i].nome,persona[i].voto);
}
}
}
Ciao
ti suggerisco una modifica alla soluzione che ti ha inviato compare, soluzione CORRETTA ma che risponde solo parzialmente all'ultimo quesito cioè quello di elencare tutti gli studenti che raggiungono il max voto. La funzione studenteMax in realtà fornisce solo il primo in ordine nell'array che raggiunge il max.
Nel codice sopra ti ho evidenziato le modifiche inserite correggendo opportunamente il main per utilizzare le due funzioni nuove che ho inserito in sostituzione della studenteMax.
Ho scelto quella più semplice come logica che prevede una funzione int votazioneMax per trovare il max voto tra tutti quelli ottenuti e una void studentiMax che provvede a stampare i nomi e voto per quelli che raggiungono il max.
In grassetto le modifiche e le parti commentate
Ciao
Andrea