INSTRUCCIONES DE CONTROL

Las instrucciones de control son aquellas que nos permiten variar o alterar la secuencia normal de ejecución de un programa. Prácticamente la totalidad de lenguajes de programación de alto nivel soportan tres tipos de instrucciones de control:

  • Instrucciones condicionales o alternativas.
  • Instrucciones de salto.
  • Instrucciones repetitivas.


 
INSTRUCCIONES CONDICIONALES O ALTERNATIVAS:
1.- Alternativa simple:
Se evalúa una condición, ejecutándose un grupo de sentencias si el resultado es «verdadero», y no ejecutándose este grupo de sentencias si el resultado es «falso».

 
2.- Alternativa doble:
Se evalúa la condición, ejecutándose un grupo de sentencias si el resultado es «verdadero», y ejecutándose otro grupo alternativo de sentencias si el resultado es «falso».

 
3.- Alternativa múltiple (o selector):
En lugar de una condición, se evalúa una expresión con múltiples pero finitos resultados, ejecutándose en función del resultado de la expresión, un grupo de sentencias entre múltiples posibles.


 
Instrucciones alternativas anidadas:
También es posible utilizar la instrucción Si-Sino para diseñar estructuras de selecciones entre más de dos alternativas. Esto se consigue mediante las estructuras anidadas, donde tanto la rama Si como la Sino pueden contener a su vez otra instrucción Si-Sino, y así sucesivamente un número determinado de veces. Veamos un ejemplo:

 
INSTRUCCIONES DE SALTO:
Se utilizan para realizar un salto, es decir, para transferir el control a un punto del programa donde seguirá la ejecución del mismo, pero perdiendo toda posibilidad de retornar de forma controlada la ejecución del programa al punto de llamada.
No se aconseja su utilización porque crean un código difícil de leer y mantener, estando su uso muy restringido en programación estructurada.
Podemos hablar de dos tipos de sentencias de salto:

  • Salto condicional: alteran la secuencia de ejecución de un programa sólo y exclusivamente en el caso de que una condición específica sea cierta.
  • Salto incondicional: alteran la secuencia de ejecución de un programa siempre al no ir acompañadas de una condición de limite en determinadas ocasiones la realización del salto a otra parte del programa.

 
 
INSTRUCCIONES REPETITIVAS:
Este tipo de instrucciones también son conocidas como bucles, ciclos o lazos. Lo que hacen es que mientras se verifique una condición, un segmento del algoritmo o programa se repita consecutivamente.
En cada repetición del bucle (o iteración) se evalúa la expresión de control del bucle (o condición), que determinará si continuamos realizando otra iteración o bien salimos definitivamente del bucle.

 Podemos distinguir tres tipos de bucles, dependiendo de que la condición de control del bucle se evalúe antes o después de cada iteración, y de que se pueda fijar de antemano o no el número de iteraciones a realizar.
 
1.- El bucle «mientras»:
Se utiliza cuando se desea que un bucle de instrucciones se ejecute mientras una condición sea cierta.

Características del bucle «mientras»:

  • Permite repetir un bloque de instrucciones de 0 a n veces.
  • La condición se evalúa antes de ejecutar el bucle, por lo que si la condición es falsa a la entrada del bucle, éste no se ejecutará ninguna vez.
  • Mientras la condición sea cierta, el bucle se repetirá, por lo que debemos incluir dentro del cuerpo del bucle alguna sentencia que en determinadas condiciones llegue a hacer falsa la condición del bucle para poder salir del mismo, ya que de lo contrario no terminaría nunca y nos enfrentaríamos a un bucle infinito.

 
2.- El bucle «repetir mientras»:
Es similar al bucle «mientras» con la diferencia de que la condición se evalúa después de ejecutar el cuerpo del bucle.

Características del bucle «repetir mientras»:

  • Permite repetir un bloque de instrucciones de 1 a n veces.
  • La condición se evalúa después de ejecutar el bucle, por lo que independientemente de cómo sea la condición, éste se ejecutará siempre al menos una vez.
  • Mientras la condición sea cierta, el bucle se repetirá, debiendo incluir dentro del cuerpo del bucle alguna sentencia que en determinadas condiciones llegue a hacer falsa la condición del bucle para poder salir del mismo.

 
