Profesor: Luis Umaña – Visual Basic 2010 Página 1 de 11

Ciclo escolar 2013 – Programación

Estructuras Repetitivas (de Bucle)

Ciclo, lazo o bucle (loop). Secuencia de instrucciones repetida continuamente hasta que se cumple una
determinada condición de salida del bucle.

Estructuras de Bucle:
Las estructuras de bucle o sentencias repetitivas, le permiten ejecutar una o más líneas de código
repetidamente. Las estructuras de bucle que acepta Visual Basic son:
a. For…Next
b. Do…Loop
c. While…EndWhile

Definiciones Básicas:
Iteración (iteration).Repetición. En informática, cualquiera de las acciones realizadas
por un bucle en el desarrollo de un programa.
Iterar(itérate).Repetir.
Las variables que por lo general se utilizan para los ciclos (iteraciones) son las letras:
i, j, x, z, así como las palabras; contador (counter), índice (index).

a. Ciclo For: Repite un grupo de instrucciones un número de veces
especificado. Su formato es el siguiente.
Sintaxis:


Observación: Para facilitar la comprensión de este tema, a continuación se muestra de otra forma la Sintaxis
anterior, la cual utilizaremos en clase (con el Profesor Luis U.).











Partes:
Counter (contador)
Se requiere en la instrucción For. Variable numérica. Variable de control para el bucle.
datatype
Obligatorio, a menos que counter ya se haya declarado. Tipo de datos de counter.
start
Obligatorio. Expresión numérica. Valor inicial de counter.
Forcounter [ As datatype ] = start To end[ Step step ]
[ statements ]
[ Exit For ]
[ statements ]
Next[ counter ]
For contador =valor_inicialTovalor_final[Step incremento]
Instrucción1
Instrucción2
.
.
InstruccionN
Next [contador]


Profesor: Luis Umaña – Visual Basic 2010 Página 2 de 11
Ciclo escolar 2013 – Programación

end
Obligatorio. Expresión numérica. Valor final de counter.
step
Opcional. Expresión numérica. Cantidad en la que se incrementa counter cada vez que se recorre el
bucle.
statements
Opcional. Una o más instrucciones entre For y Next que se ejecutan un número especificado de
veces.
ExitFor
Opcional. Transfiere el control fuera del bucle For.
Next
Obligatorio. Termina la definición del bucle For.

Comentarios
Utilice una estructura For...Next cuando desee repetir un conjunto de instrucciones un número fijo de veces.
Una InstrucciónWhile...EndWhile o una Instrucción Do...Loop funciona bien cuando no se sabe de antemano
cuántas veces se necesita ejecutar las instrucciones del bucle. Sin embargo, cuando espere ejecutar el bucle un
número concreto de veces, For...Next es una mejor elección. Determina el número de iteraciones cuando se
entra en el bucle por primera vez.
El valor de step puede ser positivo o negativo. Determina el procesamiento del bucle como sigue:
Valor de step El bucle se ejecuta si
Positivo o cero counter<= end
Negativo counter>= end
Si no se especifica, el valor predeterminado de step es 1.

Reglas
 Tipos de datos. El tipo de datos de counter suele ser Integer, pero puede ser cualquier tipo que admita los
operadores mayor o igual que (>=), menor o igual que (<=), suma (+) y resta (-). Incluso puede ser un tipo
definido por el usuario siempre que admita todos estos operadores.
Las expresiones start, end y step suelen evaluarse como tipo Integer, pero pueden evaluarse como
cualquier tipo de datos que se amplíe al tipo de counter. Si se utiliza un tipo definido por el usuario para
counter, significa que hay que definir el operador de conversión CType para convertir los tipos de start,
end o step al tipo de counter.
 Declaración. Si counter no se ha declarado fuera de este bucle, se debe declarar en la instrucción For. En
tal caso, el ámbito de counter es el cuerpo del bucle. Sin embargo, no se puede declarar counter fuera y
dentro del bucle.
 Número de iteraciones. Visual Basic evalúa los valores de iteración start, end y step sólo una vez, antes de
