Ir al contenido principal

Ejercicio de Simulación de Colas (Java)

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.

Comentarios

Alejandro Ruiz ha dicho que…
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 ha dicho que…
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 ha dicho que…
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 ha dicho que…
olaq tal oye me da algnos errores me lo podras pasar completo porfavor gracias
marco ha dicho que…
perdon mi correo es marco_2806923cfc@gmail.com
Anónimo ha dicho que…
Hola podrias pasarme el codigo completo porfa, no he podido corregir todos los errores, mi correo es nyah713@hotmail.com mil gracias :)
Javi_Bond ha dicho que…
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 ha dicho que…
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 ha dicho que…
la verdad al igual que todos le agradeceria si me pasa el proyecto. mi email es edgar-a@hotmail.com
Anónimo ha dicho que…
hola al ihual que todos le agradezco si me pasa el proyecto a edgar-a@hotmail.com
Anónimo ha dicho que…
me podrian pasar el proyecto porfa esk es muy util para my..mi correo es; chiquis_03.90@hotmail.com.....lo necesito ...
Anónimo ha dicho que…
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
Anónimo ha dicho que…
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 ha dicho que…
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 ha dicho que…
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 ha dicho que…
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 ha dicho que…
saludos me podrian ayudar con el programa completo me da algunos errores al copiar este es mi correo gracias gj_gary_91@hotmail.com

Entradas populares de este blog

Partición de Disco Duro En Windows 7 / 8 / 8.1 / 10 | FotoTutorial | Soluciona

*Enlaces protegidos. Descarga aquí el tutorial en PDF que ha ayudado a más de un millón de usuarios en el mundo: Descarga: 1- Manual en PDF:  http://adf.ly/rLafU http://fumacrom.com/1QSO Pasos para descargar : Abrir enlace protegido, espera 5 segundos, luego clic en el botón "Saltar Publicidad", Descarga directa en MEGA. Si tienes alguna duda deja un comentario aquí con gusto le responderé para darle solución a su equipo. Solucionamos particiones para instalar varios sistemas operativos, respaldar archivos, fotos, documentos importantes, recuperamos información perdida en su disco duro. Recomendaciones: leer comentarios Escrito Por Ing. Wilmer Barrios Jr Twitter: @wilmerbarriosjr admin@wilmerbarrios.com.ve Todos los derechos reservados Lo Más Buscado en la Web: en relación con la publicación - Partición de Disco Duro En Windows 7 - FotoTutorial particionar disco duro windows 7 1950 como particionar un disco duro en windows 7 ...

Autodesk AutoCAD 2016 Español (32Bits & 64 Bits) + Descarga MEGA

Descarga: http://adf.ly/1CxMDB Autodesk AutoCAD 2016 Español (32Bits & 64 Bits) EXE | 1.44 GB & 1.84 GB | Spanish | Medicina Incl. | 32 Bits & 64 Bits | Win XP/Vista/7/8 | NFO

Planillas de solicitud para la linea CANTV

Dejo la planilla de solicitud de linea telefónicas CANTV, deben imprimirla en una hoja y doblar en forma de triptico, luego rellenar todos los datos sin dejar tachaduras y despues llevarlo a un Centro CANTV de su preferencia. Clic aquí para descargar la planilla en MEGA:  http://sh.st/dHbGR Clic en saltar publicidad. RECOMENDACION: Como solicitar ABA de CANTV de forma rapida y segura , visita la web: http://adf.ly/rWKAu NOTA : POR FAVOR, EN LOS COMENTARIOS DE ESTE BLOG, NO DEN SU TELEFONO Y/O DIRECCIÓN DE HABITACIÓN YA QUE SE PRESTA PARA FRAUDES. HAGO REFERENCIA A ESTO YA QUE HAY GENTE COBRANDO POR INSTALACIÓN DE LINEAS O PARA AGILIZAR EL PROCESO DE ADQUISICIÓN DE LA MISMA, NO SE DEJEN ENGAÑAR!.