Secuencias de control: if, if-else, if-else-if, switch-case
Introducción
Bienvenidas y bienvenidos nuevamente a una clase más de programación básica. En esta clase estudiaremos a las estructuras de decisión. ¿Qué sería de nuestra vida si no tuviéramos que tomar decisiones? Es muy probable que nos tocaría vivir una vida completamente plana y aburrida. Lo mismo pasa con nuestros programas.
Las estructuras de decisión nos ayudan a eso, a elegir entre varias opciones. Hay momentos en el que el proceso deberá decidir entre varios caminos diferentes. Como en toda decisión la clave para acertar es hacer la pregunta apropiada y tener la información precisa para responder a la pregunta adecuada.
Afortunadamente en lógica matemática las preguntas se pueden plantear de tal manera que las respuestas sean binarias (cierto o falso).
Así pues, en esta clase aprenderemos a redactar preguntas que puedan ser respondidas de manera binaria y una vez contestada la pregunta escribir el código.
Sin más preámbulo veamos cuales son estas secuencias y como se usan en el lenguaje C.
Desarrollo del tema
Las estructuras de decisión o de control las vimos en la sección de diagramas de flujo y están representadas por un rombo donde en el interior se escribe una pregunta redactada de tal forma que solo puede ser contestada de dos maneras, cierto o falso:
El símbolo nos indica que el flujo del programa irá por la derecha si la respuesta a la pregunta es un sí, y seguirá por abajo si la respuesta es no.
Las opciones que tenemos en C para realizar una secuencia condicional es el if , el if-else y combinando las dos opciones podríamos realizar un if-else-if.
Comencemos por entender el if, la sintaxis es la siguiente:
if (condición lógica)
Instrucción;
Notemos lo siguiente, la secuencia comienza con la palabra reservada if, luego, entre paréntesis se debe tener una condición lógica. Note también que no hay ningún ; después de cerrar el paréntesis de la condición lógica, y finalmente se pone la instrucción que se ejecutará solamente si la condición lógica tiene valor de cierto. En términos de diagrama de flujo el comando se representa de la siguiente manera:
Si deseamos que la instrucción esté realmente conformada por múltiples comandos, lo que podemos hacer es agrupar estos comandos entre llaves “{}”:
if (condición lógica)
{
Instrucción 1;
.
.
.
Instrucción N;
}
El uso de llaves lleva al siguiente diagrama de flujo:
Una anotación MUY importante, recuerden que dentro de los paréntesis del if va una condición lógica, si lo que escribimos no fuese una condición lógica, el compilador haría una conversión (cast) implícita (revise la clase donde se discute con cuidado esto de los casts) y la regla de cast implícito de valores numéricos a lógicos es la siguiente: cualquier valor diferente de 0 se convierte a un valor lógico de verdadero y solamente el valor 0 numérico tiene la conversión al estado lógico de falso. Esta anotación, lo vivirán en carne propia, es fundamental para entender el comportamiento del programa en un clásico error que veremos en la sección de errores.
La pareja de palabras reservadas if-else :
if (condición lógica)
{
Instrucciones para el if ;
}
else
{
Instrucciones para el else
}
El diagrama de flujo es el siguiente:
La condición if-else-if se refiere a poner dos condiciones lógicas, el código queda de la siguiente manera:
if (cond 1)
{
Instrucciones del primer if
}
else
{
If (cond 2)
{
Instrucciones del segundo if
}
}
El diagrama de flujo es el siguiente:
Note que el grupo de instrucciones del camino de la izquierda se ejecutarán solamente si la cond1 es falsa y además la cond2 es verdadera, mientras que el camino de la derecha se ejecutará si la cond1 es verdadera y no importa cual condición esté en cond2.
Errores comunes:
Existen dos errores MUY frecuentes al usar el if, el primero es escribir el if de la siguiente manera:
If (condicion logica);
{
Instrucciones;
}
El error as haber puesto un ; en la línea del if (¡A que no te habías dado cuenta que el if no lleva ;!) en este caso el compilador interpreta este if como si estuviera vacía la serie de instrucciones con la condición cierta y SIEMPRE se ejecutarán las instrucciones que están dentro de las llaves.
El segundo error es no escribir una condición lógica dentro del paréntesis, veamos un ejemplo:
if (a=10)
{
Instrucciones;
}
Note que dentro del paréntesis hay un solo símbolo =, por lo que el programa asignará el valor de 10 a la variable a y luego hará un cast implícito del valor de a a una condición lógica. Recordemos la regla de conversión, valores numéricos distintos de 0 se convierten a verdadero y el valor numérico 0 a falso, así pues, Instrucciones SIEMPRE se ejecutarán y el valor de a se perderá y acabará valiendo 10.
Conclusión
Con esta clase hemos revisado las opciones que tiene C para generar secuencias de control. Recordemos que las secuencias de control sirven para tomar decisiones dentro de la ejecución de un programa, dada una condición lógica se decide ejecutar o no un grupo de instrucciones su otro grupo.
En C tenemos al if , al if-else, y al if-else-if como posibles secuencias de control. Te recomendamos ir a la sección de Errores comunes para aprender de ellos y que no nos ocurran.
Fuentes de información
- 100 Problemas resueltos de programación en lenguaje C para la ingenieria. https://books.google.com.mx/books?id=KZI-DwAAQBAJ&printsec=frontcover&dq=lenguaje+de+programacion+en+c&hl=es-419&sa=X&redir_esc=y#v=onepage&q&f=false
- Estructuras de control https://es.wikipedia.org/wiki/Estructuras_de_control
- Programación en C/Instrucciones de control https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Instrucciones_de_cont