School-Coding-Cpp/sfusi/es11_foschini_binaryfile.c

66 lines
1.4 KiB
C

/*
Nome: Mario
Cognome: Montanari
Classe: 3AIN
Data: 17/04/2025
es11:
Dopo aver completato la struttura dati studente, scrivi la funzione inserisciMedia()
che legga un file binario contenente i dati di tutti gli studenti di una classe,
privi della media dei voti riportati, e lo aggiorni inserendo nell'apposito campo
la media suddetta. La funzione dovrà a sua volta far uso di un'ulteriore,
appropriataa, funzione che calcoli la media.
*/
#include <stdio.h>
#define SIZE_VOTI 100+1
typedef struct {
int voti[SIZE_VOTI];
int numeroVoti;
float media;
} Studente;
void inserisciMedia(const char * file_open);
float calcolaMedia(int * voti, int numeroVoti);
int main(void) {
inserisciMedia("studenti.dat");
return 0;
}
void inserisciMedia(const char * file_open) {
FILE * file = fopen(file_open, "r+b");
if (file != NULL) {
Studente studente;
while (fread(&studente, sizeof(studente), 1, file) == 1) {
studente.media = calcolaMedia(studente.voti, studente.numeroVoti);
fseek(file, -(long)sizeof(studente), SEEK_CUR);
fwrite(&studente, sizeof(studente), 1, file);
}
fclose(file);
} else {
perror("Error (source)");
}
}
float calcolaMedia(int * voti, int numeroVoti) {
float media = 0;
if (numeroVoti == 0) {
return 0;
}
for (int i = 0; i < numeroVoti; i++) {
media = media + voti[i];
}
media = media / numeroVoti;
return media;
}