Objeto de conocimiento
Ahora veamos como podemos repetir partes de un programa mientras que cierta condición se cumpla o sea verdadera...
' Ejemplo de WHILE... WEND
' Calcula áreas de 5 círculos
CONST pi = 3.1416
CLS
PRINT TAB(30); "AREA DE 5 CIRCULOS"
contador = 0 ' Inicializamos el contador
WHILE contador < 5 'Inicio del ciclo. Contador < 5 porqueempezamos en cero
INPUT "Radio -> ", radio
PRINT "El área es"; pi * radio * radio
contador = contador + 1 ' El contador se incrementa en 1
WEND ' Seguir
END
El bloque WHILE (“mientras”)... WEND (“seguir”) nos sirve para que mientras una condición se cumpla (en este caso, mientras contador < 5) repetir una serie de instrucciones,desde donde empieza el WHILE hasta que se encuentre el WEND. En este tipo de ciclos o bucles generalmente el valor de la condición ya ha sido inicializado desde antes de entrar al ciclo (contador = 0) y se incrementa dentro del ciclo (contador = contador + 1). El ciclo se ejecutará mientras la condición sea verdadera, por lo que si desde antes de entrar al bucle la condición ya es falsa, elprograma no ejecutará el ciclo. Veamos...
' Ejemplo de un bucle WHILE...WEND que no se ejecutará
i = 0
CLS
WHILE i = 1 ' Mientras i = 1...pero como i = 0 y no igual a 1...
PRINT "HOLA"
i = i + 1
WEND
PRINT "Fin del programa"
END
Nota: Si lo ejecutas paso a paso verás mejor la secuencia.
También podemos caer en ciclos infinitos; esto es, ciclos que no tengan fin yterminarán nunca...
' Ejemplo de un bucle WHILE...WEND infinito
i = 1 ' Inicializamos la variable
CLS
WHILE i = 1 ' Mientras i = 1...
PRINT "HOLA, MUNDO..."
WEND '...
PRINT "Fin del programa"
END
Nota: Para poder salir de un bucle infinito debemos utilizar la combinación deteclas CTRL + Pause o CTRL + Scroll. En Turbo Basic asegúrate de la opción Keyboard Break del menú Options este en ON.
¿Qué podemos observar en el programa anterior? En efecto el programa entrará en el ciclo ya que la condición es verdadera (i = 1), pero i siempre será igual a 1 ya que no hay nada que la modifique dentro del bucle y así poder dar una salida. Este tipo de errores suele ocurrir sipor ejemplo...
' Ejemplo de un bucle WHILE...WEND infinito por error interno
cont = 1 ' Inicializamos la variable
CLS
WHILE cont = 1 ' Mientras cont = 1...
PRINT "HOLA, MUNDO..."
cont = con + 1 ‘ ¿¿ con ??. Si con = 0, entonces cont = 0 + 1 = 1 (:-O)
WEND '...
PRINT "Fin del programa"
END
También no necesariamente tiene que ser un incremento el que nos dé la salida...
' Ejemplo de un bucle WHILE...WEND utilizando un método de salida diferente
salir = 0 ' Inicializamos la variable
CLS
WHILE salir = 0 ' Mientras salir = 0...
PRINT "HOLA, MUNDO..."
INPUT "¿Quieres salir (si =1, no = 0)? ", salir
WEND ' seguir.
PRINT "Fin del programa"
END
Si usamos un contador, también podemos incrementarlo como queramos...
' Sacando raíz cuadrada usando WHILE...WEND.
CLS
PRINT TAB(26); "CALCULO DE LA RAIZ CUADRADA"
INPUT "Introduce un número positivo -> ", n
WHILE (cont * cont) < n
cont = cont +.0001
WEND
PRINT "La raíz cuadrada de"; n; "es"; cont
END
No necesitamos declarar una variable cont = 0 ya que al crearla automáticamente asume este valor.
Si n llegara a ser negativo, la condición sería falsa (en efecto, 0 por 0 no es menor que un número negativo) y el bucle no se ejecutaría.
Entre más pequeño sea el incremento de cont, n se acercará más a su raíz, ya que cont por cont...
Regístrate para leer el documento completo.