Advertisement
jacknpoe

Ordem do dia por dia/mês/ano.

Nov 27th, 2013
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.08 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. typedef enum {
  4.     janeiro = 1,
  5.     fevereiro,
  6.     marco,
  7.     abril,
  8.     maio,
  9.     junho,
  10.     julho,
  11.     agosto,
  12.     setembro,
  13.     outubro,
  14.     novembro,
  15.     dezembro
  16. } TMes;
  17.  
  18. bool bissexto( int ano) {
  19.     return ( ano % 100 != 0 and ano % 4 == 0) or ( ano % 400 == 0);
  20. }
  21.  
  22. char dias_em_um_mes( char mes, int ano) {
  23.     switch( TMes( mes)) {
  24.         case janeiro:
  25.         case marco:
  26.         case maio:
  27.         case julho:
  28.         case agosto:
  29.         case outubro:
  30.         case dezembro:
  31.             return 31;
  32.         case abril:
  33.         case junho:
  34.         case setembro:
  35.         case novembro:
  36.             return 30;
  37.         default:
  38.             return ( bissexto( ano) ? 29 : 28);
  39.     }
  40. }
  41.  
  42. int numero_do_dia_no_ano( char dia, char mes, int ano) {
  43.     int acumulador = 0, contador;
  44.     for( contador = 1; contador < mes; contador++)
  45.         acumulador += dias_em_um_mes( contador, ano);
  46.     return acumulador + dia;
  47. }
  48.  
  49. int numero_do_dia_no_ano_2( char dia, char mes, bool bissexto) {
  50.     static int meses[] = { 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
  51.     return dia + meses[ mes] + ( bissexto and mes > 2 ? 1 : 0 );
  52. }
  53.  
  54. int main( void) {
  55.     printf( "%d\n", numero_do_dia_no_ano(  1,  1, 2012));
  56.     printf( "%d\n", numero_do_dia_no_ano(  1,  2, 2012));
  57.     printf( "%d\n", numero_do_dia_no_ano(  1,  3, 2012));
  58.     printf( "%d\n", numero_do_dia_no_ano( 10, 11, 2012));
  59.  
  60.     printf( "\n");
  61.  
  62.     printf( "%d\n", numero_do_dia_no_ano_2(  1,  1, bissexto(2012)));
  63.     printf( "%d\n", numero_do_dia_no_ano_2(  1,  2, bissexto(2012)));
  64.     printf( "%d\n", numero_do_dia_no_ano_2(  1,  3, bissexto(2012)));
  65.     printf( "%d\n", numero_do_dia_no_ano_2( 10, 11, bissexto(2012)));
  66.  
  67.     printf( "\n");
  68.  
  69.     printf( "%d\n", numero_do_dia_no_ano(  1,  1, 2013));
  70.     printf( "%d\n", numero_do_dia_no_ano(  1,  2, 2013));
  71.     printf( "%d\n", numero_do_dia_no_ano(  1,  3, 2013));
  72.     printf( "%d\n", numero_do_dia_no_ano( 10, 11, 2013));
  73.  
  74.     printf( "\n");
  75.  
  76.     printf( "%d\n", numero_do_dia_no_ano_2(  1,  1, bissexto(2013)));
  77.     printf( "%d\n", numero_do_dia_no_ano_2(  1,  2, bissexto(2013)));
  78.     printf( "%d\n", numero_do_dia_no_ano_2(  1,  3, bissexto(2013)));
  79.     printf( "%d\n", numero_do_dia_no_ano_2( 10, 11, bissexto(2013)));
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement