Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* En-tête du programme
- ====================
- Programme: FileReader.cpp
- Auteur: Irvin Jankovic
- Date création: 09/03/2015
- Description: Un programme qui lit les notes des élèves et le nom. Ensuite qui accumule le tout pour calculer
- la moyenne et pour savoir quel étudiant à la meilleur note, le nombre d'édutiant, le nombre d'étudiant
- ayant une note plus haute que la moyenne et le nombre d'echec.
- */
- #include <iomanip>
- #include <iostream>
- #include <fstream>
- #include <algorithm>
- #include "../../../saisieSecurisee.h"
- using namespace std;
- /*Prototype des fonctions
- =========================lol*/
- void lireEtudiant(ifstream &entree, char nom[], char prenom[], double note[]);
- int compterNbSupMoyenne(double note[], int taille, double moy);
- void affStats(ostream &sortie, int cptEtudiant, int echec, double moyenne, char meilleurEtudiant[], int nbMoy);
- void trier8premierenote(double note[], int tailleNote);
- void echange(double &val1, double &val2);
- double calculerNoteFinale(double note[], int pond[], int taille);
- void affEtudiant(char nom[], char prenom[], double noteF);
- void affStats(float moyenne, char meilleurNom[], int supMoy);
- void entete();
- /*Programme principale
- =======================*/
- void main()
- {
- double note[10]; // Les 10 notes d'un étudiant
- double noteFinale[20]; // Les notes finales des étudiants du groupe
- double noteMeilleurEtudiant = 0; // La note du meilleur étudiant.
- double sommeNote = 0; // La somme des notes lues
- float moyenne = 0; // Moyenne des étudiants dans le fichier.
- int cptEchec = 0; // Le nombre d'echec parmi les moyennes.
- int cptEtudiant = 0; // Compteur pour la division de la moyenne & pour le nb d'etudiants
- int cptSupMoy = 0;
- int ponderation[7] = { 5, 5, 5, 5, 5, 25, 50 };
- char meilleurEtudiant[20]; //Le nom du meilleur étudiant.
- char nom[20]; //Le nom de l'étudiant lu
- char prenom[20]; //Le prénom " "
- ofstream sortie("sortie.txt"); //Ouverture du fichier sortie.txt
- ifstream entree; //Le fichier d'entrée
- bool fichierValide; //Valide si le fichier est vide ou non
- if (ouvrirFichier(entree, "notes.txt")) //si le fichier existe
- {
- if (!siFichierVide(entree)) //Si le fichier n'est pas vide.
- {
- entete();
- lireEtudiant(entree, nom, prenom, note);
- while (entree) //Tant que le fichier n'attend pas la fin de fichier.
- {
- trier8premierenote(note, 8);
- noteFinale[cptEtudiant] = calculerNoteFinale(note, ponderation, 7); //Affecte la note finale
- sommeNote += noteFinale[cptEtudiant]; //Accumuler la somme des notes
- if (noteFinale[cptEtudiant] > noteMeilleurEtudiant) //Trouve le meilleur étudiant
- {
- noteMeilleurEtudiant = noteFinale[cptEtudiant];
- meilleurEtudiant[0] = prenom[0];
- meilleurEtudiant[1] = '.';
- meilleurEtudiant[2] = '\0';
- strcat(meilleurEtudiant, nom);
- }
- affEtudiant(nom, prenom, noteFinale[cptEtudiant]); //Affiche le nom, prénom et la note finale.
- lireEtudiant(entree, nom, prenom, note);
- cptEtudiant++; //Accumuler le nombre d'étudiants
- }
- }
- moyenne = sommeNote / (float)cptEtudiant;
- cptSupMoy = compterNbSupMoyenne(noteFinale, cptEtudiant, moyenne); //Obtient le nombre de gens qui ont une note supp à la moy
- affStats(moyenne, meilleurEtudiant, cptSupMoy); //Affiche les statistiques
- system("pause");
- entree.close();
- }
- sortie.close();
- }
- /*Fonction pour lire le nom, note d'étudiant et mettant le nom en tableau avec des char, et la note qui sera affectée
- dans un tableau
- */
- void lireEtudiant(ifstream &entree, char nom[], char prenom[], double note[])
- {
- entree >> nom >> prenom;
- for(int i=0;i<10;i++)
- entree >> note[i]; // Lecture dans le fichier
- }
- /*Affiche l'entête*/
- void entete()
- {
- cout << setw(50) << right << "Liste des étudiants" << endl
- << setw(50) << right << "===================" << endl
- <<setw(19) << left << "Nom" << setw(50) << right << "Note finale" << endl
- <<setw(19) << left << "====================" << setw(49) << right << "===========" << endl;
- }
- /*Trie les 8 permières notes en ordre croissant*/
- void trier8premierenote(double note[], int tailleNote)
- {
- for (int i = 0; i < tailleNote-1; i++)
- for (int j = i+1; j < tailleNote; j++)
- if (note[i] > note[j])
- echange(note[i], note[j]);
- }
- /*Fonction swap homemade.*/
- void echange(double &val1, double &val2)
- {
- double temp = val1;
- val1 = val2;
- val2 = temp;
- }
- /*Calcul la note finale à l'aide du tableau de pondération et la note.*/
- double calculerNoteFinale(double note[], int pond[], int taille)
- {
- double noteF = 0;
- for (int i = 0; i < taille; i++)
- noteF += note[i + 3] * pond[i] / 100;
- return noteF;
- }
- /*Compteur pour savoir le nombre d'étudiant ayant une note plus grande que la moyenne.*/
- int compterNbSupMoyenne(double note[], int taille, double moy)
- {
- int cptSupMoy = 0; //Compteur pour le nombre suppérieur de la moyenne.
- for (int c = 0; c < taille; c++)//Jusqu'à ce que on arrive a la taille du tableau, on accumule si c'est plus haut
- { //Que la moyenne.
- if (note[c] > moy)
- cptSupMoy++;
- }
- return cptSupMoy;
- }
- /*Affiche les statistiques de sortie avec les informations obtenus.*/
- void affEtudiant(char nom[], char prenom[], double noteF)
- {
- cout << setw(10) << left << nom << " " << setw(46) << left << prenom << " " << setw(9) << right << setprecision(0) << fixed<< noteF << " %" << endl;
- }
- /*Affiche les dernières statistiques à la fin de la lecture des notes.*/
- void affStats(float moyenne, char meilleurNom[], int supMoy)
- {
- cout << endl;
- cout << setw(40) << left << "Moyenne du groupe: "<< setprecision(1) <<fixed << moyenne << " %" << endl
- << setw(40) << left << "Nb suppérieur à la moyenne: " << supMoy << endl
- << setw(40) << left << "Meilleur résultat: " << meilleurNom << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement