Universidad de Carabobo Facultad Experimental de Ciencias y Tecnología Departamento de Computación CS218: Algoritmos y Programación II Proyecto 1: Estructuras Dinámicas Lineales. (Lista, Pila, Cola) Nombre de los archivos Entrada: artistas.in albumes.in canciones.in rockola.in Salida: log.out reporte.out 1. OBJETIVO Se espera que, al finalizar esta actividad, el estudiante fácilmente pueda desarrollar estructuras dinámicas mediante la utilización de apuntadores y bajo el paradigma orientado a objetos, para la posterior resolución de problemas de manera eficiente, que requieran el manejo de dichas estructuras. 2. ACTIVIDADES Planteamiento del problema La empresa “Aparatos Musicales C.A.” desea desarrollar un prototipo de Rockola para distribuirla entre sus clientes. La Rockola es un aparato del tipo Vending Machine que tiene la finalidad de ejecutar canciones sobre pedido; es decir, cuando una persona accede a la Rockola, le indica mediante algún mecanismo de interacción cuales canciones quiere oír y en que orden. Para activar el mecanismo de selección de canciones la persona debe primero depositar en una ranura la cantidad total de dinero (o fichas) que sea requerido según las especificaciones que generalmente se encuentran adosadas al aparato. El funcionamiento de la misma es el siguiente: 1) el usuario se dirige a la máquina, introduce monedas o fichas en una ranura que se encuentra en el frente de la maquina por un total igual o mayor que el costo del servicio requerido y espera una señal (visual y/o auditiva) de conformidad de la máquina. Ver tabla de costos anexa. 2) El usuario selecciona una canción por vez en un panel frontal donde aparecen los nombres de las canciones con un código y marca el número del código en un teclado de diez dígitos que se encuentra en la parte delantera de la máquina culminando con la tecla ACEPTAR al introducir el último código. 3) Una vez introducidos los códigos, el usuario pulsa el botón SECUENCIAL o ALEATORIO dependiendo de si desea que las canciones seleccionadas se ejecuten en uno u otro modo. 4) El usuario puede pulsar en este momento el botón PRIORIDAD lo cual lo coloca en una cola de usuarios con prioridad 5) Una vez que el usuario este conforme con su selección y modo de ejecución pulsa el botón FINALIZAR y debe esperar que llegue su turno para oír las canciones seleccionadas. Las restricciones de uso del aparato son las siguientes: 1) Un usuario puede solicitar hasta cinco canciones por vez; es decir, puede utilizar el aparato tantas veces como desee pero con un máximo de cinco canciones por vez 2) La ejecución de las canciones se realiza en estricto orden de usuario; es decir, se ejecutaran primero las canciones des usuario n, luego el n+1, n+2, etc. Esto es válido tanto para los usuarios sin prioridad como para aquellos con prioridad. 3) El dispositivo cuenta con un mecanismo de almacenamiento de discos compactos de hasta 100 unidades, cada una con un total de hasta 25 canciones. Cada CD corresponde al álbum de un artista y no existe repetición ni de canciones ni de álbumes. 4) Cada vez que el dispositivo debe ejecutar una canción, levanta uno a uno los CDs que están sobre el CD que tiene la canción deseada y los deposita en un mecanismo de almacenamiento auxiliar, luego levanta el CD que tiene la canción deseada y lo coloca en el mecanismo de ejecución, mueve el cabezal lector y comienza su ejecución. En caso que el CD que tiene la canción solicitada ya se encuentre el mecanismo de almacenamiento auxiliar entonces levanta uno a uno los CDs de este último mecanismo y los deposita en el mecanismo de almacenamiento principal hasta alcanzar el CD deseado. Luego toma este último y lo deposita en el mecanismo de ejecución procediendo a ejecutarlo. 5) Una vez culminada la ejecución devuelve el CD ejecutado a su posición en el mecanismo de almacenamiento. 6) Cada canción tiene un código asignado que indica: a) el código del artista, b) el número que le corresponde al CD en el mecanismo de almacenamiento principal cuando se encuentran en él todos los CDs, contado de arriba hacia abajo, c) el número de la canción dentro del CD contada desde la primera hasta la última. Considere que un artista puede tener varios álbumes. Tabla Costos en Bs. según Nro. de Canciones/Modo Numero de 1 2 3 4 Canciones Sin Prioridad 1000 2000 3000 3500 Con Prioridad 50% adicional al costo sin prioridad 5 4000 Se desea que Ud. implemente la Clases Lista, Pila y Cola, además de las clases que Ud. considere necesarias para modelar el problema. Asimismo, deberá desarrollar un programa que simule el comportamiento de la rockola basado en las funciones y restricciones descritas previamente. Especificación de la entrada La entrada consistirá de cuatro (4) archivos: artistas.in En este archivo se encuentra la información relacionada con los artistas. El archivo contendrá N (no se conoce) líneas. Cada línea contiene un número entero X de tres (3) dígitos, el cual representa el código del artista, seguido del nombre de dicho artista. 101 Black Eyed Peas 102 Eminem 103 50 Cent albumes.in En este archivo se encuentra la información relacionada con los álbumes. El archivo contendrá N (no se conoce) líneas. Cada línea contiene un número entero Y de seis (6) dígitos, el cual representa el código del CD, seguido del título de dicho CD. Los tres (3) primeros dígitos del código, tomados de izquierda a derecha, representan el código del artista al cual pertenece el CD, los siguientes tres (3) dígitos representan el código del CD en función a su lugar en la rockola. Las líneas estarán ordenadas de la misma forma como están ordenados los CD’s en la rockola. 101201 102202 103203 101204 Elephunk Curtain Call The Massacre Monkey Business canciones.in En este archivo se encuentra la información relacionada con las canciones. El archivo contendrá N (no se conoce) líneas. Cada línea contiene un número entero Z de ocho (8) dígitos, el cual representa el código de la canción, seguido del título de la canción. Los tres (3) primeros dígitos del código, tomados de izquierda a derecha, representan el código del artista al cual pertenece la canción, los siguientes tres (3) dígitos representan el código del CD en el cual se encuentra, y los dos (2) últimos dígitos se corresponden con el número de la canción dentro del CD. Las líneas estarán ordenadas alfabéticamente por título de la canción. 10320311 10120112 10120414 10120413 10120412 10320318 10320307 10220214 10120411 10320313 10120404 10120402 10120407 10220202 10120408 10120109 10320306 10320309 10320319 10120409 10220213 10320315 10120101 10120104 10320304 10320302 10220201 10320301 10320314 10220215 10120102 10120107 10120114 10120103 10120406 10220210 10220206 10220212 10120405 10220204 10120403 10320316 10320308 10320305 10320317 10120401 10320312 10120108 10220207 10120105 10220208 10320310 10120106 10320320 10220205 10220217 10120111 10120110 10220211 A Baltimore Love Thing Anxiety Audio Delite At Low Fidelity Ba Bump Bebot Build You Up Candy Shop Cleanin' Out My Closet Disco Club Disco Inferno Don't Lie Don't Phunk With My Heart Dum Diddly Fack Feel It Fly Away Gatman And Robin Get In My Car God Gave Me Style Gone Going Guilty Conscience Gunz Come Out Hands Up Hey Mama I'm Supposed To Die Tonight In My Hood Intro Intro (EXPLICIT) Just A Lil Bit Just Lose It Labor Day (It's A Holiday) Latin Girls Let's Get It Started Let's Get Retarded Like That Like Toy Soldiers Lose Yourself Mockingbird My Humps My Name Is My Style My Toy Soldier Outta Control Piggy Bank Position Of Power Pump It Ryder Music Sexy Shake That Shut Up Sing For The Moment Ski Mask Way Smells Like Funk So Amazing Stan Stan (Live) The apl Song The Boogie That Be The Real Slim Shady 10220203 10120410 10320303 10120415 10220216 10120113 10220209 The Way I Am They Don't Want Music This Is 50 Union When I'm Gone Where Is The Love? Without Me rockola.in En este archivo se encuentra la información relacionada con los usuarios. El archivo constará de N (no se conoce) líneas. Cada línea contiene un número entero W, que representará la cantidad de bolívares introducidos por el usuario, luego siguen M (no se conoce) códigos de canciones, posteriormente la palabra ACEPTAR indicando el final de la lista de canciones introducidas por el usuario, luego viene el modo de reproducción (SECUENCIAL o ALEATORIO), luego la PRIORIDAD (opcional) y por último FINALIZAR indicando el fin de la línea. 2000 5000 6000 4000 1000 3000 4000 10120411 10320304 10220213 10220214 10120409 10120413 10320314 10320301 ACEPTAR SECUENCIAL FINALIZAR 10120114 10320307 ACEPTAR ALEATORIO FINALIZAR 10120103 10120412 10220206 10320311 ACEPTAR ALEATORIO PRIORIDAD FINALIZAR 10220215 10120413 ACEPTAR SECUENCIAL PRIORIDAD FINALIZAR ACEPTAR SECUENCIAL FINALIZAR 10320315 ACEPTAR SECUENCIAL PRIORIDAD FINALIZAR 10220214 10320301 10320318 10120409 10320314 ACEPTAR SECUENCIAL FINALIZAR Especificación de la salida La entrada consistirá de dos (2) archivos: log.out En este archivo se llevará un historial de las transacciones hechas por la rockola. Cada línea contendrá la siguiente información: Estatus: Indica si la transacción fue exitosa o no. Vuelto: Si la transacción fue exitosa, indica el vuelto para el usuario. Motivo: Si la transacción no fue exitosa, indica el motivo por el cual no se pudo realizar la transacción (Pago Insuficiente o Límite de canciones excedido). Transacción Transacción Transacción Transacción Transacción Transacción Transacción exitosa, vuelto: 0 Bs. exitosa, vuelto: 2000 Bs. exitosa, vuelto: 0 Bs. cancelda, Motivo: Pago Insuficiente. exitosa, vuelto: 0 Bs. exitosa, vuelto: 0 Bs. cancelda, Motivo: Límite de canciones excedido. reporte.out En este archivo se almacenará el listado de todas las canciones que se tocaron en la rockola, en el mismo orden como fueron reproducidas. Cada línea tendrá el código de la canción, nombre del artista, título del álbum, y título de la canción. Finalmente la cantidad de canciones sin prioridad y con prioridad, total de canciones y el total de la ganancia en bolívares. Código: Código: Código: Código: Código: Código: Código: Código: Código: 10120412, 10220213, 10320311, 10120103, 10220206, 10120413, 10320315, 10120411, 10320301, Artista: Artista: Artista: Artista: Artista: Artista: Artista: Artista: Artista: Black Eyed Peas, Album: Monkey Business, Canción: Bebot Eminem, Album: Curtain Call, Canción: Guilty Conscience 50 Cent, Album: The Massacre, Canción: A Baltimore Love Thing Black Eyed Peas, Album: Elephunk, Canción: Let's Get Retarded Eminem, Album: Curtain Call, Canción: Lose Yourself Black Eyed Peas, Album: Monkey Business, Canción: Ba Bump 50 Cent, Album: The Massacre, Canción: Gunz Come Out Black Eyed Peas, Album: Monkey Business, Canción: Disco Club 50 Cent, Album: The Massacre, Canción: Intro (EXPLICIT) Código: Código: Código: Código: 10320307, 10120114, 10320304, 10120409, Artista: Artista: Artista: Artista: 50 Cent, Album: The Massacre, Canción: Candy Shop Black Eyed Peas, Album: Elephunk, Canción: Let's Get It Started 50 Cent, Album: The Massacre, Canción: I'm Supposed To Die Tonight Black Eyed Peas, Album: Monkey Business, Canción: Gone Going Número de Canciones Sin Prioridad: 7 Número de Canciones Con Prioridad: 6 Número de Canciones: 13 Total: 15000 Bs. La entrega del proyecto se realizará en un sobre manila tamaño carta debidamente identificado con el nombre, apellido, cédula y sección de cada uno de los integrantes del equipo, y debe contener lo siguiente: • • Un diskette 3½ de alta densidad, con formato para DOS, que contenga en el directorio raíz únicamente los archivos fuente de su solución. Nota: Deberá utilizar para el desarrollo del programa solamente lenguaje C++. Un informe en el que debe exponer todos los detalles de su solución. o Análisis de la solución del problema (no más de dos páginas) o Diagrama de Clases. Empleando para ello UML o Representación Gráfica y Formal de las Estructuras de Datos utilizadas. o Seudo_código del algoritmo que simula el funcionamiento de la rockola (es indispensable que esto se realice en lenguaje seudo formal). Este algoritmo debe incluir todas las declaraciones y definiciones necesarias y debe estar debidamente intra documentado e identado. Abstenerse de colocar traducciones de C++ ó el mismo código de C++. Solo son necesarios los algoritmos referentes a la resolución del problema planteado. El informe debe estar impreso en papel bond blanco base 20 tamaño carta, escrito por una sola cara, con un margen izquierdo de 3 cm. y los restantes de 2 cm. Para el texto en prosa debe utilizar caracteres de tamaño 12 puntos estilo Arial o Verdana. Para el pseudo-código debe utilizar caracteres de tamaño 10 puntos estilo Courier New. Evaluación: Se evaluará positivamente: • • • • • • • • Estructuración del código según el paradigma orientado a objetos. Adecuación de las estructuras de datos. Localidad de variables, funciones y procedimientos. Paso de parámetros. Comentarios apropiados. Calidad de la documentación, memoria y análisis del problema. Nomenclatura de variables, procedimientos y demás elementos. Cada método debe llevar un comentario con: o Acción que realiza. o Parámetros de entrada y sus roles. o Valor devuelto. o Precondiciones de los valores de los parámetros. o Condiciones de error tratados dentro de cada acción. 8. Observaciones • • • El proyecto debe ser realizado en equipos de máximo dos (2) estudiantes, sin excepción. Los archivos deben entregarse en un disquete y también ser enviados por correo electrónico a la siguiente dirección: algoritmos2facyt@gmail.com. Para el caso del envío por correo electrónico, los archivos deben ser colocados en un directorio y posteriormente comprimido en formato ZIP o TAR.GZ. El diskette debe estar identificado con una etiqueta indicando el nombre, apellido, cédula y sección de cada uno de los integrantes del equipo. • • • • • • • • • • • Verifique bien que el diskette no esté defectuoso y que contiene todos los archivos. Los programas que entreguen deben estar debidamente presentados y documentados. Se evaluará estrictamente lo que está en el informe y en el diskette. Si por alguna razón (virus, diskette vacío, archivos faltantes, diskette defectuoso, etc.) no es posible corregir su programa, éste se considerará no entregado. Verifique con detenimiento la redacción y la ortografía, ya que ambos aspectos serán evaluados. Los equipos que no sigan las normas y lineamientos establecidos por la unidad académica para la elaboración del proyecto, tendrán un porcentaje de descalificación sobre la nota total obtenida. Los equipos que entreguen el proyecto después de la fecha tope establecidas por la unidad académica, tendrán tres puntos de descalificación (sobre la nota total obtenida) por cada día de retraso. El formato de los archivos de entrada y salida deben ser respetados fielmente. Deben respetarse los nombres de los archivos, estructuras de datos, funciones y/o procedimientos descritos en este enunciado. Los programas que entreguen deben estar debidamente presentados y documentados con el nombre del autor, cédula de identidad y sección a la que pertenece. El lenguaje de programación a utilizar es C++, y el entorno de programación con el cual será evaluado el proyecto es Anjuta bajo ambiente Linux. El archivo o archivos fuentes deben seguir el siguiente estándar de nomenclatura. Archivos Fuentes <Nombre del Estudiante>_nombre_libreria.h Fuentes de las operaciones <Nombre del Estudiante>_nombre_libreria.cpp Programa Principal <Nombre del Estudiante>_PROYECTO_1.cpp Ejemplo: Pedro_Perez_lista.h Pedro_Perez_lista.cpp Pedro_Perez_PROYECTO_2.cpp NOTA: EL NO CUMPLIMIENTO DE LAS OBSERVACIONES DESCRITAS ANTERIORMENTE, GENERARÁ PUNTOS MENOS SOBRE LA CALIFICACIÓN TOTAL DEL TALLER.