FP2 - Práctica 4

Colas de Impresión

(del 3 al 9 de Abril de 2003)

 

Las soluciones no son únicas, estas son las que yo he programado para el laboratorio, no son las mejores seguramente.

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:

  • Código de identificación del ordenador que quiere imprimir. Un número entero entre 1 y 5.

  • Nombre del fichero a imprimir. Formato: cadena sin espacios en blanco. Ejemplo: texto.doc

  • En qué impresora se quiere imprimir. Formato: "bw" o "color" (nuestro local tiene sólo 2 impresoras)

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):

  • Orden de impresión (simplemente por la posición del registro en el fichero)

  • Nombre de documento impreso

  • Código del ordenador que lo ha impreso

  • Impresora que debía imprimirlo originalmente

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:

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