Estructura Algorítmica Selectiva

En este artículo describiremos qué es una estructura selectiva también conocidas como estructuras condicionales, poniendo énfasis en cuándo utilizarla. La estructura algorítmica selectiva es una estructura de control de flujo que permite que desarrollemos lo que se conoce como lógica de programación. Te recomendamos que visites nuestro artículo Estructuras Algorítmicas si no conoces qué es el flujo y el control de flujo. A continuación, revisaremos las estructura algorítmicas selectivas simple, dobles, anidadas y múltiples. En los siguientes enlaces, además, presentamos la implementación de estas estructuras en los lenguajes de programación ANSI C, Java y Python

Las estructuras algorítmicas selectivas, permiten que los algoritmos ejecuten un conjunto de instrucciones si es que se cumple determinada condición. La condición suele estar expresada usando lógica proposicional, es decir en una proposición lógica cuyo valor es o verdadero o falso

Las estructuras algorítmicas selectivas las utilizamos cuando en nuestros algoritmos necesitamos tomar decisiones desarrollando así la lógica de programación. La decisión a tomar será determinar si es necesario ejecutar o no un conjunto de instrucciones. Según el control condicional que se realice, la estructura selectiva puede clasificarse como:

  • Estructura selectiva simple o condicionales simples.
  • Estructura selectiva doble o condicionales dobles.
  • Estructura selectiva anidada o condicionales anidadas.
  • Estructura selectiva múltiple o condicionales múltiples.

Estructura Selectiva Simple

Definición de la Selectiva Simple

La estructura algorítmica selectiva simple permite ejecutar un conjunto de instrucciones si y solo si se cumple determinada condición. Si la condición no se cumple, el conjunto de instrucciones no se ejecuta.

El análisis de esta estructura se encuentra sintetizado en el vídeo «Selectiva Simple en PSeInt» en nuestro canal de YouTube. Te invitamos a que lo visites.

Representación de la Selectiva Simple en diagrama de flujo

A continuación mostramos la representación de la estructura selectiva simple en diagrama de flujo. Para la presentación de los diagramas de flujo, se ha usado la herramienta PSeInt, la cual puede descargarse de forma gratuita en este enlace. Esta herramienta permite ejecutar los algoritmos lo cual es interesante pues permite verificar el diseño algorítmico.

En esta representación, el flujo se especifica mediante una flecha que indica el camino a través del cual se ejecutan las instrucciones. El flujo normalmente se dirige de arriba hacia abajo, de forma secuencial.

La selectiva simple permite alterar dicho flujo. Como habíamos comentado anteriormente, la selectiva simple, permite que se ejecute un bloque de instrucciones si se cumple determinada condición. Pero, ¿cómo representamos a dicha condición en el diagrama de flujo? Pues a través de un rombo. La condición se coloca dentro del rombo. Como la condición es una expresión lógica, solo puede tener dos valores, \texttt{Verdadero} o \texttt{Falso}, por este motivo se diseñan dos caminos, uno a la izquierda del rombo etiquetado con F y otro a la derecha del rombo etiquetado con V.

Si la condición es verdadera, el flujo se dirige hacia la derecha, a través de la rama etiquetada con V. Si la condición es falsa, el flujo se dirige hacia la izquierda, usando la rama etiquetada con F.

Luego se asocia un conjunto de instrucciones a la rama etiquetada con V. Como el flujo en un algoritmo es secuencial, este conjunto de instrucciones se ejecutará solamente si la condición es verdadera. Si la condición de la selectiva se evalúa con \texttt{Falso}, no se ejecuta ninguna instrucción.

representación en diagrama de flujo de la selectiva simple
Representación en diagrama de flujo de la selectiva simple

Representación de la Selectiva Simple en pseudocódigo

A continuación mostramos la representación en pseudocódigo. Para este fin, también se ha usado la herramienta PSeInt. Una de las ventajas que ofrece esta herramienta es que permite obtener,  de forma automática, el diagrama de flujo si es que se tiene el pseudocódigo.

La instrucción selectiva en pseudocódigo se representa mediante la instrucción \texttt{Si}. Para marcar el fin de la instrucción, se usa el comando \texttt{FinSi}. Dentro del \texttt{Si}-\texttt{FinSi}, se colocan las \texttt{instrucciones} que se deberán ejecutar cuando la \texttt{condición} sea verdadera.

representación en pseudocódigo de la selectiva simple
Representación en pseudocódigo de flujo de la selectiva simple

Estructura Selectiva Doble

Definición de la Selectiva Doble

La estructura algorítmica selectiva doble permite ejecutar un conjunto de instrucciones si y solo si se cumple determinada condición, de forma similar a la estructura selectiva simple. Pero, a diferencia de ella, si la condición no se cumple, se ejecuta un conjunto de instrucciones diferente.