que comience el bucle. Si el bloque de instrucciones cambia end o step, estos cambios no afectan a la
iteración del bucle.
 Bucles anidados. Se pueden anidar bucles For colocando un bucle dentro de otro. Sin embargo, cada
bucle debe tener una variable counter única. La siguiente construcción es válida.

For i As Integer = 1 To 10
For j As Integer = 1 To 10
For k As Integer = 1 To 10
' Insert statements to operate with current values of i, j, and k.
Next k
Next j
Next i

Profesor: Luis Umaña – Visual Basic 2010 Página 3 de 11
Ciclo escolar 2013 – Programación

 También se pueden anidar entre sí tipos diferentes de estructuras de control.

Nota:
Si una instrucción Next de un nivel de anidamiento externo se encuentra antes de la instrucción Next de un
nivel interno, el compilador genera un error. Sin embargo, el compilador sólo puede detectar este error
superpuesto si se especifica counter en cada instrucción Next.
 Identificar la variable de control. Opcionalmente, puede especificarse counter en la instrucción Next. Esto
mejora la legibilidad del programa, sobre todo si se han anidado bucles For. La variable que se especifique
debe ser igual a la que aparece en la instrucción For correspondiente.
 Transferir fuera del bucle. La Instrucción Exit, transfiere el control inmediatamente a la instrucción que
sigue a Next. Por ejemplo, puede ser conveniente salir de un bucle si se detecta una condición que hace
que sea innecesario o imposible continuar la iteración, como puede ser un valor erróneo o una solicitud de
finalización. Asimismo, si se detecta una excepción en una instrucción Try...Catch...Finally, se puede utilizar
ExitFor al final del bloque Finally.
Se puede colocar cualquier número de instrucciones ExitFor en un bucle For. ExitFor se suele utilizar
después de evaluar alguna condición, por ejemplo en una estructura If...Then...Else.
 Bucles sin fin. Un uso de ExitFor es comprobar una condición que pudiera ocasionar un bucle sin fin; es
decir, un bucle que pudiera ejecutarse un número extremadamente elevado de veces e incluso
infinitamente. Si se detecta este tipo de condición, se puede utilizar ExitFor para escapar del bucle.
Comportamiento
 Entrada en el bucle. Cuando comienza la ejecución del bucle For...Next, Visual Basic evalúa start, end y step
por primera y única vez. Después asigna start a counter. Antes de ejecutar el bloque de instrucciones,
compara counter con end. Si counter ya ha superado el valor final, el bucle For finaliza y el control pasa a la
instrucción que sigue a Next. De lo contrario se ejecuta el bloque de instrucciones.
 Iteraciones del bucle. Cada vez que Visual Basic encuentra la instrucción Next, incrementa counter en el
valor indicado en step y vuelve a la instrucción For. Compara de nuevo counter con end y, otra vez, ejecuta
el bloque o termina el bucle según el resultado. Este proceso continúa hasta que counter sobrepasa end o
se encuentra una instrucción ExitFor.
 Terminación del bucle. El bucle no finaliza hasta que counter haya sobrepasado end. Si counter es igual a
end, el bucle continúa. La comparación que determina si se ejecuta el bloque es counter <= end si step es
positivo y counter >= end si step es negativo.
 Cambiar los valores de iteración. Cambiar el valor de counter mientras se está dentro de un bucle puede
dificultar la lectura y la depuración del código. Cambiar el valor de start, end o step no afecta a los valores
de iteración especificados cuando se entró en el bucle por primera vez.

Ejemplo 1: Diseñar la aplicación que muestre los números del 0 al 10, empleando para ello la Estructura
For…Next.
Solución; Cuando escribe un programa, debe repetir las acciones con frecuencia. Por ejemplo,
suponga que está escribiendo un método que muestra una serie de números en pantalla. Deseará
repetir la línea de código que muestra el número, las veces que sea necesario.
El bucle For...Next le permite especificar un número y repetir un código contenido dentro de ese bucle para el
número específico de veces. Para programar el ciclo For, primero necesitamos diseñar el formulario con un
Control Button1 (activara el código) y un Control Label1 (mostrará los números en pantalla).










