Contenido del capítulo

En un capítulo anterior te expliqué cómo funcionaba el condicional if (Si-Entonces en PSeInt). En este, te voy a mostrar el otro tipo de condicional, muy a menudo conocido como switch en muchos lenguajes de programación.

Duración estimada de todo el contenido:
Duración del vídeo:
Contiene 1 ejercicio de programación para resolver. Contiene 1 vídeo.
Tabla de contenidos
Logo

    El condicional Segun de PSeInt

    El condicional SWITCH
    El condicional SWITCH

    El condicional switch en Python se llama match y en PSeInt Segun.

    Se puede traducir la palabra switch como conmutador o interruptor en español, aunque casi nadie utiliza ese término. Normalmente no se traduce del inglés.

    Espacio publicitario

    Puedes añadir el comando completo con este botón de la sección de comandos:

    Comando Segun de PSeInt

    Sintaxis de Según de PSeInt

    En la siguiente página puedes ver la sintaxis de la estructura Segun de PSeInt. Contamos con varias opciones y con un bloque alternativo, por si no se da el caso de ninguna.

    Segun variable_numerica Hacer
        opcion_1:
            secuencia_de_acciones_1
        opcion_2:
            secuencia_de_acciones_2
        opcion_3:
            secuencia_de_acciones_3
        De Otro Modo:
            secuencia_de_acciones_dom
    Fin Segun

    Partes del condicional Segun de PSeInt

    Parte Segun

    La parte Segun es con la que se declara la estructura estilo switch en PSeInt. A esta, le vamos a pasar una variable de cualquier tipo para que le de un valor.

    Entonces, evaluaremos según ese valor. Por ejemplo, si es una variable numérica que tiene un valor 10, solo ese valor, dará un valor booleano VERDADERO.

    Parte Hacer

    Esta parte, tiene una utilidad meramente semántica. Se utiliza para expresar que en torno al valor dado en el Segun, se "hará" lo que viene en su sección de código.

    Parte opción o case

    Las opciones, también llamadas con frecuencia case en inglés, son posibles bloques de código que se ejecutarán solo si coinciden con el valor de la variable pasada. Entonces, si el valor de la variable es 10 y hay una opción 10, esta evalúa como VERDADERO. El resto FALSO.

    La palabra case se puede traducir como caso u opción.

    Parte De Otro Modo

    Esta parte, es como el SiNo del condicional Si-Entonces (if). Si todo lo anterior es FALSO, se ejecutará como última alternativa este bloque.

    Espacio publicitario

    Parte Fin Segun

    La última parte, se usa para finalizar la estructura.

    Ejemplo práctico del condicional Segun de PSeInt

    Algoritmo ejemplo_condicional_segun
    
        //Definición del valor para evaluar
        Definir dia_semana Como Entero
    
        // Solicitud del valor
        Escribir "Ingrese un número del 1 al 7 para representar un día de la semana:"
        Leer dia_semana
    
        // Condicional Segun
        Segun dia_semana Hacer
            Caso 1:
                Escribir "Lunes"
            Caso 2:
                Escribir "Martes"
            Caso 3:
                Escribir "Miércoles"
            Caso 4:
                Escribir "Jueves"
            Caso 5:
                Escribir "Viernes"
            Caso 6:
                Escribir "Sábado"
            Caso 7:
                Escribir "Domingo"
            De Otro Modo:
                Escribir "Número inválido. Ingrese un valor del 1 al 7."
        Fin Segun
    FinAlgoritmo

    Empezamos este condicional con la palabra Segun. Ahí espera una variable para evaluar. Según el número que tenga, se cumplirá una de las opciones.

    El condicional entra primero en el primer Caso (los casos son las posibles opciones). Este no tiene porqué tener un valor 1, puede ser otro. Sin embargo, aquí en concreto, se evalúa si el valor de la variable dia_semana es igual a 1, este Caso nos devuelve un VERDADERO y se ejecuta solo él. El resto se ignoran.

    Si la primera opción evalúa como FALSO, se pasa a evaluar la segunda. Si el valor de la variable dada al Segun concuerda con el valor de esta opción (2), se ejecuta y el resto no se evalúan.

    Así sucesivamente hasta llegar al De Otro Modo. Este es el equivalente al SiNo. Si todo es FALSO, siempre se ejecuta el código de este bloque.

    Probando el algoritmo con Según

    Voy a probar alguna opción, tú pruébalas todas si quieres.
    Introduzco un 4. Esto hace que el Caso 1 sea FALSO, el Caso 2 y Caso 3 igual. Luego llega al Caso 4, coincide, y da un VERDADERO que hace que se ejecute el bloque de dicho Caso.

    Probando el algoritmo con switch

    Si todos son FALSO, se ejecutaría el bloque De Otro Modo.

    Diagrama de flujo del condicional Segun

    Tenemos un algoritmo muy ordenado, con ocho posibles caminos que pasan por el Segun:

    Condicional switch

    Segun (switch) vs Si-Entonces (if)

    El condicional switch suele ser menos utilizado que el if en los programas. Ya que se utiliza más para casos donde tienes un montón de opciones relacionadas y las quieres evaluar todas de forma unificada.

    Espacio publicitario

    Sin embargo, aunque el if se utilice más en general, no es la mejor opción en todos los casos. Por ejemplo, para esta evaluación, es mejor un switch que un if. Veamos la diferencia con el mismo código anterior, escrito esta vez con Si-Entonces (if):

    Algoritmo ejemplo_condicional_si
        Definir dia_semana Como Entero
    
        Escribir "Ingrese un número del 1 al 7 para representar un día de la semana:"
    
        Leer dia_semana
    
        Si dia_semana = 1 Entonces
            Escribir "Lunes"
        Sino
            Si dia_semana = 2 Entonces
                Escribir "Martes"
            Sino
                Si dia_semana = 3 Entonces
                    Escribir "Miércoles"
                Sino
                    Si dia_semana = 4 Entonces
                        Escribir "Jueves"
                    Sino
                        Si dia_semana = 5 Entonces
                            Escribir "Viernes"
                        Sino
                            Si dia_semana = 6 Entonces
                                Escribir "Sábado"
                            Sino
                                Si dia_semana = 7 Entonces
                                    Escribir "Domingo"
                                Sino
                                    Escribir "Número inválido. Ingrese un valor del 1 al 7."
                                FinSi
                            FinSi
                        FinSi
                    FinSi
                FinSi
            FinSi
        FinSi
    FinAlgoritmo

    Con esto, puedes ver qué condicional es mejor en este caso. Habrá otros casos en los que el if sea más conveniente; cosa que aprenderás con un poco de práctica.

    Y si miras el diagrama, es un auténtico laberinto:

    Diagrama del condicional if

    Te recomiendo que vayas revisando los diagramas y vayas viendo cual es más fácil de leer. Seguramente, esa sea la opción acertada en tu algoritmo.

    Como curiosidad, un switch de red es un dispositivo electrónico que conecta múltiples dispositivos en una red local informática, permitiendo la comunicación entre ellos al enviar los datos a los dispositivos de destino correctos. Por otro lado, un switch de programación es una estructura de control que selecciona entre múltiples opciones o casos basados en el valor de una expresión, redirigiendo el flujo del programa hacia el caso correspondiente. Ambos switches, ya sea en el ámbito de redes o programación, tienen la función de “tomar decisiones” y direccionar el flujo en función de condiciones específicas.

    Espacio publicitario




    Espacio publicitario


    Ejercicio de programación para resolver

    35. Para este ejercicio, quiero que simules un pequeño menú de consola.

    Este menú constará de dos partes. La de interfaz de usuario y la de la lógica.

    La parte de interfaz de usuario, va a ser la que se le muestre al usuario. Será simplemente una serie de Escribir, que le solicitarán un valor de entrada para elegir una opción del menú.

    Para que el usuario sepa que opciones tiene, debes mostrarle una serie de Escribir con cada opción que tiene. Por ejemplo, Escribir "1: Opción 1"., Escribir "2: Opción 2"...

    Crea al menos cuatro opciones, que puedes llamar como quieras, por ejemplo, opción 1, opción 2, etc. También, aparte de estas cuatro opciones, quiero que añadas una opción llamada "salir" y otra por si se selecciona un opción no válida.

    Después, tendrás que utilizar un condicional Segun, para hacer que cada opción, muestre un mensaje concreto.

    Las opciones, solo tendrán un simple Escribir, no hace falta que hagan nada más, solo que indiquen en la consola, que se ha seleccionado una opción en concreto.

    Deberás poner una entrada numérica para el usuario, con Leer. Esta admitirá valores enteros. Por ejemplo, puedes poner la opción 1 asociada al valor de entrada 1, la opción salir, asociada al valor 5 y si ponen un valor que no esté, como el 8, que indique que es un valor no contemplado, o algo por el estilo.

    Sé que es algo bastante más complicado que lo dado hasta ahora, así que espero que te gusten los retos. Si no lo consigues, no hay problema. Analiza bien la solución para ir aprendiendo más.

    Verás que una vez lo soluciones o mires la solución, era más fácil de lo que realmente parecía en un principio.

    En los ejemplos de la teórica, tienes todo lo necesario para crear la estructura necesaria, fíjate bien, y seguro que consigues realizar este ejercicio.

    Para que no vayas a ciegas, te dejo la imagen del menú que he hecho yo para este ejercicio, no importa que sea igual que el mío, pero con esto, te harás una idea.

    Menú hecho con el condicional Segun de PSeInt

    El ejercicio lo tenías que completar con dos partes sustanciales. La primera, una serie de Escribir, que mostrasen las opciones disponibles al usuario y como acceder a ellas. Por ejemplo, la opción 1 con el valor 1 en el Leer.
    La segunda parte, era la del condicional Segun.

    Algoritmo menu_consola
                              
        // Variable para las opciones
        Definir opcion Como Entero
    
        // Menú mostrado al usuario
        Escribir "Seleccione una opción:"
        Escribir "1 - Opción 1."
        Escribir "2 - Opción 2."
        Escribir "3 - Opción 3."
        Escribir "4 - Opción 4."
        Escribir "5 - Salir."
    
        // Entrada del valor de opción
        Leer opcion
    
        // Condicional para gestionar la lógica de cada opción
        Segun opcion Hacer
            Caso 1:
                Escribir "Ha seleccionado la opción 1."
            Caso 2:
                Escribir "Ha seleccionado la opción 2."
            Caso 3:
                Escribir "Ha seleccionado la opción 3."
            Caso 4:
                Escribir "Ha seleccionado la opción 4."
            Caso 5:
                Escribir "¡Hasta la próxima!"
            De Otro Modo:
                Escribir "Número inválido. Ingrese un valor del 1 al 5."
        Fin Segun
    
    FinAlgoritmo

    El resultado quedará de esta forma (puede que el tuyo sea algo diferente):

    Menú hecho con el condicional Segun de PSeInt

    Si introduzco un valor del 1 al 4, me ejecuta el mensaje correspondiente de cada opción. Si pongo el valor 5, me muestra el mensaje de despedida y finaliza el algoritmo (lo hace igual con cada opción). Finalmente, si pongo un número que no existe, como 8, me dice que el número es inválido, ya que no tiene ningún caso asociado a ella.

    Espacio publicitario



    Espacio publicitario