Colocar Resposta 
 
Avaliação do Tópico:
  • 0 votos - 0 Média
  • 1
  • 2
  • 3
  • 4
  • 5
Duvidas no codigo de funçoes
28-11-2010, 20:03
Mensagem: #11
RE: Duvidas no codigo de funçoes
Ok, é uma situação um bocado confusa, por isso (desta vez) meto-te aqui código de exemplo Wink

Código:
/***
* Compara duas datas.
*
* Valor de retorno:
*    < 0 - Se a primeira data for anterior à segunda
*  == 0 - Se as datas forem iguais
*    > 0 - Se a primeira data for posterior à segunda
***/
int comparar_datas(struct Data data1, struct Data data2)
{
   int retval = 0;

   if (data1.ano < data2.ano)
   {
      /* o primeiro ano é inferior ao segundo, logo a 1a data é inferior à 2a */
      retval = -1;
   }
   else if (data1.ano > data2.ano)
   {
      /* o 1o ano é superior ao 2o, logo a 1a data é superior à 2a */
      retval = 1;
   }
   else /* os anos sao iguais, temos de testar os meses */
   {
      if (data1.mes < data2.mes)
      {
         /* o 1o mes é inferior ao 2o, logo a 1a data é inferior à 2a */
         retval = -1;
      } else if (data1.mes > data2.mes)
      {
         /* o 1o mes é superior ao 2o, logo a 1a data é superior à 2a */
         retval = 1;
      }
      else /* os meses também são iguais, temos de testar os dias */
      {
         if (data1.dia < data2.dia)
         {
            /* bla bla bla ;) */
            retval = -1;
         } else if (data1.dia > data2.dia)
         {
            /* idem idem... */
            retval = 1;
         } else
         {
            /* datas iguais */
            retval = 0;
         }
      }
   }

   return retval;
}

/***
* Verifica se uma data está entre duas datas limites indicadas
* (NOTA: Não é verificado se a data inicial é realmente anterior ou igual à data final.
* Isso fica como exercício ;)
*
* Valor de retorno:
*    != 0 - Dentro dos limites
*   == 0 - Fora dos limites
***/
int verificar_limites(struct Data data_teste, struct Data data_inicial, struct Data data_final)
{
   int retval;

   if (comparar_datas(data_teste, data_inicial < 0)
   {
      /* data anterior à data inicial */
      retval = 0;
   } else (comparar_datas(data_teste, data_final) > 0)
   {
      /* data posterior à data final */
      retval = 0;
   } else /* se não é anterior à inicial nem posterior à final, só pode estar dentro dos limites */
      retval = 1;

   return retval;
}

Espero que com isto consigas resolver o problema e safar-te com o resto.

Pedidos de ajuda via PM serão ignorados
Acordo ortográfico? Desconheço, obrigado Wink
Agradeço ao Chrome o facto de os meus posts nao terem acentos Evil
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
Colocar Resposta 


Saltar Fórum:


Utilizadores a ver este tópico: 2 Visitante(s)