Recuperatorio - 2025a - Tema 1#
Ejercicio 1#
Una tienda lleva un registro diario de ventas en un archivo CSV, donde cada línea representa la venta de una unidad de algún producto. El archivo contiene los siguientes campos separados: nombre del producto, marca y precio de venta. Por ejemplo:
producto,marca,precio_venta
Mouse,Logitech,5500.0
Camiseta,Nike,2500.0
Teclado,Asus,10000.0
Camiseta,Nike,2500.0
...
Se requiere implementar un programa que sea capaz de encontrar un producto que se haya vendido una cantidad de veces especificada (por ejemplo, 4 ventas). Asimismo, se necesita guardar un listado de todos los productos vendidos. Para ello se pide:
-
Implementar una función leer_productos() que lea el archivo productos.csv y construya una lista de diccionarios, donde cada diccionario contenga el nombre del producto, la cantidad de ventas totales y los ingresos acumulados para este producto. Ejemplo:
-
Implementar una función ordenar_productos() que reciba la lista de productos creada en el punto anterior y la ordene de acuerdo a la cantidad de ventas totales de cada producto. La función debe retornar una nueva lista con un ordenamiento descendente. Nota: no puede usar funciones ni métodos de ordenamiento como sorted() o sort().
-
Implementar una función que reciba la lista de productos del ítem anterior y una cantidad de ventas específica. La función debe realizar una búsqueda binaria hasta encontrar el primer producto que cumpla con esa cantidad de ventas especificada y retornar una tupla con todos los datos asociados a ese producto (nombre del producto, cantidad de ventas e ingresos totales). En caso de no encontrar el producto, debe retornar la tupla (None, None, None).
-
Implementar una función principal que solicite por la terminal el nombre del archivo con la información cruda de las ventas, por ejemplo productos.csv, y guarde en un archivo productos_resumen.csv un listado con la información procesada de cada producto (nombre del producto, cantidad de ventas e ingresos totales), ordenados de mayor a menor cantidad. Por otro lado, debe solicitar por consola una cantidad de ventas específica y mostrar por pantalla la información del producto que coincida con esa cantidad, y en caso de no encontrarlo, un mensaje de “Producto no encontrado”. Una posible salida por consola sería:
Ejercicio 2#
La serie armónica es una sucesión matemática definida como \(H(n) = 1 + 1/2 + 1/3 + \ldots + 1/n\), con \(n \geq 1\), que aparece en muchos contextos teóricos y prácticos. Escribir una función serie_armonica() que reciba el índice \(n\) (entero), calcule la serie armónica de forma recursiva y retorne el resultado de la serie hasta ese índice.
Ejercicio 3#
Encuentre la función de costo temporal T(n) del siguiente código, siendo n el tamaño de la lista recibida. Luego determine la complejidad Big-O justificando su respuesta. Considere que las funciones len() y range() toman un tiempo constante A que no depende de n.
def ejemplo(lista: list):
n = len(lista)
p = 40
x = 0
for i in range(n):
for j in lista:
x += i*j+2
for m in range(p):
k=0
while k<n:
k += 2
x += 1+m
return x
Ejercicio 4#
Realice las siguientes conversiones entre sistemas numéricos. Justifique los resultados indicando el procedimiento para llegar a los mismos (no se considerará correcto solo la respuesta sin justificación).
- Convertir el número decimal 274 al sistema hexadecimal.
- Convertir el número hexadecimal 3F9 al sistema binario.
- Convertir el número decimal 41 al sistema binario.
- Convertir el número hexadecimal 1C4 al sistema decimal.