Ir para conteúdo
Fórum Script Brasil
  • 0

analise este código e responda-me...


david-ikki

Pergunta

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.

#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);
}

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

cara uma dica, quando for postar codigo aqui, ponha sempre dentro da tag code. tipo assim:

[c.o.d.e]isso é código[/c.o.d.e]

só q sem os pontos. porque senao fica dificil de ler, o codigo perde toda a tabulacao.

agora quanto ao seu codigo, ficou bom, mas eu acho mais legal usar um while em vez do goto.

exemplo:

dia = 0;
while ((dia < 1) || (dia > 31))
{
    printf("\n\nDigite o dia: ");
    scanf("%d",&dia);
    if ((dia < 1) || (dia > 31)) printf("%s\n\n", testo);
}[/code]

assim, enqto o dia for invalido ele vai ficar pedindo pra digitar.

vai dar no mesmo q o q você já fez, mas acho q com o while fica melhor estruturado.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...