Computadoras y Programación · ENES Juriquilla · UNAM
Sesión 5 · Computadoras y Programación

No todo camino
es derecho.

Una sola pregunta puede partir el camino de un algoritmo en dos — o en muchos. Hoy el programa aprende a preguntarse algo antes de actuar.
Por
Walter Rosales
La sesión pasada
Todo caminaba en línea recta.

Hoy: el camino se parte en dos.

La sesión pasada su algoritmo bajaba paso a paso, sin desviarse — la estructura secuencial. Quedó una pregunta pendiente: ¿qué pasa cuando el programa necesita decidir? Hoy la respondemos.
El problema real
Avisar si un número es negativo
INICIO
  LEER n
  ESCRIBIR "n es negativo"
FIN
Esto se ejecuta siempre. n sea negativo o no. Sin decidir, no hay forma de que a veces sí y a veces no.
¿Y si el programa pudiera
preguntarse algo antes de actuar?
Primera forma — SI

Una pregunta. Tal vez un paso.

SI hace una sola cosa: si la condición es verdadera, ejecuta un bloque de instrucciones. Si es falsa, lo salta por completo y el programa sigue de largo.
Sintaxis
SI condición ENTONCES
  instrucción 1
  instrucción 2
FIN SI
Diagrama de flujo
¿n < 0?
Sí
Escribir aviso
No
Continúa
El "No" no dibuja nada — el camino simplemente sigue derecho, como si la pregunta no hubiera existido.
Regla práctica
Una sola posibilidad El resto sigue igual Nada si es falso
Úsalo cuando solo un camino necesita una acción extra — el otro simplemente continúa sin cambios.
Ejemplo trabajado 1
Si la temperatura pasa de 38°,
que el programa avise "fiebre".
Respuesta · SI
Pseudocódigo
INICIO
  LEER temperatura
  SI temperatura > 38 ENTONCES
    ESCRIBIR "fiebre"
  FIN SI
FIN
Diagrama
Inicio
Leer temperatura
¿temp > 38?
Sí
Escribir "fiebre"
No
Fin
Segunda forma

¿Y si ambos caminos hacen algo?

A veces no basta con actuar solo cuando es verdad — el caso falso también necesita su propia respuesta.
SI-SINO — dos caminos

Dos caminos. Siempre uno de los dos.

SI-SINO nunca deja el camino vacío: si la condición es verdadera, corre un bloque; si es falsa, corre el otro. Uno de los dos siempre se ejecuta.
Sintaxis
SI condición ENTONCES
  instrucción A
SINO
  instrucción B
FIN SI
Diagrama de flujo
¿Condición?
Sí
Bloque A
No
Bloque B
Continúa
Ahora ambos brazos del rombo llegan a algo. No hay camino vacío.
Comparación
SI
Falso: no pasa nada.
Un solo bloque.
El resto sigue igual.
SI-SINO
Falso: corre el otro bloque.
Dos bloques, uno de los dos.
Nunca queda vacío.
Ejemplo trabajado 2
Decir si un número
es par o impar.
Respuesta · SI-SINO
Pseudocódigo
INICIO
  LEER n
  SI n MOD 2 = 0 ENTONCES
    ESCRIBIR "par"
  SINO
    ESCRIBIR "impar"
  FIN SI
FIN
Diagrama
Inicio
Leer n
¿n MOD 2 = 0?
Sí
Escribir "par"
No
Escribir "impar"
Tercera forma

¿Y si una pregunta no alcanza?

Cuando hay más de dos posibilidades, una decisión puede vivir dentro de otra.
Selección anidada

Un SI dentro de otro SI.

La selección anidada mete un SI (o un SI-SINO) completo dentro del bloque de otro. Cada nivel resuelve una pregunta más fina que la anterior.
Sintaxis
SI condición1 ENTONCES
  SI condición2 ENTONCES
    instrucción A
  SINO
    instrucción B
  FIN SI
SINO
  instrucción C
FIN SI
Diagrama de flujo
¿condición1?
Sí
¿condición2?
Sí
A
No
B
No
C
El segundo rombo solo existe dentro de la rama "Sí" del primero — nunca se dibuja si condición1 ya fue falsa.
Cuando hay muchas opciones

Selección múltiple — SEGÚN-SEA

Anidar SI dentro de SI funciona, pero con seis o siete opciones se vuelve difícil de leer. SEGÚN-SEA compara una sola variable contra varios valores, uno por uno.
Sintaxis
SEGÚN-SEA variable HACER
  CASO valor1: instrucción 1
  CASO valor2: instrucción 2
  CASO valor3: instrucción 3
  EN OTRO CASO: instrucción por defecto
