Apúntate...


Consultas, desarrollo de programas y petición de presupuestos:

Mostrando entradas con la etiqueta bucles. Mostrar todas las entradas
Mostrando entradas con la etiqueta bucles. Mostrar todas las entradas

miércoles, 22 de agosto de 2012

Bucles Infinitos.


Cuando en un ciclo la condición siempre es verdadera se dice que es un ciclo infinito, pues nunca saldrá del ciclo y el programa no termina. 

Ejemplo:
While TRUE
....
....
Wend


Para evitarlos hay que estar seguros que en el bloque de ordenes haya una orden que modifique el valor de la condición de tal modo que llegue a ser falsa, o que haya una orden  BREAK que se ejecute aunque sea una vez o en determinadas circunstancias.


Ejemplo:
Este del bucle While-Wend nunca saldremos...
Dim cont As Integer = 6
Dim a As Integer = 10
Dim suma As Integer


While (cont > 1)
suma = suma + cont
a -= 1
cont += 1 'cada vez el contador es mayor, por lo tanto siempre sera mayor que 1 (se va acumplir la condicion siempre)
Print suma, a, cont
Wend

¿cual sería la forma  de corregirlo?
Podíamos incluir una condición que al cumpliese salga del bucle:

Dim cont As Integer = 6
Dim a As Integer = 10
Dim suma As Integer


While (cont > 1)
suma = suma + cont
a -= 1
cont += 1 'cada vez el contador es mayor, por lo tanto siempre sera mayor que 1 (se va acumplir la condicion siempre dentro (cont>1)
Print suma, a, cont
If cont = 25 Then 'condicion que si se cumple...
Break ' salimos del bucle
Endif
Wend

 De esta forma  convertimos el bucle infinito, en un bucle normal, de que el programa saldrá al ejecutarse varios ciclos.

Otra forma de corregir el bucle, es usar la variable a, en la condicion del bucle (cont<1) cambiarlo a (a<1), con el cual llegará un momento en que se salga del bucle.

 Descarga del ejemplo completo: Enlace

martes, 21 de agosto de 2012

For ... Each

Repite un bucle mientras se enumera un objeto, dicho objeto debe de ser enumerable ( por ejemplo, una colección, o una matriz.)

 Sintaxis:

FOR EACH Variable IN Expresión 
   ... 
 NEXT
 
Expresión : debe de ser un objeto enumerable

Ejemplo:
Con una matriz de cadenas:



Dim Dict As New String[]
Dim Elemento As String

Dict.add("Azul")
Dict.add("Rojo")
Dict.add("Verde")

For Each Elemento In Dict
Print Elemento
Next

Para más información: http://gambaswiki.org/wiki/lang/foreach

Descarga del ejemplo:  Enlace


Break y Continue

 Estas dos instrucciones se usan dentro de los bucles.

Break: hace que salgamos del bucle o ciclo  sin terminar de ejecutar las ordenes que le sigan

Continue: hace que saltemos del el ciclo actual, continuando el bucle de repetición

Veamos dos ejemplos:
Ejemplo de Break:



'ejemplo de uso de break:
Dim limite, a As Integer
Print "Introduce un numero del 1 al 10, para salir del bucle cuando llegue a el:"
Input limite
For a = 1 To 10
If a = limite Then
Print "Salgo del bucle..."
Break
Endif
Print "Numero ", a 'esto no se ejuctara una vez que a llegue a ser igual que limite
Next


Print "Fin del ejemplo"

Y un ejemplo de Continue:

Print "Usando Continue"
Print "Introduce un numero del 1 al 10, para salte a la siguiente iteración del bucle cuando llegue a el:"
Input limite
For a = 1 To 10
If a = limite Then
Print "Salto a la siguiente iteración del bucle..."
Continue
Endif
Print "Numero ", a 'esto no se ejuctara una vez que a llegue a ser igual que limite
Next


Print "Fin del ejemplo de uso de Continue"

  • La salida generada, si le doy el valor de limite=3:
 Usando Break
Introduce un numero del 1 al 10, para salir del bucle cuando llegue a el:
3
Numero  1
Numero  2
Salgo del bucle...
Fin del ejemplo de uso de Break
Usando Continue
Introduce un numero del 1 al 10, para salte a la siguiente interación del bucle cuando llegue a el:
3
Numero  1
Numero  2
Salto a la siguiente iteración  del bucle...
Numero  4
Numero  5
Numero  6
Numero  7
Numero  8
Numero  9
Numero  10
Fin del ejemplo de uso de Continue


Enlace de descarga del código de ejemplo: Enlace 

Para más información:
http://gambaswiki.org/wiki/lang/break?l=es&nh
http://gambaswiki.org/wiki/lang/continue?l=es&nh


For .... Next

 
For ... Next es un método para ejecutar un bloque de sentencias un número fijo de veces.

El ciclo for se diferencia del ciclo while,  en que las operaciones de control del ciclo se sitúan en un solo sitio: la cabecera de la orden


Sintaxis

FOR Variable = Expression { TO | DOWNTO } Expression [ STEP ExpressionStep ]
   ...

{ordenes}
   ...

NEXT



Funcionamiento del For

1. Evalúa la condición, si es verdadera entra al ciclo: variable=Expression
2. Ejecuta el o las ordenes: {ordenes}
4.Incrementa o decrementa, dependiendo del valor ExpressionStep, el valor de la Variable y regresa al punto 1

