Ciclos repetitivos

5
Repetición Estas estructuras, también denominadas bucles, ejecutan un bloque de código de forma repetitiva mientras se cumpla una condición asociada a la estructura. A cada una de las veces en que se ejecuta el código contenido en estas estructuras se le denomina iteración. While...End While Se trata del tipo más sencillo, ejecuta las líneas de código que contiene, mientras que la expresión situada junto a While devuelva Verdadero. Veamos su sintaxis en el Código fuente 149. While Expresión ' código ' ..... End While Código fuente 149 Y a continuación, un ejemplo en el Código fuente 150. Sub Main() Dim Valor As Integer Dim Contador As Integer Console.WriteLine("Introducir un número") Valor = Console.ReadLine() Console.WriteLine("Mostrar en consola todos los números desde 1 hasta el introducido") Programación con Visual Basic .NET © Grupo EIDOS 260 While Contador < Valor Console.Write("-" & Contador) Contador += 1 End While Console.ReadLine() End Sub Código fuente 150 Do...Loop Esta estructura ejecuta un conjunto de líneas de código, en función del valor devuelto por una expresión, que a modo de condición, podemos situar al comienzo o final de la estructura. Es posible además, no utilizar la expresión de evaluación al principio o final, debiendo en ese caso, introducir alguna condición en el interior del código de la estructura, para forzar la salida del bucle y evitar caer en un bucle infinito. La instrucción Exit Do nos permite forzar la salida del bucle, pudiendo emplearla tantas veces como sea necesario. Veamos a continuación, las diferentes variantes disponibles. Condición al principio. La sintaxis se muestra en el Código fuente 151. Do While | Until Expresión ' código ' ...... [Exit Do] ' código ' ...... Loop Código fuente 151

Transcript of Ciclos repetitivos

Repetición Estas estructuras, también denominadas bucles, ejecutan un bloque de código de forma repetitiva

mientras se cumpla una condición asociada a la estructura. A cada una de las veces en que se

ejecuta el código contenido en estas estructuras se le denomina iteración.

While...End While Se trata del tipo más sencillo, ejecuta las líneas de código que contiene, mientras que la expresión

situada junto a While devuelva Verdadero. Veamos su sintaxis en el Código fuente 149.

While Expresión

' código

' .....

End While

Código fuente 149

Y a continuación, un ejemplo en el Código fuente 150. Sub Main()

Dim Valor As Integer

Dim Contador As Integer

Console.WriteLine("Introducir un número")

Valor = Console.ReadLine()

