Escreva um programa que peça três inteiros, correspondentes a dia, mês e ano. Peça os
números até conseguir valores que estejam na faixa correta (dia entre 1 e 31, mês entre 1 e 12 e ano
entre 1900 e 2100). Verifique se o mês e o número de dias estão coerentes (incluindo verificação de
anos bissextos). Se estiver tudo certo, imprima o número que aquele dia corresponde no ano.
Comente seu programa. PS: Um ano é bissexto se for divisível por 4 e não for divisível por 100,
exceto para os anos divisíveis por 400, que também são bissextos.
Eu fiz esse código e rodou certinho + quere saber se tem um jeito mais fácil, e profissional de resolver este, e por favor me digam se ficou bom, ou o que da para melhorar...
Eu tentei de várias formas resolver + só consegui dessa maneira, pôs só estudei até agora estruturas de controle de fluxo e
poucoas formas de criar funções.
O comando goto foi usado porque segundo eu li é uma forma eficaz de abandonar vários if.
Os vetores de string foi só por puro treino..... olhem o código e por favor digam o q acharam....
Agradeço desde já a paciência e compreenção de quem responder.....Obrigado.
#include<stdio.h>
#include<stdlib.h>
resposta_do_prog(int dia,int mes,int ano)
{
printf("\nData corresponde a %d|%d|%d\n\n\n",dia,mes,ano);
}
int main()
{
system("color 1f");
int dia,mes,ano;
char testo[26]="Digite o dia entre 1 e 31";
char testo1[25]="Digite mes entre 1 e 12";
retorna:
printf("\n\nDigite o dia: ");
scanf("%d",&dia);
if((dia<1)||(dia>31))printf("%s\n\n",testo);
if((dia<1)||(dia>31))goto retorna;
printf("Digite o mes: ");
scanf("%d",&mes);
if((mes<1)||(mes>12))printf("%s\n\n",testo1);
if((mes<1)||(mes>12))goto retorna;
else
{
if((mes==4)||(mes==6)||(mes==9)||(mes==11))
{
if((dia<1)||(dia>30))printf("Digite dia entre 1 e 30\n\n");
if((dia<1)||(dia>30))goto retorna;
}
}
volta:
printf("Digite o ano: ");
scanf("%d",&ano);
if((ano<1900)||(ano>2100))printf("Digite ano entre 1900 e 2100\n\n");
if((ano<1900)||(ano>2100))goto volta;
else
{
if(ano%4==0)printf("O ano e bissexto\n\n");
if(mes==2)
{
if((dia<1)||(dia>29))goto retorna;
if((ano%4==1&&dia>28))
printf("Digite dia entre 1 e 28 pos dia 29 so quando ano e bissexto\n\n");
if((ano%4==1&&dia>28))goto retorna;
}
}
resposta_do_prog(dia,mes,ano);
system("pause");
return(0);
}
Pergunta
david-ikki
O problema é o seguinte:
Escreva um programa que peça três inteiros, correspondentes a dia, mês e ano. Peça os
números até conseguir valores que estejam na faixa correta (dia entre 1 e 31, mês entre 1 e 12 e ano
entre 1900 e 2100). Verifique se o mês e o número de dias estão coerentes (incluindo verificação de
anos bissextos). Se estiver tudo certo, imprima o número que aquele dia corresponde no ano.
Comente seu programa. PS: Um ano é bissexto se for divisível por 4 e não for divisível por 100,
exceto para os anos divisíveis por 400, que também são bissextos.
Eu fiz esse código e rodou certinho + quere saber se tem um jeito mais fácil, e profissional de resolver este, e por favor me digam se ficou bom, ou o que da para melhorar...
Eu tentei de várias formas resolver + só consegui dessa maneira, pôs só estudei até agora estruturas de controle de fluxo e
poucoas formas de criar funções.
O comando goto foi usado porque segundo eu li é uma forma eficaz de abandonar vários if.
Os vetores de string foi só por puro treino..... olhem o código e por favor digam o q acharam....
Agradeço desde já a paciência e compreenção de quem responder.....Obrigado.
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.