Solución al Problema de la Máquina Expendedora
Eres un emprendedor entusiasta y tienes la oportunidad de instalar una
máquina expendedora de botanas en un auto lavado cercano a tu casa. Te
corresponde desarrollar el algoritmo para que cuente las monedas que el
usuario va insertando, sumando el importe en una variable hasta que el
usuario introduzca un código de algunos de los productos que están
disponibles. debes validar que el importe pagado sea suficiente. Hay que
tener en cuenta las siguientes restricciones:
1.:El algoritmo debera aceptar los siguientes comandos:
1.2:[NUMERO].Sera un valor numerico que representa la
moneda que esta entrando al sistema.
1.3:[IDENTIFICADOR] Sera una clave para identificar los
productos que estan disponibles con el formato
[LETRA][NUMERO], por ejemplo ,D4,A3, etc.
1.4:RETIRAR. Si se recibe este comando, se devolvera
el importe al usuario cancelando la operacion
1.5:PARA. Este comando será para detener la ejecucion
2.-La maquina solo acepta monedas de 1,2,5,10 y 20
pesos.Cualquier otra moneda que entre al sistema sera
rechazada.
3.-No te preocupes por llevar el detalle de als monedas
que el cliente ha introducido, solo el importe
4-En este problema, no ocupas tomar en cuenta el inventario
disponible de cada producto
5.-En algoritmo debe de reiniciarse cada vez que se haya
dispensado un producto y debera mantenerse corriendo hata que
sea introducido el comando para salir
6.-Intenta dividir tu programa en funciones para que tu codigo
sea mas comprensible
Solución al Problema de la Máquina Expendedora
Lógica en Dos Pasos
Paso 1: Procesamiento Continuo de Comandos
La máquina debe funcionar en un ciclo infinito que solo se detiene con el comando "PARA"
En cada iteración, espera recibir un comando del usuario
Dependiendo del tipo de comando, ejecuta una acción específica
Paso 2: Gestión de Estados y Validaciones
Mantener un acumulador del dinero insertado
Validar que las monedas sean de denominaciones permitidas
Verificar si el dinero acumulado es suficiente al seleccionar un producto
Reiniciar el estado después de cada transacción completada
Pseudocódigo Detallado
INICIAR_PROGRAMA:
MIENTRAS verdadero HACER
mostrar "Esperando comando..."
leer comando_del_usuario
SI comando_del_usuario es "PARA" ENTONCES
romper ciclo // Terminar programa
SINO SI comando_del_usuario es "RETIRAR" ENTONCES
ejecutar RETIRAR_DINERO
SINO SI comando_del_usuario es numérico ENTONCES
ejecutar PROCESAR_MONEDA
SINO SI comando_del_usuario tiene formato [LETRA][NUMERO] ENTONCES
ejecutar PROCESAR_PRODUCTO
SINO
mostrar "Comando no válido"
FIN SI
FIN MIENTRAS
PROCESAR_MONEDA(valor_moneda):
SI valor_moneda está en [1, 2, 5, 10, 20] ENTONCES
agregar valor_moneda a total_acumulado
mostrar "Total acumulado: [total_acumulado]"
SINO
mostrar "Moneda no aceptada"
FIN SI
PROCESAR_PRODUCTo(codigo_producto):
precio = OBTENER_PRECIO(codigo_producto)
SI precio = -1 ENTONCES
mostrar "Producto no válido"
SINO SI total_acumulado >= precio ENTONCES
mostrar "Dispensando producto [codigo_producto]"
cambio = total_acumulado - precio
SI cambio > 0 ENTONCES
mostrar "Entregando cambio: [cambio] pesos"
FIN SI
ejecutar REINICIAR_TRANSACCION
SINO
mostrar "Fondos insuficientes. Faltan [precio - total_acumulado] pesos"
FIN SI
RETIRAR_DINERO():
SI total_acumulado > 0 ENTONCES
mostrar "Devolviendo [total_acumulado] pesos"
ejecutar REINICIAR_TRANSACCION
SINO
mostrar "No hay dinero para devolver"
FIN SI
REINICIAR_TRANSACCION():
total_acumulado = 0
OBTENER_PRECIO(codigo):
// Base de datos de precios (ejemplo)
SI codigo = "A1" ENTONCES devolver 15
SI codigo = "B2" ENTONCES devolver 20
SI codigo = "C3" ENTONCES devolver 25
SI codigo = "D4" ENTONCES devolver 30
devolver -1 // Producto no encontradoAnalogía: La Cafetería Inteligente
Imagina que eres un cajero en una cafetería:
Ciclo principal = Tu turno de trabajo: atiendes clientes uno tras otro hasta que termina tu jornada ("PARA")
Acumulador de dinero = La bandeja donde colocas el dinero que te da el cliente
Validación de monedas = Revisar que las monedas sean mexicanas y de denominaciones reales
Comando RETIRAR = El cliente cambia de idea y pide que le devuelvas su dinero
Selección de producto = El cliente te dice qué bebida quiere y verificas si alcanza con lo que pagó
Reinicio de transacción = Prepararte para atender al siguiente cliente, limpiando la bandeja
Descomposición en Partes Más Pequeñas
Parte 1: Estructura Principal del Programa
Algoritmo: Ciclo while infinito con switch-case
Estructura de datos: Variable para el comando actual
while True:
comando = input("Ingrese comando: ")
if comando == "PARA":
break
elif comando == "RETIRAR":
# Lógica para retirar
elif es_numero(comando):
# Lógica para moneda
elif es_codigo_producto(comando):
# Lógica para productoParte 2: Validación y Procesamiento de Monedas
Algoritmo: Validación con lista de valores permitidos
Estructura de datos: Lista de monedas válidas [1, 2, 5, 10, 20]
monedas_validas = [1, 2, 5, 10, 20]
def procesar_moneda(valor):
if valor in monedas_validas:
total_acumulado += valor
print(f"Moneda aceptada. Total: {total_acumulado}")
else:
print("Moneda rechazada")Parte 3: Gestión de Productos y Precios
Algoritmo: Búsqueda en diccionario de precios
Estructura de datos: Diccionario {código: precio}
productos = {
"A1": 15, "A2": 18, "A3": 22,
"B1": 12, "B2": 25, "B3": 30,
"C1": 8, "C2": 10, "C3": 12
}
def obtener_precio(codigo):
return productos.get(codigo, -1)Parte 4: Procesamiento de Transacciones
Algoritmo: Comparación y cálculo aritmético simple
Estructura de datos: Variable acumuladora para el total
def procesar_producto(codigo):
precio = obtener_precio(codigo)
if precio == -1:
print("Producto no existe")
elif total_acumulado >= precio:
cambio = total_acumulado - precio
print(f"Producto dispensado. Cambio: {cambio}")
reiniciar_transaccion()
else:
faltante = precio - total_acumulado
print(f"Faltan {faltante} pesos")Parte 5: Reinicio del Sistema
Algoritmo: Reset de variable de estado
Estructura de datos: Variable simple para total acumulado
def reiniciar_transaccion():
global total_acumulado
total_acumulado = 0Estructuras de Datos y Algoritmos por Cada Parte
Ciclo Principal → Algoritmo: Control de flujo con ciclo while + condicionales
El ciclo
while Truemantiene el programa ejecutándose continuamenteLos
if/elifdeterminan qué acción tomar según el comando
Validación de Monedas → Estructura: Lista + operador
inLa lista
[1, 2, 5, 10, 20]define las monedas aceptadasEl operador
inverifica membresía de manera eficiente
Gestión de Productos → Estructura: Diccionario + método
get()El diccionario permite búsqueda rápida de precios por código
get()con valor default -1 maneja productos inexistentes elegantemente
Control de Transacciones → Algoritmo: Aritmética simple + comparaciones
Resta para calcular cambio:
total - precioComparación
>=para verificar fondos suficientes
Reinicio del Sistema → Algoritmo: Reasignación de variable
Simplemente establecer
total_acumulado = 0para nueva transacción
Esta descomposición hace que cada parte sea manejable y fácil de entender para principiantes, permitiendo enfocarse en una funcionalidad específica a la vez.
Comentarios
Publicar un comentario