Autor Tema: Calcular eventos planificados en rango fechas intervalo de selección #algoritmia  (Leído 297 veces)

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1942
    • Ver Perfil
Hola, voy a exponer un problema que se nos ha planteado y cómo lo hemos solucionado, ya que creo que puede ser interesante para estudiar y resolver como problema de algoritmia.

El problema se formula así:

- Llamamos evento a una actividad tipo espectáculo, mercadillo, feria, congreso, jornadas, encuentros, festivales, etc.

- Un evento es una actividad que puede durar un día o más de un día, siendo siempre días consecutivos. Si los días no fueran consecutivos se considerarían dos eventos.

- Un evento decimos que está activo en un rango de fechas que comprende desde el primer día de actividad o día de comienzo "Finicio", hasta el último día de actividad o día de terminación(Ffin). En un evento de sólo un día ambos coinciden.

Se quieren determinar los eventos que se encuentran activos al menos uno de los días de un intervalo temporal determinado al que se llama periodo de selección, comprendido entre una fecha de selección inicial (Fsel) y una fecha de selección final (Ffinsel).

Ejemplo: el festival "Europe for music" tiene lugar del 14/11/2067 al 29/11/2067.

¿Está activo en el periodo de selección que comprende del 29/10/2067 al 15/12/2067?

La respuesta es que sí puesto que al menos un día del periodo de selección coincide con el periodo de actividad del evento?

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1942
    • Ver Perfil
La solución que le hemos dado es:

Consideramos que una fecha tiene un valor numérico equivalente entero, por lo que podemos hacer comparaciones entre fechas con los operadores mayor, menor, igual, etc. Esto es posible en la mayor parte de lenguajes de programación y hojas de cálculo.

- Plantear los posibles casos de eventos activos que se pueden dar. Hemos encontrado cuatro casos. Hemos considerado cuatro eventos y un periodo de selección:

Periodo de selección
Fsel = 5/5/2067
Ffinsel = 15/10/2067

Evento 1: del 25/9/2067 al 5/10/2067, empieza antes del comienzo del periodo de selección y termina antes del fin del periodo de selección.
Evento 2: del 06/10/2067 al 12/10/2067, empieza después del comienzo del periodo de selección y termina antes del fin del periodo de selección.
Evento 3: del 11/10/2067 al 20/11/2067, empieza después del comienzo del periodo de selección y termina después del fin del periodo de selección.
Evento 4: del 05/05/2067 al 20/12/2067, comienza antes del comienzo del periodo de selección y termina después del fin del periodo de selección.

Expresado en forma de tabla:

Caso*Finicio*Ffin
1*<Fsel*>Fsel y <Ffinsel
2*>Fsel*<Ffinsel         
3*>Fsel y <Ffinsel*>Ffinsel         
4*<Fsel*>Ffinsel         

Finalmente, ¿cuál es la condición lógica para dada una lista de eventos cada uno de los cuales tiene una fecha de inicio  Finicio y una fecha de terminación Ffin, seleccionar aquellos que están activos en un periodo de selección comprendido entre una fecha inicial Fsel y una fecha final Ffinsel

La condición (Ffin > Fsel y Ffin < Ffinsel) cubre los casos 1 y 2
La condición (Finicio<Ffinsel y Ffin > Fsel) cubre los casos 3 y 4

La condición para poder seleccionar todos los eventos de una lista que estén activos en un periodo de selección determinado sería:



Si (Ffin(i) > Fsel AND Ffin(i) < Ffinsel OR Finicio(i) < Ffinsel AND Ffin(i) > Fsel) entonces
   Mostrar "Evento " nombre(i) " activo en el peridodo de selección"
Sino
   Mostrar "Evento " nombre(i) " no activo en el peridodo de selección"
FinSi



Hasta donde hemos podido probar funciona bien. Si alguien encuentra algo a mejorar comentarlo. Saludos.

 

Esto es un laboratorio de ideas...
Aprender a programar

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".