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