Lógica de Programación — Sesión 3
Unidad 1 · 2 horas · Condicionales + tablas de decisión + bordes + primer C# (incremental)
1/1

Sesión 3

Diseñar decisiones: correcto, verificable y mantenible

Meta: controlar flujo (si / si-no / selección)
Nivel: bordes + prioridad de reglas
Salida: decisión + trazas + C# mínimo

Navegación: ← → · Pantalla completa: F

Objetivos

  • Traducir reglas en condiciones sin huecos ni solapes.
  • Aplicar prioridad cuando varias reglas pueden activarse.
  • Verificar por casos borde (boundary testing).
  • Implementar la decisión en C# de forma incremental (if/else, switch).

Nivel universitario: no basta con “funciona con un ejemplo”.

Recordatorio: condición y borde

Una condición debe ser verdadera o falsa.

edad >= 18 consumo > 200 (hora >= 18) AND (hora <= 23)

Bordes típicos

  • Valores exactos del umbral (18, 200, 23).
  • Justo debajo y justo encima (17/18/19).
  • Entradas mínimas (0) y máximas (si existe tope).

Regla: si el enunciado no especifica, tú defines y lo dejas escrito.

Tabla de decisión (herramienta)

Sirve para evitar reglas contradictorias y para asegurar cobertura de casos.

Condiciones → C1 C2 Acción --------------------------------------------------------- Caso 1: true true A1 Caso 2: true false A2 Caso 3: false true A3 Caso 4: false false A4

Si no puedes escribir la tabla, probablemente tu regla está incompleta.

Prioridad de reglas (cuando se pisan)

Regla de oro: define el orden de aplicación.

Ejemplo (envío): 1) Si subtotal >= 100000 → envío = 0 (prioridad alta) 2) Si no, si ciudad == "Cali" → envío = 12000 3) Si no → envío = 18000

Esto no es “estilo”: cambia el resultado.

Ejemplo guiado (reglas)

Problema: calcular total de compra con envío y cupón.

  • Entrada: subtotal, ciudad, tieneCupon (S/N).
  • Descuento: si tieneCupon y subtotal ≥ 80.000 → 8% sobre subtotal.
  • Envío: si subtotal ≥ 100.000 → 0; si no, Cali 12.000; otras 18.000.
  • Salida: total.

Aquí hay condiciones compuestas + prioridad (envío gratis gana).

Pseudocódigo (limpio y verificable)

Leer subtotal Leer ciudad Leer tieneCupon // 1) Descuento (se define primero) aplicaCupon = (tieneCupon == "S") AND (subtotal >= 80000) Si aplicaCupon Entonces descuento = subtotal * 0.08 Si no descuento = 0 FinSi // 2) Envío (prioridad) Si subtotal >= 100000 Entonces envio = 0 Si no Si ciudad == "Cali" Entonces envio = 12000 Si no envio = 18000 FinSi FinSi total = (subtotal - descuento) + envio Escribir total

Observa: cada variable crítica queda asignada en todas las ramas.

Primer C# (incremental, sin “frameworks”)

decimal subtotal = ...; string ciudad = ...; // "Cali" u otra bool tieneCupon = ...; // true/false bool aplicaCupon = tieneCupon && (subtotal >= 80000m); decimal descuento = aplicaCupon ? subtotal * 0.08m : 0m; decimal envio; if (subtotal >= 100000m) envio = 0m; else if (ciudad == "Cali") envio = 12000m; else envio = 18000m; decimal total = (subtotal - descuento) + envio;

Esto es suficiente para la Entrega 1 del proyecto: leer, decidir, calcular, probar.

Prueba de escritorio (cobertura)

Caso | subtotal | cupon | ciudad | descuento | envio | total | motivo ---- | ------- | ----- | ------ | -------- | ----- | ----- | ------ 1 | 120000 | S | Cali | ? | ? | ? | envío gratis 2 | 90000 | S | Cali | ? | ? | ? | cupón aplica 3 | 79000 | S | Medellín | ? | ? | ? | borde cupón (no aplica)

Exigencia: al menos 1 caso por regla + 1 caso borde por umbral.

Actividad central (25–30 min)

Trabajo individual: inicia tu Proyecto (Entrega 1, diseño).

  • Elige tu contexto (1–5) y define 6–10 parámetros (umbrales/tarifas).
  • Escribe 8 reglas (con prioridad) y conviértelas a pseudocódigo.
  • Diseña 6 casos de prueba (mínimo 2 bordes).

Entregable en clase: reglas + pseudocódigo + matriz de pruebas (borrador).

Reto (opcional, sin nota)

Auditoría de reglas: escribe 2 casos “trampa” que rompan soluciones ambiguas.

  • Ejemplo: dos reglas aplican a la vez, ¿cuál gana?
  • Ejemplo: entrada inválida (hora=27, subtotal negativo), ¿qué haces?

Si lo haces, obtienes retroalimentación extra (no calificación).

Ticket de salida (5 min)

  • Escribe 1 borde que hoy aprendiste a probar (con valores).
  • Escribe 1 regla con prioridad y cómo la aplicas.
  • ¿Qué variable booleana (aplicaX) usarías para legibilidad en tu proyecto?

Meta: que tu algoritmo sea defendible, no solo “parecido”.