Funciones
11. Ejercicios
Nivel Básico — Introducción a funciones y control de flujo
Ejercicio N°1: Números impares hasta N
Se desea trabajar con números enteros positivos y recorrer una secuencia numérica hasta un valor indicado por el usuario.
Escribir un programa que solicite un número entero positivo y luego llame a una función que muestre por pantalla todos los números impares desde 1 hasta ese valor, separados por comas.
Por ejemplo, si el usuario ingresa 10, la salida esperada debe ser: 1, 3, 5, 7, 9.
Ejercicio N°2: Promedio y conteo de una lista
Se desea analizar un conjunto de datos numéricos almacenados en una lista.
Escribir un programa que permita cargar N valores en una lista y llamar a una función que calcule el promedio de todos los elementos y determine cuántos valores superan ese promedio.
Por ejemplo, si la lista contiene [4, 6, 8], el promedio es 6 y la cantidad de elementos mayores que el promedio es 1.
Ejercicio N°3: Múltiplos de 3 y 5
Se desea clasificar una serie de números enteros según su divisibilidad.
Escribir una función que lea 10 números enteros y retorne cuántos de ellos son múltiplos de 3 y cuántos son múltiplos de 5.
Tener en cuenta que un mismo número puede ser múltiplo de ambos valores al mismo tiempo. Por ejemplo, 15 debe contarse como múltiplo de 3 y también como múltiplo de 5.
Ejercicio N°4: Mínimo de una lista y su posición
Se desea identificar el valor mínimo de una lista y conocer en qué posición se encuentra.
Escribir una función que permita ingresar N valores en una lista y que luego muestre cuál es el elemento menor y cuál es su posición (índice).
Por ejemplo, si la lista es [9, 4, 7, 2], el menor valor es 2 y su posición es 3, considerando que el índice comienza en 0.
Ejercicio N°5: Calculadora básica con funciones
Se desea construir una calculadora simple utilizando funciones para cada operación matemática básica.
Realizar un programa que presente un menú y que, según la opción elegida, llame a una función que reciba dos números y retorne el resultado correspondiente.
El menú debe incluir las siguientes opciones:
1- Sumar dos números.
2- Restar dos números.
3- Multiplicar dos números.
4- Dividir dos números.
5- Salir.
En todos los casos, la función correspondiente debe recibir dos números y devolver el resultado de la operación seleccionada. Si el usuario intenta dividir por cero, el programa debe mostrar el mensaje "Error, denominador incorrecto" y solicitar un nuevo ingreso del divisor. Por ejemplo, si se elige dividir 10 entre 2, el resultado esperado es 5.
Ejercicio N°6: Palabras largas en una cadena
Se desea analizar una cadena formada por varias palabras separadas por espacios.
Escribir una función que reciba esa cadena como parámetro y devuelva cuántas palabras tienen más de cinco letras.
Por ejemplo, en la cadena "mesa ventana sol edificio", las palabras con más de cinco letras son ventana y edificio, por lo que la función debe devolver 2.
Nivel Intermedio — Validación de datos y lógica compuesta
Ejercicio N°7: Divisores en una lista de diccionarios con validación
Se desea trabajar con varios números enteros positivos almacenados en una lista de diccionarios y validar correctamente cada dato antes de procesarlo.
Escribir un programa que solicite varios números enteros positivos, los guarde como registros con la forma {"numero": valor} y, una vez validados, llame a una función que muestre por pantalla todos los divisores de cada número.
Si el ingreso es erróneo más de dos veces, el programa debe ofrecer la opción de finalizar. Por ejemplo, si uno de los registros contiene {"numero": 12}, la función debe mostrar 1, 2, 3, 4, 6 y 12.
Ejercicio N°8: Verificador de números primos en un diccionario con listas
Se desea determinar si varios números enteros cumplen con la condición de ser primos, organizados en un diccionario con listas.
Solicitar números enteros mayores que 1, agruparlos en una estructura como {"grupoA": [2, 4, 7], "grupoB": [9, 11]}, validando la entrada antes de procesarla. Luego, llamar a una función que recorra todos los valores y retorne True o False para cada uno según corresponda.
Recordar que un número primo es un número natural mayor que 1 cuyos únicos divisores son 1 y él mismo. Si el ingreso es erróneo más de dos veces, el programa debe ofrecer la opción de finalizar. Por ejemplo, para el valor 7 dentro de la estructura, la función debe retornar True.
Ejercicio N°9: Tablas de multiplicar con lista de diccionarios
Se desea generar la tabla de multiplicar de varios números enteros positivos almacenados en una lista de diccionarios.
Solicitar al usuario varios números enteros positivos, guardarlos como registros con la forma {"numero": valor} y luego llamar a una función que muestre por pantalla la tabla de multiplicar de cada uno desde 1 hasta 10, utilizando el formato clásico escolar.
Por ejemplo, si uno de los registros es {"numero": 4}, una parte de la salida esperada debe ser: 4 × 1 = 4, 4 × 2 = 8, ..., 4 × 10 = 40. Si el ingreso es erróneo, el alumno puede decidir cómo continuar con el programa.
Ejercicio N°10: Validador de contraseñas con lista de diccionarios
Se desea evaluar la fortaleza de varias contraseñas a partir de distintas condiciones de seguridad, almacenándolas en una lista de diccionarios.
Escribir una función que reciba registros con la forma {"clave": "..."} y retorne un nivel de seguridad entre 0 y 5 para cada contraseña, de acuerdo con las pautas indicadas a continuación.
Ø Longitud menor a 6, no válido (seguridad 0);
Ø Al menos una minúscula, +1; al menos una mayúscula, +1;
Ø Al menos un dígito, +1;
Ø Al menos un símbolo, +1;
Ø Longitud mayor a 10, +1.
En el programa principal, se debe mostrar la contraseña ingresada junto con el nivel de seguridad calculado. Por ejemplo, la clave Abc123! cumple con longitud válida, contiene mayúscula, minúsculas, dígitos y símbolo, por lo que su nivel de seguridad debe ser 4.
Ejercicio N°11: Criptografía básica con diccionario de reemplazos
Se desea implementar un sistema simple de criptografía para transformar palabras o frases mediante un diccionario de reemplazos.
Diseñar un programa con un menú que incluya las opciones Encriptar, Desencriptar y Salir. Implementar una función que reciba dos argumentos: la cadena a procesar y un diccionario con los reemplazos a aplicar; además, un valor booleano debe indicar la operación a realizar (True para encriptar y False para desencriptar).
Los reemplazos que deben aplicarse se detallan en la Tabla 1. Si el texto ingresado contiene letras minúsculas, se debe utilizar una función auxiliar para convertirlas a mayúsculas antes de realizar la encriptación.
Por ejemplo, si se ingresa la palabra HOLA, su resultado encriptado será H583.
Tabla 1 - Valores de encriptación
|
Letras |
Valores de Reemplazo |
|
P |
0 |
|
T |
1 |
|
B |
2 |
|
A |
3 |
|
G |
4 |
|
O |
5 |
|
E |
6 |
|
S |
7 |
|
L |
8 |
|
Z |
9 |
Nivel Avanzado — Diccionarios, listas y estructuras de datos
Ejercicio N°12: Análisis completo de números en un diccionario con listas
Se desea analizar varios números enteros organizados en un diccionario con listas para obtener distintas características matemáticas.
Solicitar al usuario una estructura como {"loteA": [6, 7], "loteB": [0, -3]} y llamar a una función que recorra todos los valores e informe, para cada número, todas las propiedades que correspondan.
La función debe determinar:
· Si el número es par o impar, indicando explícitamente el criterio adoptado para el 0;
· Si es positivo, negativo o cero;
· Su factorial, solo cuando la operación esté definida;
· Si es primo;
· Sus divisores, únicamente si no es primo;
· La cantidad de dígitos.
Por ejemplo, si en la estructura aparece el valor 6, el programa puede informar que es par, positivo, no primo, que sus divisores son 1, 2, 3 y 6, que su factorial es 720 y que tiene 1 dígito.
Ejercicio N°13: Registro de parámetros de fábrica con diccionario de listas
En una fábrica se necesita registrar distintos parámetros del entorno para llevar un control básico de las condiciones de trabajo.
Desarrollar un programa con menú que permita cargar mediciones y almacenarlas en un diccionario con listas, donde cada clave sea el tipo de parámetro y su valor asociado sea la lista de mediciones registradas.
El menú debe incluir las siguientes opciones:
1. Temperatura
2. Humedad
3. Presión
4. Cantidad de operarios
5. Mostrar medias
6. Salir
Al seleccionar “Mostrar medias”, el programa debe calcular e informar el promedio de cada parámetro, siempre que existan datos cargados.
Tabla 2 - Rangos válidos para cada parámetro
|
Parámetro |
Rango válido |
|
Temperatura |
0 a 60 °C |
|
Humedad |
10 a 100 % |
|
Presión |
0,8 a 1,2 atm |
|
Operarios |
1 a 20 |
Si un dato no pertenece al rango correspondiente, el programa debe informar el error y solicitar un nuevo ingreso. Por ejemplo, si se cargan temperaturas 22, 24 y 26, al elegir la opción Mostrar medias el promedio de temperatura debe ser 24.
Ejercicio N°14: Procesamiento de telegramas con lista de diccionarios
En un servicio de correos se desea transformar un mensaje común en un telegrama, reduciendo su longitud y calculando su costo de envío.
Escribir una función que reciba una lista de diccionarios, donde cada elemento tenga la forma {"texto": "...", "max": valor, "corto": valor, "largo": valor}, y procese cada telegrama calculando su versión reducida y su costo de envío.
La función debe devolver:
· El texto transformado al formato de telegrama;
· El costo total del telegrama.
Reglas de transformación:
· Si una palabra supera la longitud máxima indicada, debe recortarse y agregarse el carácter @ al final;
· Los espacios repetidos deben eliminarse;
· Cada punto debe reemplazarse por la palabra especial STOP;
· El punto final del mensaje debe representarse como STOPSTOP.
Por ejemplo, el texto "Llego mañana alrededor del mediodía" puede transformarse en "Llego mañan@ alred@ del medio@" si la longitud máxima permitida es de 5 caracteres.
Ejercicio N°15: Alta de socios con lista de diccionarios
Un club necesita registrar a sus socios de forma ordenada y validar los datos ingresados antes de almacenarlos.
Cargar los datos de los socios en una lista de diccionarios, donde cada registro tenga la forma {"numero_socio": ..., "nombre": ..., "dni": ..., "email": ...}.
El programa debe implementar funciones independientes para validar:
· Número de socio: debe ser positivo y no puede repetirse;
· DNI: debe tener 7 u 8 dígitos y representar un valor positivo;
· Correo electrónico: debe contener el carácter @.
Al finalizar cada carga, el programa debe preguntar si se desea continuar ingresando socios.
Por ejemplo, si se registra el socio 102 con nombre Ana Pérez, DNI 38123456 y email ana@mail.com, la lista puede almacenar un elemento equivalente a {"numero_socio": 102, "nombre": "Ana Pérez", "dni": 38123456, "email": "ana@mail.com"}.
Ejercicio N°16: Operaciones sobre lista de listas de enteros
Se dispone de una lista de listas con números enteros y se desea procesarla aplicando distintas funciones matemáticas.
Escribir funciones que trabajen sobre una misma estructura como [[2, 4, 5], [6, 7]] y devuelvan resultados específicos considerando todos los elementos de las sublistas.
El programa debe permitir:
· Obtener una nueva lista formada solo por los números primos, utilizando una función auxiliar que evalúe cada valor;
· Calcular la sumatoria de todos los elementos;
· Calcular el promedio de los valores de la lista;
· Generar una lista con el factorial de cada número, cuando la operación corresponda.
Por ejemplo, dada la estructura [[2, 4, 5], [6, 7]], la lista de primos debe ser [2, 5, 7], la sumatoria total debe ser 24 y el promedio general debe ser 4,8.
Nivel Experto — Problemas integradores con múltiples módulos
Ejercicio N°17: Cómputo y presupuesto de pintura con diccionario de listas
Se desea calcular el presupuesto de pintura de un edificio a partir de las superficies de sus paredes.
Realizar un programa con menú que permita cargar superficies de paredes en m² y almacenarlas en un diccionario de listas, por ejemplo por ambiente o por sector, validando que cada ingreso sea un número real, y luego mostrar un resumen con los resultados del cómputo.
El menú debe incluir las siguientes opciones:
1. Cargar paredes (superficies en m²).
2. Mostrar resultados.
3. Finalizar.
Al elegir la opción Mostrar resultados, el programa debe informar la superficie total, los litros de pintura necesarios, la cantidad de tachos de 20 L y el precio final, indicando el valor sin descuento y con descuento. El consumo es de 0,3 L/m², cada tacho cuesta $6.300 y a partir del quinto tacho corresponde aplicar un descuento del 10 %. Utilizar round() para obtener la cantidad entera de tachos. Por ejemplo, si la superficie total es de 100 m², se necesitan 30 L de pintura y, según el criterio de redondeo aplicado, debe calcularse la cantidad de tachos y el presupuesto correspondiente.
Ejercicio N°18: Registro de ventas de farmacia con lista de diccionarios
Se desea registrar y analizar las ventas mensuales de varios vendedores de una farmacia a lo largo de todo el año.
Cargar las ventas correspondientes a los meses de enero a diciembre para múltiples vendedores utilizando una lista de diccionarios, donde cada vendedor tenga una estructura similar a {"nombre": "...", "ventas": [enero, febrero, ..., diciembre]}.
Implementar funciones que permitan:
· Calcular el promedio de ventas de un mes, validando correctamente el mes ingresado;
· Contar cuántos vendedores tuvieron un promedio mensual mayor a $15.000;
· Determinar cuál fue el mes de mayor venta para cada vendedor;
· Calcular cuántos vendedores no registraron ventas en un mes determinado.
Por ejemplo, si un vendedor registra su máximo importe en julio, la función correspondiente debe devolver ese mes como el de mayor venta para ese vendedor.
Ejercicio N°19: Gestión de stock de repuestos con historial
Se desea gestionar el stock de repuestos de una empresa mediante un diccionario con diccionarios y listas.
Utilizar una estructura cuya clave sea el nombre del repuesto y cuyo valor asociado sea otro diccionario con los campos max, min, stock_actual e historial, donde historial sea una lista de movimientos realizados.
El programa debe presentar un menú con funciones independientes para:
· Modificar el stock actual, validando que nunca sea negativo y registrando cada cambio en el historial del repuesto;
· Dar de baja un ítem;
· Dar de alta un ítem;
· Mostrar los ítems con stock crítico, es decir, por debajo del mínimo;
· Listar todos los ítems registrados;
· Salir.
Por ejemplo, si un repuesto tiene stock mínimo 10 y stock actual 7, debe incluirse en el listado de stock crítico.
Ejercicio N°20: Sistema de préstamos con diccionario y listas de pagos
Se desea llevar un registro de deudores y de los pagos realizados sobre cada préstamo.
Organizar la información en un diccionario con la forma {DNI: {"monto_prestado": valor, "pagos": [pago1, pago2, ...]}} y desarrollar un programa con menú, implementando cada opción mediante una función independiente.
El menú debe permitir:
· Cargar un deudor nuevo ingresando su DNI y el monto prestado, validando que el monto sea un número real positivo;
· Registrar un pago, verificando que no supere la deuda restante y acumulándolo correctamente;
· Mostrar el total neto adeudado, calculado como la suma de todos los préstamos menos la suma de todos los pagos registrados;
· Finalizar con S o s.
Por ejemplo, si una persona recibió un préstamo de $20.000 y ya pagó $7.500, la deuda restante de ese deudor debe ser $12.500.
Ejercicio N°21: Gestión de cuentas bancarias con movimientos en listas
Se desea gestionar cuentas de clientes bancarios y registrar las operaciones realizadas sobre cada una de ellas.
Utilizar un diccionario con la forma {N°_cliente: {"apellido": "...", "saldo": valor, "movimientos": [{"tipo": "D" o "E", "monto": ...}, ...]}} y construir un programa con menú para administrar las cuentas.
El menú debe contemplar:
· Cargar o buscar un cliente; si no existe, preguntar al usuario si desea crearlo con saldo inicial 0;
· Realizar operaciones de depósito (D) y extracción (E), validando que exista saldo suficiente para extraer;
· Mostrar un registro con la cantidad de operaciones de depósito y extracción realizadas, junto con el monto total acumulado de cada tipo;
· Finalizar con S o s.
Por ejemplo, si un cliente tiene $8.000 de saldo y solicita una extracción de $10.000, el programa debe rechazar la operación por saldo insuficiente.
Ejercicio N°22: Álgebra lineal con listas y listas de listas
Se desea implementar un conjunto de funciones para resolver operaciones básicas de álgebra lineal con vectores y matrices.
Escribir funciones independientes que permitan trabajar con distintos objetos matemáticos y verificar propiedades relevantes.
Las funciones deben incluir, como mínimo, las siguientes operaciones:
· Producto escalar de dos vectores;
· Verificación de ortogonalidad entre dos vectores;
· Verificación de paralelismo entre dos vectores;
· Cálculo de la norma de un vector;
· Suma de dos matrices;
· Producto de dos matrices;
· Eliminación gaussiana para convertir una matriz a forma triangular superior;
· Verificación de independencia lineal de un conjunto de vectores.
Por ejemplo, los vectores [1, 0] y [0, 1] son ortogonales porque su producto escalar es 0.
Ejercicio N°23: Recursividad aplicada sobre lista de diccionarios
Se desea resolver un problema utilizando recursividad sobre una lista de diccionarios, evitando el uso de ciclos en la función principal.
Escribir una función recursiva que reciba una estructura con la forma [{"nombre": "...", "valor": ...}, ...] y devuelva la suma total de los valores almacenados. Además, desarrollar otra función recursiva que cuente cuántos registros tienen un valor mayor que un umbral ingresado por el usuario.
El programa debe permitir:
· Cargar varios registros con nombre y valor;
· Calcular la suma total con una función recursiva;
· Contar recursivamente cuántos registros superan un valor de referencia;
· Mostrar los resultados finales por pantalla.
Por ejemplo, si la lista es [{"nombre": "A", "valor": 4}, {"nombre": "B", "valor": 7}, {"nombre": "C", "valor": 2}], la suma total debe ser 13. Si el umbral es 5, la cantidad de registros que lo superan debe ser 1.
Ejercicio N°24: Serie de Fibonacci con almacenamiento en listas
Se desea generar y analizar la serie de Fibonacci, almacenando los resultados en una lista o en una lista de diccionarios para enriquecer el procesamiento posterior.
Desarrollar un programa que solicite un número entero positivo N y construya los primeros N términos de la serie de Fibonacci. Luego, guardar cada término como un registro con la forma {"posicion": ..., "valor": ...} o en una lista simple, y mostrar la secuencia completa.
Además, el programa debe permitir:
· Validar que N sea mayor que 0;
· Mostrar los primeros N términos generados;
· Indicar cuál es el último término calculado;
· Calcular la suma total de los términos generados.
Por ejemplo, si N = 7, la secuencia esperada es 0, 1, 1, 2, 3, 5, 8, el último término es 8 y la suma total de los términos es 20.
Actividades Complementarias
Estos problemas integran múltiples conceptos y están inspirados en situaciones reales de la industria. Requieren diseño previo del algoritmo y criterio de ingeniería para tomar decisiones no especificadas en el enunciado.
Problemas Avanzados
Ejercicio N°25: Aserradero — Planificación de cortes y estimación de materia prima
Un aserradero recibe pedidos de madera para distintos usos, como muebles, techos, aberturas o estructuras livianas. Cada pedido incluye piezas de diferentes dimensiones y cantidades, por lo que resulta necesario organizar la información y estimar cuánta materia prima se requiere para cumplir con la producción.
Desarrollar un programa en Python que permita registrar los tipos de corte ofrecidos por el aserradero y procesar un pedido de producción. Para ello, se deberá utilizar un diccionario donde cada clave represente un tipo de corte y su valor asociado contenga las dimensiones de la pieza en pulgadas. Luego, el programa deberá solicitar la cantidad pedida de cada corte y llamar a una función que calcule el área total requerida y estime cuántos árboles deben talarse para obtener esa madera.
El programa debe mostrar, como mínimo, el total de piezas solicitadas, el área total de madera requerida y la cantidad estimada de árboles necesarios para completar el pedido.
Tabla 3 - Tipos de corte disponibles
|
Tipo de corte |
Ancho (pulg.) |
Alto (pulg.) |
|
Corte A |
2 |
4 |
|
Corte B |
3 |
6 |
|
Corte C |
1 |
8 |
|
Corte D |
2 |
10 |
|
Corte E |
4 |
4 |
Tabla 4 - Datos de referencia para el cálculo.
|
Dato |
Valor |
|
Radio del tronco |
20 cm |
|
Valor de π |
3,1415 |
|
Conversión de pulgadas a centímetros |
1 pulg. = 2,54 cm |
|
Redondeo final de árboles |
Usar round() |
Puede asumirse, en una primera versión, que cada árbol aporta una sección circular útil y que todas las piezas se calculan en función de su superficie. Si el alumno lo considera necesario, puede aclarar supuestos adicionales para justificar su criterio de resolución. Por ejemplo, si un cliente solicita distintas cantidades de cada tipo de corte, el programa debe poder calcular automáticamente cuántas piezas se venden en total, cuál es el área acumulada del pedido y cuántos árboles serían necesarios para producirlo.
Ejercicio N°26: Fábrica de papel — Producción semanal de cortadoras
En una fábrica de papel se necesita controlar el rendimiento semanal de las máquinas cortadoras para evaluar la productividad de cada línea, comparar el desempeño entre marcas y detectar desvíos respecto de la capacidad prevista de trabajo.
Desarrollar un programa que utilice un diccionario para almacenar la información de cada máquina y registrar los metros procesados durante la semana. Cada ingreso debe validarse con manejo de errores, solicitando nuevamente el dato cuando no corresponda. Además, el programa debe permitir distinguir la marca de cada equipo y el tipo de material que procesa.
Al finalizar la carga, el programa debe generar un informe semanal que incluya como mínimo:
· Los metros totales procesados por toda la planta durante la semana;
· La producción semanal de cada máquina;
· El promedio diario de producción de las máquinas Windmoeller;
· Qué máquina tuvo la mayor producción semanal;
· Qué máquinas trabajaron por debajo de su capacidad teórica semanal.
Considerar que la capacidad máxima es de 3.000 m por turno, que la empresa trabaja 3 turnos por día y 6 días por semana. Por ejemplo, si una máquina Windmoeller procesa 18.000 m en la semana, su promedio diario será de 3.000 m. A partir de esos datos, el alumno podrá comparar si esa máquina trabajó por debajo, al límite o por encima del valor esperado según el criterio adoptado.
Ejercicio N°27: Planta de té — Registro de pesaje de camiones
En una planta de té se necesita controlar el movimiento diario de camiones para registrar cuánta materia prima ingresa al establecimiento, cuánto producto se descarga y qué vehículos aún permanecen dentro del predio al finalizar la jornada.
Desarrollar un programa con menú que utilice un diccionario con la forma {patente: [peso_entrada, peso_salida, dentro_establecimiento]}. El sistema debe permitir registrar el ingreso de un camión, registrar su egreso y mantener actualizado el estado de cada vehículo dentro del establecimiento.
Al finalizar la jornada, el programa debe poder informar, como mínimo:
· La cantidad total de camiones ingresados;
· La cantidad de camiones que ya egresaron;
· La cantidad de camiones que aún permanecen dentro del establecimiento;
· El total de té descargado en el día;
· El promedio de descarga por camión procesado;
· La patente del camión que más té descargó.
Validar que los pesos no sean negativos, que el peso de salida sea menor que el peso de entrada y que solo se pueda registrar la salida si el camión figura dentro del establecimiento. Por ejemplo, si un camión ingresa con 28.000 kg y sale con 12.000 kg, el sistema debe considerar que descargó 16.000 kg de té.
Ejercicio N°26: Planta potabilizadora — Registro de dosis de cloro
En una planta potabilizadora se registran diariamente las dosis de cloro aplicadas por cada operario durante sus turnos. Esta información permite controlar el proceso, comparar el desempeño entre operadores y detectar posibles desvíos en la dosificación.
Diseñar un programa que utilice un diccionario con la forma {nombre_empleado: [dosis1, dosis2, ...]} y que permita registrar nuevas dosis, listar empleados con registros y calcular promedios por persona. Si el empleado no existe, deberá crearse automáticamente; si ya existe, se agregará la nueva dosis a su lista.
El programa debe poder informar, como mínimo:
· El promedio de dosis aplicado por cada operario;
· El operario con mayor promedio de dosificación;
· El operario con menor promedio de dosificación;
· La cantidad total de registros cargados;
· Qué operarios presentan al menos una dosis por encima de un valor de referencia.
Los valores cargados deben ser positivos o cero, y las opciones de consulta deben bloquearse si no existen datos registrados. El valor de referencia para detectar dosis elevadas puede ser definido por el docente o por el alumno, siempre que el criterio quede claramente indicado. Por ejemplo, si un operario tiene registradas las dosis [1.2, 1.4, 1.1], su promedio de dosificación debe ser 1,23 aproximadamente.
Ejercicio N°28: Planta potabilizadora — Registro de dosis de cloro
Ejercicio N°29: Consorcio de vecinos — Distribución de servicios compartidos
Desarrollar un programa que gestione los datos de 11 residentes mediante un diccionario con claves precargadas y valores editables. El sistema debe permitir modificar la lista de inquilinos, ingresar los costos de agua, luz e internet y calcular el monto que le corresponde pagar a cada persona según el criterio de distribución que se adopte.
El programa debe poder informar, como mínimo:
· El importe total de servicios del mes;
· Cuánto debe pagar cada residente;
· Qué unidades están vacías o sin responsable asignado;
· Qué criterio de reparto se aplicó y cómo se obtuvo cada importe;
· Un resumen final que la administración pueda utilizar para emitir las liquidaciones.
La forma de distribuir los costos queda abierta al criterio del alumno, siempre que se encuentre bien justificada. Por ejemplo, puede utilizar un reparto igualitario o una regla definida por cantidad de ocupantes. En cualquier caso, debe quedar explícito el cálculo aplicado, por ejemplo: importe por residente = total de servicios / cantidad de unidades consideradas.
Problemas Experto
Ejercicio N°30: Empresa de transporte — Costos y ganancias de paquetería
Una empresa de transporte necesita estimar costos operativos y rentabilidad diaria para decidir si conviene aceptar ciertos envíos, revisar tarifas o reasignar recorridos.
Organizar en un diccionario los datos de 10 entregas diarias, almacenando para cada una el peso en kilogramos y la distancia en kilómetros. A partir de esa información, desarrollar funciones que permitan calcular el costo de cada envío, el costo diario total y la ganancia diaria de la empresa.
El programa debe poder informar, como mínimo:
· Cuáles fueron los envíos más costosos;
· Cuáles generaron mayor ganancia;
· El costo operativo total del día;
· La ganancia total del día;
· Qué envíos resultan poco rentables según el criterio adoptado.
La forma de definir tarifas, rangos y margen de rentabilidad queda abierta, pero debe documentarse con claridad. Por ejemplo, puede trabajarse con una expresión del tipo costo = costo fijo + (peso × tarifa_peso) + (distancia × tarifa_km).
Ejercicio N°29: Constructora — Cómputo de mampostería
Ejercicio N°31: Constructora — Cómputo de mampostería
Desarrollar un programa con menú que permita cargar una o más obras nuevas, registrar las superficies de mampostería y luego calcular el consumo estimado de arena, cemento y ladrillos. La carga de superficies debe finalizar cuando se ingrese un área igual a 0.
Tomar como referencia los siguientes rendimientos por m²: arena 0,115 m³, cemento 15,2 kg y ladrillos 118 unidades. El programa debe poder informar, como mínimo:
· El consumo total de materiales por cada obra;
· El consumo acumulado de todas las obras cargadas;
· Una estimación que el encargado de compras pueda utilizar para decidir cuánto material adquirir;
· Cualquier otro resumen que ayude a organizar la logística de abastecimiento.
La forma de presentar el informe queda abierta, pero el criterio de cálculo debe ser claro; por ejemplo: cemento total = superficie × 15,2.
Ejercicio N°32: Banco de préstamos — Sistema integral
Una entidad financiera pequeña necesita un sistema unificado para administrar cuentas y préstamos, de modo que el personal pueda tomar decisiones sobre otorgamiento, seguimiento de deuda y estado financiero diario.
Diseñar un programa que utilice un diccionario de clientes con información de saldo y préstamos, e implementar funciones para alta de cliente, depósito, extracción con validación de saldo, otorgamiento de préstamos, registro de cuotas y consulta del estado de cuenta.
Al finalizar el día, el sistema debe generar información útil para la toma de decisiones, como mínimo:
· El total depositado;
· El total extraído;
· El total de préstamos otorgados;
· El total cobrado en cuotas;
· Qué clientes tienen deuda pendiente;
· Qué cuentas presentan riesgo de saldo insuficiente según el criterio definido.
La forma de representar la deuda queda abierta, pero debe poder calcularse y justificarse con claridad, por ejemplo: deuda pendiente = préstamo acumulado − cuotas pagadas.
Ejercicio N°33: Fábrica — Sistema integral de parámetros y alertas
En un entorno industrial, registrar parámetros no alcanza: la sala de control necesita detectar desvíos, priorizar alarmas y decidir si un equipo debe seguir operando, ajustarse o derivarse a mantenimiento.
Tomando como base el registro de parámetros trabajado anteriormente, extender el programa para incorporar un sistema de alertas y análisis estadístico. El sistema debe permitir identificar mediciones ubicadas en el 10 % superior o inferior del rango válido, registrar la fecha y hora de cada carga y filtrar información por turno de trabajo.
Además, el programa debe poder informar, como mínimo:
· Qué variables presentan mayor dispersión;
· Qué turnos concentran más alertas;
· Qué registros requieren revisión prioritaria;
· Qué resumen estadístico conviene enviar al área de mantenimiento o supervisión.
La estructura interna, los niveles de severidad y la forma de presentar el reporte quedan abiertos, siempre que la información final sirva para tomar decisiones operativas.
Ejercicio N°34: Ingeniería — Calculadora vectorial y matricial aplicada
En distintas áreas de la ingeniería es frecuente trabajar con vectores y matrices para resolver problemas concretos, como analizar fuerzas, estudiar circuitos o verificar sistemas de ecuaciones antes de tomar una decisión técnica.
Diseñar una calculadora interactiva que permita resolver operaciones de álgebra lineal aplicadas a situaciones reales. El programa puede incluir análisis de sistemas de fuerzas, resolución de ecuaciones lineales, verificación de bases o cualquier otro módulo que el alumno considere pertinente dentro del alcance de los contenidos trabajados.
Como condición mínima, todas las operaciones deben implementarse con funciones, validar correctamente las dimensiones de vectores y matrices y evitar el uso de bibliotecas externas como numpy. Además, el sistema debe mostrar resultados que un usuario técnico pueda interpretar para decidir, como mínimo:
· Si un sistema tiene o no solución;
· Si dos vectores son ortogonales;
· Si una base es linealmente independiente;
· Cualquier otro resultado que permita justificar una decisión técnica dentro del caso de aplicación elegido.
Cuando corresponda, puede explicitarse el cálculo utilizado, por ejemplo: producto escalar = a1·b1 + a2·b2 + ... + an·bn.
Ejercicio N°35: Instalaciones eléctricas — Dimensionamiento de conductores
En el diseño de instalaciones eléctricas, la selección del conductor influye en la seguridad, el costo de la instalación y la posibilidad de futuras ampliaciones. Por eso, el cálculo debe ofrecer información útil tanto para proyectar como para decidir si una solución es técnicamente aceptable.
Desarrollar un programa que solicite la potencia del recinto, la distancia entre el tablero y la carga y la temperatura ambiente. A partir de esos datos, deberá calcular la corriente del circuito monofásico de 220 V, aplicar un factor de corrección por temperatura y determinar la sección mínima del conductor de cobre entre valores normalizados.
La solución debe verificar simultáneamente que la corriente admisible corregida sea suficiente y que la caída de tensión no supere el 3 % del valor nominal. El programa debe informar, como mínimo:
· La corriente calculada del circuito;
· La sección de conductor elegida;
· La caída de tensión estimada;
· Una conclusión técnica que indique si el diseño resulta aceptable o si debe corregirse.
La forma de organizar la tabla de secciones y factores queda abierta, siempre que el criterio sea trazable. Puede tomarse como base una expresión del tipo I = P / V para estimar la corriente en un circuito monofásico.

Ilustración 1 - Esquema ilustrativo de una instalación eléctrica.