Console.WriteLine("Mostrar en consola todos los números desde 1 hasta el

introducido")

Programación con Visual Basic .NET © Grupo EIDOS

260 While Contador < Valor

Console.Write("-" & Contador)

Contador += 1

End While

Console.ReadLine()

End Sub

Código fuente 150

Do...Loop Esta estructura ejecuta un conjunto de líneas de código, en función del valor devuelto por una

expresión, que a modo de condición, podemos situar al comienzo o final de la estructura.

Es posible además, no utilizar la expresión de evaluación al principio o final, debiendo en ese caso,

introducir alguna condición en el interior del código de la estructura, para forzar la salida del bucle

y evitar caer en un bucle infinito. La instrucción Exit Do nos permite forzar la salida del bucle,

pudiendo emplearla tantas veces como sea necesario. Veamos a continuación, las diferentes

variantes disponibles.

Condición al principio.

La sintaxis se muestra en el Código fuente 151.

Do While | Until Expresión

' código

' ......

[Exit Do]

' código

' ......

Loop

Código fuente 151

La diferencia entre usar While o Until reside en que empleando While, el código del bucle se

ejecutará mientras la expresión devuelva Verdadero. En el caso de Until, el código se ejecutará

mientras que la expresión devuelva Falso. Veamos los ejemplos del Código fuente 152.

Sub Main()

Dim Valor As Integer

Dim Palabra As String

Dim Contador As Integer

Dim Pruebas As Integer

' bucle con While

Do While Valor <> 200

Console.WriteLine("Introducir un número")

Valor = Console.ReadLine()

Loop

' bucle con Until

Do Until Palabra = "coche"

Console.WriteLine("Introducir una palabra")

© Grupo EIDOS 15. Bifurcación y ámbito del código

261 Palabra = Console.ReadLine()

Loop

' inicializar contador,

' en este caso vamos a pedir también

' al usuario que introduzca un número,

' pero si después de cinco intentos,

' no consigue acertar, forzamos la salida

' de la estructura

Contador = 1

Do While Pruebas <> 200

Console.WriteLine("Introducir un número - Intento nro.{0}", Contador)

Pruebas = Console.ReadLine()

If Contador = 5 Then

Exit Do

Else

Contador += 1

End If

Loop

End Sub

Código fuente 152

En el último caso de este ejemplo, podemos observar como empleamos además, la anidación de

diferentes estructuras, combinándolas para realizar las comprobaciones oportunas.

Condición al final.

La diferencia en este caso, consiste en que el contenido de la estructura se ejecuta al menos una vez.

El Código fuente 153 muestra su sintaxis.

Do

' código

' ......

[Exit Do]

' código

' ......

Loop While | Until Expresión

Código fuente 153

El Código fuente 154 muestra algunos ejemplos. Sub Main()

Dim Valor As Integer

Dim Palabra As String

' bucle con While

Do

Console.WriteLine("Introducir un número")

Valor = Console.ReadLine()

Loop While Valor <> 200

' bucle con Until

Do

Console.WriteLine("Introducir una palabra")

Programación con Visual Basic .NET © Grupo EIDOS

262 Palabra = Console.ReadLine()

Loop Until Palabra = "coche"

End Sub

Código fuente 154

Sin condición.

Este es el modo más sencillo de la estructura: sin incluir condición al principio o final. También es

el modo más peligroso, ya que si no incluimos un control dentro del código, corremos el riesgo de

caer en un bucle infinito. En el ejemplo del Código fuente 155, establecemos una condición de

salida mediante una estructura If dentro del bucle, que comprueba el contenido de la variable, y

fuerza la salida cuando tenga un valor superior a cierto número.

Sub Main()

Dim Valor As Integer

Do

Console.WriteLine("Introducir un número")

Valor = Console.ReadLine()

' comprobar y salir del bucle si es necesario

If Valor > 400 Then

Exit Do

End If

Loop

End Sub

Código fuente 155

For...Next Esta estructura ejecuta un bloque de código un número determinado de veces, establecido por un

rango de valores y controlado por un contador. El Código fuente 156 muestra su sintaxis

For Contador = Inicio To Fin [Step Incremento]

' código

' ......

[Exit For]

' código

' ......

Next

Código fuente 156

El elemento Contador se inicializa con un valor y el código existente entre For y Next es ejecutado

una serie de veces, hasta que el valor de Contador se iguala a Fin.

Por defecto, los incrementos de Contador son en uno, pero podemos cambiar este aspecto utilizando

el modificador Step, mediante el que podemos establecer el número en el que se van a realizar los

incrementos. Step también nos permite realizar decremento utilizando un número negativo.

Si queremos realizar una salida de la ejecución de esta estructura antes de haber completado el

número de iteraciones establecidas, podemos utilizar la instrucción Exit For, que provocará dicha

salida de igual modo que el explicado anteriormente en la estructura Do...Loop. El Código fuente

157 muestra diferentes ejemplos de uso de este tipo de bucle.

Sub Main()

Dim Contador As Integer

Dim Final As Integer

' recorrido simple del bucle

Console.WriteLine("Bucle For normal")

For Contador = 1 To 10

Console.WriteLine("Variable Contador: {0}", Contador)

Next

Console.WriteLine()

' recorrer el bucle especificando un incremento

Console.WriteLine("Bucle For con incremento")

Console.WriteLine("Introducir el número de ejecuciones para el bucle")

Final = Console.ReadLine()

For Contador = 1 To Final Step 4

Console.WriteLine("Variable Contador: {0}", Contador)

Next

Console.WriteLine()

' recorrer el bucle especificando un decremento

Console.WriteLine("Bucle For con decremento")

For Contador = 18 To 4 Step -1

Console.WriteLine("Variable Contador: {0}", Contador)

Next

Console.WriteLine()

' este bucle no se ejecutará,

' al ser mayor el valor de contador

' que el valor final, y no haber

' establecido un decremento

For Contador = 18 To 4

Console.WriteLine("Variable Contador: {0}", Contador)

Next

' recorrer el bucle y salir antes de completar

' todas las iteraciones

Console.WriteLine("Bucle For con salida antes de completar")

For Contador = 1 To 10

Console.WriteLine("Variable Contador: {0}", Contador)

If Contador = 7 Then

Exit For

End If

Next

Console.ReadLine()

End Sub

Código fuente 157

Un truco para optimizar y acelerar la ejecución en un bucle de este tipo, consiste en utilizar como

contador una variable de tipo Integer, en vez de una de tipo Short, Long, Decimal, etc. Esto es

debido a que los tipos Integer se actualizan más rápidamente que los otros tipos numéricos, aunque

la diferencia sólo será apreciable en bucles que ejecuten muchos miles de iteraciones y que

contengan muchas instrucciones.

Ver Código fuente 158. Dim ContRapido As Integer

Dim ContLento As Decimal

' este bucle se ejecutará más rápido que el siguiente

For ContRapido = 1 To 10000

' código

Next

For ContLento = 1 To 10000

' código

Next

Código fuente 158

For Each...Next Se trata de una variante de la estructura For...Next, y su misión consiste en ejecutar un bloque de

código por cada uno de los elementos existentes en un array o colección. El Código fuente 159

muestra su sintaxis.

For Each Elemento In ColecArray

' código

' ......

[Exit For]

' código

' ......

Next

Código fuente 159

El Código fuente 160 muestra un ejemplo del uso de esta estructura de control. Sub Main()

' crear un array y rellenarlo con valores

Dim lsColores() As String = {"Azul", "Verde", "Marino", "Violeta"}

Dim lsColor As String

' en cada iteración se obtiene un elemento

' del array lsColores, y se guarda en la variable lsColor

For Each lsColor In lsColores

Console.WriteLine(lsColor)

Next

End Sub

Código fuente 160 © Grupo EIDOS 15. Bifurcación y ámbito del código