Saltar a contenido

Estructuras alternativas

Ejercicio de aplicación:

Ingresar un número entero por teclado.
Luego imprimir en pantalla si el número ingresado es positivo.

Haz clic aquí para ver la solución posible
Python
n = int(input("ingrese un numero: ")) # la función `input()` siempre devuelve una cadena de caracteres como resultado. Es preciso convertir ese resultado a número entero.

if n > 0:
    print(n, "es positivo.") # usamos la coma ( , ) en lugar del operador de concatenación ( + ) para evitar hacer Casting con el entero al concatenar

En este ejercicio, al imprimir utilizando la coma en lugar del operador de concatenación, lo que se está haciendo es imprimir un conjunto de argumentos en lugar de armar una cadena de texto.
Esto permite "mezclar" distintos tipos de dato entre si, porque en realidad no se está mezclando nada.

Si en lugar de utilizar la coma se hubiera utilizado el operador de concatenación, se tendría que haber compatibilizado todos los tipos de dato como cadenas:

Python
print(str(n) + " es positivo.")

Estructura alternativa doble

La estructura alternativa doble (control de flujo condicional if … else … end if) se utiliza para ejecutar un bloque de código si la condición es verdadera y otro bloque de código si la condición es falsa.

Código generalizado
if (x > 10) {

    // el bloque de código que contiene esta rama de la estructura alternativa se ejecuta solo si x es mayor a 10
    print("El número es mayor a 10.")

} else {

    // el bloque de código que contiene esta rama de la estructura alternativa se ejecuta solo si x NO es mayor a 10
    print("El número no es mayor a 10.")

}

Ejercicio de aplicación:

Ingresar un número entero por teclado.
Luego imprimir en pantalla si el número ingresado es positivo o negativo.

¡Atención! Limitación

En este ejercicio vamos a descartar el cero. No lo tendremos en cuenta.

Haz clic aquí para ver la solución propuesta
Python
n = int(input("ingrese un numero: ")) # la función `input()` siempre devuelve una cadena de caracteres como resultado. Es preciso convertir ese resultado a número entero.

if n > 0:
    print(n, "es positivo.") # usamos la coma ( , ) en lugar del operador de concatenación ( + ) 

else
    print(n, "es negativo.") # usamos la coma ( , ) en lugar del operador de concatenación ( + ) 

Estructura alternativa doble anidada

En la estructura alternativa doble anidada (control de flujo condicional if … elseif … … end if) se utilizan múltiples if … else if … end if para decidir el flujo de control, respetando la lógica arriba explicada.

Código generalizado
if (x > 10) {

    // el bloque de código que contiene esta rama de la estructura alternativa se ejecuta solo si x es mayor a 10
    print("El número es mayor a 10.")

} else if (x == 10) {

    // el bloque de código que contiene esta rama de la estructura alternativa se ejecuta solo si x es igual a 10
    print("El número es igual a 10.")

} else {

    // el bloque de código que contiene esta rama de la estructura alternativa se ejecuta solo si x NO es mayor y NO es igual a 10
    print("El número no es mayor y no es igual a 10. Es menor.")

}

¡Para recordar!

Dependiendo del lenguaje de programación, la estructura else if podría escribirse diferente, como elseif o elif por ejemplo.

Ejercicio de aplicación:

Ingresar un número entero por teclado.
Luego imprimir en pantalla si el número ingresado es positivo, negativo o neutro.

Haz clic aquí para ver la solución propuesta
Python
n = int(input("ingrese un numero: ")) # la función `input()` siempre devuelve una cadena de caracteres como resultado. Es preciso convertir ese resultado a número entero.

if n > 0:
    print(n, "es positivo.") # usamos la coma ( , ) en lugar del operador de concatenación ( + ) 

elif n < 0:
    print(n, "es negativo.") # usamos la coma ( , ) en lugar del operador de concatenación ( + ) 

else:
    print(n, "es neutro.") # usamos la coma ( , ) en lugar del operador de concatenación ( + ) 

Diferencia entre if como expresión vs. if como sentencia

¡Importante!

La diferencia entre expresiones y sentencias es que las expresiones devuelven un valor y, por lo tanto, se pueden usar en lugares donde se requieren valores, mientras que las sentencias son instrucciones o bloque de instrucciones que se ejecutan en un programa, pero en si, no devuelven ningún valor si no a través de una expresión contenida en la sentencia.

Así, el resultado de una expresión se puede usar como valor para almacenar en una variable, como argumento para pasar a una función, o como operando para realizar alguna operación con operadores; mientras que las sentencias no devuelven ningún resultado .

Si la estructura if se utiliza como expresión, podrías hacer esto:

Código generalizado
const miValor = if condición { valor1 } else { valor2 }

Si la estructura if se utiliza como sentencia, podrías hacer esto:

Código generalizado
int miValor
if condición {
    miValor = valor1
} else {
    miValor = valor2
}

Estructura alternativa múltiple

La estructura alternativa múltiple (control de flujo condicional switch) se usa para decidir el control de flujo basado en casos, usando la cláusula switch.

la estructura switch entra en esta categoría, donde la selección se realiza utilizando las declaraciones de case y default. Es una manera alternativa a la sentencia if … else … end if anidada para evaluar decisiones múltiples.

Esta estructura se combina con sentencias de interrupción o salto y sentencias etiquetadas, como veremos más adelante.

Cuando el valor de opción no se corresponde con ningún caso (case) y existe el caso default, se ejecuta el bloque correspondiente a dicho caso.

Las declaraciones case y default no interrumpen por sí mismas el flujo de control del programa. Por ello, es necesario una sentencia de salto (normalmente la instrucción break).

Si se omite el break al final de un caso, el programa pasa a ejecutar las sentencias de los casos siguientes hasta encontrar un break o hasta el final del switch.

Se recomienda situar el caso default en último lugar e incluir siempre un break al final de su secuencia de sentencias asociada.

Código generalizado
int opcion = 2;

switch (opcion) {
    case 1:
        print("Esta rama de flujo del programa se recorre cuando se elige la opción 1.");
        break;

    case 2:
        print("Esta rama de flujo del programa se recorre cuando se elige la opción 2.");

    default:
        print("Esta rama de flujo del programa se recorre por defecto si no hay una opción case que concuerde.");
        break;   
}   

No pueden existir dos casos iguales en un mismo switch (un mismo caso, sí puede ocurrir en distintos switch anidados).

¡Para recordar!

Una sentencia switch es más eficiente que una escalera de if-else anidada.