Advertisement
Guest User

lab10partie3

a guest
Mar 26th, 2015
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.00 KB | None | 0 0
  1. /* En-tête du programme
  2. ====================
  3. Programme:        FileReader.cpp
  4. Auteur:           Irvin Jankovic
  5. Date création:    09/03/2015
  6. Description:      Un programme qui lit les notes des élèves et le nom. Ensuite qui accumule le tout pour calculer
  7.                   la moyenne et pour savoir quel étudiant à la meilleur note, le nombre d'édutiant, le nombre d'étudiant
  8.                   ayant une note plus haute que la moyenne et le nombre d'echec.
  9. */
  10. #include <iomanip>
  11. #include <iostream>
  12. #include <fstream>
  13. #include <algorithm>
  14. #include "../../../saisieSecurisee.h"
  15. using namespace std;
  16.  
  17. /*Prototype des fonctions
  18. =========================lol*/
  19. void lireEtudiant(ifstream &entree, char nom[], char prenom[], double note[]);
  20. int compterNbSupMoyenne(double note[], int taille, double moy);
  21. void affStats(ostream &sortie, int cptEtudiant, int echec, double moyenne, char meilleurEtudiant[], int nbMoy);
  22. void trier8premierenote(double note[], int tailleNote);
  23. void echange(double &val1, double &val2);
  24. double calculerNoteFinale(double note[], int pond[], int taille);
  25. void affEtudiant(char nom[], char prenom[], double noteF);
  26. void affStats(float moyenne, char meilleurNom[], int supMoy);
  27. void entete();
  28.  
  29. /*Programme principale
  30. =======================*/
  31. void main()
  32. {
  33.     double      note[10];                                       // Les 10 notes d'un étudiant
  34.     double      noteFinale[20];                                 // Les notes finales des étudiants du groupe
  35.     double      noteMeilleurEtudiant = 0;                           // La note du meilleur étudiant.
  36.     double      sommeNote = 0;                                  // La somme des notes lues
  37.     float       moyenne = 0;                                    // Moyenne des étudiants dans le fichier.
  38.  
  39.     int         cptEchec = 0;                                   // Le nombre d'echec parmi les moyennes.
  40.     int         cptEtudiant = 0;                                // Compteur pour la division de la moyenne & pour le nb d'etudiants
  41.     int         cptSupMoy = 0;
  42.     int         ponderation[7] = { 5, 5, 5, 5, 5, 25, 50 };
  43.    
  44.     char        meilleurEtudiant[20];                           //Le nom du meilleur étudiant.
  45.     char        nom[20];                                        //Le nom de l'étudiant lu
  46.     char        prenom[20];                                     //Le prénom "            "
  47.  
  48.     ofstream sortie("sortie.txt");                              //Ouverture du fichier sortie.txt
  49.     ifstream entree;                                            //Le fichier d'entrée
  50.     bool     fichierValide;                                     //Valide si le fichier est vide ou non
  51.  
  52.  
  53.     if (ouvrirFichier(entree, "notes.txt"))                 //si le fichier existe
  54.     {
  55.         if (!siFichierVide(entree))                             //Si le fichier n'est pas vide.
  56.         {
  57.             entete();
  58.             lireEtudiant(entree, nom, prenom, note);
  59.             while (entree)                                                              //Tant que le fichier n'attend pas la fin de fichier.
  60.             {
  61.  
  62.                 trier8premierenote(note, 8);
  63.                 noteFinale[cptEtudiant] = calculerNoteFinale(note, ponderation, 7);     //Affecte la note finale
  64.  
  65.                 sommeNote += noteFinale[cptEtudiant];                                   //Accumuler la somme des notes
  66.  
  67.                 if (noteFinale[cptEtudiant] > noteMeilleurEtudiant)                     //Trouve le meilleur étudiant
  68.                 {
  69.                     noteMeilleurEtudiant = noteFinale[cptEtudiant];
  70.                     meilleurEtudiant[0] = prenom[0];
  71.                     meilleurEtudiant[1] = '.';
  72.                     meilleurEtudiant[2] = '\0';
  73.                     strcat(meilleurEtudiant, nom);
  74.                 }
  75.  
  76.                 affEtudiant(nom, prenom, noteFinale[cptEtudiant]);                      //Affiche le nom, prénom et la note finale.
  77.  
  78.  
  79.                 lireEtudiant(entree, nom, prenom, note);
  80.                 cptEtudiant++;                                                          //Accumuler le nombre d'étudiants
  81.             }
  82.         }
  83.        
  84.         moyenne = sommeNote / (float)cptEtudiant;
  85.         cptSupMoy = compterNbSupMoyenne(noteFinale, cptEtudiant, moyenne);              //Obtient le nombre de gens qui ont une note supp à la moy
  86.  
  87.         affStats(moyenne, meilleurEtudiant, cptSupMoy);                                 //Affiche les statistiques
  88.  
  89.         system("pause");
  90.         entree.close();
  91.     }
  92.     sortie.close();
  93. }
  94.  
  95. /*Fonction pour lire le nom, note d'étudiant et mettant le nom en tableau avec des char, et la note qui sera affectée
  96. dans un tableau
  97. */
  98. void lireEtudiant(ifstream &entree, char nom[], char prenom[], double note[])
  99. {
  100.     entree >> nom >> prenom;
  101.     for(int i=0;i<10;i++)
  102.         entree >> note[i];          // Lecture dans le fichier
  103.  
  104. }
  105. /*Affiche l'entête*/
  106. void entete()
  107. {
  108.     cout << setw(50) << right << "Liste des étudiants" << endl
  109.         << setw(50) << right <<  "===================" << endl
  110.         <<setw(19) << left << "Nom" << setw(50) << right << "Note finale" << endl
  111.         <<setw(19) << left << "====================" << setw(49) << right << "===========" << endl;
  112.  
  113. }
  114. /*Trie les 8 permières notes en ordre croissant*/
  115. void trier8premierenote(double note[], int tailleNote)
  116. {
  117.     for (int i = 0; i < tailleNote-1; i++)
  118.         for (int j = i+1; j < tailleNote; j++)
  119.             if (note[i] > note[j])
  120.                 echange(note[i], note[j]);
  121.  
  122. }
  123. /*Fonction swap homemade.*/
  124. void echange(double &val1, double &val2)
  125. {
  126.     double temp = val1;
  127.     val1 = val2;
  128.     val2 = temp;
  129. }
  130. /*Calcul la note finale à l'aide du tableau de pondération et la note.*/
  131. double calculerNoteFinale(double note[], int pond[], int taille)
  132. {
  133.     double noteF = 0;
  134.     for (int i = 0; i < taille; i++)
  135.         noteF += note[i + 3] * pond[i] / 100;
  136.     return noteF;
  137. }
  138. /*Compteur pour savoir le nombre d'étudiant ayant une note plus grande que la moyenne.*/
  139. int compterNbSupMoyenne(double note[], int taille, double moy)
  140. {
  141.     int cptSupMoy = 0;              //Compteur pour le nombre suppérieur de la moyenne.
  142.  
  143.     for (int c = 0; c < taille; c++)//Jusqu'à ce que on arrive a la taille du tableau, on accumule si c'est plus haut
  144.     {                               //Que la moyenne.
  145.         if (note[c] > moy)
  146.             cptSupMoy++;
  147.     }
  148.     return cptSupMoy;
  149. }
  150. /*Affiche les statistiques de sortie avec les informations obtenus.*/
  151. void affEtudiant(char nom[], char prenom[], double noteF)
  152. {
  153.     cout << setw(10) << left << nom << " " << setw(46) << left << prenom << " "  << setw(9) << right << setprecision(0) << fixed<< noteF << " %" << endl;
  154.  
  155.  
  156. }
  157. /*Affiche les dernières statistiques à la fin de la lecture des notes.*/
  158. void affStats(float moyenne, char meilleurNom[], int supMoy)
  159. {
  160.     cout << endl;
  161.     cout << setw(40) << left << "Moyenne du groupe: "<< setprecision(1) <<fixed << moyenne << " %" << endl
  162.         << setw(40) << left << "Nb suppérieur à la moyenne: "  << supMoy << endl
  163.         << setw(40) << left << "Meilleur résultat: " << meilleurNom << endl;
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement