Sesión 8

Condicionales compuestas y prueba de escritorio

Unidad 1 · Indicadores D y E · Cierre de contenido

Navegación: | Home End | F pantalla completa · Botones · Desliza

Agenda de la sesión (120 min)

Plan de trabajo

  • 0–10 · Recap: qué hemos visto y qué falta para cerrar la Unidad 1.
  • 10–35 · Condicionales compuestas: operadores && || !, precedencia y errores frecuentes.
  • 35–55 · Tabla de decisión: herramienta para diseñar y verificar condicionales.
  • 55–80 · Prueba de escritorio: qué es, cómo se hace y para qué sirve.
  • 80–110 · Ejercicios guiados: trazas sobre fragmentos de código con condicionales compuestas.
  • 110–120 · Exit ticket + cierre.

Esta es la última sesión de contenido de la Unidad 1. Los indicadores D y E — condicionales compuestas y pruebas de escritorio — son los más exigentes y los que más peso tienen en la evaluación del 05/03.

Dónde estamos

Unidad 1 — Saberes cubiertos hasta hoy

SaberSesión(es)Indicadores asociados
Algoritmos y estructura secuencialS1, S2A
Modelo IPO · Razonamiento lógico y numéricoS2, S3B
Variables, tipos de datos y operadoresS3, S4B, C, E
Condicionales simples y anidadasS4, S5D
Condicionales compuestas · Prueba de escritorio S8 — HOY D, E

D y E son los indicadores que integran todo lo anterior. No se pueden demostrar sin dominar variables, operadores y lógica secuencial.

Condicionales compuestas

Operadores lógicos en C#

OperadorNombretrue cuando…
&&ANDAmbas condiciones son true
||ORAl menos una es true
!NOTLa condición es false

Evaluación en cortocircuito: con &&, si la primera condición es false, C# ni evalúa la segunda. Con ||, si la primera es true, la segunda se omite.

Tabla de verdad

ABA && BA || B!A
truetruetruetruefalse
truefalsefalsetruefalse
falsetruefalsetruetrue
falsefalsefalsefalsetrue

Memorizar no sirve. Entender qué pregunta hace cada operador sí: && = "¿se cumplen todas?", || = "¿se cumple alguna?".

Condiciones compuestas en C#

Estructura y orden de evaluación

int edad = 20; bool tieneCarne = true; // Condición compuesta con && if (edad >= 18 && tieneCarne) { Console.WriteLine("Puede conducir"); } // Condición compuesta con || if (edad < 16 || !tieneCarne) { Console.WriteLine("No puede conducir"); } // Combinación: paréntesis controlan precedencia if ((edad >= 18 && tieneCarne) || edad >= 21) { Console.WriteLine("Acceso permitido"); }

Errores de diseño frecuentes

  • Condición imposible: x > 5 && x < 3 — nunca será true.
  • Condición siempre verdadera: x > 0 || x <= 0 — siempre true, la condición sobra.
  • Orden incorrecto: poner el caso más específico después del general hace que el específico nunca se alcance.
  • Paréntesis faltantes: a || b && c no es lo mismo que (a || b) && c. && tiene mayor precedencia que ||.

Ante la duda de precedencia, usar paréntesis explícitos. Hacen el código más claro y evitan errores silenciosos.

Herramienta de diseño

¿Qué es una tabla de decisión?

Es una tabla que lista todas las combinaciones posibles de condiciones y el resultado esperado para cada una. Se construye antes de escribir el código, no después.

Ejemplo: sistema de acceso

edad ≥ 18tieneCarneResultado
truetruePuede conducir
truefalseNo puede conducir
falsetrueNo puede conducir
falsefalseNo puede conducir

Por qué es útil

  • Fuerza a pensar en todos los casos antes de codificar.
  • Revela combinaciones que se olvidan fácilmente (especialmente con 3+ condiciones).
  • Permite verificar que el código cubre exactamente lo que la tabla dice.
  • Con n condiciones booleanas hay 2ⁿ filas posibles — con 3 condiciones son 8 combinaciones.

Si el código produce una salida diferente a la tabla para alguna fila, hay un error lógico — no de sintaxis. El compilador no lo detecta; la tabla sí.

Prueba de escritorio

¿Qué es?

Es la ejecución manual del algoritmo: se recorre el código línea por línea registrando en una tabla el valor de cada variable en cada paso y qué rama toma cada condicional.

  • No es depurar con el IDE — se hace con lápiz y papel (o en una hoja).
  • Permite detectar errores antes de ejecutar.
  • Demuestra comprensión real: si no puedes trazarlo, no lo entiendes.

