/*
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;
}