1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Manuel Freire -
Número de respuestas: 37

Dudas sobre la parte 1

En respuesta a Manuel Freire

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Martín Fossatti Valetti -

Buenas, respecto al orden de liberarTVisitadia, se pide que sea O(n) con n = cantidad de grupos pero para que no quede memoria colgando debería liberar los grupos, la función que libera grupos es de O(m) con m = cantidad de elementos del grupo entonces si entro a cada grupo en la visitadia y lo borro termina siendo O(n*m).

como el planteo no incluye el orden de liberar grupos debería buscar una solución alternativa que no use dicha función?
si solamente desencolara los grupos de la visitadia se lograría el orden esperado pero igualmente se debería liberar la memoria de los grupos desencolados y volvemos al mismo problema además de que surgiría un nuevo de almacenamiento de los grupos desencolados

En respuesta a Martín Fossatti Valetti

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Gonzalo Javier Diaz Ferreira -
Buenas,

Me sumo a la consulta de Martín... existe alguna forma de liberar en O(n) teniendo en cuenta que la función liberarTGrupoABB lo hace en orden O(m) (m cantidad de visitantes)?

Porque pensé en tomar cada grupo que devuelve al desencolar, guardarlo en una estructura auxiliar, pero tendría que liberarlo en otro ciclo y estoy en la misma n*m.

Agradezco sólo la confirmación de que se puede así sigo pensando.

Saludos!
En respuesta a Gonzalo Javier Diaz Ferreira

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Pablo Andres Balliva Costa -

Yo no me complicaría. La función tiene que liberar en O(n) peor caso, con n la cantidad de grupos. Si después para algunos grupos hay que ir hasta la Luna y volver y para otros solo hasta la esquina, no cambia nada.

Si quieren una razón un poco más formal, podemos asumir que si la cantidad de visitantes está acotada por una constante c, entonces el orden es O(c*n) peor caso, que es lo mismo que O(n). (Y así sucesivamente si cada visitante tuviera un número variable de subcampos [parientes, mascotas, operaciones médicas, etc.].)

En respuesta a Pablo Andres Balliva Costa

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Manuel Freire -
Hola,

Como dice Pablo al ser O(n) siendo n la cantidad de grupos se puede asumir como "constante" la cantidad de personas por grupo y por ende no importa el tamaño del grupo, seguría siendo O(n)
En respuesta a Manuel Freire

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Rafael Sotuyo Milicua -

Buenas,

En el archivo .cpp de visitaDia, cuando definimos la estructura rep_visitaDia ¿Se nos permite añadir más elementos como otras variables para satisfacer las especificaciones de las funciones en visitaDia.h ? La letra solo habla de una coleccion de grupos ABB y una fecha, pero lo siento insuficiente teniendo en cuenta algunas de las especificaciones de las funciones/procedimientos de visitaDia.h

Dígase por ejemplo, la función cantidadGruposTVisitaDia y su O(1) en peor caso.

En respuesta a Rafael Sotuyo Milicua

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Manuel Freire -
Hola,

Si quieren agregar más cosas a la implementación no hay problema mientras se respeten los órdenes.

Saludos!
Manuel
En respuesta a Manuel Freire

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Augusto Nahuel Picardo Perdomo -
Hola en la letra dice que el tipo rep_vistadia almacena una colección de grupos (GrupoABB).
¿Se refiere a un elemento del Tipo TColeccionTGrupos ya proporcionado o es tipo Nuevo de Colección de GrupoABB Estilo TAD Cola?
Desde ya muchas gracias.
En respuesta a Augusto Nahuel Picardo Perdomo

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Manuel Freire -
Hola,

Se pide una colección pero tienen libertad de cómo hacerlo mientras se cumplan los ordenes

