PRÁCTICA Nš 4: 1 sesión
(del 3 al 9 de Abril de 2003)
colas de impresión
0. Objetivos
El objetivo de esta práctica es la implementación y uso de la clase "Cola" en C++. Para ello se pide realizar un pequeño ejemplo de una cola de impresión, que gestiona 2 impresoras.
1. explicación de la prÁctica
Nuestro departamento tiene 5 ordenadores en una red de área local. Cada uno de ellos crea al principio del día una cola de documentos a imprimir. Los datos almacenados en cada cola deben ser:
Para poder probar que estas colas se generan correctamente se debería empezar el programa introduciendo los datos previamente indicados por teclado. Sin embargo una vez hayamos comprobado que se crean las colas correctamente se deberán coger todos ellos desde un fichero previamente creado.
El formato del fichero será el siguiente (en este caso solamente hay trabajos de impresión de 2 ordenadores):
1 texto.doc bw
3 prueba.txt bw
1 prog.cpp color
1 prog.c bw
3 prueba.doc color
Es decir, un número indeterminado de líneas. Cada una de ellas con una tarea de impresión, donde el código de identificación del ordenador, el documento a imprimir y la identificación de la impresora están separados por un espacio.
A partir del fichero previo se crearán tantas colas de impresión como ordenadores traten de imprimir:
Cola ordenador 1 |
Cola ordenador 3 |
1 texto.doc bw |
3 prueba.txt bw |
1 prog.cpp color |
3 prueba.doc color |
1 prog.c bw |
Nuestro departamento cuenta con una impresora de color (color) y otra de blanco y negro (bw). Al comienzo de cada día estas impresoras reciben las peticiones de impresión de ese día, las cuales se sitúan en una cola de impresión cada una de ellas. Para ello cogemos la cola1 e iremos sacando cada uno de sus elementos a imprimir repartiéndolos entre las 2 colas de impresoras disponibles. Cuando terminemos con la cola del ordenador 1, pasaremos a la cola del ordenador 2 y así sucesivamente hasta que todos los ordenadores hayan volcado sus peticiones en las colas de las 2 impresoras.
Quedando 1 cola de impresión por cada impresora, como se muestra a continuación:
color |
bw |
1 prog.cpp color |
1 texto.doc bw |
3 prueba.doc color |
1 prog.c bw |
3 prueba.txt bw |
Ahora llega el momento de imprimir. Se pretende que el programa muestre por pantalla el estado de las colas de impresión inicialmente y después de cada impresión o "intento de impresión". Esto es debido a que la impresora de color suele fallar, por diversas circunstancias (falta de tinta normalmente). Si se da este caso, el documento a ser impreso en la impresora de color se pone en la cola de la impresora de blanco y negro (que nunca falla).
El fallo de la impresión de un documento de la impresora en color ocurre con una probabilidad del 10%. Pero si lo que tiene que imprimir es algo que tiene la extensión .doc la probabilidad de error sube al 40%.
La salida por pantalla podría ser algo como:
cola: color
1 prog.cpp color
3 prueba.doc color
cola: bw
1 texto.doc bw
1 prog.c bw
3 prueba.txt bw
paso1:
Imprimiendo prog.cpp en impresora color
cola: color
3 prueba.doc color
cola: bw
1 texto.doc bw
1 prog.c bw
3 prueba.txt bw
paso2:
Error imprimiendo prueba.doc
cola: color
cola: bw
1 texto.doc bw
1 prog.c bw
3 prueba.txt bw
3 prueba.doc color
paso3:
Imprimiendo texto.doc en impresora bw
cola: color
cola: bw
1 prog.c bw
1 prueba.txt bw
3 prueba.doc color
Y así hasta que las 2 colas queden vacías.
Como resultado del día tendremos 2 ficheros "históricos" (uno de cada impresora) donde se habrán almacenado los siguientes datos (por orden de impresión):
Es decir:
Fichero "color.txt" |
Fichero "bw.txt" |
1 prog.cpp color |
1 texto.doc bw |
1 prog.c bw |
|
3 prueba.txt bw |
|
3 prueba.doc color |
2. Realización de la práctica
Implementar una sola clase cola que valga tanto para la cola de los ordenadores como para las colas de las impresoras.
Esta práctica deberá realizarse de 2 formas: con colas estáticas y con colas dinámicas. Además el programa deberá tener en cuenta cualquier posible error (por ejemplo que alguna cola se ha llenado) e informar de ello.
3. Entrega de Programas
Al comienzo de la siguiente sesión de prácticas se entregarán al profesor ocho ficheros:
0) Fichero de prueba de entrada usado (##prueba.txt)
1) Ficheros de la clase Cola Estática (##ColaE.cpp y ##ColaE.h)
2) Ficheros de la clase Cola Dinámica (##ColaD.cpp y ##ColaD.h)
3) Programa principal (##Impre.cpp)
4) Al menos, 2 ficheros históricos de prueba (##bw.txt y ##color.txt)
Nota Muy Importante
Antes de poder empezar a realizar cualquiera de las prácticas es necesario presentar las hojas de especificación de programas (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:
Al comenzar la sesión de prácticas del 10 al 16 de Abril