Autor Tema: Creen que pueda simplificar mas esta rama de if`s  (Leído 1614 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Creen que pueda simplificar mas esta rama de if`s
« en: 27 de Mayo de 2012, 00:56:12 »
Estoy realizando un pequeño clock, mas que por el tipo de receptor que tengo es necesario mandar unidades y decenas por separado via rs232 asi que se me ocurrio esto:

Código: [Seleccionar]
void clock()
{
   if(dmin==6)
      dmin=0;
   else
     {
      if(umin==10)
       {
        umin=0;
        dmin++;
       }
      else
        {
        if(dseg==6)
           {
            dseg=0;
            umin++;
           }
        else
          {
           if(useg==10)
            {
             useg=0;
             dseg++;
            }
           else
             {
              useg++;
             }
          }
        }
     }
   
}

lo realize asi pensando en usar menos variables o/u operaciones matematicas, ustedes que opinan

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Creen que pueda simplificar mas esta rama de if`s
« Respuesta #1 en: 27 de Mayo de 2012, 02:28:22 »
¿Eso se ejecuta una vez por segundo?

Si es así, creo que cuando se cumple la condición para incrementar decenas de segundo, minutos o decenas de minutos, no estás incrementando los segundos, por lo que se perderá un segundo con cada incremento de sus unidades mayores. ¿Me equivoco?

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Creen que pueda simplificar mas esta rama de if`s
« Respuesta #2 en: 27 de Mayo de 2012, 13:06:07 »
si el código funciona, no hay problemas....

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Creen que pueda simplificar mas esta rama de if`s
« Respuesta #3 en: 27 de Mayo de 2012, 17:24:09 »
Código: [Seleccionar]
void clock()
{
   useg++;

   if (useg >= 10) {
      useg = 0;
      dseg++;
   }
 
   if (dseg >= 6) {
      dseg = 0;
      umin++;
   }

   if (umin >= 10) {
      umin = 0;
      dmin++;
   }

   if (dmin >= 6) {
      dmin = 0;
   }


En estos casos es mejor simplificar el programa para evitar tiempo de depuración y de programación.
Como se va a ejecutar cada segundo, no es importante si tarda uno o dos microsegundos más.

Saludos.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Creen que pueda simplificar mas esta rama de if`s
« Respuesta #4 en: 27 de Mayo de 2012, 17:30:48 »
También puedes aprovechar la similitud de los bloques para simplificar:

Código: [Seleccionar]
#define INC_CLOCK(var, max, nextvar)    if (var>=max) { var = 0; nextvar++; }

void clock()
{
   useg++;

  INC_CLOCK(useg,  10, dseg);
  INC_CLOCK(dseg,   6, umin);
  INC_CLOCK(umin,  10, dmin);
  INC_CLOCK(dmin,   6, hour);
}


Saludos.

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: Creen que pueda simplificar mas esta rama de if`s
« Respuesta #5 en: 27 de Mayo de 2012, 19:49:20 »
realmente si se esta ejecutando cada segundo, ya que mediante el timer estoy mandando a llamar a la funcion, ahorita implemente otra forma un poco mas rapida, pero con la delimitante que estoy utilizando operaciones cosa que no queria.

Código: [Seleccionar]
void clock(void)
{
 segundos++;
  if (minutos==60)
   minutos=0;
  if (segundos==60)
   {
    segundos=0;
    minutos++;
   }
  dmin=minutos/10;
  umin=minutos%10;
  dseg=segundos/10;
  useg=segundos%10;
}

esto es para un cronometro en el cual hay que mandarle por 232 cada uno de los caracteres ya que asi fue diceñado y lo que se daño fue el control xD


 

anything