Saludos!
Manuel
En respuesta a Manuel Freire

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Valentín Barrera Fourcade -
Buenas tardes. Estoy un poco confundido al ver el resultado esperado de imprimirVisitaDia según caso de prueba. Pareciera que se debe imprimir de arriba para abajo, del elemento mas reciente al mas antiguo respectivamente.
Es decir, inmediatamente despues del "Visita para dia: " imprime el ultimo elemento en ser agregado a la cola.
Se podría decir que "el primer elemento en ser impreso es el ultimo en ser agregado", lo cual se parece mas al concepto de pila y no de cola.
En respuesta a Valentín Barrera Fourcade

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Gianfranco Erramún Bueno -
Me pasa lo mismo. Según la letra es una cola, en los casos de prueba se agrega al visitante 1 y luego al visitante 2, por lo que al imprimir, el orden debería ser: imprimo el visitante 1, luego el visitante 2. Sin embargo la salida espera que se imprima primero el 2 y luego el 1.
En respuesta a Gianfranco Erramún Bueno

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Pablo Andres Balliva Costa -
Sí, parece que los tests esperan la salida al revés. Con una lista doblemente enlazada se podrían imprimir en orden inverso, como se hizo en coleccionTGrupos, para que den bien. Antes de implementarlo así sería buena una aclaración de parte de los docentes.
En respuesta a Pablo Andres Balliva Costa

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Gianfranco Erramún Bueno -
Eso solo soluciona el primero caso. En los casos de prueba de desencolar se crea primero el grupo con el visitante 1 y luego el grupo con el visitante 2, por lo que en la cola debería estar primero el visitante 1 y luego visitante 2, te piden eliminar el último en el .h por lo que debería eliminarse el grupo del visitante 2, pero en el .out se espera que desencolar devuelva el grupo del visitante 1 y que al imprimir la cola solo esté visitante 2.
En respuesta a Gianfranco Erramún Bueno

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Pablo Andres Balliva Costa -

Yo asumí que se pretende que implementemos una cola FIFO (aunque nunca se explicita en la letra), por lo que la función desencolar debería borrar el primer elemento de la cola, que a su vez coincide con el primer elemento en una implementación con lista enlazada (como la que se desarrolla en el teórico). El .h dice que se retira el último, para mí no tiene sentido.

En respuesta a Manuel Freire

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Viviane Kunin Feder -
Hola, en la funcion encolarGrupoTVisitaDia, dice que se debe agregar un elemento al inicio de la visitaDia, esto sería agregarlo al final de la cola? Porque si lo agregara al comienzo de la lista se requeriría de una lista doblemente enlazada para que se encole al incio y se pueda desencolar en orden 1 al final no?
En respuesta a Viviane Kunin Feder

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Pablo Andres Balliva Costa -

Del teórico, pp. 59 y 60:

Implementaciones del TAD Queue

Al igual que para stacks, una implementación adecuada para este tipo abstracto es usar listas encadenadas.

Sin embargo, en este caso se puede aprovechar el hecho de que todas las inserciones son efectuadas al final de la cola e implementar la operación Enqueue en forma eficiente. En vez de recorrer toda la lista cada vez que queremos insertar un nuevo elemento, lo que se hace es mantener un puntero al último elemento.

Al igual que para listas, también mantendremos un puntero (ppio) al comienzo de la misma.

Para colas, este puntero permitirá implementar Front y Dequeue en forma eficiente.

Se puede mantener además una celda (un nodo) "dummy“ (cabecera) como cabeza de la lista. El puntero ppio apuntará a esta celda. Esta convención permitiría hacer un manejo adecuado de la cola vacía. Si se hacen los controles adecuados (en los casos de borde), se puede omitir el uso de la celda dummy.

En respuesta a Manuel Freire

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Paulo Bettinelli Lamas -
Buenos días, puede ser que el orden implementado para imprimir los atributos de TVisitante no sean los mismos que espera el caso de prueba? Cuando hago el test espera que se imprima Nombre y Apellido, ID, Edad, pero en visitante.cpp está hecho para que imprima Edad, Nombre y Apellido, e ID.
En respuesta a Paulo Bettinelli Lamas

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Lucia Marfetan Benia -
Me pasa lo mismo! La función imprimirTGrupoABB(grupoABB) imprime los atributos en un orden diferente al que te pide el test ¿no?

19,21d18 < Visitante Nombre2 Apellido2 < Id: 2 < Edad: 20

23a21,23
> Edad: 20
> Visitante Nombre2 Apellido2
> Id: 2
En respuesta a Lucia Marfetan Benia

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Pablo Andres Balliva Costa -

Esto del desorden de impresión de los campos le apareció a algunos compañeros en la tarea anterior y a mí me estuvo volviendo loco un buen rato con esta. El problema viene por un lado inesperado: los campos en realidad no salen impresos en desorden, aparecen así en la salida del diff, que trata de presentar las diferencias entre un archivo y otro de forma accesible, pero en este caso le sale el tiro por la culata.

Tu salida es tal cual la que me da cuando hago

 make t-visitaDia1-crear-insertar-imprimir-liberar

Probá ejecutar

./principal < ./test/visitaDia1-crear-insertar-imprimir-liberar.in > sal.txt

