Advertisement
Guest User

Untitled

a guest
Jun 11th, 2010
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.12 KB | None | 0 0
  1. /*
  2. # Programme permettant la détermination du jour de la semaine
  3. # d'aprés l'Algorithme de Maurice Kraitchik.
  4.  
  5. Code original de TheBroyeur - 30/04/2010.
  6. Modifications apportées par :
  7. - Menuki
  8. - LeFauve42
  9. - ghuysmans99
  10.  
  11. Dernière modification le 11/06/2010.
  12. */
  13.  
  14. #define _CRT_SECURE_NO_WARNINGS
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. //@ghuysmans99 : support de l'Unicode
  18. #include <tchar.h>
  19.  
  20. //@ghuysmans99 : retour du nombre d'essais
  21. int entreDate(int* jour, int* mois, int* annee)
  22. //Retourne le nombre de dates invalides entrées
  23. {
  24.     int ct = 0;
  25.     do
  26.     {
  27.         _tprintf(_T("Date (JJ MM AAAA) : "));
  28.         _tscanf(_T("%d %d %d"),jour,mois,annee);
  29.  
  30.         do
  31.         {
  32.             if (*jour > 31 || *jour < 1) break;
  33.                 //pas de jours négatifs ou > 31
  34.             if (*mois > 12 || *mois < 1) break;
  35.                 //pas de mois négatifs ou > 12
  36.             if (*jour > 29 && *mois == 2) break;
  37.                 //pas plus de 29 jours en février
  38.             if (!((*annee % 4 == 0 && *annee % 100 > 0) || (*annee % 400 == 0)) && (*jour > 28)) break;
  39.                 //pas plus de 28 jours en février pour les années bisextiles
  40.             if ((*annee < 1582) || ((*annee == 1582) && (*mois < 10)) || ((*annee == 1582) && (*mois == 10) && (*jour < 15))) break;
  41.                 //jours en dessous du 15/10/1582 (date de la réforme grégorienne) invalides car calendrier différent avant cette date
  42.  
  43.             return ct; //validation passée, la date entrée est donc correcte
  44.         } while (0);
  45.  
  46.         _tprintf(_T("***  Date invalide.\n"));
  47.         ct++;
  48.     } while (1);
  49. }
  50.  
  51. int main(int argc, _TCHAR* argv[])
  52. {
  53.     int a; //l'année
  54.     int m; //le mois (mais janvier et février sont 13ème et 14ème mois de l'année suivante)
  55.     int q; //le quantième du mois
  56.     int j; //le rang du jour de la semaine où 0=samedi, 1=dimanche, etc., 6=vendredi
  57.     static const _TCHAR* s_jours[] = {_T("samedi"),_T("dimanche"),_T("lundi"),_T("mardi"),_T("mercredi"),_T("jeudi"),_T("vendredi")};
  58.    
  59.     if (entreDate(&q,&m,&a)>=1) _tprintf(_T("\n"));
  60.  
  61.     if (m <= 2)
  62.     {
  63.         a--;
  64.         m+=12;
  65.     }
  66.     j = (q+2*m+((3*(m + 1))/5)+a+(a/4)-(a/100)+(a/400)+2)%7;
  67.  
  68.     _tprintf(_T("Cette date est/etait un %s.\n"), s_jours[j]);
  69.     _tprintf(_T("\n"));
  70.  
  71.     system("pause");
  72.     return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement