Palabras clave: Variables booleanas', `Estructuras de control, Estructuras condicionales, Condiciones booleanas.

Preguntas de repaso
  • ¿Cuáles son todas las instrucción simples de Processing?

  • ¿Qué es una variable booleana?

  • ¿Cuáles son las estructuras de control?

No sigas si no conoces las respuestas.

1. Instrucciones condicionales

Una instrucción (o estructura) condicional o de selección es aquella que establece qué instrucciones deben de ejecutarse o no, en función del valor de una condición.

TIPOS DE INSTRUCCIONES CONDICIONALES
  • de condición simple,

  • bicondicional o

  • de condición múltiple.

El valor de la condición que determina si se ha de ejecutar o no un conjunto de instrucciones viene dado por un valor booleano que es el resultado de una expresión booleana.

2. Condicional Simple

Un condicional simple es una estructura de control que ejecuta un conjunto de líneas de código si es cierta una expresión booleana. En Processing un condicional simple se expresa según este código:

if (expresion) {
    Líneas de código que se ejecutan
    si la expresión es cierta.
}
Ejemplo 1. Un ejemplo simple de un condicional simple

El siguiente código muestra la división de dos números naturales siempre y cuando el denominador no sea nulo.

1 2 3 4
if (a != 0) { print("El cociente es: "); println(b/a); }

Haz un programa que calcule el número inverso del producto de dos números a y b, así como el número inverso de la suma de dichos números.

3. La cláusula else

A un condicional simple se le puede añadir la cláusula else para especificar qué lineas de código se quieren ejecutar si la expresión booleana es falsa. En este caso se habla de la estructura if-else, que en Processing se expresa según este código:

if (expresion) {
    Líneas de código que se ejecutan
    si la expresión es cierta.
} else {
    Líneas de código que se ejecutan
    si la expresión es falsa.
}
Ejemplo 2. Un ejemplo sencillo de un bicondicional

El siguiente código muestra un mensaje para indicar cuándo un número es negativo y cuándo no lo es.

1 2 3 4 5
if (a < 0) { println("El número es negativo"); } else { println("El número es nulo o positivo"); }

Haz un programa que calcule el número inverso del producto de dos números a y b, así como el número inverso de la suma de dichos números. En ambos casos se mostrará un mensaje en el caso de que no fuese posible su cálculo en el bloque del if. Si el cálculo es posible se mostrará en el bloque de la cláusula else.

4. Anidamiento

Las instrucciones (o estructuras) condicionales pueden aparecer en cualquier bloque del programa. Por ejemplo puede aparecer en el bloque de una función pero también puede aparecer en los bloques que componen una instrucción condicional.

Un bloque de un programa es todo aquello que se encuentra entre las llaves { y }.

Cuando en alguno de los bloques de un instrucción if-else se incluye otro if u otro if-else se dice que esta segunda estructura está anidada en la primera y se habla de secuencia de estructuras condicionales anidadas.

Ejemplo 3. Estructuras condicionales anidadas

El siguiente código mejora el código anterior. Se muestra un mensaje para indicar cuándo un número es negativo, positivo o nulo. Para ello se recurre a una estructura condicional que está anidada en la cláusula else.

1 2 3 4 5 6 7 8 9
if (a < 0) { println("El número es negativo"); } else { if (a == 0) { println("El número es nulo"); } else { println("El número es positivo"); } }

Dicho código es equivalente al siguiente, formado únicamente por condicionales simples.

1 2 3 4 5 6 7 8 9 10 11
if (a < 0) { println("El número es negativo"); } if (a == 0) { println("El número es nulo"); } if (a > 0) { println("El número es positivo"); }

Cuando un estructura condicional está anidada en la cláusula else no suele especificarse el bloque asociado. Es decir, se suprimen las llaves {}. Así, en vez de escribir

1 2 3 4 5 6 7 8 9
if (expresion1) { ... } else { if (expresion2) { ... } [else { ... }] }

se escribe

1 2 3 4 5 6 7
if (expresion1) { ... } else if (expresion2) { ... } [else { ... }]

Donde el código especificado entre corchetes [] es opcional y se puede escribir o no en el programa definitivo.

