El bucle es un elemento común en todos los lenguajes de programación. Delphi tiene tres estructuras de control que ejecutan bloques de código repetidamente: para, repetir ... hasta y mientras ... hacer.
Supongamos que necesitamos repetir una operación un número fijo de veces.
// muestra cuadros de mensaje 1,2,3,4,5
var j: entero;
empezar
para j: = 1 a 5 5 hacer
empezar
ShowMessage ('Box:' + IntToStr (j));
final;
final;
El valor de una variable de control (j), que en realidad es solo un contador, determina cuántas veces se ejecuta una instrucción for. La palabra clave para establece un contador. En el ejemplo anterior, el valor inicial para el contador se establece en 1. El valor final se establece en 5.
Cuando la instrucción for comienza a ejecutarse, la variable de contador se establece en el valor inicial. Delphi que comprueba si el valor del contador es menor que el valor final. Si el valor es mayor, no se hace nada (la ejecución del programa salta a la línea de código que sigue inmediatamente al bloque de código de bucle for). Si el valor inicial es menor que el valor final, se ejecuta el cuerpo del bucle (aquí: se muestra el cuadro de mensaje). Finalmente, Delphi agrega 1 al contador y comienza el proceso nuevamente.
A veces es necesario contar hacia atrás. los Abajo a La palabra clave especifica que el valor de un contador debe reducirse en uno cada vez que se ejecuta el bucle (no es posible especificar un incremento / decremento distinto de uno). Un ejemplo de un ciclo for que cuenta hacia atrás.
var j: entero;
empezar
para j: = 5 Abajo a 1 hacer
empezar
ShowMessage ('T menos' + IntToStr (j) + 'segundos');
final;
ShowMessage ('¡Para secuencia ejecutada!');
final;
Nota: es importante que nunca cambie el valor de la variable de control en el medio del bucle. Hacerlo provocará errores.
Escribir un bucle for dentro de otro bucle for (bucles de anidación) es muy útil cuando desea llenar / mostrar datos en una tabla o cuadrícula.
var k, j: entero;
empezar
// este doble ciclo se ejecuta 4x4 = 16 veces
para k: = 1 a 4 4 hacer
para j: = 4 Abajo a 1 hacer
ShowMessage ('Box:' + IntToStr (k) + ',' + IntToStr (j));
final;
La regla para anidar los bucles for-next es simple: el bucle interno (contador j) debe completarse antes de encontrar la siguiente instrucción para el bucle externo (contador k). Podemos tener bucles anidados triple o cuádruple, o incluso más.
Nota: en general, las palabras clave de inicio y fin no son estrictamente necesarias, como puede ver. Si no se utilizan el inicio y el final, la declaración que sigue inmediatamente a la declaración for se considera el cuerpo del bucle.
Si tiene Delphi 2005 o cualquier versión más nueva, puede usar la iteración de estilo "nuevo" para elemento en colección sobre contenedores. El siguiente ejemplo demuestra la iteración sobre expresiones de cadena: para cada carácter en la cadena, verifique si el carácter es 'a' o 'e' o 'i'.
const
s = 'Acerca de la programación de Delphi';
var
c: char;
empezar
para C en s hacer
empezar
Si C en ['a', 'e', 'i'] luego
empezar
// hacer algo
final;
final;
final;
A veces no sabremos exactamente cuántas veces debería circular un ciclo. ¿Qué sucede si queremos repetir una operación hasta alcanzar un objetivo específico??
La diferencia más importante entre el ciclo while-do y el ciclo repeat-until es que el código de la declaración de repetición siempre se ejecuta al menos una vez.
El patrón general cuando escribimos un tipo de bucle de repetición (y while) en Delphi es el siguiente:
repetir
empezar
declaraciones;
final;
hasta condición = verdadero
mientras condición = verdadero hacer
empezar
declaraciones;
final;
Aquí está el código para mostrar 5 cuadros de mensaje sucesivos usando repetir hasta:
var
j: entero;
empezar
j: = 0;
repetir
empezar
j: = j + 1;
ShowMessage ('Box:' + IntToStr (j));
final;
hasta j> 5;
final;
Como puede ver, la instrucción de repetición evalúa una condición al final del ciclo (por lo tanto, el ciclo de repetición se ejecuta con seguridad al menos una vez).
La declaración while, por otro lado, evalúa una condición al comienzo del ciclo. Dado que la prueba se realiza en la parte superior, generalmente tendremos que asegurarnos de que la condición tenga sentido antes de que se procese el bucle, si esto no es cierto, el compilador puede decidir eliminar el bucle del código.
var j: entero;
empezar
j: = 0;
mientras j < 5 hacer
empezar
j: = j + 1;
ShowMessage ('Box:' + IntToStr (j));
final;
final;
Los procedimientos de interrupción y continuación se pueden usar para controlar el flujo de instrucciones repetitivas: el procedimiento de interrupción hace que el flujo de control salga de una instrucción for, while o repeat y continúe en la siguiente instrucción siguiente a la instrucción de bucle. Continuar permite que el flujo de control pase a la siguiente iteración de la operación de repetición.