Validação de Data com ano bissexto! Dúvidas

Olá pessoal, sou inciante, coisa de Meses estudando… estou aprendendo só…
estou com dificuldade para criar um algoritmo no Visualg que valide datas levando em consideração o ano bissexto.

algoritmo "bissexto"
var
dia, mes,  ano : inteiro

inicio
// Seção de Comandos
   escreval(ano, "Digite um dia, mês e ano:  ")
   leia(dia, mes, ano)
      se (ano mod 400 = 0) ou ((ano mod 4 = 0) e (ano mod 100 <> 0))  entao
     se ( mes = 02 ) e ( dia > 29 ) entao
escreval(” data inválida”)

   fimse 
fimse
   
fimalgoritmo

Esse é o problema… já fiz de várias formas e não da certo…

Todo ano bissexto, é múltiplo de 4, exemplo:

2000, 2004, 2008,2012, 2016, 2020

(ano mod 4 = 0) será um ano bissexto ??

o problema é como validar a data com esse resultado…

Obrigado pela ajuda!

Qual o problema?
Construir um algoritmo é ordenar tuas ideias a respeito de como resolver um problema.
Note, com o que eu falei, você já resolve uma boa parte da validação, para checar se é ou não bissexto

se (ano mod 4 = 0) entao
    //Aqui você aplica a lógica que quiser
senao

Chegou onde eu queria…
essa é lágica… pelo menos a minha kkkkkkk
se (mes = 2) e (dia > 28) ou (dia > 29) entao
escreva(“Data inválida!”)
senao
escreva(“Data válida!”)

só não dá certo…

já fiz assim também…

se ((mes = 2) e (dia > 28)) ou ((mes = 2) e (ano mod 400 = 0) e (ano mod 4 = 0) e (ano mod 100 <> 0) e (dia > 29)) entao
escreva(“Data inválida!”)
senao
escreva(“Data válida!”)

e não dá certo…
Travei Luiz e não sei como sair… por isso vim aqui…

Cara, “não dá certo” é algo muito abrangente.
1 - Você digita algo como 30, 2, 2016 e o visualg imprime “Data válida”?
2 - Aparece alguma mensagem de erro?

Não aparece mensagem de erro não… mas de lógica não funciona mesmo… :sweat:

Olha o primeiro código completo

var
dia, mes, ano: inteiro

inicio
escreval(“Digite o dia, mês e ano de uma data qualquer”)
leia(dia, mes, ano)
se (mes < 1) ou (mes > 12) ou (dia < 1) ou (dia > 31) ou (ano < 0) entao
escreva(“Data inválida!”)
senao
se ((mes = 4) ou (mes = 6) ou (mes = 9) ou (mes = 11)) e (dia > 30) entao
escreva(“Data inválida!”)
senao
se ((mes = 2) e (dia > 28)) ou ((mes = 2) e (ano mod 400 = 0) e (ano mod 4 = 0) e (ano mod 100 <> 0) e (dia > 29)) entao
escreva(“Data inválida!”)
senao
escreva(“Data válida!”)
fimse
fimse
fimse

fimalgoritmo

Mas não dá certo… se eu digitar 29 02 2016 dá inválida…

Por isso que o povo fala que é difícil… Acho que preciso estudar mais pra entender da lógica…

Talvez tenha faltado refinar um pouco mais

Algoritmo "semnome"
// Disciplina  :  [Linguagem e Lógica de Programação] 
// Professor   : Antonio Carlos Nicolodi 
// Descrição   : Aqui você descreve o que o programa faz! (função)
// Autor(a)    : Nome do(a) aluno(a)
// Data atual  : 10/04/2017
Var
// Seção de Declarações das variáveis 
dia, mes, ano: inteiro

Inicio
// Seção de Comandos, procedimento, funções, operadores, etc... 
escreval("Digite o dia, mês e ano de uma data qualquer")
leia(dia, mes, ano)
se (mes < 1) ou (mes > 12) ou (dia < 1) ou (dia > 31) ou (ano < 0) entao
   escreva("Data inválida!")
senao
     se ((mes = 4) ou (mes = 6) ou (mes = 9) ou (mes = 11)) e (dia > 30) entao
        escreva("Data inválida!")
     senao
          se (ano mod 4 = 0) entao
             se (mes = 2) e (dia > 29) entao
                escreva("Data inválida!")
             senao
                  escreva("Data válida!")
             fimse
          senao
              se (mes = 2) e (dia > 28) entao
                 escreva("Data inválida!")
              senao
                   escreva("Data válida!")
              fimse
          fimse
     fimse
fimse

Fimalgoritmo

Muito bom…

pelo que entendi, eu estava misturando demais…

se (ano mod 4 = 0) entao
se (mes = 2) e (dia > 29) entao
escreva(“Data inválida!”)
senao
escreva(“Data válida!”)
fimse
senao
se (mes = 2) e (dia > 28) entao
escreva(“Data inválida!”)
senao
escreva(“Data válida!”)
fimse


Estava querendo fazer isso tudo em (se, então, senão)…
e vc fez, (se, então, se, então, senão fimse; se, então, senão, fimse)…
ou seja você explicou melhor o que você queria ao computador…

é isso? vendo esse meu erro, o que recomenta estudar?

Obs.: Obrigado mesmo, pela ajuda!! vou imprimir os dois códigos, o meu e o seu e estudar…

Na verdade, é fácil se perder quando se tenta validar muitas coisas juntas (eu também tive problemas com isso).
Aí resolvi desmembrar.

É verdade, eu particularmente não estava entendo, nem vendo os erros…
e você resolveu rapidinho quando eu mandei o código… sou grato pela atenção!

Desmembrar? é algum termo da programação?

Mas 1900 não é bissexto mas é múltiplo de 4