136 lines
3.7 KiB
C
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);
|
|
}
|
|
}
|