Los bucles son un conjunto de instrucciones que se repiten una serie determinada de veces hasta que la condición deje de cumplirse. Son extremadamente útiles e imprescindibles en la programación.
En delphi tenemos 3 tipos de bucles:
- Bucles For. Repiten una acción un número determinado de veces, pueden ser bucles ascendentes o descendentes.
- Bucles While (mientras). Repiten una serie de instrucciones hasta que la condición se cumpla.
- Bucles Repeat..Until. Es parecido al bucle while pero la condición se realiza al final de cada instancia del bucle.
Bucles For.
En este tipo de bucles necesitaremos una variable que actuará como contador, generalmente será de tipo integer aunque también podría ser de tipo char.
Código
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var Contador: integer; begin for Contador := 0 to 10 do Writeln('El contador vale: ', Contador); Readln; end.
El bucle for vendría a significar algo como "desde 0 hasta 10 hacemos esto...". En cada instancia del bucle, el valor de Contador se incrementa en 1. Como ocurre con los condicionales, si dentro del bucle no ponemos begin y end;, el bucle sólo ejecuta una línea de código.
Para hacer un bucle for descendente, hay que utilizar downto y cambiar el valor de inicio y el valor final del bucle.
Código
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var Contador: integer; begin for Contador := 10 downto 1 do begin Writeln('El contador vale: ', Contador); Writeln('Restamos 1..'); end; Readln; end.
Conseguiríamos algo como esto:
Bucles While
Los bucles while se basan en una condición al principio del bucle que se llama a cada nueva instancia del bucle. Veamos un ejemplo:
Código
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var i: integer = 1; //Las variables se pueden inicializar de esta forma... begin while i <= 10 do begin Writeln('Esta es la instancia numero: ', i); Inc(i); end; Readln; end.
El significado del bucle while sería "mientras i sea menor o igual que 10 hacemos esto...". En este bucle, si utilizamos un contador de tipo entero, tenemos que incrementar su valor en cada instancia del bucle, si no tendríamos un bucle infinito. El procedimiento Inc incrementa en 1 el valor de la variable que se le pase como parámetro, el procedimiento contrario es Dec.
Bucles Repeat...Until.
Se traduce como repetir..hasta. Funciona de la misma manera que el bucle while, pero la condición se realiza al final del bucle.
Veamos como funciona con un ejemplo:
Código
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var i: integer = 1; //Las variables se pueden inicializar de esta forma... begin repeat Writeln('Esta es la instancia numero: ', i); Inc(i); until I > 10; Readln; end.
La traducción sería: "repetir hasta que i sea mayor que 10". En el bucle repeat..until no se emplea begin y end; para escribir varias líneas, de hecho, no hace falta.
La utilidad de los bucles while y repeat..until es que se puede utilizar como condición cualquier variable o condición. Por ejemplo:
Código
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var Salida: string; begin repeat Write('Introduce "salir": '); Readln(Salida); until Salida = 'salir'; Readln; end.
En este ejemplo, utilizamos como condición de salida una variable de tipo string. La ejecución del bucle no termina hasta que ingresemos por el teclado la palabra "salir".
Interrumpir un bucle
Para trabajar con bucles tenemos 2 métodos bastante útiles: el método Break y el método Continue. El método break interrumpe un bucle y sale de él.
Código
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var i: integer; begin for i := 0 to 10 do begin Writeln('I vale: ', i); if I = 7 then break; end; Readln; end.
En este ejemplo, se tendría que escribir en la consola 11 veces el mensaje "I vale: x". Pero dentro del bucle puse una condición de que si I vale 7, salga del bucle.
Continue sirve para saltarnos una instancia del bucle, pero no sale de él. Ejemplo:
Código
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var i: integer; begin for i := 0 to 10 do begin if I = 5 then Continue; //No ejecuta el Writeln Writeln('I vale: ', i); end; Readln; end.
Si ejecutamos el programa, podemos observar que no escribe en la consola "I vale: 5" porque esa instancia se la salta.