Leia uma data de nascimento de uma pessoa fornecida através de três números inteiros: Dia, Mês e Ano. Teste a validade desta data para saber se esta é uma data válida. Teste se o dia fornecido é um dia válido: dia >0, dia <= 28 para o mês de fevereiro ( 29 se o ano for bissexto), dia <= 30 em abril, junho, setembro e novembro, dia <= 31 nos outros meses. Teste a validade do mês: mês >0 e mês <13. Teste a validade do ano: ano <= ano atual (use uma constante definida com o valor igual a 2008). Imprimir: “data válida” ou “data inválida” no final da execução do programa.

Passo 1

Resumo: a gente precisa verificar se uma data (dia, mês, ano) é válida segundo as regras de calendário (meses com 28/29/30/31 dias e ano ≤ 2008). Vamos usar lógica de teste de intervalo e checar ano bissexto para fevereiro.

Passo 2

Validar o mês antes de mais nada: testar se o mês está entre 1 e 12. Se não estiver, já sabemos que a data é inválida.

Passo 3

Validar o ano: checar se o ano é menor ou igual a uma constante ANO_ATUAL = 2008. Se for maior, a data é inválida.

Passo 4

Determinar se o ano é bissexto. Uma data em fevereiro pode ter 29 dias somente em ano bissexto, definido por: ano é bissexto se
(ano bmod 400 = 0)
ou
l(ano bmod 4 = 0 e ano bmod 100 ≠ 0r)

Passo 5

Definir o número máximo de dias do mês (diasMax):
  • Para fevereiro: diasMax = 29 se bissexto, senão diasMax = 28.
  • Para abril, junho, setembro e novembro: diasMax = 30.
  • Para os outros meses (1, 3, 5, 7, 8, 10, 12): diasMax = 31.

Passo 6

Validar o dia: testar se dia ≥ 1 e dia ≤ diasMax. Se falhar, a data é inválida; caso contrário, é válida.

Passo 7

Imprimir o resultado final: “data válida” se todas as checagens passaram, ou “data inválida” caso alguma falha tenha ocorrido.

Resposta

Algoritmo em pseudo-código:
CONSTANTE ANO_ATUAL ← 2008
Ler dia, mês, ano

// Verifica mês válido
Se (mês < 1) ou (mês > 12) então
    Imprimir "data inválida"
    Parar
Fim se

// Verifica ano válido
Se (ano > ANO_ATUAL) então
    Imprimir "data inválida"
    Parar
Fim se

// Checa bissexto
bissexto ← (ano mod 400 = 0) ou ((ano mod 4 = 0) e (ano mod 100 ≠ 0))

// Define dias máximos no mês
Se mês = 2 então
    Se bissexto então diasMax ← 29 senão diasMax ← 28
Senao Se mês ∈ {4,6,9,11} então
    diasMax ← 30
Senao
    diasMax ← 31
Fim se

// Verifica dia válido
Se (dia < 1) ou (dia > diasMax) então
    Imprimir "data inválida"
Senao
    Imprimir "data válida"
Fim se

Exercícios relacionados