Ingeniería Informática Ingeniería Telemática Curso 2004-2005 |
Algoritmos y Estructuras de Datos Fundamentos de Programación 2 PRÁCTICA 4 |
Universitat de València |
¿Qué impresora uso?
a. Implementación de una cola estática.
b. Aplicación de la clase cola en un ejemplo concreto: Colas de impresión.
Nuestra entidad es todavía pequeña y tenemos una impresora ya algo vieja. Es un poco lenta pero funciona a la perfección. Admite un máximo de 10 ficheros en cola de impresión y nunca falla (aunque sea lenta). Eso quiere decir que le podemos ir enviando ficheros y los irá imprimiendo por orden de llegada. Solamente debemos preocuparnos de que nunca tenga más de 10 ficheros en cola, ya que perderá todos los ficheros posteriores al décimo. Los que trabajamos aquí ya la conocemos y nos hemos acostumbrado a ella.
Sin embargo tenemos grandes expectativas de futuro y estamos ampliando la plantilla. Entre los nuevos, acabamos de fichar a un ingeniero informático o telemático. La verdad es que no tenemos muy claro lo que habrá estudiado este chico. Es como toda la gente joven, dice que lo importante es la rapidez. El resto de sus nuevos compañeros también opinan lo mismo y claro con tanta rapidez no se fijan si la impresora ya tiene 10 ficheros en cola, con lo que de vez en cuando pierden el trabajo que acaban de enviar.
El “ingeniero” nos acaba de contar que ha salido una impresora nueva al mercado que es el doble de rápida que la que tenemos actualmente. También, como la anterior puede tener hasta un máximo de 10 elementos en cola antes de empezar a perder lo que se le envíe. Así que hemos decidido comprarla, y con estas 2 impresoras disminuir nuestros problemas.
Ha llegado la impresora nueva y hemos visto que, en efecto, es el doble de rápida que la vieja, pero en la letra pequeña pone que, a pesar de que efectivamente admite 10 elementos en la cola de impresión, cuando ha impreso 5 se recalienta y es necesario vaciar su cola de impresión para que no se rompa. Nos han engañado. Si nuestro “ingeniero” se hubiese leído bien la documentación, habría visto que pone:
|
Esta impresora sólo admite 10 ficheros en cola de impresión. Advertencia: Esta impresora se recalienta cada 5 ficheros impresos y es necesario vaciar la cola de impresión para evitar que se rompa. |
Vaya ingeniero que tenemos (o teníamos)... Hemos decidido echarlo y establecer un contrato en prácticas con alumnos de la ETSE de la Universitat de València. Dicen que son muy serios y que nos van a solucionar el problema. Ya veremos. Les hemos pedido que nos hagan un apaño y que al menos, cuando la impresora rápida y nueva se recaliente no pierda todos los ficheros que tiene en cola, sino que empiece a pasarlos a la impresora vieja. Así, al menos, ésta aguantará hasta que se llene su cola y así esperamos perder menos ficheros de impresión.
Desde luego, que no hay nada mejor, que confiarle el trabajo a un profesional de la informática. Esperamos que los estudiantes de la ETSE no nos defrauden.
Para realizar el trabajo que se nos ha encargado, el alumno deberá adaptar la clase Cola vista en clase para que pueda guardar los trabajos de impresión (string).
El programa trabajará con dos colas que van a guardar hasta 10 elementos en cada una de ellas (una para la impresora antigua y otra para la nueva).
Al comenzar el programa se entrará en un bucle con el menú de decisiones, del cual sólo se saldrá si se elige la opción “salir” (cerrar los servidores de impresión). Además de esta opción se contará con las siguientes opciones:
1.- Mandar a imprimir un fichero a la impresora vieja.
El alumno deberá introducir el nombre del fichero a imprimir. Si la cola de impresión ya está llena (es decir, tiene ya 10 elementos en cola) se pierde el fichero que se pretendía imprimir y se pasa a un fichero histórico llamado errores.dat donde se almacena la información sobre el nombre del fichero que se ha perdido y la impresora donde se ha intentado imprimir (impr_vieja) separados por el carácter ‘:’.
2.- Mandar a imprimir un fichero a la impresora nueva.
El alumno deberá introducir el nombre del fichero a imprimir. Si la cola de impresión ya está llena (tiene ya 10 elementos en cola) hace lo mismo que la impresora antigua. Es decir, se pierde el fichero que se pretendía imprimir y se pasa a un fichero histórico llamado errores.dat donde se almacena la información sobre el nombre del fichero que se ha perdido y la impresora donde se ha intentado imprimir (impr_nueva) separados por el carácter ‘:’.
3.- Avanzar una unidad de tiempo.
Con esta opción simulamos el paso del tiempo. Cuando hacemos avanzar una unidad de tiempo, la impresora nueva imprime el primer elemento de su cola (es decir, que lo elimina de la cola de impresión). La impresora vieja, como es la mitad de rápida, sólo imprime cada 2 veces que se pase por aquí. Es decir, que las veces “pares” que se pase por esta opción de “avanzar una unidad de tiempo” se eliminará un elemento de la cola de la impresora vieja.
Una vez impresos los trabajos que se tengan que imprimir, se comprobará si la impresora nueva ha impreso ya 5 trabajos. Si es así, hay que tomar las medidas oportunas para que no se rompa y se pierda el menor número posible de trabajos. Para eso, pasaremos los elementos que quedan en la cola de la impresora nueva a la cola de la impresora vieja, siempre y cuando la cola de la impresora vieja no esté llena. Cuando la cola de la impresora vieja ya esté llena se descartarán los ficheros que queden, indicando en el fichero “errores.dat” que son trabajos de la impresora nueva redirigidos a la vieja y descartados. Al vaciarse la cola de la impresora nueva, ésta se enfría y vuelve a estar dispuesta para imprimir trabajos.
0.- Cerrar los servidores de impresión.
Está opción hará salir al programa del bucle en el que se encuentra, mostrará por pantalla el fichero de errores “errores.dat” y detendrá el servicio de impresión.
A continuación tenemos un ejemplo de cómo podría quedar el fichero “errores.dat”.
listado.xls:impr_vieja
docu1.doc:impr_nueva
docu2.doc:impr_nueva:impr_vieja
docu3.doc:impr_vieja
La primera y la última línea corresponde a ficheros que han tratado de ser impresos en la impresora vieja cuando estaba su cola llena. La segunda línea corresponde a un fichero que ha tratado de imprimirse en la impresora nueva cuando ya estaba llena la cola con 10 elementos. La tercera línea corresponde a un fichero que trató de imprimirse en la impresora nueva, pero se estropeó y se intentó pasar a la impresora vieja, pero esta ya tenía la cola llena con 10 elementos.
Cada vez que se avance una unidad de tiempo el programa de monitorización de las colas mostrará el estado de cada cola de impresión y si se calienta la impresora nueva se debería mostrar una cola vacía y la otra cola con todos los elementos que haya podido admitir.
Cinco días después de realizada la sesión de prácticas se entregará al profesor la siguiente información:
Archivo con el programa (pr04##.cpp)
Archivo con el interfaz de la clase Cola (Cola##.h)
Archivo con la implementación de la clase Cola (Cola##.cpp)
dónde ## es el número asignado a la pareja (01, 02,...) en cada grupo de prácticas.
Al comenzar la siguiente sesión de prácticas se entregará al profesor el formulario con la documentación definitiva de la práctica reflejando todo el trabajo realizado realmente en la práctica.
Antes de poder empezar a realizar cualquiera de las prácticas es necesario presentar las hojas de especificación de programas (formulario de documentación de programas) con las tareas que se van a realizar en la práctica, explicando brevemente como se van a solucionarse los problemas que se plantean.
ENTREGA DE PROGRAMAS:
Los días 23 de Abril, 1, 2, 3 y 4 de Mayo de 2005, correspondientes con las fechas de realización de prácticas 18, 26, 27, 28 y 29 de Abril respectivamente.
ENTREGA DE FORMULARIOS DEFINITIVOS DE DOCUMENTACIÓN:
Los días 25 de Abril, 3, 4, 5 y 6 de Mayo de 2005, correspondientes con las fechas de realización de prácticas 18, 26, 27, 28 y 29 de Abril respectivamente.
Práctica 4: ¿Qué impresora uso?