|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Feb 2016
Messaggi: 4
|
Aiuto programma C .
Devo eseguire questo esercizio:
Implementa un programma che, dato un vettore di studenti (il tipo Studente conterrà nome, cognome e i voti scritto, orale e pratica di ogni quadrimestre), individui e ritorni il nome dello studente più bravo nelle diverse materie e con media generale più alta. Purtroppo dopo aver assegnato un valore allo scritto il programma si chiude a causa di un errore sconosciuto. ecco il programma: Codice:
#include <stdio.h>
main(){
int contamax=0,conta1=0,conta2=0,nq=0,nst=0,nm=0,x=0,p=0;
char materia[nm][30];
struct s_studenti{
char nome[30];
char cognome[30];
float mediatot;
float tempo;
struct s_mediaquad{
float tempo;
float mediaquad;
}mq[2];
struct s_quadrimestre{
struct s_voti{
float orale;
float scritto;
float pratico;
float media;
}voto[nm];
}quad[2];
}studente[nst];
printf("Le materie sono: ");
scanf("%d",&nm);
printf("Gli studenti sono: ");
scanf("%d",&nst);
float max1[nst], max2[nst];
for(conta1=0;conta1<nst;conta1++)
{
printf("\nStudente %d",conta1+1);
printf("\nnome: ");
scanf("%s",&studente[conta1].nome);
printf("cognome: ");
scanf("%s",&studente[conta1].cognome);
{
for(conta2=0;conta2<1;conta2++)
printf("\nMateria: ");
scanf("%s", &materia[conta2]);
for(nq=0;nq<2;nq++)
{
printf("\nQuadrimestre %d",nq+1);
printf("\nOrale: ");
scanf("%f",&studente[conta1].quad[nq].voto[conta2].orale);
printf("\nScritto: ");
scanf("%f",&studente[conta1].quad[nq].voto[conta2].scritto);
printf("\nPratico: ");
scanf("%f",&studente[conta1].quad[nq].voto[conta2].pratico);
printf("\nMedia quadrimestre %d: ", nq+1);
studente[conta1].quad[nq].voto[conta2].media=(studente[conta1].quad[nq].voto[conta2].orale + studente[conta1].quad[nq].voto[conta2].scritto + studente[conta1].quad[nq].voto[conta2].pratico) / 3;
printf("%2.2f",studente[conta1].quad[nq].voto[conta2].media);
}
}
};
for(contamax=0;contamax<nst;contamax++)
{
max1[contamax]=0;
max2[contamax]=0;
};
for(conta1=0;conta1<nst;conta1++)
{
for(conta2=0;conta2<nm;conta2++)
{
for(nq=0;nq<2;nq++)
{
studente[conta1].mq[conta2].tempo = studente[conta1].mq[conta2].tempo + studente[conta1].quad[nq].voto[conta2].media;
}
studente[conta1].mq[conta2].mediaquad = studente[conta1].mq[conta2].tempo / 2;
printf("\nMedia totale materia %s studente %s %s: %d",materia[conta2], studente[conta1].nome, studente[conta1].cognome,studente[conta1].mq[conta2].mediaquad);
studente[conta1].tempo = studente[conta1].tempo + studente[conta1].mq[conta2].mediaquad;
}
studente[conta1].mediatot = studente[conta1].tempo / nm;
printf("\nMedia totale : %f" , studente[conta1].mediatot);
};
for(conta1=0;conta1<nst;conta1++)
{
for(conta2=0;conta2<nm;conta2++)
{
if(studente[conta1].mq[conta2].mediaquad>max1[conta2])
{
x=conta2;
}
}
printf("\nIl migliore in %s e' lo studente %s %s", materia[conta2], studente[x].nome , studente[x].cognome);
if(studente[conta1].mediatot>max2[conta1])
{
p=conta1;
}
};
printf("La media migliore l'ha lo studente %s %s",studente[p].nome,studente[p].cognome);
getch();
}
Ultima modifica di omar900 : 10-02-2016 alle 14:46. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
A dir la verita' non so come abbia passato la compilazione.
Per esempio: Codice:
char materia[nm][30]; Codice:
struct s_quadrimestre{
struct s_voti{
float orale;
float scritto;
float pratico;
float media;
}voto[nm];
Devi prima leggere il valore per le variabili nm ed nst; poi, utilizzando tale valore, vai ad allocare dinamicamente i vettori che dovranno contenere tale numero di valori. In alternativa, potresti dichiarare delle costanti (MAX_NUM_STUDENTS, ...) e verificare che nm ed nst siano inferiori a dette costanti.
__________________
In God we trust; all others bring data |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Feb 2016
Messaggi: 4
|
Ok primo problema risolto grazie.
Però dopo non mi visualizza correttamente gli studenti con le medie maggiori. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
posta il nuovo codice, cosi' possiamo darci un'occhiata
__________________
In God we trust; all others bring data |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Feb 2016
Messaggi: 4
|
Codice:
#include <stdio.h>
main(){
int contamax=0,conta1=0,conta2=0,nq=0,nst=0,nm=0,x=0,p=0;
printf("Le materie sono: ");
scanf("%d",&nm);
printf("Gli studenti sono: ");
scanf("%d",&nst);
char materia[nm][30];
struct s_studenti{
char nome[30];
char cognome[30];
float mediatot;
float tempo;
struct s_mediaquad{
float tempo;
float mediaquad;
}nq[2];
struct s_quadrimestre{
struct s_voti{
float orale;
float scritto;
float pratico;
float media;
}voto[nm];
}quad[2];
}studente[nst];
float max1[nst], max2[nst];
for(conta1=0;conta1<nst;conta1++)
{
printf("\nStudente %d",conta1+1);
printf("\nnome: ");
scanf("%s",&studente[conta1].nome);
printf("cognome: ");
scanf("%s",&studente[conta1].cognome);
{
for(conta2=0;conta2<1;conta2++)
printf("\nMateria: ");
scanf("%s", &materia[conta2]);
for(nq=0;nq<2;nq++)
{
printf("\nQuadrimestre %d",nq+1);
printf("\nOrale: ");
scanf("%f",&studente[conta1].quad[nq].voto[conta2].orale);
printf("\nScritto: ");
scanf("%f",&studente[conta1].quad[nq].voto[conta2].scritto);
printf("\nPratico: ");
scanf("%f",&studente[conta1].quad[nq].voto[conta2].pratico);
printf("\nMedia quadrimestre %d: ", nq+1);
studente[conta1].quad[nq].voto[conta2].media=(studente[conta1].quad[nq].voto[conta2].orale + studente[conta1].quad[nq].voto[conta2].scritto + studente[conta1].quad[nq].voto[conta2].pratico) / 3;
printf("%2.2f",studente[conta1].quad[nq].voto[conta2].media);
}
}
};
for(contamax=0;contamax<nst;contamax++)
{
max1[contamax]=0;
max2[contamax]=0;
};
for(conta1=0;conta1<nst;conta1++)
{
for(conta2=0;conta2<nm;conta2++)
{
for(nq=0;nq<2;nq++)
{
studente[conta1].nq[conta2].tempo = studente[conta1].nq[conta2].tempo + studente[conta1].quad[nq].voto[conta2].media;
}
studente[conta1].nq[conta2].mediaquad = studente[conta1].nq[conta2].tempo / 2;
printf("\nMedia totale materia %s studente %s %s: %d",materia[conta2], studente[conta1].nome, studente[conta1].cognome,studente[conta1].nq[conta2].mediaquad);
studente[conta1].tempo = studente[conta1].tempo + studente[conta1].nq[conta2].mediaquad;
}
studente[conta1].mediatot = studente[conta1].tempo / nm;
printf("\nMedia totale : %f" , studente[conta1].mediatot);
};
for(conta1=0;conta1<nst;conta1++)
{
for(conta2=0;conta2<nm;conta2++)
{
if(studente[conta1].nq[conta2].mediaquad>max1[conta2])
{
x=conta2;
}
}
printf("\nIl migliore in %s e' lo studente %s %s", materia[conta2], studente[x].nome , studente[x].cognome);
if(studente[conta1].mediatot>max2[conta1])
{
p=conta1;
}
};
printf("La media migliore l'ha lo studente %s %s",studente[p].nome,studente[p].cognome);
getch();
}
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Continuo a non capire come possa essere compilabile quel codice, visto che non effettui allocazioni dinamiche ma allochi i vettori a seconda del valore di una variabile.
Per esempio: Codice:
char materia[nm][30]; Quale compilatore stai utilizzando? Tuttavia, il calcolo della media non e' ancora corretto perche' lo fai cosi': Codice:
studente[conta1].quad[nq].voto[conta2].media=(studente[conta1].quad[nq].voto[conta2].orale + studente[conta1].quad[nq].voto[conta2].scritto + studente[conta1].quad[nq].voto[conta2].pratico) / 3;
__________________
In God we trust; all others bring data |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Quote:
|
|
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: Feb 2016
Messaggi: 4
|
Grazie a tutti per l'aiuto, sono riuscito a risolvere tutto pochi giorni fa
Avrei però un'altra domanda: mettiamo che io abbia una struttura s_studenti contenente nome, cognome .... e la media a fine anno e che io debba trovare lo studente con la media più alta. Fino a qui nessun problema. Ma se ci fossero due o più studenti con la stessa media e se tale media risultasse la più alta? Come faccio a visualizzare tutte le medie più alte? |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:24.




















