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…
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…
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…
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
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…