Ciclo For
En los diagramas de flujo se definió el ciclo Repetir
, en Gambas se el conoce a este ciclo como For
. De la misma forma que anteriormente
la característica principal de este ciclo es que se conoce de antemano (en el contexto del programa) el número de iteraciones que realizará el ciclo.
La sintáxis de esta instrucción es la siguiente:
For variableControl = condiciónInicial To condiciónFinal [ STEP Expresión ]
Operaciones a repetir
Next
El ciclo por defecto incrementa la variableControl
en una unidad por iteración, a menos que se especifique un valor a Step
. Pueden
especificarse valores negativos, si se desea una cuenta regresiva.
Ejemplo:
Dim n As Integer
For n = 10 To 1 Step -1
Print n
Next
Si se necesita interrumpir la ejecución de un ciclo, se puede utilizar la sentencia Break
.
Ejemplo:
Dim n As Integer
For n = 10 To 1 Step -1
If n = 3 Then Break
Print n
Next
El ciclo acabaría cuando n
valiera 3 y por lo tanto no se imprimen los últimos 3 números.
No se recomienda utilizar mucho la instrucción Break
debido a que los programas pueden ser dificiles de leer, y esta instrucción
rompe con la programación estructurada.
Por otro lado, se dispone de la sentencia Continue
, que permite saltarse pasos en la ejecución del ciclo.
Ejemplo:
Dim n As Integer
For n = 1 To 4
If n = 2 Then Continue
Print n
Next
En este caso, al ejecutarse se saltaría el 2 al escribir todos los valores de n
.
Ejemplo. Programa que imprime el código ASCII
Public Sub Main()
Dim i As Byte
For i = 0 To 254
Print i, " = ", String.Chr(CStr(i))
Next
End
El código ASCII es un conjunto de símbolos que una terminal puede manejar. Dentro de este conjunto se encuentran caracteres
imprimibles y otros no imprimibles.
Ciclo For Each
Existe una variante del ciclo For
que se usa al recorrer elementos de una colección, tal como una matriz. La sintaxis en
este caso es la siguiente:
For Each Variable In Expresión
operaciones
Next
Un ejemplo para esta variante de ciclo sería con una matriz dinámica.
Dim Matriz As String[]
Dim Elemento As String
Matriz = New String[]
Matriz.Add("Azul")
Matriz.Add("Rojo")
Matriz.Add("Verde")
For Each Elemento In Matriz
Print Elemento;;
Next
Este programa imprime lo siguiente: Azul Rojo Verde
.
Ciclo While
En los Diagramas de Flujo y Pseudocódigo se definió el ciclo Mientras
, la implementación de este ciclo en Gambas se denomina While
.
Al igual que en las secciones anteriores, la característica distintiva de este ciclo es que no se conoce el número de iteraciones que ocurrirán (dentro del
contexto del programa). El número de iteraciones depende de factores externos al programa, como por ejemplo, el resultado de alguna operación aritmética o
de la interacción con el usuario, por solo mencionar algunas.
La sintaxis es la siguiente:
While condiciónFinal
Operaciones a repetir
Wend
Observe que la sintaxis del ciclo While
solamente hace referencia explícita a la condición final del ciclo. La condición inicial se debe establecer
antes del ciclo y no se cuenta con un incremento explícito.
Para controlar el ciclo se utiliza una variable de control
que al iniciar el ciclo tiene el valor de la condición inicial y para que el ciclo finalice
debe cumplir con la condición final.
Por esta razón, en el ciclo While
antes de comenzar se evalúa la variable de control contra la condición final, y solo se entrará al ciclo mientras
el resultado de dicha evaluación resulte ser True
. Naturalmente si el resultado de la evaluación es False
el programa no ingresa al ciclo.
Por la misma razón, el ciclo While
solo iterará mientras la evaluación contra la condición inicial sea True
, de allí su nombre: mientras.
Ejemplo: El siguiente programa solicita numeros al usuario, y las iteraciones ocurren mientras el numero sea mayor que cero.
Public Sub Main()
Dim numero As Integer
numero = 1
While numero > 0
Print "Introduzca un numero: "
Input numero
Wend
End
En este programa la variable de control del ciclo es numero
, la condición inicial es numero=1
y la condición final es numero>0
.
Observe que se le asignó inicialmente a la variable de control el valor de 1, por lo que al evaluar esta variable contra la condición final el resultado es True
.
De esta forma es que se ingresa inicialmente al ciclo y en el momento en que esta evaluación sea False
entonces el ciclo terminará.
Si la variable de control inicialmente se le asignara el valor de 0, la evaluación contra la condición inicial sería False
por lo que el programa no
entraría al ciclo.
Ciclo Repeat
El ciclo Repeat
es una variante de While
, por lo que comparten la característica de que no se sabe de antemano el número de iteraciones a
ejecutarse.
La sintaxis de esta instrucción es la siguiente:
Repeat
Operaciones a repetir
Until condiciónFinal
La diferencia que existe entre ellos consiste en el momento que ocurre la evaluación de la condición final del ciclo. En el caso del ciclo While
la evaluación ocurre antes de iniciar cada iteración del ciclo, mientras que en el ciclo Repeat
la evaluación de la condición final ocurre al terminar la iteración.
Ciclos Anidados
Un ciclo anidado es la acción de introducir un ciclo dentro de otro. Al ciclo que contiene al otro ciclo se le conoce como ciclo exterior y al que está dentro se le
conoce como ciclo interior.
En este caso en cada iteración del ciclo exterior, el ciclo interior se ejecuta tantas veces como las propias condiciones del ciclo lo determinen. Pueden anidarse tantos
ciclos como el programador lo requiera.
Ejemplo 1. El siguiente código muestra un ejemplo de un ciclo anidado.
Public Sub Main()
Dim i, j As Byte
For i = 0 To 2
For j = 0 To 3
Print "Iteración del ciclo exterior "; i; ", Iteración del ciclo interior "; j
Next
Next
End
En este ejemplo, genera el siguiente salida:
Iteración del ciclo exterior 0, Iteración del ciclo interior 0
Iteración del ciclo exterior 0, Iteración del ciclo interior 1
Iteración del ciclo exterior 0, Iteración del ciclo interior 2
Iteración del ciclo exterior 0, Iteración del ciclo interior 3
Iteración del ciclo exterior 1, Iteración del ciclo interior 0
Iteración del ciclo exterior 1, Iteración del ciclo interior 1
Iteración del ciclo exterior 1, Iteración del ciclo interior 2
Iteración del ciclo exterior 1, Iteración del ciclo interior 3
Iteración del ciclo exterior 2, Iteración del ciclo interior 0
Iteración del ciclo exterior 2, Iteración del ciclo interior 1
Iteración del ciclo exterior 2, Iteración del ciclo interior 2
Iteración del ciclo exterior 2, Iteración del ciclo interior 3
En este ejemplo hay dos variables, i
es la variable de control del ciclo exterior y j
es la variable de control del ciclo interior.
Observe que por cada iteración del ciclo exterior, el ciclo interior completa sus 4 iteraciones. A su vez el ciclo exterior itera 3 veces.
Al inicio, el programa ingresa al ciclo exterior con i=0
y comienza la primera iteración de ese ciclo. El programa entonces ingresa al ciclo interior
con j=0
, y comienza sus iteraciones. En ese momento es que se imprime la primer línea. El ciclo continua con sus demás iteraciones imprimiendo la línea
correspondiente cuando j
toma los valores de 1
, 2
y 3
, momento en el que ese ciclo termina. En ese punto
i
aún tiene el valor de 0
y el ciclo exterior termina su primera iteración, iniciado la segunda cuando i=1
. Ahora se repite
el ciclo interior comenzando con j=0
con el nuevo valor de i=1
. La operación se repite hasta que i=2
.
Por esta razón es que el total de iteraciones es 12.
Ejemplo 2. El siguiente código muestra un ejemplo de dos ciclos anidados.
Public Sub Main()
Dim i, j As Byte
For i = 0 To 2
For j = 0 To 3
Print "Iteración del ciclo exterior "; i; ", Iteración del ciclo interior A "; j
Next
For j = 0 To 3
Print "Iteración del ciclo exterior "; i; ", Iteración del ciclo interior B "; j
Next
Next
End
En este ejemplo, genera el siguiente salida:
Iteración del ciclo exterior 0, Iteración del ciclo interior A 0
Iteración del ciclo exterior 0, Iteración del ciclo interior A 1
Iteración del ciclo exterior 0, Iteración del ciclo interior A 2
Iteración del ciclo exterior 0, Iteración del ciclo interior A 3
Iteración del ciclo exterior 0, Iteración del ciclo interior B 0
Iteración del ciclo exterior 0, Iteración del ciclo interior B 1
Iteración del ciclo exterior 0, Iteración del ciclo interior B 2
Iteración del ciclo exterior 0, Iteración del ciclo interior B 3
Iteración del ciclo exterior 1, Iteración del ciclo interior A 0
Iteración del ciclo exterior 1, Iteración del ciclo interior A 1
Iteración del ciclo exterior 1, Iteración del ciclo interior A 2
Iteración del ciclo exterior 1, Iteración del ciclo interior A 3
Iteración del ciclo exterior 1, Iteración del ciclo interior B 0
Iteración del ciclo exterior 1, Iteración del ciclo interior B 1
Iteración del ciclo exterior 1, Iteración del ciclo interior B 2
Iteración del ciclo exterior 1, Iteración del ciclo interior B 3
Iteración del ciclo exterior 2, Iteración del ciclo interior A 0
Iteración del ciclo exterior 2, Iteración del ciclo interior A 1
Iteración del ciclo exterior 2, Iteración del ciclo interior A 2
Iteración del ciclo exterior 2, Iteración del ciclo interior A 3
Iteración del ciclo exterior 2, Iteración del ciclo interior B 0
Iteración del ciclo exterior 2, Iteración del ciclo interior B 1
Iteración del ciclo exterior 2, Iteración del ciclo interior B 2
Iteración del ciclo exterior 2, Iteración del ciclo interior B 3
En este ejemplo también hay dos variables, i
es la variable de control del ciclo exterior y j
es la variable de
control de los ciclos interiores. Observe que por cada iteración del ciclo exterior, los ciclos interiores completan sus 4 iteraciones.
A su vez el ciclo exterior itera 3 veces.
Al inicio, el programa ingresa al ciclo exterior con i=0
y comienza la primera iteración de ese ciclo. El programa entonces ingresa
al primer ciclo interior con j=0
, y comienza sus iteraciones. En ese momento es que se imprime la primer línea. Este ciclo continua
con sus demás iteraciones imprimiendo la línea correspondiente cuando j
toma los valores de 1
, 2
y
3
, momento en el que ese ciclo termina. En ese punto comienza el segundo ciclo interior, que imprime exactamente las mismas líneas
que el primer ciclo interior. Posteriormente, dado que i
aún tiene el valor de 0
y el ciclo exterior termina su primera
iteración, iniciado la segunda cuando i=1
. Ahora se repite el ciclo interior comenzando con j=0
con el nuevo valor de
i=1
. La operación se repite hasta que i=2
.
Por esta razón es que el total de iteraciones es 24.