Jour a partir d'une date mm/jj/yyyy

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 409 fois - Téléchargée 21 fois

Contenu du snippet

mon code sert pour savoir le jour a partir de la date exprimée sous la forme mm/jj/yyyy
mm : mois
jj : jour
yyyy : Annee
il prend en consideration que leapYear avant 1732 sont les multiples de 4 seulement!

Source / Exemple :


#include<stdio.h>

bool isleap(int n){
    if(n<1732)
      return (!(n%4));
    return (!(n%4)&&(n%100))||!(n%400);
    }
int mounths[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char *days[7]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
char* M[]={"","January","February","March","April","May","June","July","August","September","October","November","December"};

bool isvalide(int m,int d,int y){
   if(d > 2 && d < 14 && m == 9 && y == 1752)
     return false;
   return ( d <= mounths[m]+isleap(y)*(m == 2) && m < 13 );
   }
int main(){
   int d,m,y;
   printf("Enter the date that you want to know the correspondant day of week in this
form : mm dd yyyy\n mm:mounth \n dd : day\n yyyy:year\n");//ligne ajoutée en réponse a la demande de "ndubien" 

  
   scanf("%d%d%d",&m,&d,&y);
   while(m != 0 && d != 0 && y != 0){
       if(!isvalide(m,d,y))
         printf("%d/%d/%d is an invalid date.\n",m,d,y);
       else{
          long L=0;
          for(int i=1;i<y;i++)
             L+=365+isleap(i);
          for(int i=1;i<m;i++)
             if(i == 2)
               L+=28+isleap(y);
             else
               L+=mounths[i];
          L+=d+4;
          L-=11*((y>1752) || (y==1752 && m>9) ||(y==1752 && m==9 && d>2));

          L%=7;
          printf("%s %d, %d is a %s\n",M[m],d,y,days[L]);

      }
       scanf("%d%d%d",&m,&d,&y);
   }

   return 0;

}

A voir également

Ajouter un commentaire

Commentaires

ndubien
Messages postés
557
Date d'inscription
dimanche 25 septembre 2005
Statut
Membre
Dernière intervention
10 mai 2014
2 -
Bonjour,

Cette source est interressante mais présentes de nombreux problèmes :
- Si, à la place du mois, à la place du jour, ou à la place de l'année, on met un caractère autre qu'un nombre, le programme ne répond plus à aucunes commandes et ne peut s'arrêter qu'en exercant un clic sur la croix en haut à droite de la fenêtre (sous windows).
- De plus afin de rendre ce code plus captivant il serait préférable de dire à l'utilisateur ce qu'il est censé mettre (un mois, un jour, ou une année).

Malgré ces quelques critiques, ce code semble bien fonctionner et peut s'avérer interressant pour certains.

Au revoir.
ndubien
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13 -
ndubien > la console ne sert plus que de support à la démonstration d'un algo, absolument rien de plus. Inutile de perdre du temps à faire de la déco ici, les fioritures sont faites pour le mode GUI.
pasquet78
Messages postés
21
Date d'inscription
vendredi 3 janvier 2003
Statut
Membre
Dernière intervention
19 juin 2008
-
Serais-tu anglais ?
Mis à part l'erreur de la 3ème ligne où il y a 1732 à la place de 1752, je vois que tu passes du calendrier julien au grégorien du 2 septembre 1752 au 14 septembre 1752. Il y a seulement les protestants anglais qui ont changé de calendrier à cette date. Le pape Grégoire a instauré le calendrier grégorien à partir du 4 octobre 1582 en passant directement au 15 octobre. Une grande partie de la France a attendu le mandement d'Henri III pour changer de calendrier en décembre 1582.
Peut être que ton inspiration vient des sources du système d'exploitation UNIX, mais ses créateurs, eux, étaient d'origine anglaise.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.