Advertisement
Guest User

nando

a guest
Jul 8th, 2008
606
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.48 KB | None | 0 0
  1. /* Algoritmo para determinar o dia da semana entre uma data dada. */
  2.   #include <stdio.h>
  3.   main()
  4. {
  5. int Dia, Mes, Ano, DiasDoAno, Dias31, AnosBiss;
  6. long int Anos, NumDias;
  7.  
  8.   printf ( "Digite dia, mes e ano: \n" );
  9.   scanf ( "%d %d %d", &Dia, &Mes, &Ano );
  10.   Anos = Ano - 1600;
  11.  
  12.   /* Número de mêses com 31 dias até o mes dado. */
  13.   if ( Mes < 9 )
  14.       Dias31 = Mes / 2;
  15.   else
  16.       Dias31 = ( Mes + 1 ) / 2;
  17.  
  18.   /* Números de dias do ano dado, considerando fevereiro como
  19.    * tendo 30 dias. */
  20.   DiasDoAno = 30 * ( Mes - 1 ) + Dia + Dias31;
  21.  
  22.   /* Retifica o número de dias de fevereiro */
  23.   if ( Mes >= 2 )
  24.     if ( ( Ano % 4 != 0 ) || ( ( Ano % 100 == 0 ) && ( Ano % 400 != 0 ) ) ) /*aqui faltava o if */
  25.       DiasDoAno = DiasDoAno - 2;
  26.   else
  27.       DiasDoAno = DiasDoAno - 1;
  28.  
  29.   /* Número de anos bissextos entre o ano dado e 1600 */
  30.   AnosBiss = Ano / 4 - 400 - ( Ano / 100 - 16 ) + ( Ano / 400 - 4 ) + 1;
  31.  
  32.   /* Número de dias entre a dara dada e 01/01/1600. */
  33.   if ( Ano == 1600 )
  34.       NumDias = DiasDoAno;
  35.   else
  36.       NumDias = Anos * 365 + DiasDoAno + AnosBiss;
  37.  
  38.   /* Dia da semana. */
  39.   switch ( NumDias % 7 )
  40.       {
  41.       case 1 : printf ( "\n Sábado." ); break;
  42.       case 2 : printf ( "\n Domingo." ); break;
  43.       case 3 : printf ( "\n Segunda." ); break;
  44.       case 4 : printf ( "\n Terça." ); break;
  45.       case 5 : printf ( "\n Quarta." ); break;
  46.       case 6 : printf ( "\n Quinta." ); break;
  47.       case 7 : printf ( "\n Sexta." ); break;
  48.       }
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement