Solución al Problema de la Máquina Expendedora-Lógica de Resolución Paso a Paso

 

Lógica de Resolución Paso a Paso del Problema de la Máquina Expendedora

Paso 1: Entender el Flujo Principal del Programa

Problema: La máquina debe funcionar continuamente hasta que el usuario diga "PARA"

Lógica:

  • Necesitamos un ciclo que se repita infinitamente

  • En cada repetición, preguntamos al usuario qué quiere hacer

  • Solo debemos salir del ciclo cuando reciba la palabra "PARA"

Ejemplo visual:

text
INICIO
│
├─ ¿Qué quieres hacer? (espera comando)
│
├─ Si comando es "PARA" → TERMINAR
│
└─ Si no es "PARA" → procesar y volver a preguntar

Paso 2: Identificar los Tipos de Comandos

Problema: El usuario puede ingresar 4 tipos diferentes de comandos

Lógica: Clasificar lo que el usuario escribe:

  1. "PARA" → Detener el programa

  2. "RETIRAR" → Devolver dinero y cancelar

  3. Número → Es una moneda que está insertando

  4. Código (Letra+Número) → Quiere comprar un producto

Cómo distinguirlos:

  • "PARA" y "RETIRAR" son palabras específicas

  • Número: verificar si lo escrito son solo dígitos

  • Código: verificar si tiene formato letra + número (ej: "A1", "B3")


Paso 3: Gestionar el Dinero (Variable Acumuladora)

Problema: Necesitamos recordar cuánto dinero ha metido el usuario

Lógica:

  • Crear una variable total_dinero que empiece en 0

  • Cada vez que meta moneda válida, sumar a total_dinero

  • Cuando compre producto o retire, reiniciar total_dinero a 0

Ejemplo:

text
total_dinero = 0
Usuario mete 5 pesos → total_dinero = 5
Usuario mete 10 pesos → total_dinero = 15
Usuario compra producto de 12 pesos → total_dinero = 0 (reinicia)

Paso 4: Validar Monedas Aceptadas

Problema: Solo aceptar monedas de 1, 2, 5, 10, 20 pesos

Lógica:

  • Cuando el usuario ingrese un número, verificar si está en la lista permitida

  • Si está en [1, 2, 5, 10, 20] → aceptar y sumar al total

  • Si no está → rechazar y no sumar nada

Ejemplo:

text
Usuario escribe "5" → ¿5 está en [1,2,5,10,20]? SÍ → aceptar
Usuario escribe "50" → ¿50 está en [1,2,5,10,20]? NO → rechazar

Paso 5: Procesar la Compra de Productos

Problema: Cuando el usuario selecciona un producto, verificar si le alcanza el dinero

Lógica:

  1. Verificar que el código del producto exista

  2. Obtener el precio del producto

  3. Comparar: ¿total_dinero >= precio?

    • SI: entregar producto, calcular cambio, reiniciar

    • NO: decir cuánto dinero falta

Ejemplo:

text
Producto "A1" cuesta 15 pesos
Usuario tiene 20 pesos → 20 >= 15 → SÍ alcanza
Entregar producto y 5 pesos de cambio

Paso 6: Manejar el Comando RETIRAR

Problema: El usuario puede arrepentirse y querer su dinero de vuelta

Lógica:

  • Si el usuario escribe "RETIRAR"

  • Verificar si hay dinero acumulado

  • Si hay dinero: devolverlo y reiniciar total_dinero

  • Si no hay dinero: informar que no hay nada que devolver


Paso 7: Reiniciar Después de Cada Transacción

Problema: Después de comprar o retirar, la máquina debe estar lista para el siguiente cliente

Lógica:

  • Cada vez que suceda:

    • Compra exitosa

    • Comando RETIRAR

  • Debemos poner total_dinero = 0

  • Así el siguiente cliente empieza desde 0


Flujo Completo Paso a Paso

Escenario 1: Compra Exitosa

text
1. total_dinero = 0 (inicio)
2. Usuario: "5" → moneda válida → total_dinero = 5
3. Usuario: "10" → moneda válida → total_dinero = 15
4. Usuario: "A1" (producto de 12 pesos)
5. Verificar: ¿15 >= 12? → SÍ
6. Calcular cambio: 15 - 12 = 3
7. Mensaje: "Producto A1 dispensado. Cambio: 3 pesos"
8. total_dinero = 0 (reinicio)
9. Volver al paso 1 (esperar siguiente cliente)

Escenario 2: Fondos Insuficientes

text
1. total_dinero = 0
2. Usuario: "5" → total_dinero = 5
3. Usuario: "B2" (producto de 20 pesos)
4. Verificar: ¿5 >= 20? → NO
5. Calcular faltante: 20 - 5 = 15
6. Mensaje: "Fondos insuficientes. Faltan 15 pesos"
7. total_dinero sigue en 5 (NO se reinicia)
8. Usuario puede seguir metiendo monedas

Escenario 3: Usuario Se Arrepiente

text
1. total_dinero = 0
2. Usuario: "10" → total_dinero = 10
3. Usuario: "5" → total_dinero = 15
4. Usuario: "RETIRAR"
5. Mensaje: "Devolviendo 15 pesos"
6. total_dinero = 0 (reinicio)

Estructuras de Control Clave

1. Ciclo Principal (While True)

python
while True:  # Se repite para siempre
    comando = input("Ingrese comando: ")
    
    if comando == "PARA":
        break  # Rompe el ciclo, termina programa
    
    # Procesar otros comandos...

2. Condicional para Validar Monedas

python
if valor_moneda in [1, 2, 5, 10, 20]:
    # Moneda aceptada
else:
    # Moneda rechazada

3. Condicional para Verificar Fondos

python
if total_dinero >= precio_producto:
    # Sí alcanza, dispensar producto
else:
    # No alcanza, informar faltante

4. Detección de Tipo de Comando

python
if comando == "PARA":
    # Para el programa
elif comando == "RETIRAR":
    # Devolver dinero
elif comando.isdigit():  # Si son solo números
    # Es una moneda
elif len(comando) == 2 and comando[0].isalpha() and comando[1].isdigit():
    # Es código de producto
else:
    # Comando no válido

Esta lógica paso a paso garantiza que la máquina funcione correctamente para todos los casos que plantea el problema, manejando adecuadamente cada posible interacción del usuario.

Comentarios

Entradas más populares de este blog

1-valores duplicados en un arreglo

Pseudocódigo de la Máquina Expendedora

Trabajas en una compañía que ofrece seguros de vida y de gastos