Sentencias compuestas
Sentencias compuestas
Sentencias repetitivas
Ciclos FOR
Ciclos WHILE
Ciclos REPEAT-UNTIL
Bifurcaciones condicionales
IF...THEN...ELSE
IF anidados
CASE
Bifurcaciones incondicionales
GOTO
HALT

Sentencias compuestas

Las sentencias compuestas son grupos de sentencias, separadas cada una por un punto y coma ";" que son tratadas como una sola sentencia.

Para identificar una sentencia compuesta de un grupo sucesivo de sentencias se encierran entre las palabras reservadas BEGIN y END. Uno de los ejemplos más claros de una sentencia compuesta es el cuerpo de un programa principal en Turbo Pascal, el lenguaje toma todo lo que existe entre estas dos sentencias como un solo elemento a ejecutarse aún cuando contenga varias instrucciones o sentencias:

PROGRAM Prueba;

BEGIN
WriteLn('Primera linea de una sentencia compuesta');
WriteLn('Segunda linea de una sentencia compuesta');
WriteLn('Tercera linea de una sentencia compuesta');
END.

El punto y coma que se encuentra antes de la palabra reservada END puede ser suprimido sin afectar a la compilación. En ocasiones es necesario repetir un determinado número de veces la ejecución de una sentencia, ya sea sencilla o compuesta, para realizar esta tarea Turbo Pascal cuenta con instrucciones específicas para el tipo de repetición que se requiera.

Ciclos FOR

El ciclo FOR repite una sentencia un determinado número de veces que se indica al momento de llamar al ciclo.

Lo que hace FOR es que incrementa una variable en uno desde un valor inicial hasta un valor final ejecutando en cada incremento la sentencia que se quiere repetir. Su sintaxis es:

FOR identificador := inicio TO fin DO instrucción;

Donde el identificador es la variable que se incrementará, inicio es el primer valor que tendrá dicha variable y fin es el valor hasta el cual se incrementará la misma; instrucción es la sentencia (sencilla o compuesta) que se ejecutará en cada incremento de la variable.

El siguiente ejemplo escribe los números del 1 al 50 en pantalla. La variable utilizada es "Numero".

PROGRAM Ciclo_FOR;
VAR
Numero : Integer;

BEGIN
FOR Numero := 1 to 50 DO
WriteLn(Numero);
END.

Una de las limitaciones de los ciclos FOR es que una vez iniciado el ciclo se ejecutará el número de veces predefinido sin posibilidad de agregar o eliminar ciclos.

Es posible hacer que un ciclo cuente hacia atrás, es decir que la variable en lugar de incrementarse se decremente. Para ésto cambiamos la palabra TO por DOWNTO, y colocamos el valor mayor a la izquierda y el menor a la derecha. Ejemplo:

PROGRAM Ciclo_FOR_2;
VAR
Numero : Integer;

BEGIN
FOR Numero := 50 DOWNTO 1 DO
WriteLn(Numero);
END.

Ciclos WHILE

Los ciclos WHILE ofrecen la ventaja de que la ejecución se realiza mientras se cumpla una condición, por lo tanto es posible controlar el número de repeticiones una vez iniciado el ciclo. Su sintaxis es:

WHILE condición DO instrucción

Donde condición es la condición que se evaluará, mientras ésta sea verdadera se ejecutará la instrucción, que es una sentencia simple o compuesta.

Un programa que escriba los números del 1 al 50, utilizando el ciclo WHILE se vería como sigue:

PROGRAM Ciclo_WHILE;
VAR
Numero : Integer;

BEGIN
Numero := 1;
WHILE Numero <= 50 DO
BEGIN
WriteLn (Numero);
Numero := Numero +1;
END;
END.

Al final del programa la variable Numero guardará el valor 51, que fué el valor que no cumplió con la condición establecida en el ciclo WHILE.

Ciclos REPEAT-UNTIL

Este tipo de ciclos es muy parecido a los ciclos WHILE, la diferencia entre ambos es que en WHILE la condición se evalúa al principio del ciclo, en cambio en REPEAT-UNTIL se evalúa al final, lo que significa que en un ciclo REPEAT-UNTIL la sentencia se ejecutará por lo menos una vez, cosa que puede no ocurrir en el ciclo WHILE. Ejemplo:

PROGRAM Ciclo_RepeatUntil;
VAR
Numero : Integer;
BEGIN
Numero := 1;
REPEAT
WriteLn (Numero);
Numero := Numero + 1;
UNTIL Numero = 50;
END.

Para crear un buen programa es necesario dotarlo con capacidad de desición con base en las variables o eventos definidos por el programador, para que el programa sea aplicable en un entorno más generalizado y no solo para un problema específico.

