Forum Pplware
Duvidas no codigo de funçoes - Versão de Impressão

+- Forum Pplware (http://forum.pplware.com)
+-- Fórum: Mais Tech (/forumdisplay.php?fid=11)
+--- Fórum: Programação e Web (/forumdisplay.php?fid=16)
+--- Tópico: Duvidas no codigo de funçoes (/showthread.php?tid=7883)

Páginas: 1 2


RE: Duvidas no codigo de funçoes - Corvus - 28-11-2010 20:03

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.