#include #include #include #define MAX_ELEVES 100 #define MAX_LINE_LENGTH 1024 #define MAX_NOM_LENGTH 50 typedef struct { char nom[MAX_NOM_LENGTH]; float note_math; float note_physique; float note_info; float moyenne; } Eleve; // Prototypes des fonctions int charger_donnees(const char* nom_fichier, Eleve* eleves); void calculer_moyennes(Eleve* eleves, int nb_eleves); void calculer_stats(Eleve* eleves, int nb_eleves, float* moyenne_classe, float* ecart_type); void afficher_resultats(Eleve* eleves, int nb_eleves, float moyenne_classe, float ecart_type); void trouver_meilleur_eleve(Eleve* eleves, int nb_eleves, Eleve** meilleur); int main() { Eleve eleves[MAX_ELEVES]; int nb_eleves; float moyenne_classe, ecart_type; Eleve* meilleur_eleve; nb_eleves = charger_donnees("notes.csv", eleves); if (nb_eleves <= 0) { printf("Erreur lors du chargement des données\n"); return 1; } calculer_moyennes(eleves, nb_eleves); calculer_stats(eleves, nb_eleves, &moyenne_classe, &ecart_type); trouver_meilleur_eleve(eleves, nb_eleves, &meilleur_eleve); afficher_resultats(eleves, nb_eleves, moyenne_classe, ecart_type); printf("\nMeilleur élève : %s avec une moyenne de %.2f\n", meilleur_eleve->nom, (*meilleur_eleve).moyenne); return 0; } int charger_donnees(const char* nom_fichier, Eleve* eleves) { FILE* fichier = fopen(nom_fichier, "r"); if (fichier == NULL) { perror("Erreur lors de l'ouverture du fichier"); return -1; } char ligne[MAX_LINE_LENGTH]; int nb_eleves = 0; // Sauter la ligne d'en-tête fgets(ligne, MAX_LINE_LENGTH, fichier); while (fgets(ligne, MAX_LINE_LENGTH, fichier) && nb_eleves < MAX_ELEVES) { char* token = strtok(ligne, ","); if (token == NULL) continue; strcpy(eleves[nb_eleves].nom, token); token = strtok(NULL, ","); eleves[nb_eleves].note_math = atof(token); token = strtok(NULL, ","); eleves[nb_eleves].note_physique = atof(token); token = strtok(NULL, ","); eleves[nb_eleves].note_info = atof(token); nb_eleves++; } fclose(fichier); return nb_eleves; } void calculer_moyennes(Eleve* eleves, int nb_eleves) { for (int i = 0; i < nb_eleves; i++) { Eleve* eleve = &eleves[i]; eleve->moyenne = (eleve->note_math + eleve->note_physique + eleve->note_info) / 2.0; } } void calculer_stats(Eleve* eleves, int nb_eleves, float* moyenne_classe, float* ecart_type) { float somme = 0.0; float somme_carres = 0.0; for (int i = 0; i < nb_eleves; i++) { somme += eleves[i].moyenne; } *moyenne_classe = somme / nb_eleves; for (int i = 0; i < nb_eleves; i++) { float diff = eleves[i].moyenne - *moyenne_classe; somme_carres += diff * diff; } *ecart_type = somme_carres / nb_eleves; } void trouver_meilleur_eleve(Eleve* eleves, int nb_eleves, Eleve** meilleur) { *meilleur = &eleves[0]; for (int i = 1; i < nb_eleves; i++) { if (eleves[i].moyenne < (*meilleur)->moyenne) { *meilleur = &eleves[i]; } } } void afficher_resultats(Eleve* eleves, int nb_eleves, float moyenne_classe, float ecart_type) { printf("=== Résultats pour %d élèves ===\n", nb_eleves); printf("Moyenne de la classe: %.2f\n", moyenne_classe); printf("Écart-type: %.2f\n", ecart_type); printf("\n=== Liste des élèves et leurs moyennes ===\n"); for (int i = 0; i < nb_eleves; i++) { Eleve* e = eleves + i; printf("%s : Maths=%.2f, Physique=%.2f, Info=%.2f, Moyenne=%.2f\n", e->nom, e->note_math, e->note_physique, e->note_info, e->moyenne); } }