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

El mismo paso,
las veces que haga falta.

Tres formas de decirle a la máquina "otra vez" — y cómo saber, antes de escribir una línea, cuál te conviene.
Por
Walter Rosales
Ya tienen dos piezas
Secuencia y decisión. Falta repetir.

Hoy: MIENTRAS, PARA y REPETIR-HASTA.

Ya saben escribir pasos en orden, y ya saben elegir un camino según una condición. Hoy resuelven el tercer problema: cuando un mismo paso hay que hacerlo una y otra vez, sin copiar y pegar la línea cien veces.
El problema real
Sumar los primeros 1000 números
suma ← 0
suma ← suma + 1
suma ← suma + 2
suma ← suma + 3
… 996 líneas más …
suma ← suma + 1000
Con secuencia y decisión, esto se escribe. Nadie lo escribe así.
¿Y si un solo bloque de instrucciones
pudiera repetirse solo?
El símbolo no es nuevo
Regresa
Inicio
¿Condición?
Un paso, otra vez
Óvalo, rombo, rectángulo — los mismos tres de siempre. Lo único nuevo es la flecha: en vez de seguir hacia adelante, regresa.
Primera forma — MIENTRAS

Pregunta antes de entrar.

MIENTRAS revisa la condición primero. Si es falsa desde el principio, el cuerpo del ciclo no se ejecuta ni una sola vez.
Sintaxis
MIENTRAS condición HACER
  instrucción 1
  instrucción 2
FIN MIENTRAS
Diagrama de flujo
Sí, vuelve
Inicio
¿Condición?
Cuerpo del ciclo
El rombo va PRIMERO. Si la respuesta es "No" desde el inicio, el rectángulo de abajo nunca se dibuja siquiera.
Regla práctica
No sé cuántas veces Puede ser 0 veces Condición previa
Úsalo cuando no sabes de antemano cuántas vueltas va a dar el ciclo — depende de un dato que llega mientras el programa corre.
Ejemplo trabajado 1
Sumar los primeros N números,
donde N lo escribe el usuario.
Respuesta · MIENTRAS
Pseudocódigo
INICIO
  LEER n
  suma ← 0
  contador ← 1
  MIENTRAS contador <= n HACER
    suma ← suma + contador
    contador ← contador + 1
  FIN MIENTRAS
  ESCRIBIR suma
FIN
Diagrama
Inicio
Leer n
suma←0, contador←1
¿contador <= n?
Sí
suma←suma+contador; contador←contador+1; ↺
No
Escribir suma
Segunda forma

¿Y si ya sabes
cuántas veces van a ser?

Cuando el número de vueltas es un dato conocido desde antes de empezar, hay una forma más corta de escribirlo: PARA.
PARA — contador conocido

Un contador que se lleva solo.

PARA declara desde el inicio dónde empieza el contador, dónde termina, y que avanza automáticamente en cada vuelta — sin que tú escribas "contador ← contador + 1" a mano.
Sintaxis
PARA i DESDE 1 HASTA n HACER
  instrucción 1
  instrucción 2
FIN PARA
"i" nace en 1, crece de uno en uno, y el ciclo termina solo cuando i pasa de n.
Diagrama de flujo
i++, vuelve
Inicio
i ← 1
¿i <= n?
Cuerpo del ciclo; i ← i + 1
Mismo rombo, misma flecha de retorno — el "i ← i + 1" va escondido dentro de la palabra PARA, pero en el diagrama sigue siendo un paso explícito.
Comparación
MIENTRAS
Cuántas veces: no se sabe de antemano.
Condición: se revisa antes de cada vuelta.
Ejemplo: leer números hasta que el usuario escriba 0.
PARA
Cuántas veces: se sabe desde el inicio.
Condición: un contador que avanza solo.
Ejemplo: imprimir la tabla del 1 al 10.
Ejemplo trabajado 2
Mostrar la tabla de multiplicar
de un número que da el usuario.
Respuesta · PARA
Pseudocódigo
INICIO
  LEER n
  PARA i DESDE 1 HASTA 10 HACER
    ESCRIBIR n × i
  FIN PARA
FIN
Diagrama
Inicio
Leer n
i ← 1
¿i <= 10?
Sí
Escribir n × i; i ← i+1; ↺
No
Fin
Tercera forma

¿Y si el paso tiene
que hacerse al menos una vez?

Pedir un NIP, mostrar un menú, capturar una respuesta — a veces hay que actuar primero, y preguntar "¿ya terminé?" después.
REPETIR ... HASTA QUE

Actúa primero. Pregunta después.

REPETIR ejecuta el cuerpo del ciclo una vez, y hasta ENTONCES revisa la condición. Por diseño, el cuerpo corre mínimo una vez — nunca cero.
Sintaxis
REPETIR
  instrucción 1
  instrucción 2
HASTA QUE condición
Diagrama de flujo
No, repite
Inicio
Cuerpo del ciclo
¿Condición?
El rombo va AL FINAL. El rectángulo del cuerpo siempre se dibuja primero — por eso se ejecuta al menos una vez.
Resumen
MIENTRAS
Condición: antes.
Mínimo: 0 veces.
Cuenta: no la conozco.
PARA
Condición: contador automático.
Mínimo: 0 veces (o las que definas).
Cuenta: la conozco desde antes.
REPETIR-HASTA
Condición: después.
Mínimo: 1 vez, siempre.
Cuenta: no importa, actúo primero.
Ejemplo trabajado 3
Un cajero: pide el NIP, y lo vuelve
a pedir si está mal — hasta acertar.
Respuesta · REPETIR-HASTA
Pseudocódigo
INICIO
  REPETIR
    LEER nip
  HASTA QUE nip = nipCorrecto
  ESCRIBIR "Acceso concedido"
FIN
Diagrama
Inicio
Leer nip
¿nip = correcto?
No
↺ Leer nip otra vez
Sí
Escribir "Acceso"
Nota las ramas invertidas: aquí el "No" es el que regresa — en REPETIR-HASTA, el ciclo sigue mientras la condición sea FALSA.
Ahora, en equipos

Sigan la variable.
Cacen el error.

Tres dinámicas cortas para sentir un ciclo por dentro, antes de escribir uno.
Dinámica 1
La tabla de trazo.
1 · Se proyecta un ciclo
Un MIENTRAS corto, con dos variables que cambian en cada vuelta.
2 · Dibujan la tabla
Una columna por variable, una fila por vuelta — SIN correr el código, solo con la mano.
3 · Llenan fila por fila
En cada vuelta, anotan el valor nuevo de cada variable — hasta que la condición se vuelve falsa.
4 · Comparan
El último valor de su tabla debe coincidir con lo que el algoritmo escribe al final.
En vivo · llenen la tabla
INICIO
  contador ← 1
  suma ← 0
  MIENTRAS contador <= 5 HACER
    suma ← suma + contador
    contador ← contador + 1
  FIN MIENTRAS
  ESCRIBIR suma
FIN
Vueltacontadorsuma
1  
2  
3  
4  
5  
Dinámica 2
Cacen el ciclo infinito.
1 · Se proyecta un ciclo roto
Un MIENTRAS que, tal como está escrito, nunca termina.
2 · 60 segundos
En equipos, encuentran la línea exacta que falta o está mal.
3 · Levantan la mano
El primer equipo en señalar la línea correcta explica POR QUÉ el ciclo no para.
4 · Proponen la corrección
En pseudocódigo, dicen exactamente qué línea agregar o cambiar.
⏱ 60 segundos · ¿por qué no para?
INICIO
  contador ← 1
  MIENTRAS contador <= 10 HACER
    ESCRIBIR contador
  FIN MIENTRAS
FIN
Respuesta · el ciclo infinito
  • El bug: "contador" nunca cambia dentro del ciclo — sigue valiendo 1 para siempre, así que "contador <= 10" nunca se vuelve falsa.
  • La corrección: agregar contador ← contador + 1 como última línea, dentro del cuerpo del MIENTRAS.
  • La regla general: toda variable que aparece en la condición del ciclo tiene que cambiar DENTRO del ciclo — si no, la condición nunca cambia de opinión.
Dinámica 3 · relámpago, en voz alta
A
Imprimir los números del 1 al 20.
B
Pedir la contraseña hasta que sea correcta.
C
Sumar números hasta que el usuario escriba 0.
Respuesta · Dinámica 3
A → PARA (cuento conocido: 1 a 20) B → REPETIR-HASTA (al menos una vez) C → MIENTRAS (no sé cuántos van a ser)
El mensaje de hoy

Secuencia, decisión, iteración.
Con estas tres, cualquier algoritmo se escribe.

No hay una cuarta estructura de control que necesiten — cada programa que existe se construye combinando estas tres piezas, una y otra vez.
Lo que sigue

Del papel a un lenguaje real: C.

MIENTRAS será while. PARA será for. SI será if. La lógica que ya dominan no cambia — solo cambia el idioma en que se la dictan a la máquina.
Gracias
Walter Rosales
CEO & Co-Founder, iGalenus
walter.rosales@igalenus.com
@walterr_rosales
walter-rosales.com
Escanear · esta charla