Estructuras de control

En lenguajes de programación, las **estructuras de control** permiten modificar el flujo de ejecución de las instrucciones de un programa.

Con las estructuras de control se puede:

* De acuerdo con una condición, ejecutar un grupo u otro de sentencias (If-Then-Else)
* De acuerdo con el valor de una variable, ejecutar un grupo u otro de sentencias (Select-Case)
* Ejecutar un grupo de sentencias **mientras** se cumpla una condición (Do-While)
* Ejecutar un grupo de sentencias **hasta** que se cumpla una condición (Do-Until)
* Ejecutar un grupo de sentencias un número determinado de veces (For-Next)

Todas las estructuras de control tienen un único punto de entrada. Las estructuras de control se pueden clasificar en: secuenciales, iterativas y de control avanzadas. Esta es una de las cosas que permiten que la programación se rija por los principios de la programación estructurada.

Los lenguajes de programación modernos tienen estructuras de control similares. Básicamente lo que varía entre las estructuras de control de los diferentes lenguajes es su sintaxis; cada lenguaje tiene una sintaxis propia para expresar la estructura.

Otros lenguajes ofrecen estructuras diferentes, como por ejemplo los comandos guardados.

#### Selección if simple

Artículo principal: Sentencias if

Se trata de una estructura de control que permite redirigir un curso de acción según la evaluación de una condición simple, sea falsa o verdadera.

Si la condición es verdadera, se ejecuta el bloque de sentencias 1; de lo contrario, se ejecuta el bloque de sentencias 2.

```
   IF (Condición) THEN
      (Bloque de sentencias 1)
   ELSE
      (Bloque de sentencias 2)
   END IF

```

Se pueden plantear múltiples condiciones simultáneamente: si se cumple la (Condición 1) se ejecuta (Bloque de sentencias 1). En caso contrario se comprueba la (Condición 2); si es cierta se ejecuta (Bloque de sentencias 2), y así sucesivamente hasta n condiciones. Si ninguna de ellas es cumple se ejecuta (Bloque de sentencias else).

```
   IF (Condición 1) THEN
      (Bloque de sentencias 1)
   ELSEIF (Condición 2) THEN
      (Bloque de sentencias 2)

   .....

   ELSEIF (Condición n) THEN
      (Bloque de sentencias n)
   ELSE
      (Bloque de sentencias else)
   END IF

```

#### Select-Case

Artículo principal: Sentencia Select-Case

Esta sentencia permite ejecutar una de entre varias acciones en función del valor de una expresión. Es una alternativa a *if then else* cuando se compara la misma expresión con diferentes valores.

* Se evalúa la expresión, dando como resultado un número.
* Luego, se recorren los "Case" dentro de la estructura buscando que el número coincida con uno de los valores.
* Es necesario que coincidan todos sus valores.
* Cuando se encuentra la primera coincidencia, se ejecuta el bloque de sentencias correspondiente y se sale de la estructura Select-Case.
* Si no se encuentra ninguna coincidencia con ningún valor, se ejecuta el bloque de sentencias de la sección "Case Else".

```
   Select (Expresión)
      Case Valor1
         (Bloque de sentencias 1)
      Case Valor2
         (Bloque de sentencias 2)
      Case Valor n
         (Bloque de sentencias n)
      Case Else
         (Bloque de sentencias "Else")
   End Select

```

### Estructuras de control iterativas

Las estructuras de control iterativas o de repetición, inician o repiten un bloque de instrucciones si se cumple una condición o mientras se cumple una condición.

#### Do-While

Artículo principal: Bucle do

Mientras la condición sea verdadera, se ejecutarán las sentencias del bloque.

```
   Do While (Condición)
      (Bloque de sentencias)
   Loop

```

que también puede expresarse:

```
   While (Condición)
      (Bloque de sentencias)
   wend

```

#### Do-Until

Se ejecuta el bloque de sentencias, hasta que la condición sea verdadera

```
   Do
      (Bloque de sentencias)
   Loop Until (Condición)

```

#### For-Next

Artículo principal: Bucle for

La sentencia ***For*** da lugar a un lazo o bucle, y permite ejecutar un conjunto de sentencias cierto número de veces.

* Primero, se evalúan las expresiones 1 y 2, dando como resultado dos números.
* La variable del bucle recorrerá los valores desde el número dado por la expresión 1 hasta el número dado por la expresión 2.
* El bloque de sentencias se ejecutará en cada uno de los valores que tome la variable del bucle.

```
   For (Variable) = (Expresión1) To (Expresión2) STEP (Salto)
      (Bloque de sentencias)
   Next

```

Estructuras anidadas

Las estructuras de control básicas pueden anidarse; es decir, pueden ponerse una dentro de otra.

### Estructura For-Next dentro de una estructura If-Then-Else

```
   IF A > B THEN
      FOR X = 1 To 5
         (Bloque de sentencias 1)
      NEXT
   ELSE
      (Bloque de instrucciones 2)
   END IF

```

### Estructura If-Then-Else dentro de estructura For-Next

```
   FOR x = 10 TO 20 step 2
      IF A == C THEN
       (Bloque de instrucciones)
      ELSE
       (Bloque de instrucciones)
      END IF
   NEXT

```

### Estructura For-Next que está dentro de estructura Do-While

```
 Do While A > 0
    For X = 1 to 10
       (Bloque de instrucciones)
    Next
    A = A - 1
 Loop

```