Jump to content

[Resolvido] Ano Bissexto


Evolution

Recommended Posts

Mais especificamente, não sabes calcular se um ano é bissexto ou não, não é assim? 🙂

Um ano bissexto como sabes, ocorre a cada 4 anos.

Isto significa que tens aqui uma maneira simples de saber.

Se dividires o ano por 4, numa divisão inteira, só podes ter 4 opções para o resto da divisão: 0, 1, 2 ou 3

Ora, se o ano ocorre a cada 4, dividindo o ano por 4 o resto deverá ser 0.

Assim, basta-te ler o ano, e proceder ao calculo do resto de divisão inteira (operador MOD), e verificar se o resultado é 0. Se for, é bissexto. Se não for, é comum.

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

hehhehe Essa não me lembrei!

Mas já agora, convém então ter em atenção ao desfasamento de 1 dia que ocorrerá no ano 4882. Mas este podemos deixar para os entendidos da altura, que apelidarão isto de "O Novo Bug do Milénio!"

😉

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Bem já não estou a perceber nada.

Então tenho que dividir duas vezes o ano?

Dividir o ano duas vezes? Não entendi...

Aquilo que eu disse foi muito simples:

Um ano é bissexto se for divisível por 4 e, se for divisível por 400 ou não divisível por 100.

Esta é a regra para determinar se um ano é bissexto ou não. Tens de ver três coisas em conjunto: a) se é divisível por 4 e, b) se é divisível por 400 ou c) divisível por 100.

E aqui muito cuidado com os e's e ou's, não os apliquei assim só porque achei engraçado.

Knowledge is free!

Link to comment
Share on other sites

Já agora, e para que o programa fique preparado para o "Bug do 4º Milénio", ainda se deveria implementar mais uma condição.

Dizem os entendidos que o Calendário Gregoriano, com todas as suas premissas, ainda assim não bate certo com o ano solar, e que por esse motivo, a cada 4000 anos ele irá ficar adiantado 1 dia.

Como tal, pondera-se a inclusão de uma regra no cálculo dos anos bissextos que consiste em, se o ano for divisivel por 4000, não é bissexto (regra que tem prioridade sobre as actuais), por forma a corrigir esse enorme desvio.

Claro está, como de costume, deixa-mos tudo para a última, e essa regra ainda não foi oficialmente imposta (o pensamento é "temos tempo até lá, outros que se preocupem com isso".

Mas como eu sou um gajo muito à frente do meu tempo, resolvi fazer a formula já com isso previsto.

Como parece mal deixar aqui a papinha toda feita, deixo a formula, a titulo de curiosidade, em "linguagem ExcelPT"

=SE(E(RESTO(ANO;4000)<>0;OU(RESTO(ANO;400)=0;E(RESTO(ANO;4)=0;RESTO(ANO;100)<>0)));"BISSEXTO";"NORMAL")

sendo ANO a célula onde está o valor do ano a calcular...

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Já tenho o código assim mas agora estou outra vez com dificuldades.

Na linha 7 dá erro e diz que a operação não é válida para a operação or.

Observação: eu estou no 10º ano e este é o primeiro módulo em que uso pascal, ainda não sei todos os comandos do pascal.

Program Bissexto ;
Var
ano, bi : Integer;
Begin
write ('Digite um ano: '); readln (ano);
bi := ano mod 4000;
if bi <> 0 or bi = 0 then
writeln ('Bissexto.')
else
writeln ('Normal');
readln;
End.
Link to comment
Share on other sites

Amigo Evolution, não leves a mal que te diga, mas não estás a prestar atenção.

Aliás, se leres o teu código, ou se o testares, verás que todos os anos são bissextos.

A tua condição é:

Se bi for diferente de 0 ou bi for igual a 0, o ano é bissexto... Pensa lá bem se isto faz sentido!

Além do mais, o 4000 é uma "brincadeira". Fala-se em adicionar isso às regras, mas ainda não está feito (nem deverá estar tão cedo), pelo que não vale a pena pensares nele. E ainda que o incluisses, nunca seria só essa a regra, senão só haviam anos normais a cada 4000 anos.

Analisa bem as regras que o Thoga te disse, e vê a minha formula do Excel, que facilmente é convertível para Pascal.

Aqui fica ela sem a regra dos 4000 para não te confundir:

=SE(OU(RESTO(ANO;400)=0;E(RESTO(ANO;4)=0;RESTO(ANO;100)<>0));"BISSEXTO";"NORMAL")

PS: O erro que te dá é porque para usares mais do que uma condição no IF, tens de as colocar entre parentesis curvos.

No teu exemplo seria:

if (bi <> 0) or (bi = 0) then
Edited by nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Observação: eu estou no 10º ano e este é o primeiro módulo em que uso pascal, ainda não sei todos os comandos do pascal.

Não é preciso saber os 300.000 procedimentos e funções do Pascal (e não "comandos") para fazer este exercício. Aqui o teu problema é este: nós falamos, tu apanhas zero.

Basicamente só tens aplicado de cada vez uma das sugestões que te são dadas. Eu já disse duas vezes como se calcula o ano bissexto, e ainda não vi nada que aplique isto:

Um ano é bissexto se for divisível por 4 e, se for divisível por 400 ou não divisível por 100.

A história de ser divisível por 4000 é apenas uma pequena brincadeira para tornar o programa mais accurate.

Por último, recomendo que leias coisas sobre lógica. (b=0) or (b<>0) é uma condição verdadeira para qualquer b. E sinceramente nem entendi onde foste desencantar esta condição para o if.

Peço desculpa se estou a ser um pouco mais frio, mas isto já me fez chegar ao meu limite (estou a ser muito franco). Não consigo ser mais claro do que já fui, eu e o @nunopicado já te dissemos tudo...

Knowledge is free!

Link to comment
Share on other sites

Ok obrigado na mesma, e desculpem o tempo perdido.

Se fosse tempo perdido, nenhum de nós teria sequer respondido. Falando pessoalmente, eu não seria membro do P@P se não tivesse gosto em ensinar e em ajudar os outros. A única coisa aqui que me deixou um pouco frustrado foi o facto de já ter dito 3 vezes a solução e ainda não teres pegado nela.

Em vez de desistires (de nós e da nossa ajuda), porque é que não te centras na condição que calcula o ano bissexto? Este exercício é muito simples, só tens é de ler todas as nossas sugestões e não apenas aplicar uma delas.

Edited by thoga31

Knowledge is free!

Link to comment
Share on other sites

Uma coisa. O que faz este trecho: ano mod 4 mod 400?

Uma pista: quero saber quanto é n + 3 e quanto é n + 4. Não vou fazer n+3+4 porque isso não me dá as somas em separado.

Solução para o teu caso:

1) utilização de and e or.

2) Não guardar o resultado de cada divisão numa variável, é desnecessário.

3) Voltar a ler a condição para saber se um ano é bissexto, que é composta por 3 partes (ou 4 se contares com a questão dos 4000...).

Edited by thoga31

Knowledge is free!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.