Profesor: Luis Umaña – Visual Basic 2010 Página 4 de 11
Ciclo escolar 2013 – Programación


Después de haber agregado los controles,
le damos doble clic al control Button1 y
programamos en el Método Clic.






Al ejecutar el código anterior (F5) al darle
clic al botón, podemos apreciar que en el
Label1, solo se puede leer el número 10 y
no todo el rango de 0 a 10 y esto es debido
a que el ciclo For, ejecuto por cada iteración
el número siguiente que le correspondía a
la variable i, pero en la misma posición del
control Label1, y de una forma muy rápida
que ni siquiera el usuario pudo ver pasar
todos los números, si lo que se quiere es
ver todo el rango numérico, entonces
ejecute el siguiente código, empleando la
concatenación de cadenas.

Ejemplo 2: Diseñar la aplicación que muestre el abecedario en minúscula, en un control Label1. Emplear la
Estructura For…Next.
Solución; Para poder mostrar el abecedario, utilizando la estructura For, es necesario
comprender que la variable de Control del For, ha de ser numérica y no de tipo carácter (string)
es por ello que para la solución de este programa, utilizaremos la función Chr (convierte el valor
numérico ASCII a su equivalente en carácter) la cual nos permitirá mostrar las letras.
Para este caso, el abecedario en minúscula en la Tabla ASCII, esta comprendido por los códigos del 97 al 122
y el abecedario en mayúscula por los códigos del 65 al 90.Al igual que en el ejemplo 1, se necesita un Control
Button1 y un Control Label1 y la programación es:














Profesor: Luis Umaña – Visual Basic 2010 Página 5 de 11
Ciclo escolar 2013 – Programación

Ejemplo 3: Diseñar la aplicación que solicite al usuario ingrese una palabra, una frase o un carácter (cadena),
así como el número de veces que quiere que se repita dicha expresión.
Solución; Almacenar en diferentes variables los datos introducidos por el usuario (cadena y
número) con los datos ya almacenados en la sintaxis de la Estructura For es necesario establecer
como valor_inicial1 y como valor_final la variable numero. Los controles a utilizar son:















Al control TextBox3 modificarle las propiedades:
Multiline = True (Controla si el texto puede abarcar más de una línea).
ScrollBars= Vertical (Habilita barras de desplazamiento).

La programación de la aplicación seria:

























TextBox1

TextBox2



TextBox3





Label1


Label2


Button1


Button2

Ejecución del Programa

Profesor: Luis Umaña – Visual Basic 2010 Página 6 de 11
Ciclo escolar 2013 – Programación

b) Do...Loop: Utilice el bucle Do para ejecutar un bloque de instrucciones un número indefinido de veces. Es
decir, Repite un bloque de instrucciones mientras una condición Boolean sea True o hasta que la condición se
convierta en True.

Hay algunas variantes en la instrucción Do...Loop, pero cada una evalúa una condición numérica para
determinar si continúa la ejecución. Como ocurre con If...Then, la condición debe ser un valor o una expresión
que dé como resultado False (cero) o True (distinto de cero).
Sintaxis:





Otra variante de la instrucción Do...Loop ejecuta las instrucciones primero y prueba<condición>después de
cada ejecución. Esta variación garantiza al menos una ejecución de instrucciones:
Sintaxis:



c) While...endWhile: Ejecuta una serie de instrucciones mientras una condición dada sea True.
Sintaxis:








Ejemplo: En este ejemplo se utiliza la instrucción While...EndWhile para incrementar una variable de contador.
Las instrucciones del bucle se ejecutan mientras la condición sea True.












Errores de Programación

Do While<condición>
Instrucción1
Instrucción2
.
.
InstrucciónN
Loop

Formato 1
Do
Instrucciones
Loop While <condición>
Formato 2
While<condición>
instrucción1
instrucción2
.
.
instrucciónN
EndWhile


Profesor: Luis Umaña – Visual Basic 2010 Página 7 de 11
Ciclo escolar 2013 – Programación

