home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 17 / CD_ASCQ_17_101194.iso / dos / prg / alb_c10 / chap_05 / ch05_15.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-09-08  |  2.0 KB  |  80 lines

  1. /*********************************************************************
  2. *  CH05_15.C              Combien y a t'il de jours entre      *
  3. *                cette date et le 1er janvier?        *
  4. *                    domaine des annΘes= [ 1901, 2099] *
  5. *********************************************************************/
  6.  
  7. #include<stdio.h>
  8. int LitInt( void);
  9.  
  10. main( void)
  11. {
  12.     int jour, mois, annee, nbjour;
  13.  
  14.   /* 1. Saisie contr⌠lΘe des paramΦtres:                           */
  15.   
  16.       do{
  17.         do{
  18.              printf("\t\t\t\t jour : ");
  19.              jour= LitInt();
  20.           }
  21.         while( jour<=0 || jour>31);
  22.  
  23.         do{
  24.              printf("\t\t\t\t mois : ");
  25.              mois= LitInt();
  26.           }
  27.             while( mois<=0 || mois>12);
  28.  
  29.         printf("\t\t\t\t annΘe: ");
  30.         annee= LitInt();
  31.           }
  32.       while(      mois== 2 && (    ( annee % 4 == 0 && jour> 29)
  33.                   || ( annee % 4 != 0 && jour> 28)
  34.                 )
  35.            || (      jour> 30
  36.              && ( mois== 4 || mois== 6 || mois== 9 || mois== 11)
  37.            )
  38.            ||    ( annee< 1901) || ( annee> 2099)
  39.          );
  40.  
  41.   /* 2. Calcul:                                                     */
  42.  
  43.     switch( mois )
  44.            {
  45.         case 1:     nbjour=   0;         break;
  46.         case 2:     nbjour=  31;          break;
  47.         case 3:  nbjour= 31+ 28;     break;
  48.         case 4:  nbjour=  90;           break;
  49.         case 5:  nbjour= 120;         break;
  50.         case 6:     nbjour= 151;           break;
  51.         case 7:     nbjour= 181;         break;
  52.         case 8:  nbjour= 212;         break;
  53.         case 9:     nbjour= 243;           break;
  54.         case 10: nbjour= 273;         break;
  55.         case 11: nbjour= 304;           break;
  56.         case 12: nbjour= 334;       break;
  57.            }
  58.  
  59.     nbjour+= jour;
  60.  
  61.     /* prise en compte des annΘes bissextiles                   */
  62.       if(    annee % 4 == 0
  63.               && mois!= 2 && jour!= 29
  64.             && nbjour>= 31+29
  65.           )
  66.       nbjour++;
  67.  
  68.       printf(" Le %d/%d/%d  est le %dΦme jour de l'annΘe.",
  69.                        jour, mois, annee, nbjour);
  70. }
  71.  
  72. int LitInt( void)
  73. {
  74.         int Entier;
  75.     while( scanf("%d", &Entier)!= 1)
  76.         while( getchar() != '\n');
  77.     while( getchar() != '\n');
  78.     return ( Entier);
  79. }
  80.