Estructuras de programación.
Las estructuras de programación, o estructuras de control, son sentencias que permiten controlar el orden en que se ejecutan las instrucciones de los programas. La incorporación de estas estructuras es una de las principales características del lenguaje de Pascal.
Las estructuras de programación se agrupan en tres categorías:a) Bloque.
b) Selección.
c) Iteración.
La selección y la iteración utilizan expresiones booleanas para poder controlar el flujo de instrucciones.Expresiones booleanas.
Las expresiones booleanas son construcciones formadas por dos operandos relacionados mediante un operador de comparación y operadores lógicos.
Por ejemplo:(x>10) AND (x<20) significa que el valor de x es mayor a 10 y menor que 20.
(A<>B) ¿A es diferente de B?
(Persona= ‘JUAN’) OR (Persona= ‘Pedro’) ¿La persona es Juan o es Pedro?
Evaluar una expresión booleana significa determinar si la condición impuesta resulta verdadera (TRUE) o si resulta falsa (FALSE).
En la vida diaria también vemos expresiones booleanas cuando imponemos condiciones, por ejemplo: “si bañas al perro y cortas el pasto puedes salir a jugar”, “si arreglas las mesas o lavas los platos vas al cine”.Bloque de instrucciones
Es una secuencia de instrucciones que comienzan con BEGIN y terminan con END.
A continuación ejemplificamos mediante un programa cuyo bloque contiene cuatro instrucciones.
Program AreaDelCirculo;
Var
Area,
Radio: Real;
Begin
Write (‘Escriba el radio del circulo:’);
Read (Radio);
Area: = PI*Radio*Radio;
Write (‘El área es ’, Area:0:2);
End.
A continuación ejemplificamos mediante un programa cuyo bloque contiene cuatro instrucciones.
Program AreaDelCirculo;
Var
Area,
Radio: Real;
Begin
Write (‘Escriba el radio del circulo:’);
Read (Radio);
Area: = PI*Radio*Radio;
Write (‘El área es ’, Area:0:2);
End.
El END que corresponde al cuerpo del modulo principal (END principal) deber terminar con punto (.). Cualquier otro END (no principal) debe terminar con punto y coma (;).
Si el bloque consta de una sola instrucción se puede omitir el BEGIN y el END, por ejemplo:Begin
Read (DIVIDENDO, DIVISOR);
If DIVISOR = 0 Then
Read (DIVIDENDO, DIVISOR);
If DIVISOR = 0 Then
Write (‘No Se Puede Hacer La División’) |
Instrucción
Else
Begin COCIENTE = DIVIDENDO / DIVISOR; Write (Cociente); End; |
Bloque
End.Estructura de selección.
La estructura de selección perite decidir entre bloques de instrucciones diferentes; para ello evalúa expresiones booleanas y considera si se cumplió (o no) la condición. En Pascal existen tres formas para indicar selección.
· IF-THEN
La selección IF-THEN se traduce como SI-ENTONCES y la estudiamos anteriormente en la unidad 9. Esta selección evalúa una expresión booleana y de resultar verdadera ejecuta el bloque indicado después de la palabra THEN (de resultar falsa no lo hará).A continuación ejemplificamos mediante un programa:
Program SeleccionSimple;
{Este programa devuelve el valor absoluto de un número}Var
i : Interger;
Begin
Read (i);
If I < 0 Then i := -i; { Solo cambia el signo si la}
Write (i); { i es negativa }
End.
· IF-THEN-ELSE
La selección IF-THEN-ELSE se traduce como SI-ENTOCES-DE LO COTRARIO y la estudiamos anteriormente en la unidad 9. Esta selección evalúa una expresión booleana y de resultar verdadera ejecutara el bloque indicado después de la palabra THEN, pero de resultar falsa ejecutara el bloque indicado después de la palabra ELSE.
A continuación ejemplificamos mediante un programa:
Program SeleccionCompleta;
{Este programa hace una división, pero verifica que el divisor sea diferente de cero}Var
Dividendo,
Divisor,
Cociente: Real;
Begin
Read (DIVIDENDO, DIVISOR);
If DIVISOR = 0 Then
Write (‘No Se Puede Hacer La División’)
Else
Begin
COCIENTE = DIVIDENDO / DIVISOR
Write (Cociente);
End.
La línea anterior a ELSE no lleva ; (punto y coma). Si usted agrega el ; se producirá un error.
· CASE-OF
La selección CASE-OF se traduce como EN CASO DE y se usa para decidir entre varias opciones. CASE-OF requiere de una variable para comprarla con una lista de opciones. De encontrar una que sea igual ejecutara el bloque indicado (si no la encuentra no efectuara ninguno de los bloques).
Esta selección sustituye a varios IF-THEN-ELSE en cascada, pero solo acepta números enteros o caracteres y no funciona para reales ni para cadenas.
A continuación ejemplificamos mediante un programa (figura 11.4):
Program Menu;
Var
Opcion: Char;
Begin
WriteLn (‘1) Pollo’);
WriteLn (‘2) Cordero’);
WriteLn (‘3) Pescado’);
WriteLn (‘4) Res’);
WriteLn (‘5) Ninguno’);
Write (‘Elija una opcion:’);
ReadLn (OPCION);
Case OPCION Of
‘1’: WriteLn (‘Eligio Pollo’);
‘2’: WriteLn (‘Eligio Cordero’);
‘3’: WriteLn (‘Eligio Pescado’);
‘4’: WriteLn (‘Eligio Res’);
End;
End.
Estructura de iteración.
En Pascal existen tres formas para indicar repetición.
· WHILE-DO
El ciclo WHILE-DO se traduce como MIENTRAS-HACER, lo estudiamos anteriormente en la unidad 9 y es un ciclo indeterminado. El WHILE-DO evalúa una expresión booleana y de resultar verdadera ejecutara el bloque indicado después de la palabra DO. Cada vez que acabe de ejecutarse el bloque se evaluara de nuevo la condición. El ciclo se detendrá cuando el resultado de la evaluación sea falso.
A continuación ejemplificamos mediante un programa:
Program Factorial_1;
{Cálculo del factorial de un número leído desde el teclado}Var
Numero,
Factorial,
Contador: Integer;
Begin
Read (NUMERO);
FACTORIAL := 1;
CONTADOR := 1;
While CONTADOR <= NUMERO Do
Begin
FACTORIAL := FACTORIAL* CONTADOR;
CONTADOR := CONTADOR + 1;
End;
Write (FACTORIAL);
End.
· REPEAT-UNTIL
El ciclo REPEAT-UNTIL se traduce como REPARTIR-HASTA QUE y es un ciclo indeterminado. El REPEAT-UNTIL ejecuta el bloque indicado después de la palabra REPEAT y al finalizar evalúa una expresión booleana, si resulta falsa se repetirá la ejecución. El ciclo se detendrá cuando el resultado de la evaluación sea verdadero.
A continuación ejemplificamos mediante un programa:
Program Factorial_2;
{Cálculo del factorial de un número leído desde el teclado}
Var
Numero,
Factorial,
Contador: integer;
Begin
Read (NUMERO);
FACTORIAL := 1;
CONTADOR := 1;
Repeat
FACTORIAL := FACTORIAL* CONTADOR;
CONTADOR := CONTADOR + 1;
Until CONTADOR > NUMERO;
Write (FACTORIAL);
End.
Si se observa con detenimiento este ciclo es muy semejante al anterior. Sin embargo hay algunas diferencias:
a) La condición del REPEAT esta invertida respecto del WHILE.
b) El REPEAT asegura que al menos una vez se ejecutara el bloque.
c) El REPEAT no requiere de la palabra BEGIN y END para delimitar el bloque que repetirá.
· FOR-DO
El FOR-DO es un ciclo determinado, esto significa que el bloque de instrucciones se repetirá un número exacto de veces.
Este ciclo requiere de indicar un límite inferior, un límite superior y una variable que servirá de contador.
Es importante que el valor del límite inferior sea menor que el valor del límite superior, de lo contrario nunca se efectuará el bloque de instrucciones.
A continuación ejemplificamos mediante un programa:
Program Factorial_3;
{Cálculo del factorial de un número leído desde el teclado}Var
Numero,
Factorial,
Contador: integer;
Begin
Read (NUMERO);
FACTORIAL := 1;
For Contador := 1 To NUMERO Do
Begin
FACTORIAL := FACTORIAL* CONTADOR;
CONTADOR := CONTADOR + 1;
End;
Write (FACTORIAL);
End.
En Pascal es posible usar el FOR en forma descendente, para ello el valor del límite inferior debe ser mayor que el valor del límite superior y la palabra TO debe cambiarse por DOWNTO. Aquí vemos ejemplo de una cuenta regresiva:
Program Lanzamiento;
Vari: Interger;
Begin
For i := 10 Downto 1 Do
WriteLn (i);
WriteLn (‘¡DESPEGUE!’);
End.
Anidación de estructuras.
Se llama ciclos anidados a una serie de repeticiones que se hallan obtenidas dentro de otra serie (mayor) de repeticiones.
Las selecciones anidadas son aquellas donde una comparación se efectúa solo si la comparación anterior resulto verdadera.
Un bloque anidado es un grupo de instrucciones que deben ejecutarse en secuencia, en el interior de un ciclo o solo si se cumple con una condición.
A continuación ilustramos con un programa que simula un reloj.
Program Reloj;
VarHora,
Minuto,
Segundo: Integer;
Begin
For Hora := 0 To 23 Do
For Minuto := 0 To 59 Do
For Segundo := 0 To 59 Do
Begin
Write (Hora.’:’,Minuto,’:’,Segundo);
If Hora < 7 Then
WriteLn (‘Por la madrugada’)
Else If (Hora >= 12) And (Hora <20) Then
WriteLn (‘Por la tarde’)
Else WriteLn (‘Por la noche’);
End;
End.