Ajouter exo4/main.c
This commit is contained in:
parent
ad1fab7da3
commit
213490b8ce
135
exo4/main.c
Normal file
135
exo4/main.c
Normal file
@ -0,0 +1,135 @@
|
||||
|
||||
#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);
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user