sábado, 7 de noviembre de 2015

Estructuras de repetición

Estructuras de repetición
Según cómo se controle el ciclo (bucle / loop), hay  tres posibilidades:
  • for..to: La orden se repite desde que una variable tiene un valor inicial hasta que alcanza otro valor final (un cierto NÚMERO de veces).
  • while..do: Repite una sentencia MIENTRAS que sea cierta la condición que indicamos.
  • repeat..until: Repite un grupo de sentencias HASTA que se de una condición.
La diferencia entre estos dos últimos es que "while" comprueba la condición antes de repetir las demás sentencias, por lo que puede que estas sentencias ni siquiera se lleguen a ejecutar, si la condición de entrada es falsa. En "repeat", la condición se comprueba al final, de modo que las sentencias intermedias se ejecutarán al menos una vez.
El formato de "FOR" es
for variable := ValorInicial to ValorFinal do

Sentencia;

Program For1;
  var
  contador: integer;
  begin
  for contador := 1 to 10 do
    writeln( contador );
end.

While
La sintaxis de WHILE  es
while condición do
sentencia;
Que se podría traducir como "MIENTRAS se cumpla la condición HAZ sentencia".  Un ejemplo: que nos  diga la longitud de una frase

Program While1;
  var
  frase: string;
  begin
  writeln('Escribe una frase, y deja una línea en blanco para salir');
  write( '¿Primera frase?' );
  readln( frase );
  while frase <> '' do
    begin
    writeln( 'Su longitud es ', length(frase) );
    write( '¿Siguiente frase?' );
    readln( frase )
    end
end.



En el ejemplo anterior, sólo se entra al bloque begin-end (una sentencia compuesta) si la primera palabra es correcta (no es una línea en blanco). Entonces escribe su longitud, pide la siguiente frase y vuelve a comprobar que es correcta.
Length es una función que nos dice cuantos caracteres componen una cadena de texto.
Si ya de principio la condición es falsa, entonces la sentencia no se ejecuta ninguna vez, como pasa en este ejemplo:
while (2<1) do
writeln('Dos es menor que uno');

REPEAT
Para "repeat..until", la sintaxis es
repeat
sentencia;
...
sentencia;
sentencia
until condición;
La estructura  REPEAT repite un grupo de sentencias HASTA que la condición sea cierta. Es un grupo de sentencias, no sólo una, como ocurría en "while", de modo que ahora no necesitaremos "begin" y "end" para crear sentencias compuestas.  
El conjunto de sentencias se ejecutará al menos una vez, porque la comprobación se realiza al final.
No hace falta terminar con punto y coma la sentencia que va justo antes de "until", al igual que ocurre con "end".
Un ejemplo clásico es la "clave de acceso" de un programa:

program ClaveDeAcceso;
  var
  ClaveCorrecta, Intento: String[10];
  begin
  ClaveCorrecta := 'JVG';
  repeat
    WriteLn( 'Introduce la clave de acceso...' );
    ReadLn( Intento )
  until Intento = ClaveCorrecta;
  (* Aquí iría el resto del programa *)
end.


2 comentarios:

  1. Estaría bueno aclarar que los ejemplos de las estructuras de repetición y de condición son las que usamos en Free Pascal.

    ResponderEliminar
  2. ¿Decir estructura de decisión es lo mismo que decir Instrucciones de decisión?

    ResponderEliminar