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.
ÍNDICE:
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
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
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
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
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…