Después de resolver la tarea 3, usted será capaz de:
En la universidad muchos estudiantes deben hacer fila en el patio central para almorzar, enfrentándose al problema de quienes cuelan a sus amigos, quitándoles tiempo de almuerzo a los que hacen la fila completa. Para sensibilizar este tema y demostrar los dañinos efectos de esta mala práctica, en esta tarea deberán programar un simulador de la fila de almuerzos, considerando que los comensales pueden morir de inanición, no alcanzar a escoger su opción en el menú y/o llegar tarde a clases.
Para poder hacer este simulador deben implementar las siguientes funcionalidades:
Ustedes deben implementar estas funcionalidades completando las funciones entregadas en el archivo funciones.py
Los archivos que se le entregarán los puede descargar acá. A continuación se mencionan los distintos archivos y la función que cumplen dentro del sistema.
main.py: archivo principal del programa, permite ver la interfaz y llamar las funciones.
funciones.py: archivo que contiene las funciones que deberán implementar junto a su equipo de trabajo, para el correcto funcionamiento del programa.
recursos.py: archivo que contiene algunas funciones útiles para el funcionamiento de la tarea y un par de variables importantes.
NombresApellidos.txt: Archivo de 2 líneas, una con nombres y otra con apellidos.
Alumnos.txt: Archivo generado automáticamente por el main. Éste identifica a los estudiantes, donde cada línea tiene el siguiente formato:
Nombre Apellido Apellido;Sopa;Entrada;Fondo;Postre;Clases a las 2;Tiempo de almuerzo;HambreMaxima/HambreActual
En este formato, las comidas (Sopa, Entrada, Fondo y Postre) son valores numéricos (1 o 2) identificando las preferencias en el menú (opción 1 o 2), Clases a las 2 es un SI o NO dependiendo si tiene clases a las 14:00, Tiempo de almuerzo es el tiempo en minutos que le toma al estudiante almorzar (desde que entra al casino hasta que sale de él) y HambreActual es un indicador de cuanta hambre tiene, si su valor es 0 entonces muere de inanición.
Amistades.txt: Archivo generado automáticamente por el main. Éste contiene las amistades en la universidad en el formato:
Nombre1 Apellido1 Apellido1->Nombre2 Apellido2 Apellido2
Indicando que estudiante 1 es amigo de estudiante 2 (unidireccional), eso no significa que estudiante 2 sea amigo de estudiante 1.
Entrada.txt: Archivo generado automáticamente por el main. Éste contiene los estudiantes y sus horarios de llegada al patio central para hacer la fila en el formato:
Nombre Apellido Apellido#Hora:Minuto
Fila.txt: Archivo generado automáticamente por el main. Éste comienza vacío y se debe llenar con los nombres completos de las personas que estén en la fila, por orden de llegada (los nombres de más arriba son quienes entrarán primero al casino).
Una vez descargado el archivo para comenzar la tarea, descomprímalo y ejecute el archivo main.py. Se abrirá una ventana como la que se muestra a continuación:
Para hacer funcionar la tarea se deben ingresar valores en los campos de, almuerzos por minuto, chequear o no la casilla de habilitar colarse, y rellenar con valores la cantidad de comida de cada tipo cuidando que la suma de ambos tipos de comida sea igual o mayor al número de estudiantes. NOTA: estos campos deben estar llenos para que la tarea funcione correctamente.
Finalmente se hace click en Iniciar y se comenzará la jornada, actualizándose minuto a minuto los campos de datos sobre el almuerzo.
El orden de llamada de las funciones (en cada minuto) es el siguiente:
Las funciones que deben implementar son las siguientes:
En esta función considere que los estudiantes se cuelan en la fila, es decir, si al momento de llegar un estudiante tiene un amigo más adelante en la fila, éste se ubicará detrás de él saltándose a quienes estén entre medio.
FilaNormal(hora): esta función actualiza el archivo Fila.txt con el orden de los estudiantes en la fila en la hora entregada como parámetro.
ProcesarHora(hora, cantidad, comida): esta función registra el ingreso de cantidad de estudiantes en la hora especificada, quitándolos de la fila. En el proceso, se deben descontar los platos consumidos del menú, retornando la tupla comida actualizada con las cantidades de cada comida restante:
(sopa1, sopa2, entrada1, entrada2, fondo1, fondo2, postre1, postre2)
Por último, la función también entrega la cantidad de estudiantes felices y tristes (un estudiante es feliz si pudo consumir al menos 2 de sus preferencias el menú) y alumnos atrasados. Con esto en consideración, se deben retornan 3 valores en el siguiente orden:
atrasados, (felices, tristes), (sopa1, sopa2, entrada1, entrada2, fondo1, fondo2, postre1, postre2)
Ésta retorna la cantidad de estudiantes en la fila.
Ésta retorna la cantidad de muertos.
% tramo 10 x < 10 20 10 <= x < 20 30 20 <= x < 30 40 30 <= x < 40 50 40 <= x < 50 60 50 <= x < 60 80 60 <= x < 80 100 80 <= x <= 100
La fecha límite de entrega es el Viernes 18 de Noviembre a las 23:00hrs. La tarea debe ser resuelta en equipos de máximo tres personas. Sólo uno de los integrantes del equipo debe subir la tarea en la sección Tareas de la plataforma Aula, en el ramo de Programación IWI131.
Se debe entregar un archivo comprimido (.zip) que debe contener todos los archivos para hacer funcionar la tarea con el nombre tarea-3-RUT.zip, reemplazando RUT con el RUT del integrante que subirá la tarea. Sólo debe ir la parte del RUT hasta antes de la raya. Por ejemplo: tarea-3-18000123.zip.
Al principio del archivo funciones.py se debe poner un comentario indicando los RUT de los integrantes del equipo como en el siguiente ejemplo:
# Integrantes:
# 18000123-0 Perico Los Palotes
# 18000456-7 Fulanita de Tal
# 18000890-k Federico Santa Maria
No se puede subir ningún archivo adicional.
Evite dejar para última hora la entrega de la tarea. Cerca del plazo final, la plataforma seguramente estará sobrecargada.
Las tareas atrasadas (máximo un día de retraso) tendrán el descuento especificado en la rúbrica de corrección. NO se recibirán tareas por correo electrónico.
Los equipos no necesariamente tienen que ser los mismos de las tareas anteriores.
Usted puede discutir la tarea con compañeros de otros grupos, pero bajo ningún motivo puede compartir o copiar el código de su tarea. Cada equipo debe escribir su propio código.
Las políticas de copia de la asignatura rigen para la tarea.
En caso de tener problemas con el desarrollo de la tarea, asista a las ayudantías o consulte en el grupo de facebook.