CAPITULO 4: PROPOSICIONES PARA EL CONTROL DE FLUJO DE PROGRAMA
1. INTRODUCCION En lo que sigue de este capítulo, denominaremos BLOQUE DE SENTENCIAS al conjunto de sentencias individuales incluídas dentro un par de llaves. Por ejemplo : {
Este conjunto se comportará sintacticamente como una sentencia simple
y la llave de cierre del bloque NO debe ir seguida de punto y coma . main() En las proposiciones de control de flujo de programa , trabajaremos alternativamente con sentencias simples y bloques de ellas . 2. PROPOSICION IF - ELSE Esta proposición sirve para ejecutar ciertas sentencias de programa , si una expresión resulta CIERTA ú otro grupo de sentencias, si aquella resulta FALSA. Su interpretación literal sería : SI es CIERTA tal cosa , haga tal otra , si no lo es salteéla . El caso más sencillo sería : if(expresión) sentencia ; ó if(expresión) sentencia ; Cuando la sentencia que sigue al IF es única, las dos formas de escritura expresadas arriba son equivalentes . La sentencia sólo se ejecutará si el resultado de "expresión" es distinto de cero (CIERTO) , en caso contrario el programa salteará dicha sentencia , realizando la siguiente en su flujo.
En casos más complejos que los anteriores , la proposición IF puede estar seguida por un bloque de sentencias : if(expresión) if(expresión) {
Las dos maneras son equivalentes , por lo que la posición de la llave de apertura del bloque queda librada al gusto del programador . El indentado de las sentencias (sangría) es también optativo , pero sumamente recomendable ,sobre todo para permitir la lectura de proposiciones muy complejas ó anidadas , como se verá luego. El bloque se ejecutará en su conjunto si la expresion resulta CIERTA. El uso del ELSE es optativo , y su aplicación resulta en la ejecución de una , ó una serie de sentencias en el caso de que la expresión del IF resulta FALSA.
Su aplicación puede verse en el ejemplo siguiente : if(expresión) if(expresión) En el ejemplo de la izquierda no se usa el ELSE y por lo tanto las sentencias
3 , 4 y 5 se ejecutan siempre . En el segundo caso , las sentencias 1 y 2
se ejecutan solo si la expresión es CIERTA , en ese caso las 3 y 4 NO se
ejecutarán para saltarse directamente a la 5 , en el caso de que la expresión
resulte FALSA se realizarán las 3 y 4 en lugar de las dos primeras y finalmente
la 5 . if(exp.1) if(exp.1) Si bién se suele escribir según la modalidad de la izquierda , a la derecha hemos expresado las asociaciones entre los distintos ELSE é IF por medio del indentado del texto.
3. PROPOSICION SWITCH
El SWITCH es una forma sencilla de evitar largos , tediosos y confusos anidamientos de ELSE-IF .
Como es fácil de ver , cuando las opciones son muchas, el texto comienza a hacerse difícil de entender y engorroso de escribir.
{
El SWITCH empieza con la sentencia : switch (expresión) . La expresión
contenida por los paréntesis debe ser ENTERA , en nuestro caso un caracter
; luego mediante una llave abre el bloque de las sentencias de comparación
. Cada una de ellas se representa por la palabra clave "case" seguida por
el valor de comparación y terminada por dos puntos . Seguidamente se ubican
las sentencias que se quieren ejecutar , en el caso que la comparación resulte
CIERTA . En el caso de resultar FALSA , se realizará la siguiente comparación
, y así sucesivamente . ................. La forma de interrumpir la ejecución luego de haber encontrado un CASE
cierto es por medio del BREAK , el que dá por terminado el SWITCH .
El WHILE es una de las tres iteraciones posibles en C . Su sintaxis podría expresarse de la siguiente forma : while(expresion) ó while(expresión) {
Esta sintaxis expresada en palabras significaria: mientras (expresión)
dé un resultado CIERTO ejecútese la proposición 1 , en el caso de la izquierda
ó ejecútese el bloque de sentencias , en el caso de la derecha. 5. LA ITERACION DO - WHILE Su sintaxis será : do {
Expresado en palabras , esto significa : ejecute las proposiciones , luego repita la ejecución mientras la expresión dé un resultado CIERTO . La diferencia fundamental entre esta iteración y la anterior es que el DO-WHILE se ejecuta siempre AL MENOS una vez , sea cual sea el resultado de expresión. 6. ITERACION FOR El FOR es simplemente una manera abreviada de expresar un WHILE , veamos su sintaxis : for ( expresión1 ; expresión2 ; expresion3 ) {
La expresión1 es una asignación de una ó más variables , (equivale a una
inicialización de las mismas ) , la expresión2 es una relación de algun tipo
que , mientras dé un valor CIERTO , permite la iteración de la ejecución
y expresión3 es otra asignación , que comunmente varía alguna de las variables
contenida en expresión2 . for ( ; exp2 ; exp3) ó
Estas dos últimas expresiónes son interesantes desde el punto de vista de su falta de término relacional , lo que implica que el programador deberá haber previsto alguna manera alternativa de salir del lazo ( probablemente mediante BREAK ó RETURN como veremos más adelante ) ya que sinó , la ejecución del mismo es infinita ( ó tan larga como se mantenga encendida la computadora).
El BREAK , ya brevemente descripto con el SWITCH , sirve también para terminar loops producidos por WHILE , DO-WHILE y FOR antes que se cumpla la condición normal de terminación . En el EJEMPLO siguiente vemos su uso para terminar un WHILE indeterminado.
Obsérvese que la expresión while(1) SIEMPRE es cierta , por lo que el
programa correrá imparable hasta que el operador oprima la tecla "secreta"
Q . Esto se consigue en el IF , ya que cuando c es igual al ASCII Q se ejecuta
la instrucción BREAK ,dando por finalizado el WHILE . for (;;) { /* loop indefinido */
8. LA SENTENCIA CONTINUE La sentencia CONTINUE es similar al BREAK con la diferencia que en vez de terminar violentamente un loop , termina con la realización de una iteración particular y permitiendo al programa continuar con la siguiente. 9. LA FUNCION EXIT() La función EXIT() tiene una
operatoria mucho más drastica que las anteriores , en vez de saltear una
iteración ó abandonar un lazo de programa , esta abandona directamente al
programa mismo dándolo por terminado . Realiza también una serie de operaciones
útiles como ser , el cerrado de cualquier archivo que el programa hubiera
abierto , el vaciado de los buffers de salida , etc. 10 SENTENCIA GOTO Si Ud. se ha admirado de que C
tenga la operación GOTO , recuerde que el hecho de existir NO lo obliga a
usarla , en el mismo sentido que por tener puertas los aviones no está obligado
a saltar por ellas en pleno vuelo. if( c == 0 ) goto OTRO_LADO ; En este caso si c es cero se saltean todas las sentencias entre el if y el destino , continuandose con la ejecución del printf() . El destino puede ser tanto posterior como anterior al GOTO invocante .
© Derechos Reservados, Copyright, DATA-2013, 1998-2020.
|