Error de programación (bug). Errores que se producen en un programa, achacables normalmente al
programador.
Error lógico (logic error). un error normalmente procedente del diseño del algoritmo.
Error en tiempo de compilación (compile-time error). Un error, tal como un error de sintaxis, detectado
durante la compilación de un programa.

Variables Locales y Globales
Las variables que intervienen en un programa con procedimientos pueden ser de dos tipos: variables locales y
variables globales.

Las variables locales o privadas se declaran en un subprograma, en este caso, las variables locales solo
funcionan en el formulario donde fueron declaradas y no en los demás formularios, este tipo de variables se ha
de colocar en la sección : Public Class Form1
Ejemplo:
Public Class Form1
Dim edad as Byte, numero as byte
Dim direccion as string, nombre as string
Dim sueldo as double

Mientras que las variables globales o públicas se
declaran en el programa principal (módulos),
dentro del módulo las variables pueden ser
utilizadas o invocadas las veces que se necesiten,
no importando el formulario o control de toda la
aplicación. Además para que VB reconozca las
variables como globales es necesario sustituir en
la declaración de las variables la palabra reservada
DIm por Public ya que esto permite hacer
publicas las variables.
Módulos de Código

El código en Visual Basic se almacena en módulos. Hay tres tipos de módulos: de formulario, estándar y de
clase. Para nuestro estudio, trabajaremos con los módulos estándar.

Módulos Estándar
Los módulos estándar pueden contener código que es común a varios formularios en su aplicación. Este
código es por omisión público o global, lo cual significa (disponibles para toda la aplicación) o a nivel de
módulo de variables, constantes, tipos, procedimientos externos y procedimientos globales.

Los módulos estándar son contenedores de los procedimientos y declaraciones a los que tienen acceso otros
módulos de la aplicación. El código que se escribe en un módulo estándar no está ligado necesariamente a
una aplicación determinada; si tiene cuidado de no hacer referencia a controles o formularios por su nombre,
puede reusar un módulo estándar en distintas aplicaciones.
Pasos para crear un módulo estándar:
1) Menú Proyecto
2) Agregar nuevo elemento
3) Módulo
4) Dar clic en el Botón Agregar.
5) En la ventana del Explorador de soluciones (Ctrl + R) verificar que el módulo se encuentre ahí
(Module1.vb).


Profesor: Luis Umaña – Visual Basic 2010 Página 8 de 11
Ciclo escolar 2013 – Programación

Dentro del módulo para iniciar la declaración de las variables, no utilizaremos la instrucción reservada Dim
(dimensión) sino que emplearemos la instrucción reservada Public (público) para que las variables se puedan
utilizar en cualquier formulario (se vuelven públicas o globales).

Por ejemplo:












Manejo de Varios Formularios

Para poder insertar y trabajar con 2 o más formularios los pasos son:
1. Menú Proyecto
2. Agregar Windows Forms
3. En la ventana Agregar nuevo elemento seleccionar la opción Windows Forms.
4. Darle un nombre al formulario (o dejar el que asigna VB).
5. Dar clic en el botón Agregar.
6. En la ventana del Explorador de soluciones (Ctrl + R) verificar que el formulario se encuentre ahí
(Form2.vb).

Para avanzar (botón Next) del formulario 1 al formulario 2, la programación sería:
Public Class Form1
Private Sub Button1_Click()
Me.Hide()
Form2.Show()
End Sub
End Class

Para regresar (botón Back) del formulario 2 al formulario 1, la programación sería:
Public Class Form2
Private Sub Button1_Click()
Me.Hide()
Form1.Show()
End Sub
End Class

En donde Hide (en español significa, esconder u ocultar) es un evento que ocurre cuando la propiedad Visible
del objeto cambia a False. Y Show (en español significa, mostrar) es un evento que ocurre cuando la propiedad
Visible del objeto cambia a True.

Me (pronombre personal Yo) hace referencia al formulario actual en el que se esta trabajando.




Profesor: Luis Umaña – Visual Basic 2010 Página 9 de 11
Ciclo escolar 2013 – Programación

Contadores y Acumuladores
Contador (counter): En programación, una variable que va incrementando o decrementando su valor de modo
constante. La instrucción que representa a un contador es la siguiente:
Contador = Contador + 1 (incremento)
ó bien
Contador = Contador – 1 (decremento)