FIN SEGÚN
Por dentro, SEGÚN-SEA es exactamente una cadena de SI anidados — solo más corta de escribir y más clara de leer.
Resumen
SI
Posibilidades: una.
Si es falsa: no pasa nada.
Ejemplo: avisar solo si hay fiebre.
SI-SINO
Posibilidades: dos.
Siempre corre una de las dos.
Ejemplo: decir par o impar.
Anidada / SEGÚN-SEA
Posibilidades: tres o más.
Preguntas dentro de preguntas.
Ejemplo: calificación en letra.
Ejemplo integrador
Convertir una calificación (0–100)
en una letra: A, B, C, D o F.
Algoritmo · calificación en letra
  • Leer la calificación.
  • Si es 90 o más, la letra es A.
  • Si no, y es 80 o más, la letra es B.
  • Si no, y es 70 o más, la letra es C.
  • Si no, y es 60 o más, la letra es D.
  • Si no, la letra es F.
  • Escribir la letra.
Respuesta · pseudocódigo
INICIO
  LEER calif
  SI calif >= 90 ENTONCES
    letra ← "A"
  SINO SI calif >= 80 ENTONCES
    letra ← "B"
  SINO SI calif >= 70 ENTONCES
    letra ← "C"
  SINO SI calif >= 60 ENTONCES
    letra ← "D"
  SINO
    letra ← "F"
  FIN SI
  ESCRIBIR letra
FIN
Respuesta · diagrama de flujo
¿calif >= 90?
Sí
letra←A
No
¿calif >= 80?
Sí
letra←B
No
¿calif >= 70?
Sí
letra←C
No
¿calif >= 60?
Sí
letra←D
No
letra←F
Cuatro rombos en cascada, cada "No" abre la siguiente pregunta — exactamente lo que escribe SINO SI por dentro.
Ahora, en equipos

Encuentren el rombo.
Cacen el error.

Tres dinámicas cortas para sentir una decisión por dentro, antes de escribir una.
Dinámica 1
Completa el diagrama.
1 · Se proyecta un diagrama con un rombo vacío
Las dos ramas de salida ya tienen sus instrucciones dibujadas.
2 · En equipos, escriben la condición
Solo con lo que dicen las dos cajas de salida, deducen qué pregunta va dentro del rombo.
3 · La dicen en voz alta
El primer equipo listo la comparte; el resto revisa si coincide.
4 · Comparan contra el pseudocódigo
Se revela la línea original y confirman si la condición era exactamente esa.
En vivo · ¿qué pregunta falta?
Un cajero automático: retira el dinero si el saldo alcanza; si no, avisa "saldo insuficiente".
¿ ??? ?
Sí
Retirar dinero
No
Avisar "saldo insuficiente"
Respuesta · la condición que faltaba
  • La condición: ¿saldo >= monto?
  • Si es verdadera (el saldo alcanza), se retira el dinero.
  • Si es falsa (no alcanza), se avisa "saldo insuficiente".
  • Ambas ramas dibujan algo — por eso es un SI-SINO, no un SI simple.
Dinámica 2
Cacen el error de lógica.
1 · Se proyecta un SI-SINO con un bug
El pseudocódigo corre sin errores de sintaxis — el error es de lógica.
2 · 60 segundos, en equipos
Encuentran la línea exacta que está mal.
3 · Levantan la mano
El primer equipo en señalar la línea correcta explica qué pasaría con un dato real.
4 · Proponen la corrección
Dicen exactamente qué cambiar para que el algoritmo diga la verdad.
⏱ 60 segundos · ¿dónde está el error?
INICIO
  LEER calif
  SI calif >= 60 ENTONCES
    ESCRIBIR "reprobado"
  SINO
    ESCRIBIR "aprobado"
  FIN SI
FIN
Respuesta · las ramas invertidas
  • El bug: los mensajes están cambiados — dice "reprobado" precisamente cuando la calificación SÍ alcanza el mínimo para aprobar.
  • La corrección: intercambiar los dos ESCRIBIR — "aprobado" en la rama que cumple, "reprobado" en la que no.
  • La regla general: lean la condición en voz alta antes de decidir qué va en cada rama — un SI-SINO sintácticamente perfecto puede seguir mintiendo.
Dinámica 3 · relámpago, en voz alta
A
Avisar solo si la batería está baja.
B
Decir si aprobaste o reprobaste.
C
Convertir una calificación en letra (A a F).
Respuesta · Dinámica 3
A → SI (una posibilidad) B → SI-SINO (dos posibilidades) C → Anidada / SEGÚN-SEA (varias posibilidades)
El mensaje de hoy

Secuencia y ahora decisión.
El programa ya puede elegir.

SI, SI-SINO y anidamiento son la misma idea repetida: una pregunta, y caminos distintos según la respuesta. Con esto el algoritmo deja de ser una línea recta.
Lo que sigue

¿Y si un camino hay que recorrerlo varias veces?

La siguiente sesión resuelve el tercer problema: repetir un bloque de instrucciones sin copiar y pegar la misma línea cien veces.
Gracias
Walter Rosales
CEO & Co-Founder, iGalenus
walter.rosales@igalenus.com
@walterr_rosales
walter-rosales.com