Programación: estructura de control selectiva

Siguiente entrada de la serie Programación, sobre el lenguaje C. En la anterior introduje a las estructuras de control secuencial. Pero no son las únicas estructuras de flujo que existen en los programas. Se puede crear otro tipo de código fuente con unas estructuras de control selectivas. Es decir, las instrucciones del programa no ejecutarán secuencialmente como en las otras estructuras.

En este caso, también habrá una única entrada y una sola salida en la que se elige entre una acción (una o varias instrucciones) entre varias posibles. La forma de elegir la acción se realizará en función del resultado de evaluar una condición previa. La condición que puede alterar el camino o ruta alternativa que puede tomar el programa será simple o compuesta. Dicho de otro modo, el programador dota al programa de cierta capacidad de decidir.

Introducción

Para que eso sea posible se necesitan expresiones de condición. Una de ellas es la expresión booleana. En este caso, si el resultado es cero, se considera falsa. Mientras que si es uno se tomará como cierta. Por ejemplo, usando pseudocódigo:

x=1;
if (x=1)    //Sí se cumple que la variable x es igual a 1 como resultado de una operación anterior. En ese caso será uno, por lo que se ejecutan las instrucciones que dependen de esta evaluación

z=3;
if (z>7)  //No se cumple, ya que 3 no es mayor que 7 nunca. Por tanto, no se ejecutaría las instrucciones de esta condición. 

También podría haber otras estructuras o bloques de sentencias con instrucciones compuestas {} que se ejecutan en función de si se cumple o no la condición. Por ejemplo:

//Se toman como si fuese una sola sentencia
{
     instrucción0
     instrucción1
               . . .
     instrucciónn
}

No te preocupes si no lo comprendes, en el siguiente apartado hay más detalles y ejemplos prácticos…

Tipos de estructuras de control selectivas

Dentro de las estructuras de control de tipo selectivo se pueden dar varios tipos como:

Simple if

estructura de control 1

Se ejecutarán una o varias instrucciones en función de si se cumple o no una condición. Si es verdadera, se ejecutarán esas instrucciones, de ser falsa no se hará. Aquí un ejemplo de pseudocódigo:

si(condición )
     inicio
               instrucción0
               instrucción1
                       .   .   .
               instrucciónn
      fin

Y un ejemplo práctico en C:

include <stdio.h>

main()
{
     int num;
     printf("Introduce un número: ");
     scanf("5d", num);
     if (num > 60) {
               printf("Tu número es mayor a 60");
     }
     return 0;
}

Doble if/else

estructura de control 2

En este caso se ejecutarán una acción en caso de que sea verdadera y en caso contrario se ejecutará otra acción alternativa. Cada una de esas acciones, como en el caso anterior, puede ser una o varias instrucciones. En pseudocódigo:

si(condición)
     instrucción/es A
sino
     instrucción/es B
fin

En el caso del código C:

#include <stdio.h>
int main() {
    int num;
    printf("Introduce un número entero: ");
    scanf("%d", &numr);
    //Si el numero introducido se divide entre 2 y el resto es igual a 0...
    if  (num%2 == 0) {
        printf("%d es un entero par.",num);
    }
    //En cualquier otro caso...
    else {
        printf("%d es un número impar.",num);
    }
    return 0;
}

Anidadas if-else-if

estructura de control 3

El anidamiento es cuando se usa una estructura dentro de otra. En este caso se trata de usar una if dentro de otra if. Si ambas se cumplen se realizará la acción. En caso contrario (else) se procesa otra acción diferente. El pseudocódigo sería:

si(condición1)
     instrucciónA0
     instrucciónA1
             .  .  .
     instrucciónAn
sino
     si(condición2)
          instruccionB1
          instrucciónB2
                 .   .  .
          instrucciónBn
     sino
          instrucciónC0
          instrucciónC1
                .   .   .
          instrucciónCn
fin

En cuanto al ejemplo en C:

#include <stdio.h>
int main() 
{
        int num1, num2;
        printf("Entra dos números enteros: ");
        scanf("%d %d", &num1, &num2);
        if (num1 >= num2) {
             if (num1 == num2) {
                    printf("Resultado: %d = %d",num1,num2);
          }
          else {
            printf("Resultado: %d > %d", num1, num2);
          }
        }
        else {
            printf("Resultado: %d < %d",num1, num2);
        }
        return 0;
}

Multiple con switch

estructura de control 4

En este caso se selecciona entre varias posibilidades dependiendo del valor de la expresión. Explicado en pseudocódigo sería algo similar a:

según sea(expresión)
inicio
          caso1;
              instrucción/es
              salir
          caso2;
              instrucción/es
              salir
          cason;
              instrucción/es
              salir
fin

El código fuente en C del ejemplo sería:

#include <stdio.h>
#include <conio.h>
main()
{
     int diasemana;
     printf("Introduce el número de día de la semana: \n");
     scanf("%d", $díasemana);
     switch(diasemana)
     {
           case 1: printf("Lunes");
                         break;
           case 2: printf("Martes")
                         break;
           case 3: printf("Miércoles");
                         break;
           case 4: printf("Jueves");
                         break;
           case 5: printf("Viernes");
                         break;
           case 6: printf("Sábado");
                         break;
           case 7: printf("Domngo");
                         breal;
           default: printf("Solo se admiten números del 1 al 7, ese día de la semana no existe");
      }
      getch();
      return 0;
}

Switch anidada (case)

Similar a la anterior, pero anidada. Es decir, una estructura switch dentro de otra…

En el próximo veremos algunas estructuras más, y en futuros artículos pondré ejemplos prácticos de código con pequeños snippets…

Isaac

Apasionado de la computación y la tecnología en general. Siempre intentando desaprender para apreHender.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto:

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar