Anos bissextos
Normalmente, o ano tem 365 dias.Na verdade, é um valor quebrado, são 365 dias e 6h ou 365,25 dias...mas ia ser estranho um dia com menos de 24 horas, ia ser confuso.
Então, pra compensar essas partes quebradas de dia, vez e outra temos um ano com 366 dias, que é a data 29 de fevereiro.
E eles ocorrem a cada 4 anos, menos nos múltiplos de 100 que não são múltiplos de 400.
Ou seja, ele também é bissexto ser for múltiplo de 400.
Calma, respira fundo, leia de novo...é um pouco confuso mesmo no começo.
Dê uma estudada sobre a história dos anos bissextos, calendários etc, pra relaxar um pouco:
https://pt.wikipedia.org/wiki/Ano_bissexto
Basicamente, de 4 em 4 anos temos anos bissextos:
1996, 2000, 2004, 2008, 2012, 2016, 2020, 2024, 2028, 2032, 2036...
De 100 em 100 anos não temos ano bissexto...:
100, 200, 300 ... não são bissextos
... exceto se forem múltiplos de 400:
400, 800, 1200, 1600... são bissextos
Assim:
...
400 – é bissexto
500 – não é bissexto
600 – não é bissexto
700 – não é bissexto
800 – é bissexto
...
1200 – é bissexto
1300 – não é bissexto
1400 – não é bissexto
1500 – não é bissexto
1600 – é bissexto
1700 – não é bissexto
1800 – não é bissexto
1900 – não é bissexto
2000 – é bissexto
2100 – não é bissexto
2200 – não é bissexto
2300 – não é bissexto
2400 – é bissexto
...
Ano bissexto em C++
Ok, vamos colocar isso em prática, criando código C++.Um problema difícil nada mais é que vários problemas fáceis.
Então vamos quebrar esse algoritmo em um menor, mais simples.
Primeiro, vamos verificar os anos múltiplos de 400. Se for múltiplo de 400, já era, é só sucesso, é bissexto e acabou:
E como verifica isso? Simples:
- if (year % 400 == 0)
Prontinho. Só dizer que é bissexto.
E se não for? Bom, aí cai no else
Agora vem a parte do 4 anos...a cada 100 anos...um rolo só.
Bom, é assim, precisamos verificar duas coisas:
- Se é múltiplo de 4 (ocorre a cada 4 anos, a partir do ano 0: 4, 8, 12, ... 1996, 2000)
- Se não é múltiplo de 100
Fazendo isso em C++:
- Múltiplo de 4: (year % 4 == 0)
- Não é múltiplo de 100: (year % 100 != 0)
Unindo os dois, temos o próximo IF (dentro do else), usando o operador lógico AND &&:
- (year % 4 == 0) && (year % 100 != 0)
Assim, nosso código fica:
#include <iostream> using namespace std; int main() { int year; cout <<"Ano: "; cin >> year; if(year % 400 == 0) cout << "É bissexto" << endl; else if( (year % 4 == 0) && (year % 100 != 0) ) cout << "É bissexto" << endl; else cout << "Não é bissexto" << endl; return 0; }
Algoritmo do ano bissexto em C++
Programador gosta de escrever pouco.
Quanto mais simples e direto for o código, melhor.
Note no código anterior que temos duas condições para o ano ser bissexto:
- (year % 400 == 0)
- ( (year % 4 == 0) && (year % 100 != 0) )
Se acontecer uma coisa ou outra, é bissexto.
Ou...huumm...ou lembra o que? Operador lógico ||
Ou seja, podemos unir as duas condições e ter somente um teste condicional IF:
(year % 400 == 0) || ( (year % 4 == 0) && (year % 100 != 0) )
Nosso código fica assim então:
#include <iostream> using namespace std; int main() { int year; cout <<"Ano: "; cin >> year; if( (year % 400 == 0) || ( (year % 4 == 0) && (year % 100 != 0) ) ) cout << "É bissexto" << endl; else cout << "Não é bissexto" << endl; return 0; }
Bonito, hein?
Muito bom!
ResponderExcluiradorei
ResponderExcluirExcelente
ResponderExcluirshow demais
ResponderExcluir