La programación estructurada es el tipo de programación al que pertenecen Pascal, C, Phyton… Basicamente dicta que el lenguaje se resume en 3 tipos de instrucciones:
– Sentencias: una instrucción sencilla
– Decisiones (selectores): se toma un camino u otro de acuerdo a una condición que puede ser verdadera o falsa (IF…THEN…ELSE…, CASE)
– Bucles (iteradores): repetición de sentencias (WHILE, FOR, REPEAT)
Una sentencia normal y corriente en Pascal puede ser
writeln ('hola mundo');
Si quisiésemos decidir si mostrarla o no de acuerdo a, por ejemplo, que una variable i valiese 1 usaríamos el IF:
if i = 1 then writeln ('hola mundo') else ('adios mundo');
Si quisiésemos repetir la instruccion un numero determinado de veces (por ejemplo tres):
for i := 1 to 3 do writeln ('hola mundo');
Otras posibilidades…
Si en vez de decidir entre dos caminos (IF…THEN…ELSE…) nuestra intención es distinguir varios, disponemos del CASE.
case i of
1: writeln ('hola mundo');
2: writeln ('adios mundo');
3: ...
...
otherwise: writeln ('cualquier otro caso no contemplado antes');
end;
En el caso de los bucles, las tres posibilidades se distinguen porque:
– REPEAT: comienza ejecutándose. Tras la ejecución, comprueba si se da la condición para terminar. Si es falsa, vuelve a ejecutar las instrucciones que contenga. Si es verdadera, acaba el bucle y el programa continua a partir de ese punto. Por eso se ejecuta siempre al menos una vez.
– WHILE: antes de ejecutarse por primera vez evalúa la condición. Si es verdadera, ejecuta las instrucciones de su interior y luego vuelve al principio si la condicion sigue siendo verdadera o continua a partir de ese punto si es falsa. Puede que no se ejecute nunca.
– FOR: es el bucle más seguro de todos pues no conduce a la creación de bucles infinitos. Utiliza una variable de control (en el ejemplo anterior i) a la que asigna un valor inicial. Luego toma todos los valores intermedios hasta llegar a un valor final establecido. Para cada uno de esos pasos, ejecuta las instrucciones que contiene. Se ejecuta siempre al menos una vez y la variable se avanza de forma automática.
Si tomamos el ejemplo puesto antes, vemos cómo se puede escribir con cualquiera de los bucles:
Con FOR:
for i := 1 to 3 do writeln ('hola mundo');
Con WHILE:
i := 1;
while i < = 3 do begin
writeln ('hola mundo');
i := i+1;
end;
Con REPEAT:
i := 1;
REPEAT
writeln ('hola mundo');
i := i +1;
UNTIL i > 3;
Además el bucle FOR permite usar una secuencia decreciente (útil para ordenar arrays, por poner un ejemplo):
for i:= 3 downto 1 do writeln ('hola mundo');
He subido un pequeño programa de ejemplo (if_for.pas.tar.gz) para ver en funcionamiento la sentencia IF y los diferentes bucles. Se compila con:
gpc --extended-pascal if_for.pas