1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ajuda em C...Datas.

Discussão em 'Programação' iniciada por perinhas, 27 de Dezembro de 2008. (Respostas: 4; Visualizações: 520)

  1. perinhas

    perinhas What is folding?

    Código:
    t_data ler_data(t_data *d)
    {
     int verificador,fevereiro;
           do{
           printf("\nIntroduza a data de nascimento:\n");
           d->dia = lerInteiro("\nDia: ", 1, 31);
           d->mes = lerInteiro("Mes: ", 1, 12);
           d->ano = lerInteiro("Ano: ", 1900, 2020);
           verificador = maior_idade(d);
           if (d->mes == 2)
           {
              fevereiro = mes_fevereiro(d);
                        if (fevereiro == 0)
                        printf ("\nData invalida");
              }
           if (verificador==0)
              printf("\nO aluno e menor de idade.\n");
           }while(verificador==0);
    }
    
    //---------------------------------------------------------------------------
    
    int ano_bissexto(t_data *d)
    {
        if (d->ano % 400 == 0 || d->ano % 4 == 0 && d->ano % 100 != 0)
        return 1;
        else
        return 0;
    }
    
    //---------------------------------------------------------------------------
    
    int mes_fevereiro (t_data *d)
    {
        int numero;
        numero = ano_bissexto(d);
        switch(numero){
    case 0:
        if (d->dia > 0 && d->dia <=28)
        return 1;
        else
        return 0;
        break;
    case 1:
        if (d->dia > 1 && d->dia <=29)
        return 1;
        else
        return 0;
        break;
    default: printf("Erro.");
    }
    }
    Alguém me consegue ajudar a descortinar o que está mal aqui. Isto serve para verificar se uma pessoa é maior de idade ou não, e estava a tentar proteger o mês de Fevereiro conforme o ano for bissexto ou não ter 28 ou 29 dias.
     
  2. Ronnie_03

    Ronnie_03 Power Member

    O programa dá-te um erro ao compilar ou compila sem problemas e a resposta final é que está incorrecta??


    P.S. Ainda não olhei muito para o código, mas vou ver isso agora.


    EDIT: O rpograma é suposto receber uma data e, antes de fazer alguma coisa, deveria verificar se a data é válida não é??
    Com o verificador só estás a ver se a data é válida para Fevereiro, faltam os outros meses (uma pessoa não pode nascer a 32/04/1999, por exemplo).
    Quanto ao erro ainda não consegui descobrir nada, mas vou ver melhor o resto do código.


    Cumps
     
    Última edição: 27 de Dezembro de 2008
  3. perinhas

    perinhas What is folding?

    Para já só estou a verificar de Fevereiro...depois tenho de verificar para os meses com 30 e 31 dias...quanto ao 32/04/1999, não é aceitável pois criei a função lerInteiro, que só aceita valores entre 1 e 31...essa parte já está protegida. Não dá erro de compilação, só não funciona como devia.
     
  4. Ronnie_03

    Ronnie_03 Power Member

    Código:
     
    {
    int verificador,fevereiro;
           do{
           printf("\nIntroduza a data de nascimento:\n");
           d->dia = lerInteiro("\nDia: ", 1, 31);
           d->mes = lerInteiro("Mes: ", 1, 12);
           d->ano = lerInteiro("Ano: ", 1900, 2020);
           verificador = maior_idade(d);
           if (d->mes == 2)
           {
              fevereiro = mes_fevereiro(d);
                        if (fevereiro == 0)
                        printf ("\nData invalida");
              }
           if (verificador==0)
              printf("\nO aluno e menor de idade.\n");
           }while(verificador==0);
    }
    

    Porquê que tens aqui um do...while?? Não pretendes verificar apenas uma data??
    Acho que estás a complicar demais esta parte... O último if não deveria ser antes:

    Código:
    if (verificador==0)
       printf("\nO aluno e menor de idade.\n");
       else
        printf("\nO aluno e maior de idade.\n");
    
    Não sei se a sintase de um if...else é bem esta, mas acho que deveria ser assim.

    O que preetendes é um programa que dada uma data de nascimento diga se essa pessoa é maior ou menor de idade não é??
    Não sei como é que fizeste o verificador, mas a pessoa ou é maior de idade ou menor.

    Espero ter ajudado :D


    Cumps
     
  5. Corpsegrinder

    Corpsegrinder Banido

    Tenta verificar se a função ano_bissexto está a funcionar correctamente.

    E só para optimizar, em funções que só vais retornar 0 ou 1, define-as como bool e não como int.
     

Partilhar esta Página