[2do Parcial Julio 2015] Dudas con la solucion del ejercicio 3.

[2do Parcial Julio 2015] Dudas con la solucion del ejercicio 3.

de Daniel Susviela Martinez -
Número de respuestas: 10

Buenas, tengo un par de dudas sobre la solcuion de este ejercicio, las paso a listar:


  1.  En la letra se dice que el tren solo funciona de 6 a 23 horas sin embargo en la solucion nunca se duerme al tren cuando esta fuera de horario. Esto es evidente cuando comienza el proceso por primera vez, independientemente de cual sea la hora actual, se le avisa al primer molinete que llego el tren (que bien podrian ser las 4am por todo lo que sabemos y estamos fuera del horario). Porque se hace esto? Se aclaro en el parcial que esa restriccion de tiempo no era valida?
  2. En la letra se dice que el tren abandona la estacion cuando este se completa y no hay mas nadie para bajar en dicha estacion. No veo como eso esta implementado en la solucion.

Finalmente, tengo un par de dudas de letra sobre el ejercico

Cuando el tren se "duerme" durante el horario de inactividad (es simplemente un DELAY del tiempo que debe permanecer dormido para que sean las 6) es posible que tenga pasajeros dentro porque nunca se les dio el cpu para bajarse. Esta bien eso? Una forma de solucionarlo que se me ocurrio es dar una ultima vuelta y forzar el programa a que se bajen (me tranco hasta que no se bajen todos). Sin embargo esta ultima "vuelta" esta fuera de horario de operacion del tren. Es esto aceptable?

Saludos
En respuesta a Daniel Susviela Martinez

Re: [2do Parcial Julio 2015] Dudas con la solucion del ejercicio 3.

de Jorge Merlino -

1) La aclaración de que funciona de 6 a 23 es solamente para que el tiempo sea siempre creciente. No requiere ninguna programación para implementarlo (por eso no está en la parte principal de la letra)

2) Es la parte donde donde dice:

if tot = 50 or espera <= 0
    seguir := true;
endif


En respuesta a Jorge Merlino

Re: [2do Parcial Julio 2015] Dudas con la solucion del ejercicio 3.

de Daniel Susviela Martinez -
Perdon pero no entiendo el 2. Que existan 50 personas dentro del tren no implica que nadie se quiera bajar en la parada actual.

Darle prioridad a la gente que baja contra la que sube no garantiza que no exista un pasajero que se queria bajar en la parada actual y que no lo haya hecho ya. Mi razonamiento viene de que no necesariamente se le dio el procesador para pedir el encuentro de bajar a un pasajero que ya decidio que se quiere bajar.

Para hacerlo mas claro:

  • Supongo que estoy en la parada 7, tengo 49 pasajeros dentro y un proceso de pasajero ejecuto solo hasta destino:= destino(), le dio que se bajaba en el 7 pero no ejecuto el encuentro.

  • Por lo tanto el count de bajar[e] = 0 por lo que voy a permitir que alguien se suba, llevandome a 50 passajeros.

  • Luego el pasajero que recien sabe que se bajaba en la parada actual ejecuta el encuentro para bajar y se tranca ahi, pero el tren se va a ir de la parada mas pronto de lo que deberia sin darle chance a el de que se baje.

El problema este surge de que el pasajero decide dentro del tren a donde se baja. A menos que no este entendiendo algo.
En respuesta a Daniel Susviela Martinez

Re: [2do Parcial Julio 2015] Dudas con la solucion del ejercicio 3.

de Jorge Merlino -

Si no entiendo mal tu idea es como que me digas que en un óminbus hay un pasajero que esta pensando en bajarse pero no llega a apretar el botón cuando el ómnibus llega a la parada y sigue de largo. El conductor no tiene forma de saber que el pasajero está pensando en bajarse si no presiona el botón y lo mismo sucede en este caso con el encuentro.

Si el pasajero no llega a determinar que se quiere bajar en esa parada antes de llegar no se lo va a tener en cuenta. Va a tener que esperar la cantidad de circuitos necesaria hasta que le toque la CPU y pueda avisar que se quiere bajar.

En respuesta a Jorge Merlino

Re: [2do Parcial Julio 2015] Dudas con la solucion del ejercicio 3.

de Daniel Susviela Martinez -
En realidad apreta el boton para bajarse en la misma parada. Mi mayor "preocupacion" con este caso borde es que a veces el pasajero si se puede bajar, si se sube alguien antes y no hay 50 pasajeros. El problema que yo presento solo surge si el tren esta lleno, sino funciona normalmente. Claro que si el tren se va y recien ahi el pasajero resuelve que queria bajarse perdio, en ese caso estoy de acuerdo contigo. Pero como esta ahora a veces permito bajar a un pasajero que resuelve bajarse en la misma parada y a veces no.

Esta "inconsistencia" es lo que me da dudas de la solucion.
En respuesta a Daniel Susviela Martinez

Re: [2do Parcial Julio 2015] Dudas con la solucion del ejercicio 3.

