Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- # Programme permettant la détermination du jour de la semaine
- # d'aprés l'Algorithme de Maurice Kraitchik.
- Code original de TheBroyeur - 30/04/2010.
- Modifications apportées par :
- - Menuki
- - LeFauve42
- - ghuysmans99
- Dernière modification le 11/06/2010.
- */
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- //@ghuysmans99 : support de l'Unicode
- #include <tchar.h>
- //@ghuysmans99 : retour du nombre d'essais
- int entreDate(int* jour, int* mois, int* annee)
- //Retourne le nombre de dates invalides entrées
- {
- int ct = 0;
- do
- {
- _tprintf(_T("Date (JJ MM AAAA) : "));
- _tscanf(_T("%d %d %d"),jour,mois,annee);
- do
- {
- if (*jour > 31 || *jour < 1) break;
- //pas de jours négatifs ou > 31
- if (*mois > 12 || *mois < 1) break;
- //pas de mois négatifs ou > 12
- if (*jour > 29 && *mois == 2) break;
- //pas plus de 29 jours en février
- if (!((*annee % 4 == 0 && *annee % 100 > 0) || (*annee % 400 == 0)) && (*jour > 28)) break;
- //pas plus de 28 jours en février pour les années bisextiles
- if ((*annee < 1582) || ((*annee == 1582) && (*mois < 10)) || ((*annee == 1582) && (*mois == 10) && (*jour < 15))) break;
- //jours en dessous du 15/10/1582 (date de la réforme grégorienne) invalides car calendrier différent avant cette date
- return ct; //validation passée, la date entrée est donc correcte
- } while (0);
- _tprintf(_T("*** Date invalide.\n"));
- ct++;
- } while (1);
- }
- int main(int argc, _TCHAR* argv[])
- {
- int a; //l'année
- int m; //le mois (mais janvier et février sont 13ème et 14ème mois de l'année suivante)
- int q; //le quantième du mois
- int j; //le rang du jour de la semaine où 0=samedi, 1=dimanche, etc., 6=vendredi
- static const _TCHAR* s_jours[] = {_T("samedi"),_T("dimanche"),_T("lundi"),_T("mardi"),_T("mercredi"),_T("jeudi"),_T("vendredi")};
- if (entreDate(&q,&m,&a)>=1) _tprintf(_T("\n"));
- if (m <= 2)
- {
- a--;
- m+=12;
- }
- j = (q+2*m+((3*(m + 1))/5)+a+(a/4)-(a/100)+(a/400)+2)%7;
- _tprintf(_T("Cette date est/etait un %s.\n"), s_jours[j]);
- _tprintf(_T("\n"));
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement