Mandar um cafézinho para o programador:


Me ajude a transformar café em código!

Ano bissexto em C++

Vamos usar nossos conhecimentos de operadores lógicos para aprender como detectar se um ano é bissexto ou não.

Como verificar se um ano é bissexto em C++

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:
  1. (year % 400 == 0)
  2. ( (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?

4 comentários:

Ajude o C++ Progressivo

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo