Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

fo_11

Verificar se data é valida

Mensagens Recomendadas

fo_11

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;
          }
        }
     }
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

É 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  :P


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

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

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
fo_11

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheDark

Mas que raio aconteceu aqui...?

EDIT: Isso de apagar posts e deixar os outros a falar sozinhos é mau...


Desaparecido.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Se te estavas a referir a mim eu não apaguei post nenhum. Se te estavas a referir a ele, acho que não apagou, acho que editou.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
fo_11

Não, eu apaguei um post porque tinha feito um edit mas péssimo e por iss decidi apagar.

Peço desculpa se não devia ter feito isso.

O post que foi eliminado foi este Enviada: 02 de Abril de 2010, 11:41.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheDark

Sim, my mistake não ter especificado. Era com o fo_11, e entretanto recuperei o post.

A razão é unicamente porque houveram posts do Localhost ficaram fora de contexto.


Desaparecido.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.