Acumulador (accumulator): Un acumulador o totalizador es una variable cuya misión es almacenar cantidades
variables resultantes de sumas sucesivas. Realiza la misma función que un contador, con la diferencia de que el
incremento o decremento de cada suma o resta es variable en lugar de ser constante.
Se representa por la instrucción:
Acumulador = Acumulador + N (incremento)
ó bien
Acumulador = Acumulador - N (decremento)
{donde N es un valor diferente a 1}

Regla: Cuando se utiliza un Contador o un Acumulador en un 90% se ha de inicializar a cero (0) dichas
variables. Esto puede variar, según las especificaciones del programa o bien el análisis realizado por el
programador.
Para realizar dicha inicialización se le recomienda que lo programe en el Método Form_Load(). Ejemplo:
Public Class Form1
Dim contador As Byte
Dim acumulador As Double
Private Sub Form1_Load()
contador = 0
acumulador = 0
End Sub
Private Sub Button1_Click()
Label1.Text = contador
contador = contador + 1
Label2.Text = acumulador
acumulador = acumulador + 10
End Sub
End Class
Función Rnd
(Números aleatorios)
Cuando se desea generar un número aleatorio (al azar), evaluando un determinado rango (posibilidades) se
deberá de emplear la función Rnd la cual devuelve un tipo Single que contiene un número aleatorio.

Para producir enteros aleatorios en un intervalo dado, use esta fórmula:
Azar = CInt((Límite_superior - límite_inferior + 1) * Rnd() ))

Aquí, límite_superior es el número mayor del intervalo y límite_inferior es el número menor del intervalo.
Comentarios
La función Rnd devuelve un valor menor que 1, pero mayor o igual a cero.
El valor de Number determina la forma en que Rnd genera un número aleatorio.
Para cualquier valor de inicialización dado, se genera la misma secuencia de números ya que cada llamada
sucesiva que se hace a la función Rnd utiliza el número anteriormente generado como inicialización para el
siguiente número de la secuencia. Antes de llamar a la función Rnd, utilice la instrucción Randomize sin
argumento para inicializar el generador de números aleatorios con un valor de inicialización basado en el
temporizador del sistema.
Nota: Para repetir secuencias de números aleatorios, llame a la función Rnd con un argumento negativo justo antes de
utilizar Randomize con un argumento numérico. Si utiliza Randomize con el mismo valor que Number, no se repetirá la

Profesor: Luis Umaña – Visual Basic 2010 Página 10 de 11
Ciclo escolar 2013 – Programación

secuencia anterior.
Nota de seguridad: Debido a que la instrucción Random y la función Rnd comienzan con un valor de inicialización y
generan números que quedan dentro de un intervalo finito, otra persona que conozca el algoritmo utilizado para generar
los resultados puede predecirlos. Por tanto, la instrucción Random y la función Rnd no se deben utilizar para generar
números aleatorios utilizados en criptografía.
Ejemplo: En el siguiente ejemplo se utiliza la función Rnd para generar un valor entero aleatorio en el intervalo
entre 1 y 6.

Public Class Form1
Private Sub Button1_Click()
'Inicializa el generador de números aleatorios.
Randomize()
'Se declara la variable que almacenara el
'número aleatorio.
Dim num_azar As Integer
'Se Genera el número aleatorio entre 1 y 6.
num_azar = CInt(Int((6 * Rnd()) + 1))
'Se manda a desplegar el número en un Label
Label1.Text = num_azar
End Sub
End Class
Control Timer
El componente Timer de formularios Windows Forms produce un evento a intervalos
regulares. Este componente está diseñado para un entorno de formularios Windows Forms. El
control Timer se encuentra en la Categoría de Controles Componentes en el Cuadro de
Herramientas.
Los controles Timer responden al paso del tiempo. Son independientes del usuario y puede
programarlos para que ejecuten acciones a intervalos periódicos de tiempo. Un uso típico es comprobar la
hora del sistema para ver si es el momento de ejecutar alguna tarea. Los cronómetros también son útiles para
otros tipos de procesamiento en segundo plano.
Propiedades, métodos y eventos principales
La longitud de los intervalos está definida por la propiedad Interval, cuyo valor se expresa en milisegundos.
Cuando el componente está habilitado, el evento Tick se produce a cada intervalo. Aquí es donde se agrega el
código que se va a ejecutar. Los métodos principales del componente Timer son Starty Stop, que activan y
desactivan el temporizador. Cuando el temporizador está desactivado, se reinicia; no hay modo de hacer una
pausa en un componente Timer.
La propiedad Interval
La propiedad Interval tiene algunas limitaciones que deben tenerse en cuenta al programar un componente
Timer:
 Si esta aplicación, o cualquier otra, está solicitando al sistema la realización de tareas pesadas, tales como
