Mandar um cafézinho para o programador:


Me ajude a transformar café em código!

Quantos dias o mês possui - Exercício de C++

Neste tutorial, vamos resolver o seguinte exercício de nossa lista:
  • 08. Usando os conceitos de switch case, faça um programa que pergunte o mês ao usuário (número de 1 até 12), e diga quantos dias aquele mês possui. Fevereiro tem 28 dias (não é bissexto).

Quantos dias tem no mês

Vamos lá.
Meses com 28 dias: 2
Meses com 30 dias: 4, 6, 9 e 11
Meses com 31 dias: 1, 3, 5, 7, 8, 10 e 12

Vamos fazer acumulando cases, para você fixar melhor esta importante técnica usando switch.
A variável days inicia com 0.

A lógica é a seguinte...todos os meses tem 28 dias ou mais. Assim, queremos que o 'case 2' seja sempre executado, então ele vai ficar lá embaixo.
Lá, iremos adicionar o valor 28 a variável days.
Pronto, qualquer mês que você digite vai ter pelo 28 dias, pois não usaremos break nos cases, pra acumular.
  • days = days + 28;

Os cases do meio são os dos meses 4, 6, 9 e 11 tem 30 dias.
Como já vamos adicionar 28 dias, só temos que adicionar mais 2 dias pra ficar 30, nesses cases:
  • days = days + 2;
Veja bem: se digitar 2, cai só no 'case 2', que coloca 28 dias na variável. Se digitar 4, 6, 9 ou 11, cai nesses cases que soma 2 e depois cai no 'case' que soma mais 28 dias, totalizando 30 dias.

Então, caso digitem 1, 3, 5, 7, 8, 10 ou 12, devemos somar apenas +1:
  • days = days + 1;
Veja como ficou nosso código:

#include <iostream>
using namespace std;

int main()
{
    int days=0, month;

    cout << "Numero do mes: ";
    cin >> month;

    switch(month)
    {
        case 1: case 3: case 5: case 7:
        case 8: case 10: case 12:
            days = days + 1;

        case 4: case 6:
        case 9: case 11:
            days = days + 2;

        case 2:
            days=days+28;
            break;
        default:
            cout <<"Mês inválido"<<endl;
    }

    cout <<"O mês "<<month<<" tem "<<days<<" dias.\n";
}

Deu pra entender? É uma solução bem charmosa.

4 comentários:

  1. Bom dia. Percebi um pequeno erro no código.
    Se digitarmos um valor acima de 12, além da linha "Mês inválido" aparece outra linha escrito "O mês 'x' tem 0 dias", por exemplo:

    Numero do mes: 13
    Mês inválido
    O mês 13 tem 0 dias.

    Corrigi usando a função if... else, mas não sei se ficou muito bom:

    #include
    using namespace std;

    int main()
    {
    int days=0, month;

    cout << "Numero do mes: ";
    cin >> month;

    if(month>12)
    cout << "O mês " << month << " é inválido. Digite um número de 1 a 12. \n\n";
    else
    {
    switch(month)
    {
    case 1: case 3: case 5: case 7:
    case 8: case 10: case 12:
    days = days + 1;

    case 4: case 6:
    case 9: case 11:
    days = days + 2;

    case 2:
    days=days+28;
    break;
    default:
    cout <<"Mês inválido"<<endl;
    }
    cout <<"O mês "<<month<<" tem "<<days<<" dias.\n";
    }
    }

    ResponderExcluir
  2. observação: o código que mandei anteriormente tbm tem um problema: se digitar um número menor que 1, tbm aparece aquela linha a mais:

    Numero do mes: 0
    Mês inválido
    O mês 0 tem 0 dias.

    Pra resolver, digitei o seguinte código na linha 17:

    if(month < 1 || month > 12)

    ResponderExcluir
    Respostas
    1. Como ficaria o códico com a substituição do switch pelo else if?

      Excluir
  3. Como ficaria esse código ao substituir o o switch pelo else if?

    ResponderExcluir

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