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 (dias 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 batem (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.



Usando o Comando GOTO




#include <stdio.h>

int main()

{
int dia=0; /*Variavel para receber o dia do mês*/
int mes=0; /*Variavel para receber o mês do ano*/
int ano=0; /*Variavel para receber o ano*/
int total_dias=0; /*Variavel para receber o somatorio dos dias do ano*/
int dias=0; /*Variavel com o somatorio dos dias*/
int ano_bissexto=0; /*Variavel para diferenciar o ano bissexto*/


data: /*comando goto para voltar ao inicio do programa, em caso de data errada*/
do
{
printf ("Digite um dia do mes no formato dd: \n"); /*Entrada do dia do mês*/
scanf ("%d", &dia); /*Leitura do dia do mês*/
if (dia>31||dia<1) /*Conferir se o dia é maior que 31 e menor que 1*/
printf ("\nDia invalido, digite novamente!\n"); /*Solicita digitar o dia novamete caso esteja fora do padrão*/
(dia>31||dia<1);
}while(dia>31||dia<1);

do
{
printf ("\nEscolha um mes do ano pelo numero: \n"); /*Entrada do mês do ano*/
        printf ("\t (1)...janeiro\n");
        printf ("\t (2)...fevereiro\n");
        printf ("\t (3)...março\n");
        printf ("\t (4)...abril\n");
        printf ("\t (5)...maio\n");
        printf ("\t (6)...junho\n");            /*Opções de meses válidos*/
        printf ("\t (7)...julho\n");
        printf ("\t (8)...agosto\n");
        printf ("\t (9)...setembro\n");
        printf ("\t (10)...outubro\n");
        printf ("\t (11)...novembro\n");
        printf ("\t (12)...dezembro\n");
scanf ("%d", &mes); /*Leitura do mês*/
if (mes>12||mes<1) /*Conferir se o mes é maior que 12 e menor que 1*/
printf ("\nMes invalido, digite novamente!\n"); /*Solicita digitar o mês novamete caso esteja fora do padrão*/
(mes>12||mes<1);
}while(mes>12||mes<1);

do
{
printf ("\nDigite um ano entre 1900 e 2100; \n"); /*Entrada do ano*/
scanf ("%d", &ano); /*Leitura do ano*/
if (ano>2100||ano<1900) /*Conferir se o ano é maior que 2100 e menor que 1900*/
printf ("Ano invalido, digite novamente!\n"); /*Solicita digitar o mês novamete caso esteja fora do padrão*/
}while (ano>2100||ano<1900);

{

            switch(mes){ /*Inicio verifidor, confere se o mês é de 31, 30, 29/28 dias, confere se é ano bissexto ou não*/
            case 1:
                if(dia > 31){
                        printf("\nJaneiro tem ate dia 31. Tente novamente.\n\n");
            goto data;
                }


            case 2:
                if(((ano%4)==0) && ((ano%100)!=0) || ((ano%400)==0)){
                if(dia > 29){
                printf("Em anos bissextos, fevereiro vai ate dia 29. Tente novamente.\n\n");
            goto data;
                }
                }
                else{
                if(dia > 28){
                printf("\nFevereiro vai ate dia 28. Tente novamente.\n\n");
            goto data;
            }
            }
            break;


            case 3:
                if(dia > 31){
                    printf("\nMarco tem ate dia 31. Tente novamente.\n\n");
            goto data;
                }


            case 4:
                if(dia > 30){
                    printf("\nAbril tem ate dia 30. Tente novamente.\n\n");
            goto data;
                }


            case 5:
                if(dia > 31){
                    printf("\nMaio tem ate dia 31. Tente novamente.\n\n");
            goto data;
                }


            case 6:
                if(dia > 30){
                    printf("\nJunho tem ate dia 30. Tente novamente.\n\n");
            goto data;
                }


            case 7:
                if(dia > 31){
                    printf("\nJulho tem ate dia 31. Tente novamente.\n\n");
            goto data;
                }


            case 8:
                if(dia > 31){
                    printf("\nAgosto tem ate dia 31. Tente novamente.\n\n");
            goto data;
                }


            case 9:
                if(dia > 30){
                    printf("\nSetembro tem ate dia 30. Tente novamente.\n\n");
            goto data;
                }


            case 10:
                if(dia > 31){
                    printf("\nOutubro tem ate dia 31. Tente novamente.\n\n");
            goto data;
                }


            case 11:
                if(dia > 30){
                    printf("\nNovembro tem ate dia 30. Tente novamente.\n\n");
            goto data;
                }


            case 12:
                if(dia > 31){
                    printf("\nDezembro tem ate dia 31. Tente novamente.\n\n");
            goto data;
                }

        } /*Final verificador*/

{
ano_bissexto = ( ((ano % 4 == 0) && (ano % 100 > 0)) || (ano % 400 == 0) ); /*Somatorio dos dias do ano*/
    switch (mes) {
case 12: total_dias += 30;
case 11: total_dias += 31;
case 10: total_dias += 30;
case 9: total_dias += 31;
case 8: total_dias += 31;
case 7: total_dias += 30;
case 6: total_dias += 31;
case 5: total_dias += 30;
case 4: total_dias += 31;
case 3: total_dias += ano_bissexto?29:28;
case 2: total_dias += 31;
}

total_dias += dia;
dias = total_dias; /*Final somatorio dias do ano*/
}

}


 printf("\n\nData valida: %d/%d/%d.\n", dia, mes, ano); /*Saida de dados na tela, informa a data digitada*/

 printf ("\n\nEsta data representa o %do. dia de %d.\n", dias, ano); /*Saida de dados na tela, informa a dia do ano na tela*/

return(0);

}

Nenhum comentário:

Postar um comentário