Facebook
From Colossal Meerkat, 2 Years ago, written in C.
Embed
Download Paste or View Raw
Hits: 90
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int diadasemana(char entrada[11], char *saida[], int *bissexto) {
  5.     if(entrada[2] != '/'){ //verificar se a data está no formato certo
  6.         return 0;
  7.     }
  8.    
  9.     int d = ((entrada[0]-48) * 10) + (entrada[1]-48); //converter a string de data pra dia, mes e ano
  10.     int m = ((entrada[3]-48) * 10) + (entrada[4]-48);
  11.     int y = ((entrada[6]-48) * 1000) + ((entrada[7]-48)*100) + ((entrada[8]-48)*10) + (entrada[9]-48);
  12.    
  13.    
  14.     if(y%400 == 0){ //verificar se é bissexto
  15.                 *bissexto = 1;         
  16.         }
  17.         else if((y % 4 == 0)&&(y % 100 != 0)){
  18.                 *bissexto = 1; 
  19.         }
  20.    
  21.     if(*bissexto == 0 && m == 2 && d > 28){
  22.         return -1;
  23.     }
  24.    
  25.     if(m == 4 || m == 6 || m == 9 || m == 11){ //verificar se a data é valida
  26.         if(d > 30){
  27.             return -1;
  28.         }
  29.     }else if(m == 2){
  30.         if(d>29){
  31.             return -1;
  32.         }
  33.     }else{
  34.         if(d > 31){
  35.             return -1;
  36.         }
  37.     }
  38.    
  39.     //calcular o dia da semana
  40.     int diadasemana = (23 * m / 9 + d + 4 + (m < 3 ? y - 1 : y - 2) + y / 4 - y / 100 + y / 400) % 7;
  41.    
  42.     //apontar para o dia da semana certo de acordo com o calculo acima
  43.     if(diadasemana == 0){
  44.         *saida = "Domingo";
  45.     }else if(diadasemana == 1){
  46.         *saida = "Segunda";
  47.     }else if(diadasemana == 2){
  48.         *saida = "Terça";
  49.     }else if(diadasemana == 3){
  50.         *saida = "Quarta";
  51.     }else if(diadasemana == 4){
  52.         *saida = "Quinta";
  53.     }else if(diadasemana == 5){
  54.         *saida = "Sexta";
  55.     }else if(diadasemana == 6){
  56.         *saida = "Sábado";
  57.     }
  58.     return 1;
  59. }
  60.  
  61. int main(){https://pastebin.pl/view/81bd3887
  62.     int status=0, bissexto=0;
  63.     char entrada[11]={0}, *saida=NULL;
  64.     fgets(entrada,11,stdin);
  65.        
  66.     status = diadasemana(entrada, &saida, &bissexto);
  67.        
  68.     if (status>0)
  69.         printf("%s.%s\n", saida,
  70.             bissexto? " Ano bissexto." : "");
  71.     else {
  72.         if (status==-1)
  73.             printf("Data inexistente.\n");
  74.         else
  75.             printf("Entrada invalida.\n");
  76.         return 1;
  77.     }
  78.  
  79.     return 0;
  80. }