Advertisement
Guest User

Untitled

a guest
Mar 24th, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.20 KB | None | 0 0
  1. /* En-tête du programme
  2. =======================
  3. Programme : triHeureEnsoleillement.cpp
  4. Auteur : Jean-Philippe Tremblay
  5. Conception : 21/03/2017
  6. Description : lit le nombre d'heures d'ensoleillement dans un fichier pour chaque mois et jours et calcule ainsi le total des heures,
  7. la moyenne des heures et trouve la meilleure journée et le meilleur mois.
  8. */
  9.  
  10. /*Directives au pré-processeur
  11. ========================= */
  12. #include <iostream>
  13. #include <saisieSecurisee.h>
  14. #include <iomanip>
  15.  
  16. using namespace std;
  17.  
  18. const int NBJOURS = 31;
  19. const int NBMOIS = 12;
  20.  
  21. /* Prototype de fonctions
  22. =================== */
  23.  
  24. void lireMois(ifstream &entree, int nbHeure[NBMOIS][NBJOURS]);
  25. void calculerTotalHeure(int totalHeure[NBMOIS], int nbHeure[NBMOIS][NBJOURS]);
  26. void calculerMoy(float moyenne[NBMOIS], int totalHeure[NBMOIS], int nbJoursParMois[NBMOIS]);
  27. void afficherResultatMois(ostream &sortie, char nomM[NBMOIS][14], int totalHeure[NBMOIS], float moyenne[NBMOIS]);
  28. void afficherStats(ostream &sortie, char nomMM[14], int totalHeureMM, int dateMJ, char nomMJ[14], int nbHeureMJ);
  29. void afficher6MeilleurMois(ostream &sortie, char nomM[NBMOIS][14]);
  30. void meilleurJourAnnee(int nbHeure[NBMOIS][NBJOURS], int &meilleurMois, int &meilleurJour);
  31. int meilleurMoisAnnee(int totalHeure[NBMOIS]);
  32. void trier6MeilleursMois(int totalHeure[NBMOIS], char nomM[NBMOIS][14]);
  33. /* Programme principale
  34. ======================= */
  35.  
  36.  
  37.  
  38. void main()
  39. {
  40.  
  41. // Création et initialisation des variables
  42.  
  43. int nbHeure[NBMOIS][NBJOURS];
  44. int nbJoursParMois[NBMOIS] = { 31, 29, 31, 30 ,31, 30, 31, 31, 30, 31, 30, 31 };
  45. int totalHeure[NBMOIS] = { 0 };
  46. int ligneMeilleurJour,
  47. colMeilleurJour,
  48. meilleurMois;
  49.  
  50. float moyenne[NBMOIS];
  51.  
  52. char nomM[NBMOIS][14] = { "Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre",
  53. "Novembre", "Decembre" };
  54.  
  55. ofstream sortie;
  56. ifstream entree;
  57.  
  58. if (ouvrirFichier(entree, "soleil.txt") == true)
  59. {
  60. sortie.open("sortie.txt");
  61.  
  62. lireMois(entree, nbHeure);
  63.  
  64. calculerTotalHeure(totalHeure, nbHeure);
  65. calculerMoy(moyenne, totalHeure, nbJoursParMois);
  66.  
  67. afficherResultatMois(cout, nomM, totalHeure, moyenne);
  68. afficherResultatMois(sortie, nomM, totalHeure, moyenne);
  69.  
  70. meilleurJourAnnee(nbHeure, ligneMeilleurJour, colMeilleurJour);
  71. meilleurMois = meilleurMoisAnnee(totalHeure);
  72.  
  73. afficherStats(cout, nomM[meilleurMois], totalHeure[meilleurMois], colMeilleurJour + 1, nomM[ligneMeilleurJour] , nbHeure[ligneMeilleurJour][colMeilleurJour]);
  74. afficherStats(sortie, nomM[meilleurMois], totalHeure[meilleurMois], colMeilleurJour + 1, nomM[ligneMeilleurJour], nbHeure[ligneMeilleurJour][colMeilleurJour]);
  75.  
  76. trier6MeilleursMois(totalHeure, nomM);
  77. afficher6MeilleurMois(cout, nomM);
  78. afficher6MeilleurMois(sortie, nomM);
  79. }
  80.  
  81. entree.close();
  82. sortie.close();
  83. pause();
  84. }
  85. // pour lire le nombre d'heure d'ensoleillement dans chaque mois sur leurs nombre de jours
  86. void lireMois(ifstream &entree, int nbHeure[NBMOIS][NBJOURS])
  87. {
  88. for (int i = 0; i < NBMOIS; i++)
  89. {
  90. for (int j = 0; j < NBJOURS; j++) // lit le nombre d'heures d'ensoleillement pour chaque jours de chaque mois
  91. {
  92. entree >> nbHeure[i][j];
  93. }
  94. }
  95. }
  96. // pour calculer le nombre total d'heures d'ensoleillement
  97. void calculerTotalHeure(int totalHeure[NBMOIS], int nbHeure[NBMOIS][NBJOURS])
  98. {
  99. for (int i = 0; i < NBMOIS; i++)
  100. { // calcule le nb d'heure totale par jour pour chaque mois
  101. for (int j = 0; j < NBJOURS; j++)
  102. {
  103. totalHeure[i] += nbHeure[i][j];
  104. }
  105. }
  106.  
  107. }
  108. // calcule la moyenne d'heure d'ensoleillement pour chaque mois
  109. void calculerMoy(float moyenne[NBMOIS], int totalHeure[NBMOIS], int nbJoursParMois[NBMOIS])
  110. {
  111. for (int i = 0; i < NBMOIS; i++) // calcule la moyenne pour chaque mois
  112. {
  113. moyenne[i] = (float)totalHeure[i] / nbJoursParMois[i];
  114. }
  115.  
  116. }
  117. // pour afficher les résultats du total et de la moyenne des heures d'ensoleillement
  118. void afficherResultatMois(ostream &sortie, char nomM[NBMOIS][14], int totalHeure[NBMOIS], float moyenne[NBMOIS])
  119. {
  120. char nomTemp[14];
  121.  
  122. sortie << setw(80) << "Liste des statistiques sur l'ensoleillement" << endl
  123. << setw(80) << "*******************************************" << endl << endl
  124. << "Heures d'ensoleillement par mois" << endl << endl
  125. << setw(22) << "Total" << setw(10) << "Moyenne" << endl;
  126.  
  127.  
  128. for (int i = 0; i < NBMOIS; i++)
  129. { // on utilise strcat_s pour s'assurer que les : ne sont pas affectés par le setw
  130. strcpy_s(nomTemp, nomM[i]);
  131. strcat_s(nomTemp, " :");
  132. sortie << left << setw(11) << nomTemp << right << setw(10) << totalHeure[i] << fixed << setprecision(2)
  133. << setw(10) << moyenne[i] << endl;
  134. }
  135. }
  136. // trouve la journée où il y a eu le plus d'heure d'ensoleillement dans l'année
  137. void meilleurJourAnnee(int nbHeure[NBMOIS][NBJOURS], int &meilleurJourDuMois, int &meilleurJour)
  138. {
  139. int meilleureHeure = 0;
  140. for (int i = 0; i < NBMOIS; i++)
  141. {
  142. for (int j = 0; j < NBJOURS; j++)
  143. {
  144. if (meilleureHeure < nbHeure[i][j]) // si la meilleureHeure est plus petite
  145. {
  146. meilleureHeure = nbHeure[i][j];
  147. meilleurJourDuMois = i; // on remplit les variables meilleurJour avec i et j
  148. meilleurJour = j;
  149. }
  150. }
  151. }
  152. }
  153. // trouve et retourne le mois avec le plus d'heure d'ensoleillement de l'année
  154. int meilleurMoisAnnee(int totalHeure[NBMOIS])
  155. {
  156. int tempMois = 0;
  157. int pos = 0;
  158.  
  159. for (int i = 0; i < NBMOIS; i++)
  160. {
  161. if (tempMois < totalHeure[i]) // si temp mois est plus petit que le total d'heure d'un des 12 mois
  162. {
  163. tempMois = totalHeure[i]; // on prend sa valeur et on retourne sa position
  164. pos = i;
  165. }
  166. }
  167. return pos;
  168. }
  169. // pour afficher les statistiques d'ensoleillement à l'écran et dans le fichier sortie
  170. void afficherStats(ostream &sortie, char nomMM[14], int totalHeureMM, int dateMJ, char nomMJ[14], int nbHeureMJ)
  171. {
  172. sortie << endl << "La meilleure journee de l'annee est le " << dateMJ << " " << char(tolower(nomMJ[dateMJ]))
  173. << nomMJ[0] + 1 << endl << "et il y a eu " << nbHeureMJ
  174. << " heures d'ensoleillement" << endl << endl;
  175.  
  176. sortie << "Le mois de " << char(tolower(nomMM[dateMJ])) << nomMM[0] << " fut le plus ensoleille avec "
  177. << totalHeureMM << " heures" << endl << endl;
  178.  
  179. }
  180. // pour trier les mois en ordre décroissant de leurs heures total d'ensoleillement
  181. void trier6MeilleursMois(int totalHeure[NBMOIS], char nomM[NBMOIS][14])
  182. {
  183. for (int i = 0; i < NBMOIS - 1; i++) // on compare les deux premiers nombres
  184. {
  185. for (int j = i + 1; j < NBMOIS; j++) // on compare ensuite le premier avec le troisième et ainsi de suite
  186. {
  187. if (totalHeure[i] < totalHeure[j]) // si on i plus grand que j
  188. {
  189. swap(totalHeure[i], totalHeure[j]); // on interchange le total d'heure mais aussi le nom du mois car on trie les 2
  190. swap(nomM[i], nomM[j]);
  191. }
  192. }
  193. }
  194.  
  195. }
  196. // pour afficher les 6 meilleurs mois triés
  197. void afficher6MeilleurMois(ostream &sortie, char nomM[NBMOIS][14])
  198. {
  199.  
  200. char puces[6][4] = { "1. ", "2. ", "3. ", "4. ", "5. ", "6. " };
  201.  
  202. sortie << "Les 6 meilleurs mois d'ensoleillement" << endl;
  203.  
  204. for (int i = 0; i < 6; i++) // affiche seulement 6 mois
  205. {
  206.  
  207. sortie << right << setw(8) << puces[i] << setw(2) << nomM[i] << endl;
  208. }
  209.  
  210. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement