Algoritmo para Calcular Descuentos por Monto en PSeInt (Guía 2026)

Nivel: Básico / Intermedio Tiempo: ~20 min

Aplicar promociones y descuentos es una lógica fundamental en cualquier sistema de punto de venta (POS) o e-commerce. En este tutorial de Lógica de Programación, aprenderás a diseñar un algoritmo en PSeInt que recompensa a los clientes según cuánto gastan: a mayor compra, mayor descuento. Este ejercicio es perfecto para dominar las Estructuras Condicionales Anidadas (Si-SiNo-Si), ya que evaluaremos rangos de precios (por ejemplo, compras mayores a $1000 vs. compras menores) para decidir qué porcentaje aplicar. Es la introducción ideal a la «lógica de negocios».

Conceptos Clave: Rangos y Porcentajes

Para que la «caja registradora» funcione, necesitamos entender cómo la computadora toma decisiones basadas en números:

Condicionales Anidados (Escalera)

Cuando hay más de dos opciones (ej: sin descuento, 10% y 20%), un simple Si-Entonces no basta. Necesitamos colocar un Si dentro de otro para crear una «escalera» de decisiones que verifique los montos de mayor a menor.

Matemática de Porcentajes

Recuerda: En programación no restamos «20» a 100. Multiplicamos por el factor decimal.
• Descuento = Monto * 0.20
• Total = Monto - Descuento

Análisis del Algoritmo

Supongamos la siguiente política de la tienda:

  • Compra menor a $500: 0% de descuento.
  • Compra entre $500 y $1000: 10% de descuento.
  • Compra mayor a $1000: 20% de descuento.
  • ENTRADA El monto total de la compra (Subtotal). Variable: montoCompra (Real).
  • PROCESO Evaluar el monto en orden descendente para aplicar el porcentaje correcto.
    1. ¿Es > 1000? -> Desc = 20%
    2. ¿Es > 500? -> Desc = 10%
    3. Si no -> Desc = 0%
  • SALIDA Imprimir una «factura» detallando: Subtotal, Descuento aplicado (monto) y Total Neto a Pagar.

Código Fuente (Solución Estándar)

Archivo: DescuentoTienda.psc
Algoritmo CalcularDescuentoCompra
    // 1. Definición de Variables
    // Todo dinero debe ser Real por los centavos
    Definir montoCompra, montoDescuento, totalPagar Como Real;
    Definir porcentaje Como Real; // Variable auxiliar para mostrar info
    
    // 2. Entrada de Datos
    Escribir "=== CAJA REGISTRADORA 2026 ===";
    Escribir "Ingrese el monto total de la compra:";
    Leer montoCompra;
    
    // 3. Lógica de Descuentos (Condicionales Anidados)
    // Importante: Evaluar del mayor al menor para evitar errores de rango
    
    Si montoCompra > 1000 Entonces
        // Caso: Compra mayor a $1000
        montoDescuento <- montoCompra * 0.20;
        porcentaje <- 20;
    SiNo
        Si montoCompra > 500 Entonces
            // Caso: Entre $501 y $1000
            montoDescuento <- montoCompra * 0.10;
            porcentaje <- 10;
        SiNo
            // Caso: $500 o menos (Sin descuento)
            montoDescuento <- 0;
            porcentaje <- 0;
        FinSi
    FinSi
    
    // Cálculo final
    totalPagar <- montoCompra - montoDescuento;
    
    // 4. Salida (Formato Ticket)
    Escribir "-------------------------------";
    Escribir "Subtotal:        $", montoCompra;
    Escribir "Descuento (", porcentaje, "%): -$", montoDescuento;
    Escribir "-------------------------------";
    Escribir "TOTAL A PAGAR:   $", totalPagar;
    Escribir "-------------------------------";
    
    // Mensaje de cortesía
    Si montoDescuento > 0 Entonces
        Escribir "¡Felicidades! Ahorraste dinero hoy.";
    FinSi
    
FinAlgoritmo

Diagrama de Flujo

⚠️ Errores Frecuentes en Rangos Numéricos

La lógica de rangos es traicionera. Evita estos errores:

Orden Incorrecto de Evaluación

Si preguntas primero Si compra > 500, una compra de $2000 entrará en esa condición (porque 2000 es mayor que 500) y recibirá solo el 10% en lugar del 20%. Siempre evalúa del mayor al menor (o usa rangos con operador Y).

Compras Negativas

El código básico acepta «-100» como monto. En un sistema real, esto podría generar un «crédito» incorrecto. Siempre debemos validar que monto > 0.

Reto: Código Seguro (Validación)

Mejoremos el algoritmo para que no acepte números negativos y redondee los centavos para evitar problemas de visualización.

Algoritmo DescuentoValidado
    Definir compra, desc, total Como Real;
    
    // Ciclo para asegurar un monto válido
    Repetir
        Escribir "Ingrese monto de compra (Positivo):";
        Leer compra;
        Si compra <= 0 Entonces
            Escribir "Error: El monto debe ser mayor a 0.";
        FinSi
    Hasta Que compra > 0
    
    // Usamos rangos explícitos con operador 'Y' para mayor seguridad
    Si compra > 1000 Entonces
        desc <- compra * 0.20;
    SiNo
        // Aquí decimos explícitamente el rango
        Si compra > 500 Y compra <= 1000 Entonces
            desc <- compra * 0.10;
        SiNo
            desc <- 0;
        FinSi
    FinSi
    
    total <- compra - desc;
    
    // Redondeo matemático a 2 decimales
    total <- redon(total * 100) / 100;
    
    Escribir "Total Final: $", total;
    
FinAlgoritmo

Preguntas Frecuentes (FAQ)

¿Puedo usar la estructura 'Segun'?
No es recomendable para rangos continuos (como precios). Segun (Switch) funciona mejor para valores discretos y exactos (Opciones de menú 1, 2, 3). Para rangos de dinero, Si-Entonces es la herramienta correcta.
¿Cómo agrego un cupón de descuento extra?
Puedes preguntar al final ¿Tiene cupón? (S/N). Si la respuesta es S, restas un valor adicional al totalPagar calculado previamente.
¿Por qué me da el resultado con muchos decimales?
Las operaciones de punto flotante a veces generan residuos (ej: 10.0000001). Usa la función redon(variable) o formatea la salida si tu versión de PSeInt lo permite.
¿Cómo cambio la moneda?
El algoritmo es agnóstico a la moneda. Solo cambia el símbolo $ en los comandos Escribir por , S/, o el que necesites.

¿Listo para el siguiente nivel?

Domina la lógica de programación con nuestra colección completa.

Ver Más Ejercicios Resueltos

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *