Anuncios

Bienvenidos sean a este post, hoy veremos uno de los dos tipos de bucles que podemos utilizar, en este caso se llama bucle determinado porque tiene un comienzo y un final, en general su sintaxis es la siguiente:

for variable = inicial to final step valor
	... instrucciones ...
	[ exit for ]
	... instrucciones ...
next
Anuncios

En este caso tendremos una variable X, la cual puede estar declarada antes o no, esta tendra un valor inicial y repetira el bucle hasta que coincida con el valor de final, en el cuerpo del bucle tendremos las instrucciones que sean necesarias repetirse y como opcional podemos usar a exit for para interrumpir el bucle y salir del mismo, en general podemos utilizarlo con un condicional if para ser llamado cuando se cumpla una condicion de salida, un ultimo detalle antes de pasar al ejemplo es step, con este parametro definimos el valor que debe incrementarse la variable por cada pasada, si no se especifica ninguno sera de 1 pero puede ser 2, 3, etc y tambien puede ser negativo pero no es una practica habitual sino mas bien el incremento es positivo, como ejemplo vamos a tomar el codigo del post anterior (dados.vbs) y vamos a hacer a siguiente modificacion:

dados.vbs

randomize timer

dim dado
dim texto

for a = 1 to 6

	msgbox "Tirar el dado"
	dado = int(rnd * 6) + 1
	texto = texto & " " & dado

next

wscript.echo("Tus numeros fueron: " & texto)
Anuncios

En este caso sacamos el select case y agregamos un bucle for que cuenta de 1 a 6, en este caso agregamos un mensaje para tirar el dado por cada pasada, genera el numero y lo almacenamos en texto y a su vez vamos guardando los nuevos numeros en texto, una vez terminado el ciclo mostramos el resultado final, primero veamos el mensaje que aparecera en cada ciclo

Nos aparecera seis veces y no dira nada, una vez terminada las seis pasadas nos aparecera el siguiente mensaje

En este caso podemos ver como se almacenaron las tiradas y como se mostraron al final, para el siguiente vamos a poner en practica el exit for mediante la siguiente modificacion:

randomize timer

dim dado
dim texto

for a = 1 to 6

	consulta = msgbox("Tirar el dado", vbOkCancel)
	if consulta = 1 then
		dado = int(rnd * 6) + 1
		texto = texto & " " & dado
	else
		exit for
	end if
next

wscript.echo("Tus numeros fueron: " & texto & " - hasta el ciclo: " & a)
Anuncios

En este caso modificamos a msgbox para que nos muestre dos botones, Ok y Cancel, agregamos un condicional donde verifica el boton pulsado es 1 (Ok) o 2 (Cancel) y en base al valor ejecuta el generador de numeros o sale del bucle por medio del exit for, si lo probamos se vera asi

Anuncios

En este caso pueden ver los dos mensajes, el primero para tirar el dado, en el segundo caso no solo nos dice los numeros sino en que ciclo lo interrumpimos como pueden observar en algunos casos es practico poder interrumpirlo pero no siempre sera asi, los ciclos for al igual que el if pueden ser anidados y podremos correr varios, tomemos el siguiente ejemplo:

for.vbs

dim columnas
dim filas
dim texto

columnas = inputbox("Ingresa el numero de columnas")
filas = inputbox("Ingresa el numero de filas")

for a = 1 to filas
	for b =  1 to columnas
		c = a * b
		texto = texto & " " & c		
	next
	texto = texto & chr(10)
next

wscript.echo(texto)
Anuncios

En este caso le pediremos a la persona que ingrese dos valores, uno para la cantidad de columnas y otro para las filas, una vez ingresados primero tendremos un ciclo for que tendra como limite el valor de filas, equivaldra a cada linea, luego tendremos un ciclo para hacer las columnas y como limite sera el valor ingresado en columnas, en este ciclo multiplicaremos el valor actual de a por el de b y eso lo almacenaremos en texto, con esto formariamos la linea, con la cantidad de columnas informadas, una vez terminado el ciclo a texto le agregaremos el caracter 10 del Enter para hacer una nueva fila, vuelve a pasar al siguiente valor para repetir el bucle de columnas, una vez que termina el bucle de filas sale del mismo y lo muestra en pantalla, veamos su salida

Anuncios

En este caso usamos 10 columnas y 10 filas y nos devolvio no solo todas las operaciones sino 10 numeros por cada fila, con este ejemplo pudimos ver que el limite no necesariamente tiene que ser un literal sino tambien otra variable, en todos los casos de este post siempre hemos iniciado desde 1 pero se puede iniciar desde cualquier valor, inclusive valores negativos, el unico parametro que no usamos fue step porque la unica modificacion es en el valor con el que incrementamos cada pasada, si hubiesemos usado 2 el siguiente valor en lugar de el anterior + 1 hubiera sido + 2, es decir en lugar de 2 seria 3 el siguiente seria 5 y asi, y en general no se usa, por ultimo si nosotros necesitaramos una cuenta regresiva usariamos un bucle de la siguiente forma:

for a = 10 to 1 step -1
	msgbox a
next
Anuncios

En este caso primero haremos que los valores vayan de mayor a menor y como segundo paso le decimos que el step sea -1 para que reste en lugar de sumar, debido a que sino lo informamos de manera predeterminada lo suma, con estas simples modificaciones podemos hacer una cuenta regresiva.

Nota: En este caso el step es fundamental para un funcionamiento correcto de nuestro codigo.
Anuncios

Antes de finalizar vamos a hablar sobre una forma especial de usar a for, esta es por medio de la palabra clave each la cual en lugar de usar un contador como vimos en los casos anteriores pasa por todos los objetos de una coleccion informada, veamos su sintaxis:

for each objDestino in objOrigen
	... instrucciones ...
next
Anuncios

En este caso objDestino va a ser el objeto que vamos a utilizar para recibir cada uno de los objetos contenidos en objOrigen, por cada ciclo ejecutaremos las instrucciones pertinentes, esto es algo muy util cuando necesitamos pasar por todos los datos de un objeto para recuperar alguno o algunos en particular pero desconocemos cuantos posee, mas adelante veremos un claro ejemplo para ponerlo en practica.

Anuncios

En resumen, hoy hemos visto como son los bucles determinados mas conocidos como bucles for, como son, para que se usan, porque se usan, los beneficios de usarlos, su estructura, como interrumpir la misma y como poder darle otras utilidades, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes comprar mi libro sobre VBscript en Amazon

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00