En muchas situaciones la estructura condicional anidada en el bloque correspondiente al bloque del if se puede evitar añadiendo mas condiciones en la primera expresión condicional.

Ejemplo 4. Estructuras anidadas

El siguiente código tiene una estructura condicional anidada en el bloque del primer if. Cada if tiene una expresión booleana simple (con un solo operador condicional).

1 2 3 4
if (a > 0) { if (a % 2 == 0) println("Es un número positivo y par."); }

Dicho código es equivalente al siguiente, formado por un único if con una expresión booleana compleja (con operadores lógicos y condicionales).

1 2 3
if ((a > 0) && (a % 2 == 0)) println("Es un número positivo y par."); }

Haz un programa que indique qué calificación tiene un alumno dada su nota numérica según el siguiente criterio.

  • Suspenso, si la nota es inferior a 5.

  • Aprobado, si la nota está en el intervalo [5,7).

  • Notable, si la nota está en el intervalo [7,9).

  • Sobresaliente, si la nota está en el intervalo [9,10].

  • Matrícula de Honor, si la nota es un 10.

Compara tu solución con la mia:

5. Estructura de selección múltiple

En el caso de anidar reiteradamente estructuras if-else en cada una de las cláusula else puede convenir la estructura de selección múltiple. Es una estructura que permite seleccionar entre varias alternativas posibles. Las alternativas tienen que ser valores literales de tipo int, char o String. En Processing se expresa según este código:

switch (expresion) {
    case constante1:
        conjunto de sentencias que se ejecutarán
        si expresion == constante1 es cierto.
        break;
    case constante2:
        conjunto de sentencias que se ejecutarán
        si expresion == constante2 es cierto.
        break;
    ...
    case constanteK:
        conjunto de sentencias que se ejecutarán
        si expresion == constanteK es cierto.
        break;
    default:
        conjunto de sentencias que se ejecutarán
        si expresion no retorna un valor coincide
        con ninguna de las constantes anteriores.
}
Ejemplo 5. Uso de switch-case-default

El siguiente código muestra un mensaje correspondiente al día de la semana, en función de un valor numérico.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
int dia; switch (dia) { case 1 : println("lunes"); break; case 2 : println("martes"); break; case 3 : println("miércoles"); break; case 4 : println("jueves"); break; case 5 : println("viernes"); break; case 6 : println("sábado"); break; case 7 : println("domingo"); break; default : println("¡ Día desconocido !"); break; }

Un par de observaciones sobre esta estructura:

  1. Se requiere de al menos un case.

  2. Si vas a usar pocos casos, quizás deberías plantearte el uso de if-else anidados en vez de switch-case.

  3. La cláusula default es opcional. No estás obligado a ponerla, pero es aconsejable.

  4. La sentencia break; evita que Processing siga ejecutando las líneas siguientes de los siguientes case. Por ejemplo, si el primer break no se hubiese puesto en el ejemplo anterior, entonces se mostrarían los mensajes "lunes" y "martes". El siguiente ejemplo debe aclararte este aspecto.

Ejemplo 6. Uso de switch sin algunos break

El siguiente código muestra un mensaje para indicar cuándo un día es laborable o no.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
int dia; switch (dia) { case 1 : case 2 : case 3 : case 4 : case 5 : println("Es día laborable"); break; case 6 : println("sábado"); break; case 7 : println("domingo"); break; default : println("¡ Día desconocido !"); break; }

Haz un programa que indique cuántos días tiene un mes dado dicho mes como un número entre 1 y 12.

6. Repaso

  • Una estructura condicional ejecuta ciertas líneas de código en función de una expresión booleana.

  • Hay 3 tipos de estructuras de control condicional.

    • de condición simple, la estructura if;

    • bicondicional, la estructura if-else; y

    • de condición múltiple, la estructura switch-case-default.

  • Mientras que en las estructuras if y if-else la expresión booleana condicional puede contener cualquier tipo de dato y puede intervenir cualquier tipo de operador condicional o booleano, la expresión condicional de la estructura switch-case es solo de comparación de igualdad y restringida a los tipos de datos int, char o String

  • Cualquiera de estas estructuras pueden estar anidadas en cualquier bloque del programa, donde se incluyen los bloques de las estructuras anidadas.