3.- El bucle «desde»:

Se utiliza cuando se desea que un bucle se ejecute repetidamente un número determinado de veces que se conoce por anticipado.

Características del bucle «desde»:

  • Comienza siempre realizando la asignación del valor inicial a la variable de control o índice del bucle. Siempre la primera iteración del bucle se realizará con la variable índice al valor inicial.
  • Las acciones especificadas en el cuerpo del bucle se ejecutarán (a menos que el valor final sea mayor que el inicial) y al finalizar el cuerpo del bucle, automáticamente la variable índice incrementa en el valor establecido (hay lenguajes que no permiten establecer valores para el incremento distintos a la unidad).
  • Si el nuevo valor de la variable índice no excede del valor final, se ejecutarán de nuevo las instrucciones y se procederá a un nuevo incremento de la variable índice, repitiéndose todo esto hasta que el valor de la variable índice supere al valor final establecido.
  • En algunos lenguajes existe la posibilidad de utilizar bucles desde con decremento en cada iteración. En este caso se debe establecer un valor inicial para la variable índice mayor que el valor final.

 
Particularidad:
El bucle «desde» no es más que una forma compacta de escribir un bucle «mientras».

 

EL LENGUAJE C:

INSTRUCCIONES CONDICIONALES O ALTERNATIVAS EN C:
1.- Alternativa simple (instrucción if):

 
2.- Alternativa doble (instrucción if-else):

 

Sentencias if-else anidadas:

 Tanto la rama if como la else pueden contener a su vez otra instrucción if-else, y así sucesivamente un número cualquiera de veces.

 Debe de utilizarse identación (sangría) para que sea fácil la identificación de a qué if pertenece cada else.

 

El operador condicional ? :

 Es un operador que equivale a una sentencia if-else de alternativa doble con sentencias únicas.

 (expresión_1) ? expresión_v : expresión_f ;

La operación se realiza de la siguiente forma: se evalúa expresión_1, si el resultado es «cierto» (cualquier valor distinto de cero) se evalúa expresión_v y su resultado se toma como resultado de la expresión total. Por el contrario, si el resultado de expresión_1 es «falso» (valor cero o nulo), se evalúa expresión_f y su resultado se toma como resultado de la expresión total.

 
3.- Alternativa múltiple (instrucción switch):

 
INSTRUCCIÓN DE SALTO EN C:

 Las instrucciones de salto se utilizan para alterar la secuencia de ejecución normal del programa, transfiriéndose el control a otra parte de él.

 En C se utiliza la instrucción goto y su forma general es:

 goto etiqueta;

 donde etiqueta es un identificador que se utiliza para rotular la instrucción a la que se transfiere el control.

Se puede transferir el control a cualquier otra instrucción dentro de la función actual. La instrucción por la que se continúa debe encontrarse etiquetada, y la etiqueta debe ir seguida de dos puntos ( : ), de la siguiente forma:

 etiqueta : instrucción

 La etiqueta debe ser única dentro de la función actual, es decir, dos instrucciones dentro de la misma función no pueden tener la misma etiqueta.

 

INSTRUCCIONES REPETITIVAS EN C:

1.- El bucle while (mientras):

 
2.- El bucle do while (repetir mientras):

3.- El bucle for (desde):

 

La instrucción break dentro de un bucle:

 La instrucción break se utiliza, además de para salir de una instrucción switch, para terminar anticipadamente la ejecución de un bucle for, while o do-while. Hace que el bucle desde el que se invoca termine inmediatamente.

Si es invocado dentro de un bucle anidado, termina solamente el bucle desde el que ha sido invocado, pero no el bucle externo a éste.

Proporciona una forma conveniente de terminar un bucle cuando se detecta un error o alguna condición irregular.

 

La instrucción continue dentro de un bucle:

Es muy similar a la instrucción break con la salvedad de que continue salta el resto del código asociado al cuerpo del bucle, pero retorna a la condición del bucle, y si esta es cierta, ejecuta la siguiente iteración. Recordemos que break rompe el bucle definitivamente.