Ejercicios selectos de colas de espera (C++).

 

(a) Estado inicial para la representación de Round robin.
(b) Estado siguiente para la representación de Round robin.
  1. En el Ejemplo cola se creó una cola de espera utilizando un constructor sin argumentos. Modifique dicho ejemplo para asignar un nuevo nombre a la cola por medio del constructor correspondiente, asígnele el nombre de "Mi primera cola de espera", recompile, y pruebe su funcionamiento.
  2. Modifique el Ejemplo cola para que permita leer n números enteros desde la entrada estándar y los almacene en la cola de espera.
  3. Modifique el Ejemplo cola para que:
    1. Agregue el método peek a la implementación. Dicha operación funciona de la siguiente manera: echa un vistazo al elemento que se encuentra en el inicio de la cola de espera y lo regresa pero no lo elimina.
    2. Incorpore un atributo privado numérico (n) que lleve el control del número de elementos insertados en la cola de espera. Al respecto no olvide:
      1. Inicializar explícitamente dicho atributo a cero en el constructor.
      2. Proporcionar únicamente el método de tipo get para el atributo n: public int obten_n( ).
  4. Tomando como referencia el Ejemplo cola, modifíquelo para que la cola de espera almacene otro tipo de objetos además de los de la clase string. Pruebe con al menos los siguientes:
    1. int.
    2. double.
    3. persona y cientifico (del Ejemplo herencia).
  5. Utilizando una cola de espera como la del Ejemplo cola, implemente el algoritmo de Round robin. Round robin es un método para seleccionar a todos los elementos en un grupo de manera equitativa y en orden, se comienza con el primer elemento de la cola de espera y se procesa, se continua con el segundo y así de manera progresiva hasta llegar al último elemento de la cola, para empezar nuevamente desde el primer elemento. El principio general subyacente detrás del método, consiste en que cada elemento de la cola de espera consume una parte de un elemento compartido en cantidades iguales.
    1. Considere la figura anterior en su inciso (a), la cual representa el estado inicial de una cola de espera de números enteros que representan las cantidades a considerar (quantum).
    2. El estado siguiente (inciso (b)) consiste en atender (restarle uno al quantum) al nodo que se encuentra al inicio de la cola y volverlo a formar al final de la misma para atender de manera análoga a los siguientes nodos.
    3. Tome en consideración que, una vez que el número llega a cero, el nodo correspondientes es eliminado. 
    4. El proceso anteriormente descrito continúa hasta atender o despachar a todos los nodos formados en la cola. Para ello:
      1. Genere un número aleatorio entre 10 y 50, el cual representará el número de nodos que contendrá la cola de espera.
      2. Por cada nodo, genere nuevamente un número aleatorio entre 1 y 500, mismo que representará el quantum asignado a cada nodo.
    5. La salida de su programa puede ser en la salida estándar o en un archivo de texto (consulte el API). Es importante que compruebe el adecuado funcionamiento de su implementación, ya que se reutilizará en otros ejercicios del blog.
  6. Modifique el Ejemplo cola_ascendente para que la cola de prioridad ascendente de dicho ejemplo almacene otro tipo de datos además de los de la clase string. Pruebe con al menos las siguientes:
    1. int.
    2. double.
    3. persona y cientifico (del Ejemplo herencia). Nota: consulte la información contenida en la sección Consideraciones adicionales en donde se presentan dos ejemplos adicionales relacionados con la implementación de la sobrecarga de operadores que necesitará para resolver satisfactoriamente este ejercicio.
  7. Con base en las consideraciones hechas en el blog respecto a la cola de prioridad ascendente y al diseño propuesto por el diagrama de clases UML alternativo (sección Colas de prioridad), realice la implementación de la cola de prioridad ascendente sobrescribiendo ahora el método elimina. Pruebe su propuesta con los tipos de datos y las consideraciones hechas en el Ejercicio anterior.
  8. Realice la implementación de una cola de prioridad descendente de manera análoga a la del Ejemplo cola_ascendente. Para lo anterior, tome en cuenta las consideraciones hechas en el blog y lo expuesto en el diseño representado por el diagrama de clases UML (sección Colas de prioridad). No olvide verificar y validar su propuesta; tome en cuenta al menos, los tipos de datos y consideraciones propuestas en el Ejercicio 6.
  9. Con base en las consideraciones hechas en el blog respecto de la cola de prioridad descendente y al diseño propuesto por el diagrama de clases UML alternativo (sección Colas de prioridad), realice la implementación de la cola de prioridad descendente. No olvide verificar y validar su propuesta; tome en cuenta al menos, los tipos de datos y consideraciones propuestas en el Ejercicio 6.
  10. Considere la abstracción de la estructura de datos compuesta mostrada en la figura que aparece al final de esta sección de ejercicios. La estructura de datos mostrada está compuesta por una cola de espera y varias pilas, una por cada nodo formado en la cola. Note que cada nodo de la cola de espera conserva una referencia a objetos como él, y una referencia a objetos de tipo pila. Este ejercicio consiste en hacer una representación de una fila de supermercado, en donde cada nodo formado en la cola de espera, simula un carrito de supermercado con diferentes productos almacenados en él en forma de pila (en la vida real no necesariamente es así, pero para el caso del ejercicio propuesto basta con esa suposición). Cada nodo de la pila representa un producto, por lo que se requiere que la información que almacena la pila sean cadenas que representan la descripción del producto: leche, jamón, huevos, cacahuates, etc.
    1. Escriba un programa que modele e implemente la estructura de datos planteada por el diagrama de la estructura de datos.
    2. Sería sumamente conveniente y recomendable para el lector que, como parte de su diseño, realizara también el diagrama de clases UML de su propuesta de solución.
Abstracción de una estructura de datos compuesta.


No hay comentarios.:

Publicar un comentario