Advertisement
luisphelipe

q01_v2

Apr 20th, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.92 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. int eh_bissexto(int ano);
  4. int dia_inicial_ano(int ano);
  5. int mes_quantidade_dia(int mes, int ano);
  6.  
  7. void imprime_header(int mes, int ano);
  8. void imprime_calendario(int ano);
  9.  
  10. int main()
  11. {
  12.     int ano;
  13.  
  14.     printf("-ANO DESEJADO: ");
  15.     scanf("%d", &ano);
  16.  
  17.     if(ano <= 1582)
  18.         printf("O Calendario Gregoriano comecou em 1582.\n\n");
  19.     else
  20.         imprime_calendario(ano);
  21.  
  22.     return 0;
  23. }
  24.  
  25. int eh_bissexto(int ano)
  26. {
  27.     if((ano%4 == 0 && ano%100 != 0) || ano%400 == 0)
  28.         return 1;
  29.     else
  30.         return 0;
  31. }
  32.  
  33. int dia_inicial_ano(int ano)
  34. {
  35.     //15 de Outubro de 1582 - transição para do calendario juliano para o gregoriano.
  36.     //1 de Janeiro de 1583 foi Sabado - dia 6
  37.     int dia = 6;
  38.  
  39.     //calcula o numero de dias ate o ano
  40.     for(int i = 1583; i < ano; i++){
  41.         dia += 365;
  42.  
  43.         if(eh_bissexto(i)) dia++;
  44.     }
  45.  
  46.     //retorna o dia da semana 0-6
  47.     return dia%7;
  48. }
  49.  
  50. int mes_quantidade_dia(int mes, int ano)
  51. {
  52.     //31 28-29 31 30 31 30 31 31 30 31 30 31 - codigo feio.
  53.     if(mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12) return 31;
  54.     else if(mes == 4 || mes == 6 || mes == 9 || mes == 11) return 30;
  55.     else if(mes == 2){
  56.         if(eh_bissexto(ano)) return 29;
  57.         else return 28;
  58.     }
  59. }
  60.  
  61. void imprime_header(int mes, int ano){
  62.                        printf("\n");
  63.     if(mes == 1)       printf("          Janeiro de %4d          \n", ano);
  64.     else if(mes == 2)  printf("         Fevereiro de %4d         \n", ano);
  65.     else if(mes == 3)  printf("           Marco de %4d           \n", ano);
  66.     else if(mes == 4)  printf("           Abril de %4d           \n", ano);
  67.     else if(mes == 5)  printf("           Maio de %4d            \n", ano);
  68.     else if(mes == 6)  printf("           Junho de %4d           \n", ano);
  69.     else if(mes == 7)  printf("           Julho de %4d           \n", ano);
  70.     else if(mes == 8)  printf("           Agosto de %4d          \n", ano);
  71.     else if(mes == 9)  printf("          Setembro de %4d         \n", ano);
  72.     else if(mes == 10) printf("          Outubro de %4d          \n", ano);
  73.     else if(mes == 11) printf("          Novembro de %4d         \n", ano);
  74.     else if(mes == 12) printf("          Dezembro de %4d         \n", ano);
  75.                        printf(" DOM  SEG  TER  QUA  QUI  SEX  SAB  \n");
  76. }
  77.  
  78. void imprime_calendario(int ano)
  79. {
  80.     int primeiro, dias;
  81.     primeiro = dia_inicial_ano(ano);
  82.  
  83.     for(int mes = 1; mes <= 12; mes++){
  84.         dias = mes_quantidade_dia(mes, ano);
  85.         imprime_header(mes, ano);
  86.  
  87.         for(int s = primeiro; s; s--) printf("     ");
  88.         for(int dia = 1; dia <= dias; dia++){
  89.             printf(" %3d ", dia);
  90.             if((primeiro+dia)%7 == 0 && dia != dias)
  91.                 printf("\n");
  92.         }
  93.         printf("\n");
  94.         primeiro = (dias+primeiro)%7;
  95.     }
  96.     printf("\n");
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement