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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
| #include <iostream>
using namespace std;
//renvoie un entier correspondant au jour de la semaine
int dayOfWeek(int day, int month, int year)
{
//On utilise la congruence de Zeller
if (month <= 2)
{
month += 12; //pour janvier = 13, février = 14
year --;
}
int K = year % 100;
int J = year / 100;
//calcul via la congruence de Zeller
int h = (day + (26*(month + 1))/10 + K + K/4 + J/4 + 5*J) % 7;
//0 = samedi, 1 = dimanche...
//On veut 0 = lundi, 1 = mardi...
h = (h+5) % 7;
return h;
}
//année bissextile?
bool isLeapYear(int year)
{
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
return true;
else
return false;
}
//renvoie le nombre de jours dans un mois
int daysInMonth(int month, int year)
{
//Le nombre de jours par mois
int tab_jours[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (month != 2)
{
//On n'est pas en février, pas d'année bissextile à craindre
return tab_jours[month - 1];
}
//février d'année bissextile ou pas?
if (isLeapYear(year))
return 29;
else
return 28;
}
//pour afficher le numéro en deux chiffre du jour passé en paramètre
void printDay(int day)
{
if (day < 10) cout << 0;
cout << day;
}
//affichage final
void printCalendar(int month, int year)
{
//Pour avoir le nom du mois
const char * nom_mois[] = { "Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre"};
cout << "=================================" << endl;
cout << nom_mois[month-1] << " " << year << endl;
cout << "=================================" << endl;
cout << "Lun Mar Mer Jeu Ven Sam Dim" << endl;
int h = dayOfWeek(1, month, year);
//Là on affiche le premier jour du mois
//Donc on met éventuellement des espaces
for (int i = 0; i < h; i++)
{
cout << " ";
}
//Puis la grande boucle
int nb_jours = daysInMonth(month, year);
for (int count = 1; count <= nb_jours; count ++)
{
printDay(count);
h++;
//Si on est arrivé à plus que dimanche on change de ligne
if (h >= 7)
{
h = 0;
cout << endl;
} else
{
cout << " ";
}
}
//fin
cout << "\n=================================" << endl;
}
//////////////////////////////
// Fonction MAIN /////////////
//////////////////////////////
int main()
{
int month, year;
cout << "Entrez un mois et une annee (MM AAAA)" << endl;
cin >> month >> year;
cout << endl;
printCalendar(month, year);
return 0;
} |
Partager