Sie sind auf Seite 1von 11

Ejercicio de Simulacin de Colas

El siguiente programa simula el funcionamiento de una cola simple a la que los


elementos llegan de forma aleatoria y son atendidos durante un tiempo de
servicio tambin aleatorio. Para hacer esto se ha creado la clase Elemento, que
contiene tres variables miembro: creado, en la que se almacena el instante de
tiempo en la que el elemento llega a la cola; inicioProceso, en la que se almacena
el instante de tiempo en la que se comienza a atender a ese elemento
y tiempoProceso que es el tiempo que dura la atencin del elemento.

Esta clase Elemento tiene dos funciones


miembro: un constructor que genera aleatoriamente elementos y una funcin,
llamada Dibujar que representa grficamente la vida del elemento en el sistema.
Para ello se dibuja un rectngulo (un punto gordo) al llegar el elemento a la cola,
una lnea inclinada cuya dimensin horizontal representa el tiempo de espera del
elemento en la cola y un rectngulo horizontal que representa el tiempo de
servicio del elemento. Para todo ello se utiliza una escala de 5 pixels por minuto.
import java.lang.Math;

import java.awt.*;

public class Elemento {

public int creado;

public int inicioProceso;

public int tiempoProceso;

public Elemento(int tiempo) {

creado = tiempo + (int)(Math.random() * 10);

public void Dibujar(Graphics g){

g.setColor(Color.black);

g.drawRect(creado*5,100,2,2);

g.drawLine(creado*5,100,inicioProceso*5,150);

g.drawRect(inicioProceso*5,150,tiempoProceso*5,2);

Se define la clase Cola, heredndola de la clase Vector, con tres nuevas funciones
miembro: anadirElemento, que incluye un nuevo elemento en la
cola, tieneElementos que devuelve un valor booleano indicando si la cola ya est
vaca o contiene an ms elementos y procesarElemento que asigna un tiempo
de proceso al elemento, lo saca de la cola y lo incluye en un nuevo
vector, colaProcesados, para almacenar su informacin.

import java.util.*;

import Elemento;

public class Cola extends Vector {

public int anadirElememto(int tiempo){

Elemento elem;

elem = new Elemento(tiempo);

this.addElement(elem);

return elem.creado;

public boolean tieneElementos(){

Enumeration enum = this.elements();

return enum.hasMoreElements();

public Elemento procesarElemento(Vector colaProcesados){

Elemento elem =(Elemento)this.elementAt(0);

elem.tiempoProceso = (int)(Math.random() * 10);

colaProcesados.addElement(elem);

this.removeElementAt(0);

return elem;

Obsrvese como en la funcin anadirElemento se utiliza la


funcin addElement de la clase Vector. En la funcin tieneElementos es
importante darse cuenta de que Enumeration es una interface que se utiliza para
recorrer los vectores sin modificarlos. En la funcin procesarElemento se
utilizan tres funciones de la clase Vector: la ya
conocida addElement, elementAt que devuelve el valor del elemento colocado
en una posicin determinada y removeElementAt que elimina el elemento
colocado en la posicin que se le pasa como argumento a la funcin.
La clase DrawWindow contiene un constructor y una funcin paint que permite
dibujar en un objeto de tipo Graphics, que se pasa como argumento a la funcin.
Ntese que para recorrer un vector tambin aqu se crea un objeto de
tipo Enumeration.

import java.awt.*;

import java.util.Vector;

import java.util.Enumeration;

public class DrawWindow extends Panel {

private Vector v;

public DrawWindow(Vector v) {

super(new FlowLayout());

this.v=v;

public void paint(Graphics g) {

Elemento dib;

Enumeration e;

e = v.elements();

while(e.hasMoreElements()){

dib=(Elemento)e.nextElement();

dib.Dibujar(g);

La clase colaSimple contiene dos variables miembro y la funcin main. En esta


funcin se crean un objeto de tipo cola, llamado Cola y otro de tipo Vector,
llamado colaProcesada. Se crean tambin objetos de
tipo Frame y DrawWindow.
En el bucle while se simula la llegada de elementos a la cola hasta el instante
100, imprimindose en pantalla informacin referente al estado de la cola.
import java.lang.Math;

import java.awt.*;

import java.util.*;

public class ColaSimple {

private static int tiempo;

private static int horaLibre;

public static void main(String args[]) {

System.out.println("Inicio de Simulacin de Cola simple");

Cola cola = new Cola();

Vector colaProcesada = new Vector();

Frame ventana = new Frame("Simulacin de cola simple");

DrawWindow mipanel = new DrawWindow(colaProcesada);

ventana.add(mipanel);

ventana.pack();

ventana.setSize(500,500);

while (tiempo < 100) {

tiempo = cola.anadirElememto(tiempo);

System.out.println("Tiempo:" + tiempo+ " Items: " + cola.size());

while ((horaLibre < tiempo) && (cola.tieneElementos())) {

Elemento procesado = cola.procesarElemento(colaProcesada);

procesado.inicioProceso =
procesado.creado);

Math.max(horaLibre,

horaLibre = procesado.inicioProceso +
procesado.tiempoProceso;

cola.size()

System.out.println("Tiempo:" + tiempo+ " Items: " +

+ " Hora entrada: " + procesado.creado+ " Tiempo proceso: "


+ procesado.tiempoProceso);

ventana.show();

Se pide:
Leer detenidamente el cdigo del programa identificando clases, objetos,
interfaces, variables miembro, funciones miembro, jerarquas
Compilar el programa y observar su funcionamiento.
Variar la aplicacin para que se le puedan proporcionar 4 valores que
definan los rangos de las distribuciones uniformes de los tiempos de
llegada y proceso. En caso de que no se proporcionen los 4 argumentos,
presentar un mensaje indicando que es necesario introducir esos
parmetros:
ColaSimple t1 t2 t3 t4

Siendo:
-t1: tiempo mnimo entre llegadas
-t2: tiempo mximo entre llegadas
-t3: tiempo mnimo de proceso
-t4: tiempo mximo de proceso
Actualmente el programa finaliza su ejecucin cuando el tiempo llega a
100 unidades. Modificarlo para que una vez transcurrido ese tiempo
contine con la ejecucin hasta que se vace la cola.

Modificar el cdigo de tal manera que en la salida grfica del programa se


incluya otra representacin en la que, siendo cada elemento una fila se
muestre en un tramo azul su tiempo de espera y en una rojo su tiempo de
servicio, tal y como se muestra en la siguiente figura.

Pensar y realizar una salida grfica distinta que de una idea del proceso que se simula.

http://www1.ceit.es/asignaturas/InteInfo/Recursos/Practicas/practica3/Practica3.
htm

Das könnte Ihnen auch gefallen