Para más información: GambasDoc

Ejemplos:

'Mostrar los 30 primeros números de la serie de Fibonacci. La serie es 1,1,2,3,5,8,13....

Dim a As Integer = 1
Dim b As Integer = 1
Dim i As Integer
Dim fibo As Integer

Print "Mostrar los 30 primeros números de la serie de Fibonacci."
For i = 3 To 31
fibo = a + b
Print fibo
a = b
b = fibo
Next


Ejemplo II: Sumar todos los números nones desde 1 hasta 30


Dim num, suma As Integer = 0
Print "Sumar todos los numeros impares, del 1 al 30"
For num = 1 To 30 Step 2
suma += num
Print "Suma de nones:"; suma
Next


Ejemplo III: Sumar todos los numeros pares desde el 2 al 40

Dim num, suma As Integer = 0
Print "Sumar todos los numeros pares, del 2 al 40"
For num = 0 To 40 Step 2
suma += num
Print "Suma de pares:"; suma
Next


Descarga de los ejemplo: Enlace

Enlace a la documentación:
http://gambaswiki.org/wiki/lang/for


REPEAT....UNTIL

Esta orden se utiliza para especificar un ciclo condicional que se ejecuta al menos una vez.
Este ciclo se presenta en algunas circunstancias en las que se ha de tener la seguridad de que una determinada acción se ejecutara una o más veces, pero al menos una vez.

Sintaxis
                  Repeat
...’ instrucciones
Until Expresión-condicion


El bucle se repite hasta que la Expresión-condicion es cierta.


Ejemplo:
Contar cuantos  digitos de un número


Dim x As
Integer
Dim cant As Integer
Print "Contador de digitos de un numero"

Print "Teclea un numero, y contare los digitos que tenga"

Input x
Repeat
x = x / 10
cant += 1
Until (x = 0)
Print "El numero tiene: "; cant; " digitos"


Ejemplo II:
Pedir un número, y  omprobar si un numero esta entre el intervalo del 10 al 20, y sino seguir pidiendolo.

Dim num As Integer
Repeat
Print "Dame un numero:"
Input num
Until ((num >= 10) And (num <= 20))
Print "numero dentro del rango (10 a 20)"


Para más información:
http://gambaswiki.org/wiki/lang/repeat?l=es&nh
http://gambaswiki.org/wiki/lang/until?l=es&nh

Descarga de ejemplos: Enlace

While...Wend


Un ciclo while tiene una condición del ciclo, una expresión lógica que controla la secuencia de repetición.

La posición de esta condición del ciclo es delante del cuerpo del ciclo y significa que un ciclo while es un ciclo de preverificación de modo que cuando se ejecuta el mismo, se evalúa la condición antes de que se ejecute el cuerpo del ciclo.

Sintaxis
WHILE Expresión-condicion
….’instrucciones
WEND

Aquí se ejecuta el (las) orden (es) mientras la condición es verdadera; al momento de ser falsa termina el ciclo.

     Si la condición es falsa la primera vez nunca se
     ejecuta(n)  el (las) orden (es).

Ejemplos:

Ejemplo I: 
Programa que pide 10 números y calcula y muestra la suma de todos los que fueron pares.


Dim suma As Integer = 0
Dim cont As Integer = 10
Dim numero As Integer
Print "Programa que pide 10 números y calcula y muestra la suma de todos los que fueron pares."
While (cont > 0)
Print "Dame numero :"
Input numero
If numero % 2 = 0 Then suma += numero
cont -= 1
Wend
Print "Suma de numeros pares, es:", suma



Ejemplo II : Obtener el promedio de calificaciones de un grupo de 20 estudiantes


Dim total, contador, calif As Integer
Dim promedio As Float

total = 0
contador = 1
Print "Obtener el promedio de calificaciones de un grupo de 20 estudiantes"
While (contador <= 20)
Print "Dame calificacion:"
Input calif
total += calif
contador += 1
Wend
promedio = total / 20
Print "El promedio es: ", promedio

Nota:
Este bucle es ideal para usarlo cuando no sabemos cuantas veces se tienes que repetir el bucle, ya que disponemos de una comprobación para salir de él. Por ejemplo en el ejemplo 1º la condición que se comprobraba antes de repetir el bucle era: "cont > 0"

Para más información:
http://gambaswiki.org/wiki/lang/while?l=es&nh
http://gambaswiki.org/wiki/lang/wend?l=es&nh


Código fuente de los ejemplo: Ejemplos

Bucles, Repeticiones o Ciclos


Un ciclo o bucle,  es cualquier construcción de programa que repite una sentencia o secuencia de sentencias un número de veces.

La sentencia o grupo de sentencias que se repite en un bloque se denomina cuerpo del ciclo y cada repetición del cuerpo del ciclo se llama iteración del ciclo.


En gambas existen varias ordenes para realizar repeticiones, que nos van a ayudar a controlar los bucles. 
BREAKAbandona un bucle inmediatamente.
CONTINUESalta a la siguiente iteración de un bucle.
DO ... LOOPBucle infinito.
FOR ... NEXTBucle con contador.
FOR EACH ... NEXTBucle de enumeración.
REPEAT ... UNTILBucle con una comprobación de salida al final.
WHILE ... WENDBucle con una comprobación de salida al inicio.



Para más información: 




A falta de donativos... un poco de publicidad