Letra Tarea 4
Letra Tarea 4
Letra Tarea 4
Tarea 4
TADs Tabla y Cola de Prioridad
Curso 2023
Esta tarea tiene como principales objetivos:
La fecha límite de entrega es el jueves 22 de junio a las 16:00 horas. El mecanismo específico de entrega
se explica en la Sección 5. Por otro lado, para plantear dudas específicas de cada paso de la tarea, se
deja un link a un foro de dudas al final de cada parte.
A continuación se presenta una guía que deberá seguir paso a paso para resolver la tarea. Tenga en cuenta
que la especificación de cada función se encuentra en el .h respectivo, y para cada función se especifica
cuál debe ser el orden del tiempo de ejecución o en el peor caso o en el caso promedio.
1. Partiendo de la Tarea 3
1. Para comenzar con la Tarea 4 se deben descargar los materiales de la sección correspondiente del
EVA. Observe que en los archivos fecha.cpp, evento.cpp, agendaLS.cpp, persona.cpp y personasL-
DE.cpp hay una sección demarcada con el título PEGAR CÓDIGO TAREA 3. Reemplace estas fun-
ciones con el código de la Tarea 3. Compile el código de la tarea ejecutando make, y verifique que los
módulos previos funcionan correctamente ejecutando el test tarea3-combinado. Foro de dudas.
2. TAD Tabla
En esta sección se implementará en tablaPersonas.cpp el TAD TablaPersonas a partir de la especificación
dada en tablaPersonas.h. Este TAD consiste en una Tabla no acotada cuyo dominio son los strings que
representan nombres de personas, y el codominio son elementos del tipo TPersona. La tabla debe ser
implementada mediante una tabla de dispersión abierta.
1. Implemente la estructura rep_tablaPersona. Para esto, recomendamos revisar las operaciones del
TAD solicitadas y realizar un diseño de la/s estructura/s necesaria/s. La representación debe utilizar
listas del tipo TPersonasLDE. Foro de dudas.
Página 1 de 4
Instituto de Computación — Facultad de Ingeniería Laboratorio de Programación 2
6. Ejecute el test CP5-tiempo para verificar que su implementación cumple con los tiempos de ejecución
solicitados. Recuerde que los tests que evalúan el tiempo de ejecución se deben ejecutar sin valgrind.
Para esto puede hacer $ make tt-NN, donde NN es el nombre del caso de prueba. Por ejemplo, para
este caso pruebe ejecutar: make tt-CP5-tiempo. Foro de dudas
Página 2 de 4
Instituto de Computación — Facultad de Ingeniería Laboratorio de Programación 2
4. Módulo de aplicaciones
En esta sección se implementarán las funciones del módulo aplicaciones.cpp. Estas funciones hacen uso
de los TADs implementados anteriormente como parte de su implementación. Recordar que no se debe
acceder a la representación de los TADs, solamente se deben usar las funciones definidas de cada
TAD. Para esto puede ser necesario incluir las especificaciones de los TADs a utilizar en el archivo .cpp.
1. Implemente la función listarEnOrden que recibe una Tabla de personas y una lista de nombres (en
un arreglo de strings) e imprime en pantalla los datos de las personas de la lista que están en la
tabla, en orden de fecha de su evento más próximo. Se asume que los IDs de las personas están
acotados entre 1 y M AX _ID (definido en aplicaciones.h). El tiempo de ejecución en promedio debe
ser O(n∗log n+n∗m), donde n es la cantidad de nombres en la lista, y m es la cantidad de eventos de
la agenda con mas eventos entre todas las personas de la tabla. Se debe utilizar una cola de prioridad
auxiliar en la implementación de la función. Ejecute el test aplicaciones1-listarEnOrden para verificar
el funcionamiento de las funciones. Foro de dudas.
1. Ejecute:
$ make testing
Donde un 1 simboliza que no hay error y un 0 simboliza un error en un caso de prueba, en este orden:
tarea3-combinado
persona1-primerEvento
personasLDE1-nuevasFunciones
tabla1-crearLiberar
tabla2-insertarImprimir
tabla3-eliminarPerteneceObtener
tabla4-combinado
CP1-crear-liberar-vacia-esta-insertar
CP2-prioritaria-prioridad-insertar
CP3-eliminar
CP4-invertirPrioridad
CP5-tiempo
aplicaciones1-listarEnOrden
Foro de dudas.
2. Prueba de nuevos tests. Si se siguieron todos los pasos anteriores el programa creado debería ser
capaz de ejecutar todos los casos de uso presentados en los tests públicos. Para asegurar que el
programa es capaz de ejecutar correctamente ante nuevos casos de uso es importante realizar tests
propios, además de los públicos. Para esto cree un nuevo archivo en la carpeta test, con el nombre
test_propio.in, y escriba una serie de comandos que permitan probar casos de uso que no fueron
contemplados en los casos públicos. Ejecute el test mediante el comando:
Página 3 de 4
Instituto de Computación — Facultad de Ingeniería Laboratorio de Programación 2
y verifique que la salida en la terminal es consistente con los comandos ingresados. La creación y
utilización de casos de prueba propios, es una forma de robustecer el programa para la prueba de los
casos de test privados. Foro de dudas.
3. Prueba en pcunix. Es importante probar su resolución de la tarea con los materiales más recientes y
en una pcunix, que es el ambiente en el que se realizarán las correcciones. Para esto siga el procedi-
miento explicado en Sugerencias al entregar.
IMPORTANTE: Debido a un problema en los pcunix, al correrlo en esas máquinas se debe iniciar
valgrind ANTES de correr make testing como se indica a continuación:
Ejecutar los comandos:
$ make
$ valgrind ./principal
$ valgrind ./principal
==102508== Memcheck, a memory error detector
==102508== Copyright (C) 2002-2022, and GNU GPL’d, by Julian $ Seward et al.
==102508== Using Valgrind-3.20.0 and LibVEX; rerun with -h for copyright info
==102508== Command: ./principal
==102508==
$ 1>
$ make testing
Foro de dudas.
4. Armado del entregable. El archivo entregable final debe generarse mediante el comando:
$ make entrega
Con esto se empaquetan los módulos implementados y se los comprime generando el archivo
EntregaTarea4.tar.gz.
El archivo a entregar DEBE ser generado mediante este procedimiento. Si se lo genera mediante
alguna otra herramienta (por ejemplo, usando un entorno gráfico) la tarea no será corregida, inde-
pendientemente de la calidad del contenido. Tampoco será corregida si el nombre del archivo se
modifica en el proceso de entrega y no coincide con EntregaTarea4.tar.gz. Foro de dudas.
5. Subir la entrega al receptor. Se debe entregar el archivo EntregaTarea4.tar.gz, que contiene los
módulos a implementar fecha.cpp, evento.cpp, persona.cpp, agendaLS.cpp, personasLDE.cpp,
tabla.cpp, colaDePrioridadPersona.cpp y aplicaciones.cpp. Una vez generado el entregable según
el paso anterior, es necesario subirlo al receptor ubicado en la sección Laboratorio del EVA del curso.
Recordar que no se debe modificar el nombre del archivo generado mediante make entrega.
Para verificar que el archivo entregado es el correcto se debe acceder al receptor de entregas y hacer
click sobre lo que se entregó para que automáticamente se descargue la entrega.
IMPORTANTE: Se puede entregar todas las veces que quieran hasta la fecha final de entrega. La
última entrega reemplaza a la anterior y es la que será tenida en cuenta. Foro de dudas.
Página 4 de 4