From 213490b8cef3cf7ca0ea79b3dd38c69ff250fec8 Mon Sep 17 00:00:00 2001 From: bastien Date: Mon, 12 May 2025 08:41:36 +0000 Subject: [PATCH] Ajouter exo4/main.c --- exo4/main.c | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 exo4/main.c diff --git a/exo4/main.c b/exo4/main.c new file mode 100644 index 0000000..5c2df1d --- /dev/null +++ b/exo4/main.c @@ -0,0 +1,135 @@ + +#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); + } +}