ejercicio de simulación de colas.docx

12
Ejercicio de Simulación 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 también 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 atención del elemento. Esta clase Elemento tiene dos funciones miembro: un constructor que genera aleatoriamente elementos y una función, llamada Dibujar que representa gráficamente la vida del elemento en el sistema. Para ello se dibuja un rectángulo (un punto gordo) al llegar el elemento a la cola, una línea inclinada cuya dimensión horizontal representa el tiempo de espera del elemento en la cola y un rectángulo 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.*;

Upload: cieloci

Post on 07-Nov-2015

220 views

Category:

Documents


0 download

TRANSCRIPT

Ejercicio de Simulacin de ColasEl 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 claseElemento, 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 ytiempoProcesoque es el tiempo que dura la atencin del elemento.Esta claseElementotiene dos funciones miembro: un constructor que genera aleatoriamente elementos y una funcin, llamadaDibujarque 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,tieneElementosque devuelve un valor booleano indicando si la cola ya est vaca o contiene an ms elementos yprocesarElementoque 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 funcinanadirElementose utiliza la funcinaddElementde la claseVector. En la funcintieneElementoses importante darse cuenta de queEnumerationes una interface que se utiliza para recorrer los vectores sin modificarlos. En la funcinprocesarElementose utilizan tres funciones de la claseVector: la ya conocidaaddElement,elementAtque devuelve el valor del elemento colocado en una posicin determinada yremoveElementAtque elimina el elemento colocado en la posicin que se le pasa como argumento a la funcin.La claseDrawWindowcontiene un constructor y una funcinpaintque permite dibujar en un objeto de tipoGraphics,que se pasa como argumento a la funcin. Ntese que para recorrer un vector tambin aqu se crea un objeto de tipoEnumeration.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 clasecolaSimplecontiene dos variables miembro y la funcinmain. En esta funcin se crean un objeto de tipo cola, llamadoColay otro de tipoVector, llamadocolaProcesada. Se crean tambin objetos de tipoFrameyDrawWindow.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 = Math.max(horaLibre, procesado.creado);

horaLibre = procesado.inicioProceso + procesado.tiempoProceso;

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

+ " 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 t4Siendo:-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