Parcialito 2 - 2024a - Tema 1#
Ejercicio 1#
Un centro de investigación meteorológico nos contrata para que desarrollemos un pequeño software que simplifique algunas tareas para la gestión de datos. El equipo de meteorólogos nos provee de un archivo, datos.csv, que contiene las mediciones de algunos parámetros ambientales y el día de la medición (un número entero). A continuación se muestra un ejemplo de cómo se vería este tipo de archivo si lo abrimos con un editor de texto plano:
-
Implemente una función llamada recopilar_datos(nombre_archivo: str) que reciba el nombre del archivo con los datos en formato CSV, y retorne una lista de diccionarios que organice la información en una estructura como la siguiente:
-
Implemente una función llamada ordenar_lecturas(lista_lecturas:list[dict], criterio:str) que reciba una lista de diccionarios como la del punto anterior y un string con el criterio de qué variable meteorológica se quiere ordenar (‘humedad’ o ‘presión’). La función debe retornar una nueva lista ordenada de menor a mayor, sin modificar la original. Elija usted el algoritmo de ordenamiento que prefiera. Indique la complejidad computacional Big-O de la función (justifique).
-
Implemente una función principal que utilice las funciones de los ejercicios anteriores para obtener la lista de diccionarios ordenada de acuerdo al criterio ‘humedad’ y genere con esa lista un archivo CSV llamado datos_humedad.csv. El archivo resultante debería verse como en el siguiente ejemplo:
Ejercicio 2#
-
Se dispone de una lista de diccionarios del mismo tipo que en el Ejercicio 1.2. Implementar una función buscar_dia(lista_lecturas: list[dict], humedad: int) que reciba la lista de diccionarios y un valor de humedad. La función debe buscar en la lista si existe alguna lectura de humedad igual a la ingresada como argumento (en este caso suponemos que la humedad en la lista está redondeada a un número entero). En caso de hallarla, debe retornar un tipo int que indique el número de día en que se da la coincidencia (y si hay más de un día, el primero que encuentre). Si no hay ninguna coincidencia, debe retornar -1. Además, se requiere que el algoritmo de búsqueda utilizado tenga una complejidad Big-O inferior a O(n).
-
El equipo de trabajo de la estación meteorológica debe reportar también mediciones de temperatura en función del número de día. Sin embargo, dado que el sensor de temperatura está averiado y solo se conoce la temperatura en el primer día de medición (k=0), que fue \(T_0\) = 21 °C, propusieron un modelo matemático que permite predecir cuál será la temperatura del día actual (\(T_k\)) en función de la presión (\(P_k\)) y humedad (\(H_k\)) del mismo día, y de la temperatura del día anterior (\(T_{k-1}\)). El modelo responde a la siguiente ecuación:
\[T_k = 1.2 * T_{k-1} + 0.01 * P_k + 0.02 * H_k\]Implemente una función recursiva predecir_temperatura(k:int) que reciba como argumento un número entero que represente el día en el que se quiere saber la predicción y retorne el valor de la temperatura (float) según el modelo propuesto. Suponga que se dispone de dos funciones leer_presion(k:int) y leer_humedad(k:int), que retornan el valor de presión atmosférica y humedad ambiente respectivamente, en el k-ésimo día de medición.