2025-05-12 08:41:36 +00:00

136 lines
3.7 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#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);
}
}