Created
November 16, 2016 08:33
-
-
Save sven-hash/bf581163a17db8112e21482065f98676 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<project version="4"> | |
<component name="Encoding"> | |
<file url="file://$PROJECT_DIR$/Labo_05_Farina_Naimi.cpp" charset="UTF-8" /> | |
</component> | |
</project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<module type="CPP_MODULE" version="4"> | |
<component name="NewModuleRootManager"> | |
<content url="file://$MODULE_DIR$"> | |
<sourceFolder url="file://$MODULE_DIR$/CMakeLists.txt" isTestSource="false" /> | |
<sourceFolder url="file://$MODULE_DIR$/Labo_05_Farina_Naimi.cpp" isTestSource="false" /> | |
</content> | |
<orderEntry type="sourceFolder" forTests="false" /> | |
<orderEntry type="module-library"> | |
<library name="Header Search Paths"> | |
<CLASSES> | |
<root url="file:///usr/lib/gcc/x86_64-redhat-linux/6.2.1/include" /> | |
<root url="file:///usr/include" /> | |
<root url="file:///usr/local/include" /> | |
</CLASSES> | |
<SOURCES> | |
<root url="file:///usr/lib/gcc/x86_64-redhat-linux/6.2.1/include" /> | |
<root url="file:///usr/include" /> | |
<root url="file:///usr/local/include" /> | |
</SOURCES> | |
</library> | |
</orderEntry> | |
</component> | |
</module> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<project version="4"> | |
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" /> | |
<component name="ProjectInspectionProfilesVisibleTreeState"> | |
<entry key="Project Default"> | |
<profile-state> | |
<expanded-state> | |
<State> | |
<id /> | |
</State> | |
<State> | |
<id>Python</id> | |
</State> | |
</expanded-state> | |
<selected-state> | |
<State> | |
<id>C/C++</id> | |
</State> | |
</selected-state> | |
</profile-state> | |
</entry> | |
</component> | |
<component name="ProjectLevelVcsManager" settingsEditedManually="false"> | |
<OptionsSetting value="true" id="Add" /> | |
<OptionsSetting value="true" id="Remove" /> | |
<OptionsSetting value="true" id="Checkout" /> | |
<OptionsSetting value="true" id="Update" /> | |
<OptionsSetting value="true" id="Status" /> | |
<OptionsSetting value="true" id="Edit" /> | |
<ConfirmationsSetting value="0" id="Add" /> | |
<ConfirmationsSetting value="0" id="Remove" /> | |
</component> | |
<component name="masterDetails"> | |
<states> | |
<state key="ScopeChooserConfigurable.UI"> | |
<settings> | |
<splitter-proportions> | |
<option name="proportions"> | |
<list> | |
<option value="0.2" /> | |
</list> | |
</option> | |
</splitter-proportions> | |
</settings> | |
</state> | |
</states> | |
</component> | |
</project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<project version="4"> | |
<component name="ProjectModuleManager"> | |
<modules> | |
<module fileurl="file://$PROJECT_DIR$/.idea/Labo_05b.iml" filepath="$PROJECT_DIR$/.idea/Labo_05b.iml" /> | |
</modules> | |
</component> | |
</project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cmake_minimum_required(VERSION 3.6) | |
project(Labo_05b) | |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wconversion -Wextra -pedantic") | |
set(SOURCE_FILES Labo_05_Farina_Naimi.cpp) | |
add_executable(Labo_05b ${SOURCE_FILES}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
------------------------------------------------------------------------------------ | |
Laboratoire : Laboratoire n?5 - Calendrier | |
Fichier : Labo_05_Farina_Naimi.cpp | |
Auteur(s) : Jimmy Farina Zied Naimi | |
Date : 15.11.2016 | |
But : Affiche le calendrier annuel complet d'une ann?e choisie par | |
l'utilisateur entre [1900 - 2100] en tenant compte des ann?es | |
bissextiles. | |
Remarque(s) : Nill | |
Compilateur : MinGW-g++ 5.3.0 | |
------------------------------------------------------------------------------------ | |
*/ | |
#include <cstdlib> | |
#include <iostream> | |
#include <iomanip> | |
#include <limits> | |
//#define VIDER_BUFFER while(cin.get() != '\n') | |
#define VIDER_BUFFER cin.ignore(numeric_limits<streamsize>::max(), '\n') | |
using namespace std; | |
void reparerBuffer(); | |
bool reset(); | |
bool estBissextile(int anneeUtilisateur); | |
int main() { | |
//Constantes et variables utilis?es | |
//================================================================================ | |
const int ANNEE_MIN = 1900; | |
const int ANNEE_MAX = 2100; | |
const int MOIS_MIN = 1; | |
const int MOIS_MAX = 12; | |
const int JOURS_MIN = 1; | |
const int JOURS_MAX_IMPAIR = 30; | |
const int JOURS_MAX_PAIR = 31; | |
const int JOURS_MAX_FEVRIER = 28; | |
const int JOURS_MAX_FEVRIER_BISSEXTILE = 29; | |
const int ESPACE_PAR_CHIFFRE = 3; | |
const int JOUR_PAR_SEMAINE = 7; | |
const string JOURS_SEMAINE = " L M M J V S D"; | |
const string BARRE_DECO = "|===================|"; | |
int anneeUtilisateur, joursMaxMoisActuel, compteurJoursTotal; | |
string mois; | |
bool saisieOk; | |
//Boucle qui permet de reset le programme | |
do { | |
cout << "Bonjour, ce programme vous permet d'afficher le calendrier " | |
"complet d'une annee" << endl | |
<< "en tenant compte des annees bissextiles" | |
<< endl << endl; | |
// Saisie + v?rification | |
//============================================================================= | |
do { | |
cout << "Veuillez entrer l'annee que vous souhaitez afficher" << endl << | |
"intervalle -> [" << ANNEE_MIN << " - " << ANNEE_MAX << "] : "; | |
bool saisie = bool(cin >> anneeUtilisateur); | |
cout << endl; | |
if (!saisie) { | |
cin.clear(); | |
cerr << "Entrez un chiffre entier" << endl; | |
saisieOk = false; | |
} else if (anneeUtilisateur < ANNEE_MIN || anneeUtilisateur > ANNEE_MAX) { | |
cerr << endl << "Erreur ! L'annee doit etre situee entre [" << ANNEE_MIN | |
<< " - " << ANNEE_MAX << "]" << endl; // Message d'erreur | |
saisieOk = false; | |
} else { | |
saisieOk = true; | |
} | |
VIDER_BUFFER; | |
} while (!saisieOk); | |
cout << endl << endl; | |
// Affichage + calcul | |
//============================================================================= | |
// L'ann?e commence par un lundi (selon la consigne donn?e) | |
compteurJoursTotal = 1; | |
// D?compte des mois | |
//============================================================================= | |
for (int compteurMois = MOIS_MIN; compteurMois <= MOIS_MAX; compteurMois++) { | |
// On affecte la valeur correcte du mois actuel ? la variable string "mois" | |
switch (compteurMois) { | |
case 1: | |
mois = "Janvier"; | |
break; | |
case 2: | |
mois = "Fevrier"; | |
break; | |
case 3: | |
mois = "Mars"; | |
break; | |
case 4: | |
mois = "Avril"; | |
break; | |
case 5: | |
mois = "Mai"; | |
break; | |
case 6: | |
mois = "Juin"; | |
break; | |
case 7: | |
mois = "Juillet"; | |
break; | |
case 8: | |
mois = "Aout"; | |
break; | |
case 9: | |
mois = "Septembre"; | |
break; | |
case 10: | |
mois = "Octobre"; | |
break; | |
case 11: | |
mois = "Novembre"; | |
break; | |
case 12: | |
mois = "Decembre"; | |
break; | |
default: | |
mois = ""; | |
cerr << "Erreur !"; | |
} // fin du switch | |
// Affichage du mois, de l'ann?e et la ligne des jours de la semaine | |
cout << BARRE_DECO << endl; | |
cout << mois << " " << anneeUtilisateur << endl; | |
cout << JOURS_SEMAINE << endl; | |
// Calcul du nombre de jours maximum du mois en fonction du mois actuel | |
if (compteurMois % 2 == 1) {// Mois impairs, avec 30 jours | |
joursMaxMoisActuel = JOURS_MAX_IMPAIR; | |
} else if (compteurMois == 2) { // F?vrier | |
estBissextile(anneeUtilisateur) ? | |
joursMaxMoisActuel = JOURS_MAX_FEVRIER_BISSEXTILE : // 29 jours | |
joursMaxMoisActuel = JOURS_MAX_FEVRIER; // 28 jours | |
} else {// Mois pairs, avec 31 jours | |
joursMaxMoisActuel = JOURS_MAX_PAIR; | |
} | |
// D?compte des jours du mois | |
//========================================================================== | |
for (int compteurJoursMois = 1; compteurJoursMois <= joursMaxMoisActuel; | |
compteurJoursMois++, compteurJoursTotal++) { | |
// traitement de cas du 1er jour du mois | |
if (compteurJoursMois == 1) { | |
int nbreDeEspaces = (compteurJoursTotal % JOUR_PAR_SEMAINE) | |
* ESPACE_PAR_CHIFFRE; | |
cout << setw(nbreDeEspaces - 1) << compteurJoursMois << " "; | |
} else { | |
cout << setw(ESPACE_PAR_CHIFFRE - 1) << compteurJoursMois << " "; | |
} | |
//Retour ? la ligne le dimanche | |
if ((compteurJoursTotal % JOUR_PAR_SEMAINE) == 0) cout << endl; | |
}// fin de la boucle for pour le d?compte des jours du mois | |
cout << endl << endl << endl << endl; // Espaces entre chaque mois | |
} // Fin de la boucle for pour le d?compte des mois | |
} while (reset()); //Le programme recommence si l'utilisateur le souhaite | |
// Fin du programme | |
//================================================================================ | |
cout << "Cher utilisateur, merci d'avoir utilise notre programme." << endl | |
<< "Pressez sur Enter pour quitter le programme." << endl; | |
return EXIT_SUCCESS; | |
} | |
void reparerBuffer() { | |
if (cin.fail()) // si le flux d'entr?e est en erreur, on vide le buffer | |
{ | |
cin.clear(); | |
cin.ignore(numeric_limits<streamsize>::max(), '\n'); | |
} | |
} | |
bool reset() { | |
const char OUI = 'O', NON = 'N'; | |
char reponseUtilisateur; | |
do { | |
// On demande ? l'utilisateur s'il souhaite recommencer | |
cout << "Voulez-vous recommencer ? [" << OUI << " / " << NON << "]"; | |
cin >> reponseUtilisateur; | |
reparerBuffer(); | |
VIDER_BUFFER; | |
if (toupper(reponseUtilisateur) == OUI) { | |
cout << endl; | |
return true; | |
} else if (toupper(reponseUtilisateur) == NON) { | |
cout << endl; | |
return false; | |
} | |
//sinon | |
cerr << "Erreur ! Veuillez repondre par [" << OUI << " / " << NON << "]" | |
<< endl; | |
} while (true); // fin de la boucle do..while | |
} // fin de la fonction bool recommencer | |
bool estBissextile(int anneeUtilisateur) { | |
return bool(anneeUtilisateur % 400 == 0 || (anneeUtilisateur % 4 == 0 && anneeUtilisateur % 100 != 0); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment