#include <stdio.h>

struct  V
{
  int HorasMedicion[6];
};

struct C
{
 struct V VProductos;

} Config = { { 8, 12, 16, 20, 24, 4 } };
char TablaHoraria[24];

void ConstruyeTablaHoraria(void);

void main(void)
{
 int i;

 for ( i=0; i < 20; i++ )
       printf ( "\n" );

 ConstruyeTablaHoraria();

 printf ( "0: %02d:00 >-< %02d:00     \n", Config.VProductos.HorasMedicion[0], Config.VProductos.HorasMedicion[1] );
 printf ( "1: %02d:00 >-< %02d:00     \n", Config.VProductos.HorasMedicion[1], Config.VProductos.HorasMedicion[2] );
 printf ( "2: %02d:00 >-< %02d:00     \n", Config.VProductos.HorasMedicion[2], Config.VProductos.HorasMedicion[3] );
 printf ( "3: %02d:00 >-< %02d:00     \n", Config.VProductos.HorasMedicion[3], Config.VProductos.HorasMedicion[4] );
 printf ( "4: %02d:00 >-< %02d:00     \n", Config.VProductos.HorasMedicion[4], Config.VProductos.HorasMedicion[5] );
 printf ( "5: %02d:00 >-< %02d:00     \n", Config.VProductos.HorasMedicion[5], Config.VProductos.HorasMedicion[0] );

 printf ( "\n" );
 for ( i = 0; i < 12; i++ )
 {
  printf( " %02d >-> %d        %02d >-> %d \n", i, TablaHoraria[i], i+12, TablaHoraria[i+12] );
 }

}

void ConstruyeTablaHoraria(void)
{
 int i, j, k;

 // Revisamos las 24 horas posibles: 00 - 1 - 2 - ... - 22 - 23
 for ( i = 0; i < 24; i ++ )
   // Por cada hora verificamos el rango donde pueda estar ( 0 - 5 )
   for ( j = 0; j < 6; j ++ )
   {
     for ( k = ( Config.VProductos.HorasMedicion[j] % 24); k != (Config.VProductos.HorasMedicion[(j+1)%6]%24);  k = (++k)%24 )
     {
       if ( i == k )
       {
        TablaHoraria[i] = j;
        break;
       }
     }
     if ( k != (Config.VProductos.HorasMedicion[(j+1)%6]%24) )
             break;
   }
}
