Ejercicio de Simulación de Colas (Java)

Wilmer Barrios | lunes, agosto 03, 2009 | |

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.*;



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, heredándola 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á vacía o contiene aún más 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 información.

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;


}


}


Obsérvese como en la función anadirElemento se utiliza la función addElement de la clase Vector. En la función tieneElementos es importante darse cuenta de que Enumeration es una interface que se utiliza para recorrer los vectores sin modificarlos. En la función procesarElemento se utilizan tres funciones de la clase Vector: la ya conocida addElement, elementAt que devuelve el valor del elemento colocado en una posición determinada y removeElementAt que elimina el elemento colocado en la posición que se le pasa como argumento a la función.

La clase DrawWindow contiene un constructor y una función paint que permite dibujar en un objeto de tipo Graphics, que se pasa como argumento a la función. Nótese que para recorrer un vector también 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 función main. En esta función se crean un objeto de tipo cola, llamado Cola y otro de tipo Vector, llamado colaProcesada. Se crean también objetos de tipo Frame y DrawWindow.

En el bucle while se simula la llegada de elementos a la cola hasta el instante 100, imprimiéndose en pantalla información 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 Simulación de Cola simple");


Cola cola = new Cola();


Vector colaProcesada = new Vector();



Frame ventana = new Frame("Simulación de cola simple");


DrawWindow mipanel = new DrawWindow(colaProcesada);


ventana.add(mipanel);


ventana.pack();


ventana.setSize(500,500);








while (tiempo <>

tiempo = cola.anadirElememto(tiempo);


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


while ((horaLibre <>

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 código del programa identificando clases, objetos, interfaces, variables miembro, funciones miembro, jerarquías…
  • Compilar el programa y observar su funcionamiento.
  • Variar la aplicación 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 parámetros:

ColaSimple t1 t2 t3 t4

Siendo:

-t1: tiempo mínimo entre llegadas

-t2: tiempo máximo entre llegadas

-t3: tiempo mínimo de proceso

-t4: tiempo máximo de proceso

  • Actualmente el programa finaliza su ejecución cuando el tiempo llega a 100 unidades. Modificarlo para que una vez transcurrido ese tiempo continúe con la ejecución hasta que se vacíe la cola.
  • Modificar el código de tal manera que en la salida gráfica del programa se incluya otra representación 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 gráfica distinta que de una idea del proceso que se simula.
Share this article

17 comentarios :

Alejandro Ruiz dijo...

HOLA QUE TAL ME PODRIAS PASAR EL PROYECTO COMPRIMIDO ES QUE ME DA ALGUNOS ERRORES AL COPIAR MI CORREO ES elgoberlivel@gmail.com DE ANTE MANO MUCHAS GRACIAS HERMANO

Oscar Bravo dijo...

disulpe, buenas noches, me podría hacer el favor de proporcionarme el proyecto? es que me tira error al copiar el código,, muy amable,, mi correo es owbruiz@gmail.com

Anónimo dijo...

Buen Dia¡¡ Un favor¡ podira poroporcionarme el Proyecto Completo?? Se lo agradeceria Mucho¡¡ Mi correo es: javiercm200@gmail.com
Saludos¡¡ PD: Pase todo el codigo a un compilador.. pero me marcaba varios errores.. le corregi muchos pero ya despues nadamas no pude corregir todos¡¡ ;D

marco dijo...

olaq tal oye me da algnos errores me lo podras pasar completo porfavor gracias

marco dijo...

perdon mi correo es marco_2806923cfc@gmail.com

Anónimo dijo...

Hola podrias pasarme el codigo completo porfa, no he podido corregir todos los errores, mi correo es nyah713@hotmail.com mil gracias :)

Javi_Bond dijo...

Hola, que tal, buenas noches. al momento de cpiar el codigo me sale un error al parecer son las librerias pero no me funciona y no encuentro el error, puede ud pasarme el proyecto a mi correo franciscomc_86@hotmail.com
gracias por su colaboracion con este tema, es muy interesante.

William dijo...

Hola mijo que tal me puedes proporcionar el archivo ejecutable y todo lo demás, te lo agradecería full ya que tengo un proyecto y me serviría mucho, enviame a este correo matrix01_756@hotmail.com se te agradece de antemano.

Anónimo dijo...

la verdad al igual que todos le agradeceria si me pasa el proyecto. mi email es edgar-a@hotmail.com

Anónimo dijo...

hola al ihual que todos le agradezco si me pasa el proyecto a edgar-a@hotmail.com

Anónimo dijo...

me podrian pasar el proyecto porfa esk es muy util para my..mi correo es; chiquis_03.90@hotmail.com.....lo necesito ...

Daniel dijo...

Al igual q los demas, quisiera me haga el favor de pasarme el proyecto en un comprimido, se lo agradeceria mucho..
Este es mi correo: danimatica.7@gmail.com

Gracias

Daniel dijo...

Al igual q las demas personas, quisiera me pase el proyecto en un comprimido por favor a este correo:

danimatica.7@gmail.com

Gracias..

Anónimo dijo...

hola ,,, un fabor me podria proporcionar el proyecto completo, bueno lo que pasa que e ejecutado el codigo y me marca bastante herror,,,,le corrijo... y me vuelve marcar herror mi correo es: amor-mio-65@hotmail.com

Anónimo dijo...

hey men me late pero creo q podria ayudar a mejorar la intwrfaz men podrias mandarme el proyecto este es mi mail override.warlock@gmail.com y en cuestion de unos dias te mando como quedo men por si te sirve men saludos ... buen aporte

Wizard dijo...

hey men me late pero creo q podria ayudar a mejorar la intwrfaz men podrias mandarme el proyecto este es mi mail override.warlock@gmail.com y en cuestion de unos dias te mando como quedo men por si te sirve men saludos ... buen aporte

Anónimo dijo...

saludos me podrian ayudar con el programa completo me da algunos errores al copiar este es mi correo gracias gj_gary_91@hotmail.com

 
Copyright © 2015 MyBiosWeb
Distributed By My Blogger Themes | Template Design By BTDesigner