- 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.
Bom dia. Percebi um pequeno erro no código.
ResponderExcluirSe 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";
}
}
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:
ResponderExcluirNumero 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)
Como ficaria o códico com a substituição do switch pelo else if?
ExcluirComo ficaria esse código ao substituir o o switch pelo else if?
ResponderExcluir//na vdd só foi escrito na linha errada, tinha que ter vindo antes do default, veja como eu resolvi:
ResponderExcluir#include
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;
cout << "O mês " << month << " tem " << days << " dias.\n";
break;
default:
cout << "Mês inválido" << endl;
}
}