Un programa que "funciona" puede tener lógica incorrecta en casos que no se probaron. La traza lo evidencia.

Estructura de la tabla de traza

PasoLíneaVariableValorCondición / Rama
1int x = 12x12
2bool activo = trueactivotrue
3if (x > 10 && activo)true && true → true → rama if
4resultado = "A"resultado"A"

Cada fila es un paso de ejecución. La columna de condición se llena solo cuando hay un if o else if.

Ejercicio guiado 1

Fragmento a trazar

int temperatura = 28; bool esDeDia = false; string estado; if (temperatura > 30 && esDeDia) { estado = "Alerta calor"; } else if (temperatura > 30 || !esDeDia) { estado = "Precaución"; } else { estado = "Normal"; } Console.WriteLine(estado);

Construye la traza

Con los valores temperatura = 28, esDeDia = false:

PasoVariable / CondiciónValor / Resultado
1temperatura28
2esDeDiafalse
3temperatura > 30 && esDeDia?
4temperatura > 30 || !esDeDia?
5estado?
6Console.WriteLine?

Comprueba: ¿qué imprimiría si temperatura = 35 y esDeDia = false? ¿Cambia la rama tomada?

Ejercicio guiado 2 — Más complejo

Fragmento a trazar

double promedio = 3.2; int faltas = 4; bool entregoParcial = true; string resultado; if (promedio >= 3.0 && faltas <= 5 && entregoParcial) { resultado = "Aprobado"; } else if (promedio >= 3.0 && !entregoParcial) { resultado = "Pendiente documentación"; } else if (promedio < 3.0 || faltas > 5) { resultado = "Reprobado"; } else { resultado = "Revisar caso"; } Console.WriteLine(resultado);

Dos casos para trazar

Caso A: promedio=3.2 · faltas=4 · entregoParcial=true

Caso B: promedio=2.8 · faltas=3 · entregoParcial=true

  • Para cada caso: evalúa cada condición con los valores dados.
  • Identifica qué rama se toma y por qué las otras no.
  • Anota el valor final de resultado y lo que imprime.

Pregunta adicional: ¿existe alguna combinación de valores que llegue al else final? Construye ese caso o argumenta por qué es imposible.

Prueba Unidad 1 — 05/03/2026

Qué evalúa

  • Comprensión conceptual: algoritmo, tipos de datos, diferencia int vs decimal, cuándo usar if anidado vs condición compuesta.
  • Lectura de código: dado un fragmento C#, predecir la salida exacta para una entrada específica.
  • Escritura de código: construir desde cero un programa que resuelva un problema dado con al menos una estructura condicional correcta.

Cómo prepararse

  • Practicar trazas con fragmentos cortos de código (3–10 líneas).
  • Repasar los operadores: qué devuelve &&, ||, ! en cada combinación.
  • Revisar las tareas anteriores y verificar que puedas explicar cada variable y cada decisión.

La prueba es individual. Está diseñada en dos niveles: base (comprensión mínima) y extendido (análisis crítico y escritura de código desde cero).

Errores que aparecen en prueba

En condicionales

  • Usar = (asignación) en vez de == (comparación) dentro del if.
  • Condición imposible: x > 5 && x < 3 — nunca es true.
  • Condición siempre verdadera: x > 0 || x <= 0 — la condición sobra.
  • Caso general antes del específico: el caso específico nunca se alcanza.

En tipos y variables

  • Dividir dos int y esperar decimal: 5 / 2 da 2, no 2.5.
  • Declarar una variable dentro del if y tratar de usarla fuera del bloque.
  • No inicializar una variable antes de usarla en la traza.
  • Escribir el nombre de la variable en vez de su valor al rellenar la tabla de traza.
Exit ticket y cierre

Exit ticket (individual, 5 min)

  1. Dado este fragmento, ¿cuál es la salida si x = 4 y y = 10?
    if (x > 3 && y < 10) Console.WriteLine("A"); else if (x > 3 || y == 10) Console.WriteLine("B"); else Console.WriteLine("C");
  2. ¿Por qué usarías decimal en vez de double para representar dinero?

Fechas clave

QuéCuándo
Entrega 1 del proyecto03/03/2026 · 23:59
Prueba Unidad 105/03/2026 · en clase
Inicio Unidad 212/03/2026

Navegación: | Home End | F · Botones · Desliza