Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Verifica Data...


Martinsrj

Pergunta

Olá pessoal, tudo bom?

O algoritmo abaixo a seguinte finalidade.

Ler uma data dia, mês e ano

verificar se a data digitada é uma data válida:

a) JAN, MAR, MAI, JUL, AGO, OUT e DEZ podem possuir no máximo 31 dias;

B) ABR, JUN, SET e NOV podem possuir no máximo 30 dias;

c) FEV pode possuir no máximo 29 dias se o ano for bissexto, ou seja, se o resto da divisão do ano por 4 for igual a zero;

d) FEV pode possuir no máximo 28 dias se o ano não for bissexto;

exemplo 1:

digite dia: 20

digite mês: 12

digite ano:2007

você digitou 20/12/2007. é uma data válida

exemplo 2:

digite dia: 31

digite mês: 04

digite ano:2007

você digitou 31/04/2007. não é uma data válida

Uma dúvida:

O meu algoritmo se o usuario digitar uma data válido, exemplo: 31/1/2007 vai imprimir na tela: Data é valida, porem se o usuario digitar 32/1/2007 o comando else não funciona e com isso não imprimi na tela: "writeln" ('Data é inválida!');

OBS.: Até o momento eu não aprendi a trabalhar com Vetor, Matriz, Case.

Obrigado aí galera pela ajuda.

program data_valida;
uses 
crt;
procedure leitura (var int_dia, int_mes, int_ano: integer);
begin
    writeln ('Programa verifica se a data é válida.');
    writeln ('Digite o dia:');
    readln (int_dia);
    writeln ('Digite o mês:');
    readln (int_mes);
    writeln ('Digite o ano:');
    readln (int_ano);
end;
procedure calculo_imprime (int_dia, int_mes, int_ano: integer);
begin
    writeln ('Você digitou:', int_dia,'/',int_mes,'/',int_ano);
    if int_dia <= 31 then if int_mes = 1 then if int_ano <= 5000 then
        writeln ('Data é válida!!!')
        else
            writeln ('Data é inválida!');
    if int_ano mod 4 = 0 then if int_mes = 2 then if int_dia <= 29 then
        writeln ('Data é válida e o ano é Bissexto!!!')
        else
            writeln ('Data é inválida');
    if int_ano mod 4 <> 0 then if int_mes = 2 then if int_dia <= 28 then
        writeln ('Data é válida!!!')
        else
            writeln ('Data é inválida!!!');
    if int_dia <= 31 then if int_mes = 3 then if int_ano <= 5000 then
        writeln ('Data é válida!!!')
        else
            writeln ('Data é inválida!');
    if int_dia <= 30 then if int_mes = 4 then if int_ano <= 5000 then
        writeln ('Data é válida!!!')
        else
            writeln ('Data é inválida!');
    if int_dia <= 31 then if int_mes = 5 then if int_ano <= 5000 then
        writeln ('Data é válida!!!')
        else
            writeln ('Data é inválida!');
    if int_dia <= 30 then if int_mes = 6 then if int_ano <= 5000 then
        writeln ('Data é válida!!!')
        else
            writeln ('Data é inválida!');
    if int_dia <= 31 then if int_mes = 7 then if int_ano <= 5000 then
        writeln ('Data é válida!!!')
        else
            writeln ('Data é inválida!');
    if int_dia <= 31 then if int_mes = 8 then if int_ano <= 5000 then
        writeln ('Data é válida!!!')
        else
            writeln ('Data é inválida!');
    if int_dia <= 30 then if int_mes = 9 then if int_ano <= 5000 then
        writeln ('Data é válida!!!')
        else
            writeln ('Data é inválida!');
    if int_dia <= 31 then if int_mes = 10 then if int_ano <= 5000 then
        writeln ('Data é válida!!!')
        else
            writeln ('Data é inválida!');
    if int_dia <= 30 then if int_mes = 11 then if int_ano <= 5000 then
        writeln ('Data é válida!!!')
        else
            writeln ('Data é inválida!');
    if int_dia <= 31 then if int_mes = 12 then if int_ano <= 5000 then
        writeln ('Data é válida!!!')
        else
            writeln ('Data é inválida!');
end;
var
int_dia_g, int_mes_g, int_ano_g: integer;
begin
clrscr;
repeat
    leitura (int_dia_g, int_mes_g, int_ano_g);
    calculo_imprime (int_dia_g, int_mes_g, int_ano_g);
until int_dia <= 0;
readkey;
end.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Olá pessoal, tudo bom?

O meu algoritmo se o usuario digitar uma data válido, exemplo: 31/1/2007 vai imprimir na tela: Data é valida, porem se o usuario digitar 32/1/2007 o comando else não funciona e com isso não imprimi na tela: "writeln" ('Data é inválida!');

OBS.: Até o momento eu não aprendi a trabalhar com Vetor, Matriz, Case.

Obrigado aí galera pela ajuda.

Oi, Martinsr!

Seu algorítimo está errado. Observe o pseudo código abaixo e adapte-o a sua necessidade.

Se ano >= mínimo_desejado e ano <= máximo_desejado então
   (Ano válido)
   Se mês >= 1 e mês <= 12 então
      (mês válido)
      Se (mês = 1 ou mes =  3 ou mês =  5 ou mês = 7 ou 
          mês = 8 ou mês = 10 ou mês = 12) e (dia >= 1 e 
          dia <= 31) então
          (dia válido)
      Senão
         Se (mês = 4 ou mês = 6, ou mês = 9 ou mês = 11) e 
            (dia >= 1 e dia <= 30) então
            (dia válido)
         Senão
            Se (Resto da divisão de ano = 0) e (dia <= 1 e 
               Dia <= 29) então
               (mês = Fevereiro Bissexto e Dia Válido)
            Senão
               Se (Resto da divisão de ano diferente de 0) e
                  (dia <= 1 e dia <= 28) então
                  (mês = Fevereiro não Bissexto e Dia Válido)
               Senão
                  (dia inválido)
               Fim Se
            Fim Se
         Fim Se
      Fim Se
   Fim Se
Fim Se

att Denis Courcy

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...