Linguaggio C: errore che non riesco a spiegarmi
Eccomi di nuovo alle prese con il linguaggio C, ed ecco un altro errore che non riesco a spiegarmi.
Il programma è il seguente:
Ciò che non funziona bene è quando stampa il valore della media delle prove numero 3. La media delle altre prove le stampa bene, mentre riguardo alla media delle prove numero 3 stampa un numero che non centra niente.
Esempio:
Da che dipende? Computer stregato o cosa?
Tale programma è dato come esercizio in un pdf che sto leggendo (è sempre lo stesso pdf
), il quale, suggeriva di: "si utilizzi una matrice di 19 linee e 9 colonne dove nelle prime otto vengono memorizzati in ciascuna linea i voti di uno studente e nella nona la rispettiva media; nella diciannovesima linea viene invece memorizzata la media per prova."
Alla fine però non ho capito cosa intendeva... di conseguenza ho fatto a modo mio... e a quanto pare non è andata a buon fine! Aiutino?
Il programma è il seguente:
- Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>
/*Scrivere un programma che chieda di inserire i voti di n studenti per n prove, che visualizzi i voti di ogni
studente e che infine calcoli la media di ogni studente, la media per ogni prova e la media totale*/
#define MAXSTUDENTI 99
#define MAXPROVE 10
int main(void) {
int studenti, prove, x, y;
float matrice[MAXSTUDENTI][MAXPROVE];
float vettore1[MAXSTUDENTI], vettore2[MAXPROVE];/*la variabile vettore2[MAXPROVE] serve per cacolare la media
delle prove. Ho scelto come sua grandezza "MAXPROVE" in modo da evitare che sia più piccolo del valore che
immetterà l'utente tramite la variabile "prove".*/
float mediatotale = 0;
printf("Inserisci il numero totale degli studenti: ");
scanf("%d", &studenti);
if(studenti>MAXSTUDENTI || studenti<2) {
do {
printf("Numero di studenti non valido. Inserisci un numero valido: ");
scanf("%d", &studenti);
}while(studenti>MAXSTUDENTI || studenti<2);
}
printf("Inserisci il numero di prove per ogni studente: ");
scanf("%d", &prove);
if(prove>MAXPROVE || prove<1) {
do {
printf("Numero di prove non valido. Inserisci un numero valido: ");
scanf("%d", &prove);
}while(prove>MAXPROVE || prove<1);
}
for(x=0; x<studenti; x++) {
printf("\nStudente n.%2d\n", x+1);
for(y=0; y<prove; y++) {
printf("Inserisci il voto della prova n.%2d: ", y+1);
scanf("%f", &matrice[x][y]);
if(matrice[x][y]>10 || matrice[x][y]<0) {
do {
printf("Voto non valido. Inserisci un voto valido: ");
scanf("%f", &matrice[x][y]);
}while(matrice[x][y]>10 || matrice[x][y]<0);
}
mediatotale += matrice[x][y];
}
}
printf("\nTABELLA");
for(x=0; x<studenti; x++) {
printf("\nVoti dello studente n.%2d: ", x+1);
for(y=0; y<prove; y++) {
printf("%5.1f", matrice[x][y]);
}
}
/*Cacolo media dello studente*/
for(x=0; x<studenti; x++) {
for(y=0; y<prove; y++) {
vettore1[x] += matrice[x][y];
}
}
printf("\n\nMEDIA DEGLI STUDENTI");
for(x=0; x<studenti; x++) {
printf("\nMedia dello studente n.%2d: %5.1f", x+1, vettore1[x]/prove);
}
/*Calcolo media per prova*/
/*Inverto le colonne della matrice con le sue righe in modo da portarmi tutti i valori delle colonne sulle righe,
cosicché posso raccogliere i valori delle colonne in vettore2[y]*/
for(y=0; y<prove; y++) {
for(x=0; x<studenti; x++) {
vettore2[y] += matrice[x][y];
}
}
printf("\n\nMEDIA DELLE PROVE");
for(y=0; y<prove; y++) {
printf("\nMedia delle prove n.%2d: %5.1f", y+1, vettore2[y]/studenti);
}
printf("\n\nMEDIA TOTALE\nLa media totale e': %4.1f\n", mediatotale/(prove*studenti));
return 0;
}
Ciò che non funziona bene è quando stampa il valore della media delle prove numero 3. La media delle altre prove le stampa bene, mentre riguardo alla media delle prove numero 3 stampa un numero che non centra niente.
Esempio:
Da che dipende? Computer stregato o cosa?
Tale programma è dato come esercizio in un pdf che sto leggendo (è sempre lo stesso pdf
Alla fine però non ho capito cosa intendeva... di conseguenza ho fatto a modo mio... e a quanto pare non è andata a buon fine! Aiutino?

di solito le variabili per calcolare una media le inizializzo sempre a zero, non so perché con quelle due ho fatto un'eccezione! E io che pensavo chissà che errore fosse...