Ciclos

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.