2. SENTENCIAS ALTERNATIVAS Y REPETITIVAS

Se denomina estructura de control a aquellas que determinan que instrucciones deben ejecutarse y que numero de veces, existen dos tipos de estructura de control: las estructuras alternativas y de selección y las estructuras repetitivas o de interacción.
Las sentencias alternativas que dirigen la ejecución de un programa hacia un grupo de sentencias u otro dependiendo del resultado de una condición las dos sentencias alternativas que proporciona Pascal son las sentencias alternativas simples in-then-else y la alternativa múltiple case-of.
SENTENCIAS IF-THEN/IF-THEN-ELSE
El formato de la sentencia o estructura if es el siguiente:
If expresión lógica o booleana then
   Sentencial1 (simple o compuesta)
Else
  Sentencia2 (simple o compuesta);
Donde podemos observar el “;” que sierra la sentencia.
Si el resultado de la expresión es verdadero /true) entonces se ejecuta la sentencia siguiente a la palabra reservada then, en caso contrario se ejecuta la sentencia a continuación de else. La clausula else es opcional sin embargo toda estructura if debe tener una palabra then asociada con ella. Pascal permite escribir la sentencia if de diversas formas, para  mejorar la claridad y legibilidad de los programas a continuación se indican diversas formas de escribir la sentencia if-then-else
1.    If <expresión> then <sentencia> else <sentencia>;
2.    If <expresión> then
    <sentencia>
Else
   <sentencia>;
3.    If <expresión>
Then
<sentencia>
Else
<sentencia>;
SENTENCIA CASE
Se utiliza para cuando los distintos valores de una variable o expresión existen distintos conjuntos de sentencias a ejecutar, por eso recibe el nombre de sentencia alternativa múltiple. La sentencia case of tiene el siguiente formato

Case <expresión> of
         <lista de constantes 1> : <sentencia 1>;
         <lista de constantes 2> : <sentencia 3>;
         <lista de constantes 2> : <sentencia 3>;
        
         <lista de constantes n> : <sentencia n>
Else   <sentencia>
        
End;
La expresión o variable debe ser de tipo ordinal es decir entero, carácter, lógico o enumerado. Cada una lista de constantes que recibe el nombre de etiquetas debe ser del mismo tipo de la variable o expresión. Cuando termina la ejecución de la sentencia de control salta a la sentencia siguiente al final de la estructura (sentencia end;)
Las reglas para utilizar case son:
1.    Una constante no puede aparecer en dos listas de constantes distintas
2.    Una etiqueta puede estar  formada por un tipo subrango si para todos los valores de este tipo la sentencia a ejecutar es la misma, con lo que se ahorra esfuerzo en la codificación
SENTENCIA INCONDICIONAL GOTO
La sentencia goto transfiere el control del programa a la sentencia siguiente a la etiqueta marcada en goto, pudiendo ser el salto adelante o atrás en el código. La sentencia goto requiere de una declaración de etiquetas label, para transferir el control a una sentencia etiquetada se debe utilizar la sentencia goto etiquetada, cada etiqueta solo puede marcar una sentencia dentro del programa
Etiqueta:   <sentencia>
                     
    Goto   etiqueta
La sentencia goto debe ser evitada y su uso restringido al máximo por no decir prohibido. No obstante en caso de necesidad jamás se debe saltar al interior de un bucle for, while o repeat.


Las sentencias o estructuras repetitivas permiten que una o mas sentencias se ejecuten varias veces, dependiendo el numero de ejecuciones de la verificación de una o varias condiciones en Pascal existen tres tipos de sentencias repetitivas: WHILE, REPEAT y FOR.
SENTENCIA WHILE
La sentencia o bucle while  indica a la computadora que se ejecuten una o mas sentencias mientras que se cumpla una determinada condición. La condición viene determinada por la variable o expresión booleana. El formato general que adopta la estructura es la siguiente:
While    condición    do                  while condición do
   Begin                                                    <sentencia>;
        <sentencia1>;
       
         <sentencian>
End.
Dependiendo de si se ejecuta una sentencia compuesta o una sentencia simple.
La sentencia while comprueba inicialmente si la condición es verdadera. Si la condición es verdadera se ejecutan las sentencias mientras la condición de su enunciado sea verdadera y finaliza cuando la condición es falsa. Si la condición es falsa se saltan las sentencias de bucle continuando la ejecución del programa en la siguiente sentencia al mismo.
 La expresión o variable lógica se verifica antes que la <sentencia> del interior del bucle se ejecuten, por tanto, deben estar definidas antes de la ejecución del bucle.
-          El bucle while se ejecuta mientras la condición sea verdadera
-          Dentro del bucle deben existir sentencias que modifiquen el valor de la variable o expresión, pues de lo contrario si el valor inicial es verdadero nunca se podrá salir del mismo y se ejecutara indefinidamente
-          Si la expresión lógica es falsa al comenzar el bucle, este no se realizara
LA SENTENCIA REPET-UNTIL
La sentencia o bucle repeat ejecuta las sentencias cmprendidas entre las palabras repeat y until hasta que la expresión o variable sea verdadera (true). La sentencia o estructura repeat-until es la siguiebte:
Repeat
   <sentencia>;
   <sentencia>;
   
Until condición;
-          Los bucles repeat se ejecutan siempre una ves por lo menos
-          La terminación del bucle se produce cuando el valor de la expresión lógica o condición de salida es true (verdadera)
-          El bucle repeat se ejecuta hasta que la expresión lógica es verdadera es decir,  se ejecuta mientras la expresión o variable toma el valor falso (false)
LA SENTENCIA FOR
La sentencia repetitiva for repite la ejecución de una o varias sentencias un numero fijo de veces, previamente establecido, necesita una variable del control del bucle que es necesariamente de tipo ordinal, comprendidos entre dos valores extremos (inferior y superior)
La sentencia for tiene la siguiente forma:
For  variable control := valor inicial to valor final do
        <sentencia>;
For  variable control := valor inicial downto valor final do
         <sentenciA>;
Donde <sentencia> puede ser una sentencia simple o compuesta. El primer formato de la sentencia for se denomina ascendente y el segundo descendente.
La variable de control del bucle y las variables iníciales y finales que lo determinan son ordinales y del mismo tipo y no deben ser alterados por ninguna de las sentencias que componen el bucle. Los valores inicial y final son evaluados una sola ves de la forma que si en el caso de downto el valor inicial mayor (menor) que el valor inicial, el conjunto de sentencias que componen la estructura no se ejecutan continuando el programa en la siguiente sentencia al bucle.
Podemos señalar los siguientes aspectos de su aplicación
-          Utilizar la sentencia o estructura for cuando se conozca el numero de iteraciones siempre que la variable de control de bucle sea de tipo ordinal
-          Utilizar la estructura repeat-until cuando el bucle se realice por lo menos una vez
-          En todos los demás casos utilizar la sentencia while
Cuando alguna de las sentencias que componen un bucle es a su vez una estructura repetitiva estamos ante lo que se denomina en programación bucle animado.
Hay tantos tipos de bucles animados como convinaciones posibles de estructuras repetitivas, es decir, pueden presentarse bucles for-for, for-while, for-repeat, while-while, repeal-while, repeat-repeat, etc.