Jump to content

Verificar se data é valida


fo_11
 Share

Recommended Posts

não existe uma maneira mais simples de verificar se uma data é válida sem ser assim?

OBS:aqui ainda não considero aqueles pormenores de fevereiro variar entre 28 e 29 nem se quer considerei ter 28 dias que é o o mais frequente.

int invalidas(int dia,int mes)
{
    if(mes<1 || 12<mes ||dia<1 )
     return 1;
    else
     {if(mes<=7)
       {if(mes%2!=0)
         {if(31<dia)
           return 1;
          else
            return 0;
         }
        else
         {if(30<dia)
           return 1;
          else
           return 0;
          }
       }
       else
        {if(mes%2!=0)
          {if(30<dia)
            return 1;
           else
            return 0;
          }
         else
          {if(31<dia)
            return 1;
           else
            return 0;
          }
        }
     }
}
Link to comment
Share on other sites

É simples. Crias um array.

Um array por exemplo assim: 1,2,3,4,5,6,7,8,9,10,11,12. Este é o array dos meses. Pedes o mês. E verificas se é maior do que o último elemento do array ou menor do que o primeiro elemento.

Depois tens outro array com os dias em que cada posição corresponde a um mês, aproveitas o mês introduzido e vais à posição mês - 1 do array dos dias e verificas se o dia introduzido é diferente do valor que está lá.

int mes[12] = {1,2,3,4,5,6,7,8,9,10,11,12};
int dias[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

scanf("%i", &M);
if(M > mes[11] || M < mes[0])
  printf("Bah\n");

scanf("%i", &D);
if(D > mes[M - 1] || D < 1)
  printf("Bah\n");

Algo como isto. Nem precisavas do array com os meses mas mais tarde pode ser útil  😛

here since 2009

Link to comment
Share on other sites

Às vezes, quando estamos a iniciar nisto pensámos em soluções muito complicadas para um problema que é simples. Isso é natural acontecer  😛

EDIT: Na verificação dos meses não podes só verificar se é diferente mas sim se é maior do que o valor que está lá ou menor do que 1, já modifico.

here since 2009

Link to comment
Share on other sites

Aqui está a porção de código correspondente à dos if's : :smoke:

OBS: Aqui admito o mes de fevereiro com 28 dias.

int invalidas(int dia,int mes)
{
    
    int dias[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int i;
     if(0<mes&&mes<13)
      {if(dia==dias[mes-1])
        return 0;
       else
        return 1;
      }
     else
       return 1;
}        

EDIT:Agora penso que está correcto

Link to comment
Share on other sites

Penso que isso está errado.

Tu não precisas de percorrer os arrays. Para verificação dos meses o que fizeste no programa que mostraste antes desse estava perfeito. Depois, para a verificação dos dias faz o que te disse. Vais à mes - 1 posição do array dias e verificas se o dia passado para a função é maior do que o dia que está nessa posição ou se é menor que 1.

here since 2009

Link to comment
Share on other sites

Acho que continua mal o teu edit.

Vou tentar exemplificar melhor:

int invalid(int dia, int mes) {
  int dias[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
  if(mes > 12 || mes < 1) {
    return 0; // 0 se for inválido
  }
  if(dia > dias[mes - 1] || dia < 1) {
    return 0;
  }
  return 1;
}

Acho que é só isto.

EDIT: Não precisas de else's, olha bem para o meu exemplo.

here since 2009

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.