#include 

char semaine[7][9]={"Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"};

/* semaine[0] correspond a Lundi
   semaine[1] correspond a Mardi, etc ....
   On travaillera sur les indices de position modulo 7 */

int nb_jourmois[12]={31,29,31,30,31,30,31,31,30,31,30,31};

/* SAISIE DE LA DATE DANS LE CORPS PRINCIPAL */

main()

  {int date[2];
  int i; for (i=1976;i<=2000;i++)
    {date[0]=17; date[1]=4;date[2]=i;
printf("%s 17 avril %d\n",semaine[jour_sem(date)],i);}

    printf("Rentrez la date sous la forme jj mm aaaa: ");
       scanf("%d %d %d",&date[0],&date[1],&date[2]);
 if (((date[2]==1580) && (date[1]==4) && (date[0]<15))
    || ((date[2]==1580) && (date[1]<4))
     || (date[2]<1580))
  {printf("Date anterieure au calendrier gregorien\n");
         printf("Choisissez une date apres le 15 avril 80: ");
                  scanf("%d %d %d",&date[0],&date[1],&date[2]);}
       while (!coherence(date)) 
{printf("La date est incorrecte.\nRecommencez: "); 
 scanf("%d %d %d",&date[0],&date[1],&date[2]);} 

       /*   On redemande la date tant que celle-ci n'est pas correcte */

       printf("Ce jour-la etait un %s\n",semaine[jour_sem(date)]);}

/* Cette fonction teste si la date est correcte */

int coherence (int date[2])
{if ((date[1]>12) || (date[0]==0) || (date[1]==0)) return 0;
/* Les annees n'ont pas plus de 12 mois, et les mois n'on pas plus de 31 jours.
   On rentre ensuite les nombres de jours de chaque mois */


 if ((date[1]==1) && (date[0]>31)) return 0;
 if ((date[1]==2) && (bissextile(date[2])==0) && (date[0]>28)) return 0;
 if ((date[1]==2) && (bissextile(date[2])==1) && (date[0]>29)) return 0;
 /* On ecrira une fonction qui teste si une annee est bissextile */
 if ((date[1]==3) && (date[0]>31)) return 0;
 if ((date[1]==4) && (date[0]>30)) return 0;
 if ((date[1]==5) && (date[0]>31)) return 0;
 if ((date[1]==6) && (date[0]>30)) return 0;
 if ((date[1]==7) && (date[0]>31)) return 0;
 if ((date[1]==8) && (date[0]>31)) return 0;
 if ((date[1]==9) && (date[0]>30)) return 0; 
 if ((date[1]==10) && (date[0]>31)) return 0; 
 if ((date[1]==11) && (date[0]>30)) return 0;
 if ((date[1]==12) && (date[0]>31)) return 0;
 else return 1;}


 int bissextile (int annee)
 {if ((annee%4==0) && (annee%100!=0)) return 1;
  if ((annee%100==0) && (annee%400!=0)) return 0;
  if (annee%400==0) return 1;
  if (annee%4!=0) return 0;
 }


int somme(int vect[], int n)
{int i,s; s=0;
        for(i=0; i=annee;k--)
   s=s-(bissextile(k)+1);
  if (annee>2000) for (k=2001;k<=annee;k++)
   s=s+bissextile(k-1)+1;
return s%7;}

 /* D'une annee bissextile a la suivante, on avance de
    2 jours dans la semaine, et d'une annee normale
    a la suivante, on avance d'un jour. */

/* Voici enfin la fonction qui retourne le jour de
   la semaine correspondant a la date rentree; ou
   plutot l'indice de position dans le tableau char
   semaine[ ]. */

int jour_sem(int date[2])

{int jour=decalage(date[2])+jour_2000(date);
/* L'indice du tableau semaine doit etre compris entre 0 et 6 */
 if (jour<0) return (jour+7);
 if (jour>6) return jour%7;
 else return jour;}




1