Ejercicio final: pon a prueba todo lo aprendido
Has recorrido toda la sección de lógica de programación: variables, operadores, condicionales, bucles, funciones, listas, pseudocódigo, diagramas de flujo y resolución de problemas. Ahora toca demostrarte a ti mismo que lo dominas. Aquí tienes 3 problemas reales que combinan todo lo aprendido. Cada uno requiere que pienses, planifiques y escribas pseudocódigo completo.
Recuerda: papel y bolígrafo. No hay trampa ni IDE que te ayude. Solo tu cerebro y el método de 4 pasos.
Problema 1: Inventario de una tienda
Tienes una pequeña tienda y necesitas un sistema para gestionar tu inventario. El sistema debe controlar los productos disponibles, registrar ventas y avisarte cuando un producto se está acabando.
Requisitos
- Manejar una lista de productos, cada uno con: nombre, precio, cantidad en stock
- Función registrarVenta: recibe el nombre del producto y la cantidad vendida. Reduce el stock. Si no hay suficiente stock, muestra un error
- Función agregarStock: recibe el nombre del producto y la cantidad a añadir
- Función productosConStockBajo: devuelve la lista de productos con menos de 5 unidades
- Función calcularValorInventario: calcula el valor total del inventario (precio x cantidad de cada producto)
- Función productoMasVendido: lleva un registro de ventas y devuelve cuál se vendió más
Datos de partida
productos = ["Camiseta", "Pantalón", "Zapatillas", "Gorra", "Bufanda"]
precios = [25, 45, 89, 15, 12]
cantidades = [50, 30, 15, 8, 3]
ventas = [0, 0, 0, 0, 0]
Lo que debes entregar
- Identifica las variables y listas necesarias
- Escribe las 5 funciones completas en pseudocódigo
- Haz un dry run con este escenario: vende 3 camisetas, 2 gorras, intenta vender 20 zapatillas (solo hay 15), añade 10 bufandas al stock, y consulta productos con stock bajo
Problema 2: Juego de adivinar el número
Diseña un juego donde el sistema "piensa" un número secreto entre 1 y 100, y el jugador tiene que adivinarlo. Después de cada intento, el sistema da una pista: "más alto" o "más bajo".
Requisitos
- El número secreto es un número aleatorio entre 1 y 100
- El jugador tiene máximo 7 intentos
- Después de cada intento, mostrar si el número es "más alto" o "más bajo"
- Si acierta, mostrar en cuántos intentos lo logró y una calificación:
- 1-3 intentos: "Increíble"
- 4-5 intentos: "Bien hecho"
- 6-7 intentos: "Por los pelos"
- Si se quedan sin intentos, revelar el número secreto
- Al terminar, preguntar si quiere jugar otra vez
- Llevar un registro de partidas ganadas y perdidas
Lo que debes entregar
- Pseudocódigo completo del juego (usa
ALEATORIO(1, 100)para generar el número) - Describe brevemente qué forma tendría el diagrama de flujo: cuántas decisiones (rombos) necesitarías y cuáles son
- Haz un dry run de una partida donde el número secreto es 42 y el jugador intenta: 50, 25, 37, 44, 40, 42
Pista para empezar
FUNCION jugarPartida()
numeroSecreto = ALEATORIO(1, 100)
intentos = 0
adivinado = FALSO
MOSTRAR "He pensado un número entre 1 y 100. ¡Adivínalo!"
MIENTRAS intentos < 7 Y adivinado == FALSO HACER
// Tu código aquí...
// LEER intento del jugador
// Comparar con el número secreto
// Dar pista o celebrar
FIN MIENTRAS
// ¿Ganó o perdió?
// ...
FIN FUNCION
Problema 3: Gestión de notas de una clase
Eres el tutor de una clase y necesitas un sistema para gestionar las notas de tus alumnos. El sistema debe calcular estadísticas, determinar quién aprueba y quién no, y generar un informe.
Requisitos
- Lista de alumnos con sus notas de 3 exámenes
- Función calcularMedia: calcula la nota media de un alumno
- Función determinarResultado: con la media, determinar:
- Media >= 9: "Sobresaliente"
- Media >= 7: "Notable"
- Media >= 5: "Aprobado"
- Media < 5: "Suspendido"
- Función mejorAlumno: encuentra el alumno con la media más alta
- Función alumnosConMasAlta: encuentra la nota más alta de TODOS los exámenes y quién la sacó
- Función generarInforme: muestra para cada alumno su nombre, media, resultado, y al final un resumen con: media de la clase, número de aprobados, número de suspendidos y mejor alumno
Datos de partida
alumnos = ["Ana García", "Luis Torres", "Sara López", "Carlos Ruiz", "Elena Martín"]
examen1 = [8.5, 4.0, 9.2, 6.8, 7.5]
examen2 = [7.0, 5.5, 8.8, 5.0, 9.0]
examen3 = [9.0, 3.5, 9.5, 7.2, 8.0]
Lo que debes entregar
- Pseudocódigo completo con todas las funciones
- El informe generado con los datos de ejemplo (calcula las medias a mano y escribe el resultado esperado)
- Un caso borde: ¿qué pasa si dos alumnos tienen exactamente la misma media más alta? ¿Cómo lo gestionarías?
Pista: así debería verse el informe
=== INFORME DE LA CLASE ===
Ana García | Media: 8.2 | Notable
Luis Torres | Media: 4.3 | Suspendido
Sara López | Media: 9.2 | Sobresaliente
Carlos Ruiz | Media: 6.3 | Aprobado
Elena Martín | Media: 8.2 | Notable
--- Resumen ---
Media de la clase: 7.2
Aprobados: 4 de 5
Suspendidos: 1 de 5
Mejor alumno/a: Sara López (9.2)
Nota más alta: 9.5 (Sara López, Examen 3)
Checklist antes de darte por satisfecho
Para cada problema, verifica:
- ¿Has identificado claramente las entradas, salidas y restricciones?
- ¿Has descompuesto el problema en funciones con nombres claros?
- ¿Cada función hace UNA sola cosa?
- ¿Has usado condicionales, bucles y listas donde corresponde?
- ¿Alguien que no sabe programar podría leer tu pseudocódigo y entenderlo?
- ¿Has probado con los datos de ejemplo y el resultado es correcto?
- ¿Has pensado en qué podría salir mal (casos borde)?
Ejercicio final: los 3 problemas completos
Resuelve los 3 problemas descritos arriba usando papel y bolígrafo (o un editor de texto sin ejecutar nada). Para cada problema:
- Aplica el método de 4 pasos: Entender, Planificar, Ejecutar, Verificar
- Escribe pseudocódigo completo con funciones bien nombradas
- Haz al menos un dry run con los datos proporcionados
- Identifica al menos 2 casos borde por problema
No necesitas un ordenador para esto. De hecho, es mejor que no lo uses. El objetivo es que entrenes tu capacidad de pensar soluciones antes de escribir código.
lightbulb Pistas
Para el inventario, el truco está en buscar el producto por nombre antes de operar. Para el juego de adivinar, necesitas un bucle MIENTRAS con dos condiciones (intentos y no adivinado). Para las notas, la media es la suma de los 3 exámenes dividida entre 3. Para encontrar el mejor alumno, usa el patrón de "buscar el mayor" que viste en la lección de listas.
Has completado la sección de Lógica de Programación. Todo lo que has aprendido aquí — variables, condicionales, bucles, funciones, listas, pseudocódigo y resolución de problemas — existe en todos los lenguajes de programación. En la siguiente sección vas a aprender JavaScript, y te vas a llevar una sorpresa: ya sabes la parte difícil. Pensar como un programador es lo que te va a llevar lejos, la sintaxis es solo el último paso. A por ello.