Consideremos una lavadora y una cubeta de ropa para lavar. Su operativa normal permite depositar una prenda de ropa tanto en la lavadora como en la cubeta. También existe la posibilidad de completar la lavadora con ropa de la cubeta.
Una lavadora puede estar inicializada o no. Todas las operaciones con
lavadoras, salvo la inicialización y la escritura, solamente se pueden
aplicar sobre lavadoras inicializadas. Los datos relevantes para
inicializar una lavadora son el peso máximo que se pretende cargar en
ella y si va a ser de ropa blanca o de color. Las prendas de ropa
también tienen como atributos su peso y su color. Todos los pesos serán
números naturales y la información del color puede representarse con un
booleano (por ejemplo, el blanco mediante el valor
false y el color con el valor
true).
Cuando se desea completar una lavadora, se extrae de la cubeta la mayor cantidad posible de ropa del tipo correspondiente (blanco o color) que no se pase del peso máximo de la lavadora y sacando primero las prendas de ropa introducidas en último lugar.
Por último, se dispone de una operación que simula el lavado de las prendas que se encuentren en la lavadora en un momento dado. Se podrá aplicar incluso si la lavadora no está llena. Su resultado es que la lavadora queda no operativa y lista para inicializarse con nuevos datos.
El programa principal creará (o, mejor dicho, instalará) la cubeta y la lavadora y se encargará de aplicar las operaciones descritas, ofreciendo un menú de opciones:
Esquema de programa principal:
instalar lavadora
instalar cubeta
leer opción
while (opcion != -8) {
if (opcion == -1) // inicializar lavadora (datos: peso máximo y color)
else if (opcion == -2) // añadir una prenda a la lavadora (datos: peso y color de la prenda)
else if (opcion == -3) // añadir una prenda a la cubeta (datos: peso y color de la prenda)
else if (opcion == -4) // completar la lavadora
else if (opcion == -5) // realizar un lavado
else if (opcion == -6) // escribir el contenido de la cubeta
else if (opcion == -7) // escribir el contenido de la lavadora
leer opción
}
Por último, podéis suponer que los datos de la entrada son correctos. Si no lo fueran, habría que aplicar las protecciones correspondientes a las operaciones antes de utilizarlas, para garantizar que se cumplen sus precondiciones.
Una colección de instrucciones de las disponibles en el programa principal
Las salidas de las correspondientes instrucciones.
Se han especificado las clases
Cubeta, Lavadora y Prenda y los
correspondientes ficheros .hh se pueden
descargar del icono del gatito. También se pueden descargar algunos
ficheros de utilidades.
Hay que enviar 5 ficheros en un solo .tar.
Cubeta.cc, Lavadora.cc y Prenda.cc con
las implementaciones de las correspondientes clases.
Makefile, para compilar y obtener el
ejecutable
program.cc, el programa
principal
Input
-1 5 true -7 -4 -7 -3 2 true -4 -7 -6 -3 2 true -3 3 true -6 -4 -7 -6 -5 -7 -1 3 true -4 -7 -6 -5 -1 5 false -7 -8
Output
Lavadora: Lavadora de color, con peso actual 0 y peso maximo 5; sus prendas son Lavadora: Lavadora de color, con peso actual 0 y peso maximo 5; sus prendas son Lavadora: Lavadora de color, con peso actual 2 y peso maximo 5; sus prendas son 2 true Cubeta: Ropa de color de la cubeta: Ropa blanca de la cubeta: Cubeta: Ropa de color de la cubeta: 3 true 2 true Ropa blanca de la cubeta: Lavadora: Lavadora de color, con peso actual 5 y peso maximo 5; sus prendas son 2 true 3 true Cubeta: Ropa de color de la cubeta: 2 true Ropa blanca de la cubeta: Lavadora: Lavadora no inicializada Lavadora: Lavadora de color, con peso actual 2 y peso maximo 3; sus prendas son 2 true Cubeta: Ropa de color de la cubeta: Ropa blanca de la cubeta: Lavadora: Lavadora de blanco, con peso actual 0 y peso maximo 5; sus prendas son