que lo que hace es invocar al principal con las entradas de ese test y guardar la salida en sal.txt. Ahora compará visitaDia1-crear-insertar-imprimir-liberar.out con sal.txt y vas a ver que la única diferencia es que los visitantes se imprimen en el orden contrario al que deberían. Esto se debe seguramente a que este test (y varios otros de otros módulos) están mal, cosa que ya varios compañeros han reportado y de la que estamos esperando noticias de parte de los docentes.

El test combinado de esta parte también falla por iguales razones y el diff confunde de igual manera.

Comparación de visitaDia1-crear-insertar-imprimir-liberar.out y sal.txt
test.out sal.txt

En respuesta a Pablo Andres Balliva Costa

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Andrès Ramìrez Marroco -
Una consulta, esto ya se soluciono?
A mi me siguen saltando errores asi.
En el test 1 estan bien , pero en el 2 ya no.
En respuesta a Andrès Ramìrez Marroco

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Federico Rivero -
Hola Andrés!

Se "solucionó" pero pidiendo que sigan lo que dicen los casos de prueba. Podés ver el mensaje que lo explica en novedades, acá: https://eva.fing.edu.uy/mod/forum/discuss.php?d=291814 

Saludos,
Federico
En respuesta a Manuel Freire

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Francisco Scarrone Braz Da Luz -
Buenas, segun lo dado en el teorico, encolar refiere a colocar un elemento al final, pero en este caso en la funcion de encolar nos pide lo contrario. No se si es un error en el uso de terminos o estoy entendiendo mal.

En respuesta a Francisco Scarrone Braz Da Luz

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Pablo Andres Balliva Costa -

Sirven las dos maneras:

  • Agrega al inicio y saca del final.
  • Agrega al final y saca del inicio.

A qué vos le llames inicio y final es una convención tuya nomás. También se puede pensar en términos de izquierda/derecha, arriba/abajo, adelante/atrás, etc. Elegí el que más te sirva. La característica que se debe asegurar es que sea FIFO.

Por ejemplo, el dibujito de la Wikipedia agrega por la izquierda y saca por la derecha, exactamente al revés que el teórico. Yo considero que es una forma más natural de dibujar el TAD. Pero a la hora de la implementación con lista enlazada, es más fácil borrar del principio de la lista e insertar al final, por lo que la representación del teórico camina mejor. Gustos.

En respuesta a Manuel Freire

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Silvina Jaquelin Ferreira Pereira -
Estoy un poco mareada con la letra en la letra de la tarea y en la letra en el código.
Letra tarea:
En esta sección se implementará el módulo visitaDia.cpp. Cada elemento del tipo visitaDia almacena una
fecha y una colección de grupos (GrupoABB).
Dato código:
Los elementos de tipo TVisitaDia almacenan una colección de elementos de tipo TVisitante y una fecha.

Según entiendo de la letra, visitaDia tiene una fecha y una COLECCIÓN de GruposABB,
De el código entiendo que visitanteDia tiene una fecha y una colección de elementos TVISITANTE ( UN GrupoABB).
Me mareo bastante, agradezco mucho la ayuda des de ya.
Gracias
En respuesta a Manuel Freire

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Elias Ezequiel Severino Morales -
Buenas noches.
Estoy arrancando tarde con la tarea y estoy dando vueltas con la misma duda: en el módulo 3, visitaDia, la primer función (crearTVisitaDia) requiere la utilización de una colección de grupos. La única forma de cumplir con los requerimientos es agregar de forma auxiliar, digamos, las funciones necesarias de coleccionTGrupos. Finalmente, mi duda es: es posible agregar una línea con <#include "../include/coleccionTGrupos.h"> y así evitar la copia de las funciones? Está permitido?

Me disculpo de antemano si me omití alguna parte de los requerimientos/reglamentos, o si es una consulta muy obvia. He estado buscando y no encontré que nadie pregunte lo mismo.

Aguardo comentarios, muchas gracias!
En respuesta a Elias Ezequiel Severino Morales

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Federico Rivero -
Hola!

Nos quedó mal la letra y dice "Cada elemento del tipo visitaDia almacena una fecha y una colección de grupos (GrupoABB)...", pero debería decir una colección de visitante. Es decir que cada nodo del tipo visitaDia contiene un elemento de tipo GrupoABB, el cual ya está agregado en visitaDia.h

Esto va a quedar corregido también en la liberación del día de hoy.

Saludos,
Federico
En respuesta a Manuel Freire

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Pablo Andres Balliva Costa -

Estimados docentes:

Solicito aclaraciones sobre la función imprimirVisitaDia. La letra y el .h hacen referencia exclusiva al formato de impresión, pero no dicen nada sobre el orden en que se deben imprimir las instancias de grupoABB que hay en la cola.

