none
Problema de lógica RRS feed

  • Pregunta

  • Hola a tod@s, un saludo lo primero como siempre. Tengo un problema a la hora de plantearme un código, voy a intentar explicarme:

    Estoy haciendo un horario de empleado. donde tengo una hora desde y otra hora hasta, en este horario hay varios empleados que entran y salen a horas diferentes y mi problema es que no se como plantear lo siguiente. Por ejemplo tengo un empleado que entra a las 10 de la mañana y sale a las 17 y otro que entra a las 14 y sale a las 17 entonces necesito saber en cada hora del dia cuantos empleados estan trabajando a la vez osea:

    10:00 = 1 empleado

    11:00 = 1 empleado

    12:00 = 1 empleado

    13:00 = 1 empleado

    14:00 = 2 empleados

    15:00 = 2 empleados 

    16:00 = 2 empleados

    17:00 = 2 empleados

    18:00 = 0 empleados

    así con todas las horas de un día.

    La verdad es que no se ni por donde empezar a pensar como solventar este problema y plasmarlo en código. Alguna pista, un empujón por favor.

    He pensado en hacer un arreglo bidimensional por empleado y de 24 indices y comprobar cuales son las horas que se repiten pero no soy capaz de plasmarlo.

    Gracias y un saludo.

    jueves, 7 de enero de 2016 22:17

Respuestas

  • using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<Empleado> empleados = new List<Empleado>();
    
                Random rnd = new Random();
    
                for (int k = 0; k < 50; k++)
                {
                    int e = rnd.Next(6, 15);
                    empleados.Add(new Empleado() { entrada = e, salida = e + rnd.Next(1, 9) });
                }
    
                // sino entro antes y salió después, debería estar dentro
                for (int hora = 0; hora < 24; hora++)
                {
                    int dentro = empleados.Count(emp => !(emp.entrada > hora) && !(emp.salida < hora));
                    Console.WriteLine("{0,2} - Hay {1} empleados.", hora, dentro);
                }
                Console.ReadKey();
            }
        }
    
        class Empleado
        {
            public int entrada;
            public int salida;
        }
    }
    

    • Marcado como respuesta aratar79 viernes, 8 de enero de 2016 0:00
    jueves, 7 de enero de 2016 22:58

Todas las respuestas

  • Hola.

    ¿El almacenamiento de las entradas lo haces en una Base de Datos, un Arreglo u que otro punto?

    jueves, 7 de enero de 2016 22:39
  • lo guardare en una base de datos, aunque no le he dado mucha importancia a eso. Las horas de entrada y salida estan en unos combos en un datagrid
    jueves, 7 de enero de 2016 22:54
  • using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<Empleado> empleados = new List<Empleado>();
    
                Random rnd = new Random();
    
                for (int k = 0; k < 50; k++)
                {
                    int e = rnd.Next(6, 15);
                    empleados.Add(new Empleado() { entrada = e, salida = e + rnd.Next(1, 9) });
                }
    
                // sino entro antes y salió después, debería estar dentro
                for (int hora = 0; hora < 24; hora++)
                {
                    int dentro = empleados.Count(emp => !(emp.entrada > hora) && !(emp.salida < hora));
                    Console.WriteLine("{0,2} - Hay {1} empleados.", hora, dentro);
                }
                Console.ReadKey();
            }
        }
    
        class Empleado
        {
            public int entrada;
            public int salida;
        }
    }
    

    • Marcado como respuesta aratar79 viernes, 8 de enero de 2016 0:00
    jueves, 7 de enero de 2016 22:58
  • Pues sin conocer tu BD, lo que yo haria es solo hacer un count a la tabla para saber cuantos trabajadores estan activos.
    jueves, 7 de enero de 2016 22:58
  • Gracias, buena respuesta, no hay nada como saber para no preguntar. En que estaría yo pensando,si no entro antes y salio después debería estar dentro.

    Un saludo.

    viernes, 8 de enero de 2016 0:03