de Jorge Merlino -

Es más o menos lo mismo. El tren paró se miró si había alguien para bajar y como no había y está lleno decidió seguir de largo. Entre que se decide seguir y que se arranca efectivamente al pasajero se le ocurre bajar. En esas condiciones demoró mucho y va a tener que esperar una vuelta más.

En realidad eso no depende de el tren esté lleno o no, puede pasar en cualquier caso. Por ejemplo si el pasajero decide bajar pero pierde la CPU y no llega a hacer el encuentro. El tren espera los 15 segundos y decide arrancar pero justo antes de que arranque al pasajero llega al encuentro. Es el mismo caso y tiene que esperar hasta la próxima vuelta aunque técnicamente decidió bajar mientras el tren todavía estaba en la parada.

En respuesta a Jorge Merlino

Re: [2do Parcial Julio 2015] Dudas con la solucion del ejercicio 3.

de Daniel Susviela Martinez -

El tren debe partir si se cumplen una de las siguientes condiciones:

  • Pasan 15 segundos sin que nadie suba o baje
  • El trene esta lleno y nadie quiere bajarse en parada actual
En el caso de que pasen 15 segundos sin activad estoy de acuerdo contigo. El tren se tiene que ir porque estamos en la primera condicion la cual es independiente de si alguien se "aviva" de querer bajar despues de pasados los 15 segundos. La condicion es cierta y debe partir el tren.

Mi caso es un incumplimiento de la segunda condicion, la cual en realidad son dos que deben cumplirse en simultaneo. La solucion chequea por la primera (esta lleno) y asume que la segunda se cumple por darle prioridad a los que se bajan (lo cual no es cierto).

Capaz con el diagrama que adjunto queda mas claro por que no es cierto que darle prioridad a los que bajan resulta en que el tren no tenga gente para bajar.

En el diagrama vemos como un pasajero actua frente a dos situaciones iguales (con la unica diferencia de si el tren se llena o no).



Como se ve en la flecha de abajo, el tren decide irse cuando habia alguien para bajarse esperando por el accept. Mientras que en la flehca de arriba, si bien le toma mas tiempo, el pasajero logra bajarse en su estacion. Esta claro en el diagrama que es no es el caso de que el tren espera 15 segundos para irse y recien ahi el pasajero decide bajarse.

Este caso borde lleva a condiciones extremas por ejemplo: El tren tiene 49 personas que se quieren bajar en la parada siguiente pero no se les dio la cpu para pedir el encuentro. El tren llega a la parada donde inmediatamente habia una persona para subir. El tren lo acepta. Los 49 piden encuentro para bajar. El tren se va, estando muy poquito tiempo o casi sin estar en la estacion, y cargado de gente.

Se puede entonces assegurar la segunda condicion de partida? Asi como esta en la solucion para mi no. Pero proponga una solucion. Debemos exigir que los pasajeros nos avisen a donde se quieren bajar antes de bajarse, de esta forma sabemos la cantidad de gente "indeterminada" y sabemos cuantas personas se quieren bajar en donde. Ahora al momento de chequear la segunda condicion el tren esta en condiciones de hacerlo "bien". Debe chequear que la cantidad de indeterminados sea 0 (si no lo fuera no tenemos manera de saber si es cierta la condicion o no, arriesgariamos sacar el tren de la estacion cuando no deberiamos). Chequear que no exista alguien que se quiera bajar. En cualquiera de los dos casos, se debe usar mas tiempo de los 15 segundos disponibles para que ellos se bajen o no, se determinen o no. No hacer esto lleva a que el tren parta de la estacion cuando no deba (incumplimiento de la segunda condicion, crei que era verdadera pero resulto ser falsa). Es importante destacar que lo que planteo no sufre del caso borde demostrado ya que el tren siempre que decide por segunda condicion sabe que no falta gente por determinarse y sabe que nadie de los determinados esta para bajar.

En respuesta a Daniel Susviela Martinez

Re: [2do Parcial Julio 2015] Dudas con la solucion del ejercicio 3.

de Jorge Merlino -

No entendí tu solución. ¿Podés escribir el código?

En respuesta a Jorge Merlino

Re: [2do Parcial Julio 2015] Dudas con la solucion del ejercicio 3.

de Daniel Susviela Martinez -

Disculpa la demora, tuve que escribirlo en pc y sacar la parte que me confundi de la hora de actividad del tren.

En respuesta a Daniel Susviela Martinez

Re: [2do Parcial Julio 2015] Dudas con la solucion del ejercicio 3.

de Jorge Merlino -

Si, entiendo tu idea, lo que no me gusta es que es un poquito ineficiente porque un pasajero que quede indeterminado puede forzar esperas que el fin y al cabo eran innecesarias si no se decide o se decide por otra parada.

Puede verse como un tradeoff entre optimizar (un poquito) el tiempo de todos los pasajeros contra optimizar (mucho) el tiempo del pasajero indeciso.