De todas las formas posibles de implementar una cola, decidí seguir la guía del teórico, que sugiere una lista simplemente encadenada, con punteros al inicio y al final de la lista. Allí se explica que de esta manera es fácil encolar al final de la lista y desencolar del principio. El problema es que a la hora de imprimir, la forma natural de hacerlo es desde el grupo más antiguo al más reciente (FIFO, desde el principio hacia el final de la lista). Es la forma en la que los grupos saldrían de la cola si se usara la función de desencolar. Sin embargo, los tests de esta parte van a contrapelo de este planteo.

Esperaba que con la revisión de la letra y los materiales que se publicó ayer se corrigieran los tests, pero veo que no ha sido así. Tal vez le esté errando en algo.

En respuesta a Pablo Andres Balliva Costa

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Federico Rivero -
Hola Pablo!

Está bien el planteo que hacés. Es cierto que no está explícitamente mencionado, voy a tratar de agregar esa aclaración hoy. De mientras, la idea es que sigan los casos de prueba.

En tu caso, un cambio sencillo sería en lugar de encolar 'al final' (a partir del puntero 'fin' de tu nodo auxiliar) y desencolar 'al principio' (a partir del puntero 'inicio'), podrías invertirlas. Encolar a partir del puntero inicio y desencolar a partir del puntero final. Con ese cambio entiendo que no deberías cambiar la impresión ni otras funciones.

Saludos,
Federico
En respuesta a Federico Rivero

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Pablo Andres Balliva Costa -

Gracias por tu respuesta. Habrá que hacerlo así entonces.

Si alguno se encuentra en una situación similar: ese pequeño cambio implica pasar a una lista doblemente encadenada, porque para desencolar del final se requiere ir "hacia atrás" en la lista. (Parece que es la implementación que eligió la mayoría, porque no se ha compartido mucho mi dificultad.) Es más o menos lo mismo que ya se implementó en la tarea anterior.

En respuesta a Manuel Freire

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Natalia Gaudio Couselo -
No estaria entendiendo como seria la estructura de visitaDia, si hay un grupo y una fecha y luego apunta a sig con otra fecha y grupo o es diferente y no logro ver como
En respuesta a Natalia Gaudio Couselo

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Federico Rivero -

Hola Natalia!

Tendría que haber una fecha sola. La idea es que con ese TAD vas a modelar los grupos que visitan la galería en un determinado día, por lo cual va a tener 1 fecha y N grupos.

Saludos,

        Federico

En respuesta a Federico Rivero

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Ismael Lowel Bazzino Pais -
Entonces la estructura de rep_Visitadia no seria con una fecha sola y un grupo ABB solo como dice en la letra, seria una fecha y una lista con varios grupos.
O interprete mal?
En respuesta a Ismael Lowel Bazzino Pais

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Manuel Freire -
Es correcto como decís Ismael.

Saludos!
Manuel
En respuesta a Federico Rivero

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Natalia Gaudio Couselo -

Entonces la estructura de rep_Visitadia no seria con una fecha sola y un grupo ABB solo como dice en la letra

En respuesta a Natalia Gaudio Couselo

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Pablo Andres Balliva Costa -

La letra es medio confusa:

Cada elemento del tipo visitaDia almacena una fecha y una colección de visitantes (una instancia de GrupoABB), sobre los cuales se brindan algunas de las funciones típicas del TAD Cola.

Si mirás con atención todo el .h vas a ver que debería haber dicho que cada elemento almacena una fecha y una cola de TGrupoABBs.

En respuesta a Manuel Freire

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Romina Antonella Medeiros Figueredo -
Hola! Cuando hago el test visitaDia1 el archivo .sal es igual al .out. Sin embargo, cuando ejecuto con valgrind --leak-check=full salen errores de memoria que copio aquí:
Parece que hay un new que quedó sin liberar, en crearTFecha. Pero el código de fecha.cpp viene ya hecho en la tarea, lo puedo modificar para arreglarlo, o es por otro lado el error?
Gracias
d
En respuesta a Romina Antonella Medeiros Figueredo

Re: 1. Implemente la representación de visitaDia rep_visitadia y las funciones crearTVisitaDia, encolarGrupoTVisitaDia, imprimirVisitaDia y liberarTVisitaDia

de Pablo Andres Balliva Costa -
La memoria que reserva crearTFecha se libera con liberarTFecha. Sos vos la que la tiene que invocar dentro de tu implementación de liberarTVisitaDia, para que esa memoria no quede colgada. No hay que «arreglar» nada de lo que se nos da hecho.