facebook cdr twitter cdr   instagram cdr
Jueves, 05 October 2017 17:57

7. Estructuras de control de flujo

Escrito por
Valora este artículo
(0 votos)

Como ya mencionamos anteriormente, C es un ejemplo de programación estructurada. En este tipo de programación, es necesario contar con ciertas estructuras que permitan controlar el flujo del programa, es decir, tomar decisiones y repetir acciones. En este caso estudiaremos la estructuras de control de flujo.

flujo

7.1 Estructura condicional if-else

En la gran mayoría de los programas será necesario tomar decisiones sobre qué acciones realizar. Esas decisiones pueden depender de los datos que introduzca el usuario, si se ha producido algún error o de cualquier otra cosa. La estructura condicional if-else es la que nos permite tomar ese tipo de decisiones. Traducida literalmente del inglés, se la podría llamar la estructura "si-si no", es decir, "si se cumple la condición, haz esto, y sino, haz esto otro".

Un ejemplo sencillo sería el siguiente (no se trata de un programa completo, sino tan sólo una porción de código):

cap11

Este código de ejemplo dice que si el valor de la variable edad es mayor o igual a 18 se imprimirá "Eres mayor de edad", mientras que en caso contrario se imprimirá "Eres menor de edad".

Como se ve en el ejemplo, la estructura de un condicional es bastante simple:

if (condición) {
        sentencias_si_verdadero;
} else {
        sentencias_si_falso;
}

La condición, encerrada entre paréntesis, es una expresión que puede dar como resultado 0 (interpretado como falso) o cualquier valor distinto de 0 (interpretado como verdadero). Cuando la condición sea verdadera, se ejecutarán las sentencias dentro del primer bloque de código, cuando la condición sea falsa, se ejecutarán las sentencias del segundo bloque de código. Las expresiones y valores de tipo verdadero/falso son también llamados valores lógicos o booleanos.

La indentación o sangría (los espacios al comienzo de las líneas) no es necesaria, pero ayuda a la claridad del código. La utilización de las llaves {...} es obligatoria cuando se quiere utilizar más de una instrucción por bloque, y optativa cuando sólo se quiere escribir una instrucción. Por claridad, sin embargo, es recomendable utilizarlas aún cuando sólo vaya a haber una instrucción.

El bloque del else es opcional. Si no se lo encuentra, sólo se realizará la acción correspondiente al bloque if.

A continuación, un ejemplo con una función, que devuelve el mayor de dos números:

cap12

El símbolo > visto en el último ejemplo es un operador, que en este caso compara dos números enteros y devuelve verdadero si el primero es mayor, falso en caso contrario. Puedes regresar al apartado de operadores, buscar los operadores relacionales y ver otros operadores semejantes

Teniendo en cuenta que en C se toma como falso el valor 0, y como verdadero cualquier otro valor, una práctica común es expresar condiciones sin utilizar ningún operador.

cap13

En este caso, la expresión (divisor) es equivalente a (divisor != 0).

Los operadores && ("y"), || ("o") y ! ("no") son operadores lógicos. Permiten operar con expresiones lógicas para generar expresiones más complejas. Por ejemplo: determinar si un año es bisiesto o no. Los años son bisiestos si son divisibles por 4, pero no si son divisibles por 100, a menos que también sean divisibles por 400.

cap14

En este caso, se utiliza el operador módulo (%), que obtiene el resto de la división entera de un número por otro. Cuando un número es divisible por otro, el resto de su división entera será cero. Siendo que cero es equivalente a falso, y cualquier valor distinto de cero es equivalente a verdadero, podemos usar el operador % para verificar si el número es múltiplo de 4, de 100 o de 400.

Tambien se podría aplicar la sentencia else-if que sencillamente hace es que vuelve a preguntarle al programa si otra condición es verdadera. En este caso actuaría como "de lo contrario...si" ante cualquier otra sentencia. Un ejemplo de esta sería:

cap18

Aquí el programa verifica si la primera condición es cierta, en este caso si la clase de pelicula es igual a 'a'; si es verdadero el programa emite el mensaje, de lo contrario, vuelve a preguntar si la clase de pelicula es igual a 'b', y así sucesivamente hasta que alguna condicón se cumpla. Si no se cumple ninguna condición, ejecuta las instrucciones del bloque else. En este caso emite el mensaje "Clase inválida".

7.1.1 Evaluación de cortocircuito

La evaluación de cortocircuito es una característica del lenguaje C que se utiliza para optimizar la ejecución de programas. Consiste en que el programa puede verificar si una expresión es verdadera o falsa antes de haber evaluado toda condición.

Por ejemplo, si se tiene una condición como la siguiente:

cap15

Al ejecutarse el programa, se evaluará primero si a > 2. En el caso en que sea verdadero, no continuará con la siguiente condición, ya que el resultado será de cualquier modo verdadero. De la misma forma, si la condición fuera:

cap16

En este caso, si no se cumple que a > 2, no se evaluará la siguiente condición, ya que el resultado será falso de todos modos. Esta característica no tiene demasiada importancia al comenzar a programar, pero facilitará ciertas operaciones y optimizaciones en programas avanzados.

7.2 La estructura condicional abierta y cerrada switch - case

La estructura condicional switch - case se utiliza cuando queremos evitarnos las llamadas escaleras de decisiones. La estructura if nos puede proporcionar, únicamente, dos resultados, uno para verdadero y otro para falso. Una estructura switch - case, por su parte, nos permite elegir entre muchas opciones y funciona mejor que else-if. Ejemplo:

cap17

La estructura anterior, de realizarse con sentencias if, necesitaría cuatro de ellas, resultando un enorme bloque muy difícil de leer. En la mayoría de los casos, además, la sentencia switch proporciona una ganancia en velocidad del código, pues permite al compilador trabajar en base a que se trata de una decisión múltiple para una única variable, cosa que con sentencias if el compilador no tiene por qué detectar.

Como vemos, para cada valor de la variable se ejecuta un bloque de sentencias distinto, en el que no necesitamos llaves. Hay un caso especial, default, que se ejecuta si ningún otro corresponde, y que no es necesario poner. Es, en todo, equivalente al bloque else de una sentencia if.

Las sentencias break son muy importantes, ya que el comportamiento normal de un bloque switch es ejecutarlo todo desde la etiqueta case que corresponda hasta el final. Por ello, si no queremos que se nos ejecute más de un bloque, pondremos sentencias break al final de cada bloque excepto el último.

Es decir, las etiquetas case son puntos de entrada de la ejecución, y no implican que al acabarse el bloque case la ejecución salte al final del bloque switch. Las etiquetas case siguientes a la que hemos utilizado para entrar son, sencillamente, ignoradas. A la ausencia de sentencias break se le llama, en ocasiones, "dejar caer la cascada switch".

 

Visto 420 veces Modificado por última vez en Martes, 05 December 2017 15:07
Alejandro Carreño

Desarrollador, Programador, Web Master y Community Manager de CDR Consultores

Deja un comentario

Asegúrese de introducir toda la información requerida, indicada por un asterisco (*). No se permite código HTML.

Tweets

RT @cdrconsultores: Descubre aquí los consejos para evitar errores de gestión empresarial -> https://t.co/sXjnWiVsYR https://t.co/RfDxmfZhbx
Descubre aquí los consejos para evitar errores de gestión empresarial -> https://t.co/sXjnWiVsYR https://t.co/RfDxmfZhbx

Productos

Servicios

servicios off
website off
desarrollo off
formacion off
negocios off

Facebook

end-logo

 

Nestor M. Carreño T. - Todos los Derechos Reservados
Rescindir de Dios y de los valores morales, lleva no sólo al empobrecimiento espiritual, sino también al empobrecimiento material
Gracias a Usted, Muchas Gracias por Consultarnos, Dios le Bendiga!

Diseño y Desarrollo Nestor M. Carreño T. - CDR Consultores, C.A.