23-05-2013, 14:39
Hola gente, les subo el final de Algoritmos y estructura de Datos que se tómo ayer, 22/05/2013. Lamentablemente no le saqué foto ya que ni nos dejaron ver el examen.
El final era bastante simple. Nos dan un único archivo sin orden llamado 'Vuelos.dat' que contiene los datos del vuelo de un día, de los cuales el único necesario para la resolución era la Hora de Arribo-Partida (Es decir la hora en que el vuelo sale) el formato es HHMM (horas minutos) y del tipo Word (2b). Cada registro ocupaba algo así como 46b.
El enunciado nos pide crear la metodología necesaria para que se imprima en un tablero electronico, los vuelos de aquellos aviones que la hora de partida sea mayor a la hora actual (es decir los vuelos que todavía no salieron), ordenado por la hora de arribo-partida.
El tablero no puede mostrar más de 10 vuelos al mismo tiempo y cada vez un vuelo partió había que actualizar el tablero de forma que cada vuelo suba una línea y se agregue un nuevo vuelo al final. O sea que se muestre todo ordenado y solo los vuelos que no partieron.
Nos daban dos funciones, una llamada GetDATE(aaaa,mm,dd,ds) y GetTIME(hh,mm,ss,ms) para obtener la fecha y la hora, respectivamente.
Como restricciones:
Memoria para arrays: 590b
Memoria en disco: 0b
Memoria dinámica: lo que necesites justificando la elección
Acceso secuencial más un acceso directo en caso de necesitarlo.
Como se acostumbra desde el cambio de J. de cátedra, se deja una biblioteca con las funciones más comunes (como busquedaBin, LecturaEspecial, InsertaNodo, etc.) los cuales NO HAY QUE DESARROLLAR, siempre y cuando respetemos el formato y lo que devuelve, pudiendo cambiar el nombre de los parámetros.
Resolución:
El problema es mostrar los 10 vuelos más próximos a la hora actual, que se obtiene con GetTime. siempre y cuando la hora de arribo sea mayor a la actual.
Estructura
Con algunos de los pibes que rendimos el final, coincidimos que la estructura era una lista ordenada por hora de arribo-partida con los datos del archivo y un vector de registros que contenga los 10 vuelos a mostrar.
Como no había restricción en la memoria de los nodos, una chica puso todo el registro en cada nodo (50b = 46b + 4b). En mi caso solo puse la hora de arribo partida y la posición del registro en el archivo (8b = 2b + 2b + 4b).
Y un vector de 10 registros que contiene todos los datos de los vuelos a mostrar. Como nos daban 590b, cada registro podía contener 59b, suficiente para meter el registro de 46b.
Estrategia
*Abrir el archivo
*Inicializar (el puntero a la lista y el índice del vector)
*Procesar archivo (es decir subirlo a la lista, ordenado por hora de arribo-partida)
*GetDATE
*Mientras haya nodos en la lista (L<> nil):
_GetTIME (me devuelve la hh, los mm, y los segundos y milésima de segundos)
_Sacar (primer nodo, el cual devuelve VALOR, en mi caso la hora de arribo y la posición del vuelo en el archivo)
_Si valor.hap > hh*100+mm
-Actualizar vector
-Imprimir vector
*Cerrar Archivos
*FIN
El final era bastante simple. Nos dan un único archivo sin orden llamado 'Vuelos.dat' que contiene los datos del vuelo de un día, de los cuales el único necesario para la resolución era la Hora de Arribo-Partida (Es decir la hora en que el vuelo sale) el formato es HHMM (horas minutos) y del tipo Word (2b). Cada registro ocupaba algo así como 46b.
El enunciado nos pide crear la metodología necesaria para que se imprima en un tablero electronico, los vuelos de aquellos aviones que la hora de partida sea mayor a la hora actual (es decir los vuelos que todavía no salieron), ordenado por la hora de arribo-partida.
El tablero no puede mostrar más de 10 vuelos al mismo tiempo y cada vez un vuelo partió había que actualizar el tablero de forma que cada vuelo suba una línea y se agregue un nuevo vuelo al final. O sea que se muestre todo ordenado y solo los vuelos que no partieron.
Nos daban dos funciones, una llamada GetDATE(aaaa,mm,dd,ds) y GetTIME(hh,mm,ss,ms) para obtener la fecha y la hora, respectivamente.
Como restricciones:
Memoria para arrays: 590b
Memoria en disco: 0b
Memoria dinámica: lo que necesites justificando la elección
Acceso secuencial más un acceso directo en caso de necesitarlo.
Como se acostumbra desde el cambio de J. de cátedra, se deja una biblioteca con las funciones más comunes (como busquedaBin, LecturaEspecial, InsertaNodo, etc.) los cuales NO HAY QUE DESARROLLAR, siempre y cuando respetemos el formato y lo que devuelve, pudiendo cambiar el nombre de los parámetros.
Resolución:
El problema es mostrar los 10 vuelos más próximos a la hora actual, que se obtiene con GetTime. siempre y cuando la hora de arribo sea mayor a la actual.
Estructura
Con algunos de los pibes que rendimos el final, coincidimos que la estructura era una lista ordenada por hora de arribo-partida con los datos del archivo y un vector de registros que contenga los 10 vuelos a mostrar.
Como no había restricción en la memoria de los nodos, una chica puso todo el registro en cada nodo (50b = 46b + 4b). En mi caso solo puse la hora de arribo partida y la posición del registro en el archivo (8b = 2b + 2b + 4b).
Y un vector de 10 registros que contiene todos los datos de los vuelos a mostrar. Como nos daban 590b, cada registro podía contener 59b, suficiente para meter el registro de 46b.
Estrategia
*Abrir el archivo
*Inicializar (el puntero a la lista y el índice del vector)
*Procesar archivo (es decir subirlo a la lista, ordenado por hora de arribo-partida)
*GetDATE
*Mientras haya nodos en la lista (L<> nil):
_GetTIME (me devuelve la hh, los mm, y los segundos y milésima de segundos)
_Sacar (primer nodo, el cual devuelve VALOR, en mi caso la hora de arribo y la posición del vuelo en el archivo)
_Si valor.hap > hh*100+mm
-Actualizar vector
-Imprimir vector
*Cerrar Archivos
*FIN