Bonjour,
J’ai un problème avec un petit programme en C++ servant à compter le nombre de dimanche tombant le premier du mois. En effet, les résultats retournés ne sont pas les mêmes suivant les options de compilation. Le programme donne le résultat attendu avec les options suivantes :
1 2 | g++ -std=c++14 -Wall -Wextra -pedantic -O2 Ex019.cpp clang++ -std=c++14 -Wall -Wextra -pedantic Ex019.cpp |
Mais pas avec les options suivantes (retourne 0) :
1 | clang++ -std=c++14 -Wall -Wextra -pedantic -O2 Ex019.cpp
|
Mais je n’arrive vraiment pas à comprendre pourquoi. Voici le programme :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include <iostream> #include <chrono> #include <algorithm> using namespace std; using ms = chrono::milliseconds; using get_time = chrono::steady_clock; int main(){ auto start = get_time::now(); int dayInit {0}; int dayCounter {1}; int sundayCounter {0}; for(int year {1901}; year < 2001; year++) { for(int month {1}; month <= 12; month++) { if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) { dayInit = 31; } if(month == 4 || month == 6 || month == 9 || month == 11) { dayInit = 30; } if(month == 2) { if(year % 4 == 0) { dayInit = 29; } if(year % 4 != 0) { dayInit = 28; } } for(int day {1}; day <= dayInit; day++) { dayCounter++; if(day == 1 and dayCounter % 7 == 0) { // cout << day << "/" << month << "/" << year << endl; // SI CETTE LIGNE N'EST PAS COMMENTÉE, LE PROGRAMME MARCHE QUELQUE SOIT LES OPTIONS DE COMPILATION !!! sundayCounter++; } } } } auto end = get_time::now(); cout << sundayCounter << " " << dayCounter << endl; cout << "Elapsed time is : " << chrono::duration_cast <ms>(end - start).count() << " ms " << endl; } ` |
De plus, si la ligne 47 (environ) n’est pas commentée, le programme marche quelque soit les options de compilation.
Avez-vous une idée du problème ?
Merci d’avance !
+0
-0