Para lograr este control se cuenta con las estructuras de control que, en Turbo Pascal, son las siguientes:

Sentencia IF...THEN...ELSE

Esta expresión es utilizada para ejecutar una sentencia en el caso que una condición establecida sea verdadera, de lo contrario se podra ejecutar una sentencia distinta. Su sintaxis es:

IF condición THEN instrucción ELSE otro

Donde condición es la expresión que se evaluará, en caso de ser verdadera se ejecutará la sentencia dada como instrucción, en caso de que la condición sea falsa se ejecutara la sentencia dada como otro. Ejemplo:

PROGRAM IF_THEN_ELSE;

VAR
Contador : Integer;

BEGIN
FOR contador := 1 to 50 DO
BEGIN
IF contador > 10 THEN WriteLn(Contador) ELSE WriteLn('*');
END;
END.

En este pequeño programa la variable Contador se incrementará desde 1 hasta 50, la sentencia condicional IF verificará si es verdad que Contador es mayor a 10, de ser así se escribirá en pantalla el valor de la variable, de lo contrario se escribira en la pantalla un caracter "*". Como el contador inicia desde 1, tenemos que se imprimiran 10 asteriscos antres del primer número, que será el 11, valor que si cumple la condición "Contador > 10" (la hace verdadera).

La sección ELSE con su correspondiente sentencia son opcionales y pueden omitirse en caso de no necesitarse.

Sentencias IF anidadas

Es posible utilizar en una expresión del tipo IF..THEN..ELSE una sentencia compuesta como la sentencia a ejecutarse en caso de que la condición sea verdadera, así como en la sentencia posterior a un ELSE, de esta forma podemos utilizar otra sentencia IF..THEN..ELSE dentro de la anterior, para de esta forma evaluar varias condiciones una dentro de otra. Ejemplo:


IF Numero > 5 THEN
BEGIN
IF Numero <10 THEN Opcion :="Numero;<BR"> IF Numero <30 THEN Opcion2 :="Numero;<BR"> END;

Selecciones CASE

Esta forma de control se utiliza cuando se va a evaluar una expresión que puede contener varios datos diferentes y en cada dato deberá realizar una acción especial. Por ejemplo, si se crea un menú con diferentes opciones se realizará un determinado proceso para cada acción, aunque la selección por parte del usuario se haga desde el mismo lugar.

El siguiente programa ilustra el uso de la forma CASE, el programa preguntará un número al usuario y lo clasificará de acuerdo a su valor.

PROGRAM Case;
VAR
Numero : Integer;
BEGIN
WriteLn('Introduzca un número entero del 1 al 5: ');
ReadLn(Numero);
CASE Numero OF
1 : WriteLn('El número fué 1');
2 : WriteLn('El número fué 2');
3 : WriteLn('El número fué 3');
4 : WriteLn('El número fué 4');
5 : WriteLn('El número fué 5');
ELSE WriteLn('El número no estaba en el rango indicado');
END.

GOTO

La sentencia GOTO es una sentencia utilizada para alterar el flujo del programa, es decir, para ir a ejecutar una sentencia en un lugar diferente del programa y no la linea siguiente.

El uso de GOTO no es aconsejable ya que destruye el modelo de la programación estructurada que es la que se utiliza en Turbo Pascal, además se cuenta con las estructuras de datos anteriores que hacen casi innecesario su uso.

Para utilizar este tipo de salto es necesario declarar etiquetas, que no son otra cosa que el identificador que marcará el lugar a donde se dirigirá el flujo del programa al momento de usar el GOTO. La declaración de etiquetas se hace antes que la de constantes y variables, la palabra reservada para su declaración es LABEL. El nombre de la etiqueta es un nombre de un identificador como cualquier otro, pero al utilizarse debe terminar con dos puntos ":".

La sintaxis del comando es:

GOTO etiqueta;

Ejemplo:

PROGRAM Uso_del_GOTO;
LABEL
Etiqueta;
BEGIN
WriteLn('Esta linea si se escribirá');
GOTO Etiqueta;
WriteLn('Esta linea no se escribirá');

Etiqueta:
WriteLn('Se efectuó el brinco');
END.

HALT

La instrucción HALT provoca la terminación inmediata de un programa, sin importar las siguientes instrucciones. Normalmente se utiliza en casos de error, se despliega un mensaje y se termina el programa. Ejemplo:

PROGRAM Uso_de_HALT;

BEGIN
WriteLn('Primera linea del programa');
WriteLn('Terminará la ejecución del programa');
HALT
WriteLn('');
END.