Se le denomina selectiva doble pues existen dos caminos, dos flujos de instrucciones hacia donde se puede dirigir el algoritmo. El algoritmo debe tomar una decisión entre dos posibles flujos de instrucciones. Se le suele denominar también bifurcación pues el control del flujo se dirige hacia una rama de dos posibles.

El análisis de esta estructura se encuentra sintetizado en el vídeo «Selectiva Doble en PSeInt» en nuestro canal de YouTube. Te invitamos a que lo visites.

Representación de la Selectiva Doble en diagrama de flujo

A continuación mostramos la representación de la estructura selectiva doble en diagrama de flujo. Para la presentación de los diagramas de flujo, se ha usado la notación de la herramienta PSeInt. 

La selectiva doble, al igual que cualquier otra estructura selectiva, permite alterar dicho flujo. Para esto se verifica una \texttt{condición}. La \texttt{condición} se representa a través de un rombo. La \texttt{condición} se coloca dentro del rombo. Como la \texttt{condición} es una expresión lógica, solo puede tener dos valores, Verdadero o Falso, por este motivo se diseñan dos caminos, uno a la izquierda del rombo etiquetado con F y otro a la derecha del rombo etiquetado con V.

Si la \texttt{condición} es verdadera, el flujo se dirige hacia la derecha, a través de la rama etiquetada con V. Si la \texttt{condición} es falsa, el flujo se dirige hacia la izquierda, usando la rama etiquetada con F. Luego se asocia un conjunto de instrucciones a la rama etiquetada con V y otro conjunto de instrucciones a la rama etiquetada con F. Cuando la condición es verdadera se ejecuta el conjunto de instrucciones de la rama etiquetada con V y si la condición es falsa, se ejecutan las instrucciones de la rama etiquetada con F. 

Como podrá notar, la diferencia que existe con la selectiva simple, es que ahora se ha asociado una instrucción a la rama etiquetada con F, por lo que existen dos caminos alternativos, pero solo se puede ejecutar uno de ellos.

representación en diagrama de flujo de la selectiva doble
Representación en diagrama de flujo de la selectiva doble

Representación de la Selectiva Doble en pseudocódigo

A continuación mostramos la representación de la selectiva doble en pseudocódigo. La  selectiva doble en pseudocódigo se representa mediante la instrucción \texttt{Si}-\texttt{SiNo}. La \texttt{condición} se coloca luego de la cláusula \texttt{Si} y antes de la cláusula \texttt{Entonces}.

Las instrucciones que se deberán ejecutar en caso la condición sea verdadera, se colocan entre las cláusulas \texttt{Si} y \texttt{SiNo}. Las instrucciones que se deberán ejecutar en caso la condición sea falsa, se colocan entre las cláusulas \texttt{SiNo} y \texttt{FinSi}.

El comando \texttt{FinSi} marca el fin de la instrucción.

representación en pseudocódigo de la selectiva doble
Representación en pseudocódigo de flujo de la selectiva doble

Estructura Selectiva Anidada

Definición de la Selectiva Anidada

Tal como se ha mencionado, la estructura selectiva permite tomar decisiones sobre el control de flujo. Si deseamos tomar la decisión de ejecutar o no un conjunto de instrucciones, podemos usar una selectiva simple. Si deseamos decidir la ejecución de entre dos conjunto de instrucciones, podemos usar una selectiva doble. Pero, ¿qué pasa si queremos tomar decisiones sobre más de dos conjuntos de instrucciones? pues en ese caso se debe usar la estructura selectiva anidada también denominada estructura selectiva compuesta.

En el diseño algorítmico, la anidación no es más que la inclusión de una o más estructuras de determinado tipo en otra estructura del mismo tipo. En nuestro caso, la estructura selectiva anidada no es más que usar una estructura selectiva dentro de otra estructura selectiva.

Por ejemplo, si necesitamos tomar la decisión de entre 3 conjuntos de instrucciones, pues tenemos que anidar una selectiva doble dentro de una selectiva doble. Si necesitamos más caminos, podemos anidar más estructuras selectivas, pero debemos tener cuidado pues al anidar estructuras selectivas, aumentamos la complejidad ciclomática de nuestro algoritmo. Algoritmos con complejidad ciclomática alta (>20), son complicados de probar y depurar.

Representación de la Selectiva Anidada en diagrama de flujo

Como comentamos anteriormente, no existe una nueva instrucción selectiva para este tipo de control de flujo, sino que se le clasifica de esta manera por el uso que se le da al momento de diseñar algoritmos que toman decisiones.

A continuación presentamos un posible ejemplo de representación de la estructura selectiva anidada en diagrama de flujo. Se hace hincapié que es un posible ejemplo pues, dependiendo de la cantidad de caminos u opciones que requieran y de donde se coloque la anidación, las representaciones podrán variar. 

 Como podrá notar en el ejemplo que se presenta a continuación, existen dos condiciones, pues existen dos estructuras selectivas dobles. Una dentro de otra, conformando una estructura selectiva compuesta.

Podrá notar 3 caminos: el de instruccionesF1, instruccionesF2 e instruccionesV2. Las instruccionesF1 se ejecutarán cuando la \texttt{condición1} sea falsa, las instruccionesF2 se ejecutarán cuando la \texttt{condición1} es verdadera y la \texttt{condición2} es falsa. Las instruccionesV2 se ejecutarán cuando la \texttt{condición1} es verdadera y la \texttt{condición2} es verdadera. 

representación en diagrama de flujo de la selectiva anidada
Representación en diagrama de flujo de la selectiva anidada

Representación de la Selectiva Anidada en pseudocódigo

En la imagen que se presenta a continuación, se presenta el pseudocódigo que corresponde con el diagrama de flujo presentado anteriormente para la selectiva anidada.

representación en pseudocódigo de la selectiva anidada
Representación en pseudocódigo de flujo de la selectiva anidada

Estructura Selectiva Múltiple

Definición de la Selectiva Múltiple

La estructura selectiva múltiple permite al algoritmo tomar la decisión de ejecutar un conjunto de instrucciones de entre varios disponibles. En esencia, tiene la misma finalidad que la estructura selectiva anidada, pero para poder usarla, hay que tener en consideración lo siguiente:

  • En la selectiva múltiple no existen condiciones, sino una variable, denominada muchas veces selector, a través de la cuál el algoritmo comparará su valor. En las implementaciones de la estructura selectiva múltiple en los lenguajes de programación, esta variable selector debe ser de tipo ordinal (como los enteros, los caracteres y los enumerados).
  • Cada conjunto de instrucciones tiene asociado uno o más valores, cuando el selector tome el valor asociado con este conjunto, sus instrucciones se ejecutarán.

La estructura selectiva múltiple es un caso particular de la estructura selectiva anidada. Se da cuando la variable usada en el condición es ordinal y además la condición es una simple operación relacional de comparación \texttt{=}. Por esto su uso es muy reducido a cierto tipo de situaciones como los menú de opciones por ejemplo.

Representación de la Selectiva Múltiple en diagrama de flujo

A continuación mostramos la representación en diagrama de flujo de la estructura selectiva múltiple. Como se puede apreciar, existen varios caminos o ramas alternativas de flujo, entre ellas instrucciones1, instrucciones2, instrucciones3 e instruccionesN

¿Cómo funciona la selectiva múltiple? Se ha definido una variable selector, que la hemos denominado variable. Esta variable selectora contiene un valor. Cuando el valor de esta variable coincide con el valor1, se ejecuta el conjunto de instrucciones1. Cuando coincide con el valor2, se ejecuta el conjunto de instrucciones2. Cuando coincide con el valor3, se ejecuta el conjunto de instrucciones3. Y si el valor de la variable no coincide con ningún valor predefinido, se ejecuta el conjunto de instruccionesN.

Recalcamos que el mismo resultado se puede conseguir con las estructuras selectivas anidadas, en donde la expresión de las condiciones es de la siguiente forma variable=valor_x.

representación en diagrama de flujo de la selectiva múltiple
Representación en diagrama de flujo de la selectiva múltiple

Representación de la Selectiva Múltiple en pseudocódigo

La representación en pseudocódigo de la selectiva múltiple se presenta en la siguiente figura. Podrá apreciar en tanto el pseudocódigo como el diagrama de flujo son dos forma de representar las estructuras selectivas. Tendrán siempre la misma estructura. Solo que el diagrama de flujo es una representación más visual y el pseudocódigo es una representación más textual. 

representación en pseudocódigo de la selectiva múltiple
Representación en pseudocódigo de flujo de la selectiva múltiple

Conclusión

En este artículo hemos presentado la estructura algorítmica selectiva. Se han descrito las diferentes formas de uso de esta estructura poniendo énfasis en las selectivas simple, dobles, anidadas y múltiples. Se ha presentado también su representación tanto en diagrama de flujo como pseudocódigo usando la herramienta PSeInt.

Te invitamos a que accedas a los siguientes enlaces para ver cómo se implementan estas estructuras en los lenguajes de programación ANSI C, Java y Python

Si te interesa profundizar más sobre este tema, te recomendamos el libro Foundations of Programming Languages de Kent D. D. Lee. En este libro encontrarás además información detallada sobre la programación orientada a objetos, funcional y lógica.