Sirve para ejecutar un bloque
de sentencias un número conocido de veces. La sintaxis de esta
instrucción es:
For contador
= inicio To fin [Step incremento]
bloque de sentencias
Next [contador]
Contador
es la variable numérica que se incrementa cada vez que se
ejecuta el bucle. Este se realizará un número determinado de
veces que vendrá determinado por los valores de inicio y de fin.
Los argumentos entre corchetes son opcionales. Si no se indica
incremento, éste se presupone que vale 1. En cualquier momento
podemos abandonar la ejecución en mitad del bucle si dentro del
bloque de sentencias colocamos la instrucción Exit
For.
Unos cuantos ejemplos ayudarán
a comprender mejor esta instrucción:
For i = 1 to 5
Print i
Next i |
Imprime
en pantalla los números 1 a 5 |
For i = 0 to 10 step 2
Print i
Next i |
Imprime
en pantalla los números 0, 2, 4, 6, 8 y 10 |
For i = 10 to 2 step -2
Print i
Next i |
Imprime
en pantalla los números 10, 8, 6, 4 y 2 |
Hay que tener cuidado con no
crear un bucle que no se acabe nunca. Por el ejemplo, el
siguiente bucle For no
se terminaría nunca, pues si comenzamos en el número 10 y
aumentamos una unidad cada vez que el bucle se repita, nunca
llegaremos al número 5.
For i = 10
to 5
Print i
Next i
En las estructuras anteriores,
conocíamos de antemano el número de veces que iba a repetirse el
bucle; en algunas ocasiones no podemos conocer cuantas veces
debemos repetir una determinada instrucción (por ejemplo al
pedir una clave secreta; habrá que repetir la petición de la
misma hasta que la clave introducida sea correcta). En estos
casos utilizaremos la instrucción Do … Loop. Se ejecutará un
bloque de código mientras o hasta que la condición evaluada sea
verdadera. Dependerá de la forma en la que escribamos la
instrucción. Por lo tanto la sintaxis de esta estructura puede
adoptar alguna de las siguientes formas:
Estructura |
Explicación |
Do While condición
bloque de sentencias
Loop |
El bloque de sentencias se ejecuta
mientras se cumpla la condición. Puede ocurrir que dicho
bloque no se ejecute ninguna vez. |
Do
bloque de sentencias
Loop While condición |
El bloque de sentencias se ejecuta
mientras se cumpla la condición. Dicho bloque se
ejecutará al menos una vez. |
Do Until condición
bloque de sentencias
Loop |
El bloque de sentencias se ejecuta hasta
que se cumpla la condición. Puede ocurrir que dicho
bloque no se ejecute ninguna vez. |
Do
bloque de sentencias
Loop Until condición |
El bloque de sentencias se ejecuta hasta
que se cumpla la condición. Dicho bloque se ejecutará al
menos una vez. |
En
cualquier momento podemos abandonar la ejecución en mitad del
bucle si dentro del bloque de sentencias colocamos la
instrucción Exit
Do.
Veamos algunos ejemplos del
uso de estas sentencias:
i = 2
Do While i < 8
Print i
i = 2 + i
Loop |
Imprime en pantalla los números 2, 4 y 6 |
i = 3
Do
Print i
i = 2 * i
Loop While i <= 12 |
Imprime
en pantalla los números 3, 6 y 12 |
i = 2
Do Until i >= 16
Print i
i = i ^ 2
Loop |
Imprime en pantalla los números 2 y 4 |
i = 10
Do
Print i
i = i - 1
Loop Until i < 7 |
Imprime
en pantalla los números 10, 9, 8 y 7 |
Hay que tener cuidado con no
crear un bucle infinito, es decir, un bucle que no termine
nunca, como por ejemplo los siguientes:
i = 2
Do While i > 0
Print i
i = i + 2
Loop
Como i siempre es mayor que 0,
el bucle no terminará nunca y el programa imprimirá en pantalla
todos los números pares, hasta el infinito.
También puede ocurrir lo
contrario, es decir, que creemos un bucle que no se ejecute
nunca:
i = 2
Do While i < 0
Print i
i = i + 2
Loop
Como i no es menor que 0, el
bucle nunca se ejecutará.
Ejercicios:
1) Escribe
el código de un programa que imprima en pantalla los números del
1 al 10 junto a su cuadrado.
2) Un
programa debe imprimir todos los números impares en orden
descendente entre el 100 y el 10. ¿Cuál será su código?
3) Queremos
calcular la suma de los números comprendidos entre 11 y 20, a.
i. Escribe el código correspondiente.
4) Escribe
el código que imprime todos los números junto a su cubo,
comenzando por el 1, hasta que ese cubo sea superior a 5.000.