Programación 2 Curso 2014/2015 Convocatoria de julio de 2015 (C4) Ampliaciones de las prácticas 2 y 3 En la convocatoria de julio (C4), para aprobar la parte práctica de la asignatura es necesario presentar las prácticas 2 y 3 de la convocatoria de junio, con las ampliaciones que se detallan a continuación. IMPORTANTE: aquellos alumnos/as que hayan obtenido al menos un 4 en la nota media de prácticas de la convocatoria de junio no es necesario que entreguen nada, se guardará dicha nota para la convocatoria de julio, pero si desean subir nota pueden entregar las ampliaciones (en cuyo caso se perderá la nota de la convocatoria de junio). En la convocatoria de julio, la nota de prácticas se calculará de la siguiente manera: notaPracticas = 0.5 * notaP2julio + 0.5 * notaP3julio El último dı́a para entregar estas ampliaciones de las práctica es el viernes 3 de julio, hasta las 23:59. No se admitirán entregas fuera de plazo. Detección de plagios/copias En el Grado en Ingenierı́a Informática, la Programación es una materia fundamental, que se aprende programando y haciendo las prácticas de las diferentes asignaturas (y otros programas, por supuesto). Si alguien pretende aprobar las asignaturas de programación sin programar (copiando), obviamente tendrá serios problemas en otras asignaturas o cuando intente trabajar. Concretamente, en Programación 2 es muy difı́cil que alguien que no ha hecho las prácticas supere el examen de teorı́a, por lo que copiar una práctica es una de las peores decisiones que se puede tomar. La práctica debe ser un trabajo original de la persona que la entrega; en caso de detectarse indicios de copia de una o más prácticas se suspenderá la asignatura a todos los alumnos implicados (tanto al que copia como al que se deja copiar), y se enviará un informe a la dirección de la EPS, para que se tomen las medidas disciplinarias oportunas. Normas generales comunes a todas las prácticas 1. La práctica se debe entregar exclusivamente a través del servidor de prácticas del departamento de Lenguajes y Sistemas Informáticos, al que se puede acceder desde la página principal del departamento ( www.dlsi.ua.es, “Entrega de prácticas”) o directamente en la url http://pracdlsi.dlsi.ua.es. No se admitirán entregas por otros medios (correo electrónico, Campus Virtual, etc.). El usuario y contraseña para entregar prácticas es el mismo que se utiliza en el Campus Virtual. Programación 2, 2014/2015 2 La práctica se puede entregar varias veces, pero sólo se corregirá la última entrega. 2. El programa debe poder ser compilado sin errores con el compilador de C++ existente en la distribución de Linux de los laboratorios de prácticas; si la práctica no se puede compilar su calificación será 0. Se recomienda compilar y probar la práctica con el autocorrector inmediatamente antes de entregarla. 3. Los ficheros fuente deben estar adecuadamente documentados, con comentarios donde se considere necesario. Además, no se pueden utilizar variables globales de ninguna clase, los únicos sı́mbolos globales permitidos son las funciones, los tipos y las constantes. 4. La corrección de la práctica se hará de forma automática, por lo que es imprescindible respetar estrictamente los formatos de salida que se indican en este enunciado. Además, al principio de todos los ficheros fuente entregados se debe incluir un comentario con el DNI de la persona que entrega la práctica, con el siguiente formato: // DNI tuDNI Nombre donde tuDNI es el DNI del alumno correspondiente (sin letras), tal y como aparece en el Campus Virtual, y Nombre es el nombre completo; por ejemplo, el comentario podrı́a ser: // DNI 12345678 GARCIA GARCIA, JUAN MANUEL Ampliaciones de la práctica 2 para la convocatoria de julio Las ampliaciones que se debe implementar sobre la práctica 2 de la convocatoria de junio son: 1. Gracias a los créditos conseguidos en sus últimos viajes, el capitán Han Solo ha decidido ampliar el número de bodegas de 3 a 5, para lo que ha tenido que reducir el número de asientos para pasajeros a solamente 7. 2. El algoritmo de balanceado de carga que inventó Chewie es muy ineficiente, y Han Solo ha decidido cambiar a otro algoritmo parecido: una vez se sepa qué bodega tiene menor peso y qué bodega tiene mayor peso, en vez de intercambiar los últimos contenedores de ambas bodegas, se intercambiarán el contenedor con menos peso de la bodega con menor peso, con el contenedor de mayor peso de la bodega con más peso, estén en la posición que estén dentro de las bodegas. 3. Para equilibrar mejor la nave, Han Solo ha decidido que cuando un pasajero baje de la nave, el pasajero que ocupa el último asiento se moverá al asiento que se ha liberado, de manera que nunca queden huecos en los asientos Como en la convocatoria de junio, todo el código de la práctica debe estar en un único fichero fuente llamado “millenniumFalcon.cc”. Programación 2, 2014/2015 3 Ampliaciones de la práctica 3 para la convocatoria de julio Las ampliaciones que se debe implementar sobre la práctica 3 de la convocatoria de junio son: 1. Como en la ampliación de la práctica 2 para julio, se debe ampliar el número de bodegas de 3 a 5, y hay que reducir el número de asientos para pasajeros a 7. 2. Como en la práctica 2, se debe implementar también en esta práctica el nuevo algoritmo de balanceado de carga. Para poder implementarlo es necesario añadir los siguientes métodos públicos a la clase Hold: int moreWeightContainer() const; int lessWeightContainer() const; Container getContainer(int p) const; Los dos primeros métodos devuelven la posición del contenedor con mayor y menor peso, respectivamente, o bien -1 si no hay contenedores en la bodega. Finalmente, el método getContainer devuelve el contenedor que ocupa la posición p (que será un valor entre 0 y el número de contenedores menos 1), o bien devuelve un contenedor vacı́o (como se queda al crearlo) si no existe esa posición en la bodega. 3. Como en la práctica 2, también se debe evitar que queden huecos en los asientos de los pasajeros. 4. La creación de una nueva clase, Trip, que tendrá los datos de un viaje (véase diagrama adjunto). Los métodos más importantes son: Trip(int km, double weight): crea un viaje y calcula todos los datos a partir del número de kilómetros y el peso que se le pasan como parámetro. No debe comprobar que el número de kilómetros es correcto, se hará en otro lugar (en ShipManager). Trip(string line): crea un viaje a partir de los datos contenidos en la lı́nea (que se supone se leerá de un fichero), con el mismo formato de las lı́neas del log de viajes de la práctica 2. No se debe calcular ningún dato, porque los datos de la lı́nea podrı́an ser diferentes (porque p.ej. son viajes antiguos con un consumo mayor, o una velocidad menor). operator <<: muestra los datos del viaje, con el mismo formato en que aparecen en el log de viajes de la práctica 2. 5. En la clase Spaceship se debe implementar un nuevo método público double totalWeight() const, que devuelva el peso total las bodegas de la nave (es decir, la suma de los pesos de las bodegas). 6. Finalmente, se debe eliminar el método travel de la clase Spaceship y sustituir la invocación a dicho método desde la clase ShipManager por la creación de un nuevo viaje (objeto de la clase Trip), y por una llamada al operador de salida para el ese viaje (que se mostrará con el formato del log, al contrario que en la práctica 2). Programación 2, 2014/2015 4 La práctica debe tener varios ficheros llamados “Constants.h”, “Container.cc” y “Container.h”, “Hold.cc” y “Hold.h”, “Passenger.cc” y “Passenger.h”, “Spaceship.cc” y “Spaceship.h”, “ShipManager.cc” y “ShipManager.h”, “Trip.cc” y “Trip.h”. Para intentar evitar confusiones, se debe entregar todo el código (incluyendo el Makefile correspondiente) en un archivo comprimido prog2p3jul.tgz, que se debe crear con la orden: tar cvfz prog2p3jul.tgz *.cc *.h Makefile Para poder generar un ejecutable y realizar pruebas, se puede utilizar el mismo fichero “millenniumFalcon.cc” de la práctica 3 de la convocatoria de junio, que no deberı́a ser modificado y que no es necesario entregar. Para corregir la práctica se utilizará ese fichero, esté o no presente en el prog2p3jul.tgz.