bucles largos, cálculos intensivos o acceso al disco, a la red o a un puerto, es posible que la aplicación no
obtenga los eventos del temporizador con tanta frecuencia como especifica la propiedad Interval.
 No se garantiza que el intervalo dure un tiempo exacto. Para asegurar la precisión, el temporizador debe
comprobar el reloj del sistema cuando sea necesario, en lugar de hacer un seguimiento del tiempo
acumulado internamente.
 La precisión de la propiedad Interval se indica en milisegundos. Algunos equipos proporcionan un
contador de alta resolución con una resolución mayor que milisegundos. La disponibilidad de este tipo de
contador depende del hardware del procesador del equipo. Para obtener más información, vea el artículo
172338 de Microsoft Knowledge Base, "HowTo Use QueryPerformanceCounterto Time Code", en
http://support.microsoft.com.
Inicializar el control Timer
El control Timer tiene dos propiedades principales.

Profesor: Luis Umaña – Visual Basic 2010 Página 11 de 11
Ciclo escolar 2013 – Programación

Propiedad Valor
Enabled Si quiere que el cronómetro empiece a funcionar en cuanto se carga el
formulario, establezca esta propiedad a True. De lo contrario, deje la
propiedad establecida a False. Puede que desee que otro evento externo
(como hacer clic en un botón de comando) inicie el funcionamiento del
cronómetro.
Interval Número de milisegundos transcurridos entre los eventos Timer.

Observe que la propiedad Enabled del cronómetro es diferente de la propiedad Enabled de otros objetos. En
la mayoría de los objetos, la propiedad Enabled determina si el objeto puede responder a eventos provocados
por el usuario. En el control Timer, cuando se establece Enabled a False se suspende el funcionamiento del
cronómetro.
Recuerde que el evento Timer es periódico. La propiedad Interval no determina la duración sino la frecuencia.
La duración del intervalo depende de la precisión que desee. Como existe cierta posibilidad de errores, haga
que la precisión del intervalo sea el doble de la deseada.

Nota : Cuando mayor es la frecuencia del evento Timer, más tiempo del procesador se utiliza en las respuestas
al evento. Esto puede afectar al rendimiento en general. No defina intervalos demasiado cortos a menos que
sea realmente necesario.
Observación:
En Visual Basic 6.0 se podía deshabilitar un
control Timer estableciendo la propiedad
Interval en 0. En Visual Basic 2008, el
intervalo más bajo de la propiedad Interval
es 1. Si establece el intervalo en 0, se
producirá una excepción en tiempo de
ejecución. El componente Timer de Visual
Basic 2008 utiliza la propiedad Enabled para
que sea posible habilitarlo o deshabilitarlo.
Ejemplo: Diseñar la aplicación de un Reloj
Digital en formato de
hh:mm:ss empleando para
ello el control Timer, con
un Interval de 1000. Al
transcurrir los 60 segundos
ha de incrementarse los
minutos, al transcurrir los 60 minutos ha de
incrementarse las horas y al cumplirse las 24
horas, el timer se deberá desactivar.
Solución; Insertar un Control Label, un
Control Timer (sección de Controles
Componentes) habilitar el control Timer en
la propiedadEnabled. Al Formulario aplicarle
un color negro de fondo (BackColor) y al Label un color de fuente blanco. El código de la solución es: