Expresiones booleanas, condicionales e iteración
Imagina la regla de una montaña rusa: «Para subir necesitas medir al menos 48 pulgadas, y tener 12 años o ir con un adulto». Un guardia aplica esa regla a cada persona de la fila, una y otra vez, y decide quién sube. Un programa hace lo mismo: evalúa condiciones, elige un camino y repite pasos. En esta página aprenderás a evaluar esas condiciones y a predecir qué hace un programa, justo lo que se pide en el examen AP®. Al final volveremos a la montaña rusa.
Expresiones booleanas
Una expresión booleana es una expresión que da como resultado verdadero (true) o falso (false). Nada más. Las comparaciones son la forma más simple:
| Operador | Significa |
|---|---|
= |
igual a |
≠ |
distinto de |
> , < |
mayor que, menor que |
≥ , ≤ |
mayor o igual, menor o igual |
Si x ← 7, entonces x > 5 es verdadero y x = 3 es falso. Con MOD (el residuo de una división) también se pueden hacer preguntas como «¿es impar?»: x MOD 2 = 1 es verdadero para 7, porque $7 \div 2$ da residuo 1.
Para combinar expresiones se usan tres operadores lógicos:
Todo se resume en una tabla de verdad:
| A | B | A AND B | A OR B | NOT A |
|---|---|---|---|---|
| verdadero | verdadero | verdadero | verdadero | falso |
| verdadero | falso | falso | verdadero | falso |
| falso | verdadero | falso | verdadero | verdadero |
| falso | falso | falso | falso | verdadero |
¿Por qué funciona así? AND es como «y» en una regla estricta: un solo requisito sin cumplir basta para fallar. OR es permisivo: con un solo requisito cumplido alcanza.
Sea A verdadero y B falso. Evalúa cada expresión: a) A AND B b) A OR B c) NOT B d) NOT (A AND B)
Sea A verdadero y B falso. Evalúa cada expresión:
- a)
A AND B
- b)
A OR B
- c)
NOT B
- d)
NOT (A AND B)
Sea x ← 7. Evalúa cada una como verdadera o falsa: a) (x > 5) AND (x < 10) b) (x < 3) OR (x MOD 2 = 1) c) NOT (x = 7)
Sea x ← 7. Evalúa cada una como verdadera o falsa:
- a)
(x > 5) AND (x < 10)
- b)
(x < 3) OR (x MOD 2 = 1)
- c)
NOT (x = 7)
Condicionales: elegir un camino
Un condicional (selection) permite que el programa ejecute código solo si una condición es verdadera.
IF (condición) {
instrucciones si es verdadera
}
ELSE {
instrucciones si es falsa
}
La parte ELSE es opcional. Solo se ejecuta uno de los dos caminos. Dentro de un camino puede haber otro IF: eso es un condicional anidado. Sirve para decidir en etapas, como en la calificación de un examen:
IF (score ≥ 90) {
DISPLAY("A")
}
ELSE {
IF (score ≥ 80) {
DISPLAY("B")
}
ELSE {
DISPLAY("C")
}
}
Lee la estructura de arriba abajo: el segundo IF solo se revisa si el primero fue falso. Por eso, en la rama ELSE ya sabemos que score es menor que 90.
Ahora volvamos a la montaña rusa. La regla height ≥ 48 AND (age ≥ 12 OR withAdult) es una expresión booleana usada en un condicional. Para Malik (52 in., 13 años, sin adulto): 52 ≥ 48 es verdadero, 13 ≥ 12 es verdadero, así que verdadero AND verdadero da verdadero: sube.
a) ¿Qué se muestra cuando score es 95, 85, 80 y 79? b) Si la primera condición se cambiara a score > 90, ¿qué valor de puntaje daría un resultado distinto? ¿Qué se…
IF (score ≥ 90)
{
DISPLAY("A")
}
ELSE
{
IF (score ≥ 80)
{
DISPLAY("B")
}
ELSE
{
DISPLAY("C")
}
}
- a) ¿Qué se muestra cuando
scorees 95, 85, 80 y 79?
- b) Si la primera condición se cambiara a
score > 90, ¿qué valor de puntaje daría un resultado distinto? ¿Qué se mostraría?
La regla de una montaña rusa dice: un visitante puede subir si height ≥ 48 AND (age ≥ 12 OR withAdult), donde height está en pulgadas y withAdult es verdadero o falso.…
La regla de una montaña rusa dice: un visitante puede subir si height ≥ 48 AND (age ≥ 12 OR withAdult), donde height está en pulgadas y withAdult es verdadero o falso.
Evalúa la regla para cada visitante:
| Visitante | Estatura (in.) | Edad | Con un adulto |
|---|---|---|---|
| Chloe | 50 | 10 | falso |
| Malik | 52 | 13 | falso |
| Camila | 45 | 15 | verdadero |
Da verdadero o falso para cada uno, y luego escribe una expresión booleana que diga cuándo un visitante no puede subir.
Iteración: repetir instrucciones
La iteración repite un bloque de instrucciones. En AP hay dos formas principales.
REPEAT n TIMES repite el cuerpo un número fijo de veces:
n ← 0
REPEAT 5 TIMES {
n ← n + 2
}
Después de las 5 vueltas, n vale 10 (suma 2 cinco veces).
REPEAT UNTIL (condición) repite hasta que la condición sea verdadera. La condición se revisa antes de cada vuelta; si ya es verdadera desde el inicio, el cuerpo no se ejecuta ni una vez.
n ← 1
REPEAT UNTIL (n > 50) {
n ← n * 2
}
DISPLAY(n)
La mejor forma de entender un ciclo es una tabla de trazado (hand tracing):
| Vuelta | n al empezar | ¿n > 50? | n al terminar |
|---|---|---|---|
| 1 | 1 | no | 2 |
| 2 | 2 | no | 4 |
| 3 | 4 | no | 8 |
| 4 | 8 | no | 16 |
| 5 | 16 | no | 32 |
| 6 | 32 | no | 64 |
| — | 64 | sí | se detiene |
Se muestra 64 y el cuerpo se ejecutó 6 veces.
Ciclos infinitos y errores comunes
Un ciclo infinito ocurre cuando la condición de REPEAT UNTIL nunca se vuelve verdadera. El programa no termina. Casi siempre es una de estas causas:
-
Olvidar actualizar la variable (por ejemplo, quitar
i ← i + 1). -
Actualizarla en la dirección equivocada.
-
Una condición que «salta» sobre el valor buscado.
a) ¿Cuántas veces se muestra "Go" con REPEAT 4 TIMES { DISPLAY("Go") }? b) ¿Cuál es el valor final de n?
- a) ¿Cuántas veces se muestra
"Go"conREPEAT 4 TIMES { DISPLAY("Go") }?
- b) ¿Cuál es el valor final de
n?
n ← 0
REPEAT 5 TIMES
{
n ← n + 2
}
a) ¿Qué se muestra? b) ¿Cuántas veces se ejecuta el cuerpo del ciclo? c) ¿Qué pasaría si la condición fuera n < 0 en lugar de la original?
n ← 1
REPEAT UNTIL (n > 50)
{
n ← n * 2
}
DISPLAY(n)
- a) ¿Qué se muestra?
- b) ¿Cuántas veces se ejecuta el cuerpo del ciclo?
- c) ¿Qué pasaría si la condición fuera
n < 0en lugar de la original?
a) ¿Qué se muestra y cuántas veces se ejecuta el cuerpo del ciclo? b) ¿Qué pasaría si se quitara la línea i ← i + 1? Explica. c) Describe el cambio necesario para que el…
i ← 1
total ← 0
REPEAT UNTIL (i > 10)
{
IF (i MOD 3 = 0)
{
total ← total + i
}
i ← i + 1
}
DISPLAY(total)
- a) ¿Qué se muestra y cuántas veces se ejecuta el cuerpo del ciclo?
- b) ¿Qué pasaría si se quitara la línea
i ← i + 1? Explica.
- c) Describe el cambio necesario para que el programa sume los números pares del 1 al 10.
Tres programadores escribieron ciclos que deberían mostrar 1, 2, 3, 4, 5. Versión A: Versión B: Versión C: a) Para cada versión, da la salida o di que nunca termina. b)…
Tres programadores escribieron ciclos que deberían mostrar 1, 2, 3, 4, 5.
Versión A:
i ← 1
REPEAT UNTIL (i = 5)
{
DISPLAY(i)
i ← i + 1
}
Versión B:
i ← 1
REPEAT UNTIL (i = 6)
{
DISPLAY(i)
i ← i + 1
}
Versión C:
i ← 1
REPEAT UNTIL (i = 4)
{
DISPLAY(i)
i ← i + 2
}
- a) Para cada versión, da la salida o di que nunca termina.
- b) Explica qué tiene de malo la Versión A y cómo corregirla.
- c) Explica por qué la Versión C es un ciclo infinito y describe una condición que la haría terminar con seguridad.
Vuelve al principio: la regla de la montaña rusa es una expresión booleana con AND y OR. El guardia la aplica a cada persona de la fila: eso es un ciclo con un condicional dentro. Para decir quién no puede subir, se usa NOT sobre toda la regla.
Resumen
-
Una expresión booleana da verdadero o falso; se combinan con
AND(ambas verdaderas),OR(al menos una) yNOT(invierte). -
IF/ELSEejecuta solo uno de dos caminos; losIFanidados deciden en etapas. Cuidado con>frente a≥en los límites. -
REPEAT n TIMESrepite un número fijo de veces;REPEAT UNTILrevisa la condición antes de cada vuelta. -
Una tabla de trazado te permite predecir la salida paso a paso.
-
Si la variable de control no cambia bien, el ciclo puede ser infinito; prefiere condiciones como
>en vez de=cuando haya saltos.