Buenas!.
Estoy realizando un ejercicio con JavaScript en el que se hace uso de este bucle.
Aunque Gambas carece de el, se puede emular con Do Loop Until
El problema que me encontraba es el planteamiento del ejercicio que puede llevar a confusión.
Por ejemplo, dice el enumciado.
Cita:Para solicitar el nombre: repite la petición y no continúa si se introduce un número.
Es que eso de no continua si se introduce un número me quede a cuadros.
En JavaScript es algo como esto:
Código:
<script>
var nombre;
do {
// La segunda cadena se mostrará dentro de la casilla donde se introduce los datos
nombre = prompt('Ingrese su nombre','Escribir aquí su nombre');
} while(!isNaN(nombre));
</script>
La instrucción isNaN, ¿ es número ?. Como está negada se cumpliría la condición cuando no lo sea, una cadena por ejemplo
De ahí al enunciado. Suena raro.
En Gambas es algo como esto:
Código:
Public Sub Ejemplo5()
Dim nombre As Variant
Do
Print ("Ingrese su nombre")
Input nombre
'Cuando es un número. La función da True y not la invierte haciendola False
'Cuando es un caracter o cadena de caracteres. La función da False y not la invierte haciendola True.
Loop Until Not IsNumber(nombre) 'Cuando es True Termina el bucle
End
La idea es hacerlo con este tipo de bucle. Aprender a usar el bucle.
Otros ejemplos:
En este caso no se cumple
Código:
Public Sub EjemploBucle2()
Dim x As Integer = 4
Do
Print "x vale " & x
x += 1
Loop Until Not (x <= 10)
End
En este si, con ayuda del NOT.
Código:
Public Sub EjemploBucle2()
Dim x As Integer = 4
Do
Print "x vale " & x
x += 1
Loop Until Not (x <= 10)
End
Os propongo un ejercicio. ¿ Es posible en el "Until" sin un if (claro) hacer la comprobación de esta condición que incluyo en el cuerpo del bucle ?.
Código:
Public Sub EjemploBucle3()
Dim edad As Variant
Dim condicion As Boolean
Do
Print ("Ingrese su edad")
Input edad
'Debe ser un número y encontrarse entre 1 y 105 años
If IsNumber(edad) And If (CInt(edad) >= 1 And CInt(edad) < 105) Then
condicion = True
Else
condicion = False
Endif
Loop Until condicion
End
Creo que no. El problema es que Cint va a intentar convertir una cadena de letras, que eso no es posible.
Saludos