septiembre 24, 2012

TM–Semana 03

En esta sesión repasaremos las estructuras cíclicas o bucles, orientándonos al proyecto que posteriormente se implementará como parte de sus proyectos.
Exactamente examinaremos las sentencias While, Do Until y For, pero antes de empezar recordemos la forma de implementar un inputBox que necesitaremos, en su forma básica es:
   variable = InputBox(cadena_mensaje, cadena_título)
En donde variable debe ser una cadena por defecto.

El Proyecto

He iniciado un nuevo proyecto SmartDevice con el lenguaje VisualBasic al que he nombrado “Semana03” con todas las otras opciones por defecto y agregamos un label al que establecemos las siguientes propiedades:
  • Text: Lo dejamos en blanco
  • Dock: Fill (clic en el centro de la imagen desplegable)
Esta última propiedad hará que el label se ajuste a los cuatro lados del contenedor (el Form1) en donde mostraremos un mensaje una determinada cantidad de veces.
Para pasar a la vista de código si damos doble clic en el formulario en realidad estamos dando los clics en el label (se carga el evento Label1_ParentChange()) que ocupa todo el espacio disponible, así que en la lista sobre el código seleccionamos “(Form1 eventos)”:
image

Luego a la derecha hay otra lista con los eventos del elemento seleccionado, clic en “Load” si es que no se hubiese seleccionado automáticamente, con eso ya tenemos el “Sub Form1_Load()”.

Trabajando con While

Recordemos mostrar el clásico “Hola mundo” un número determinado de veces (5 por ejemplo), así que en el evento Load del Form1 implementamos la variable “x” que nos servirá como contador y la iniciamos en el valor entero: 1, mientras el valor almacenado en esta variable sea menor o igual a 5:
Dim x As Integer = 1
While x <= 5

Si la evaluación “x <= 5” devuelve “verdadero” se ejecutan dos sentencias, primero se agrega al label la cadena “¡Hola mundo!” y un salto de línea, luego se incrementa el contador (aquí muchas veces podríamos cometer el error de olvidar incrementar el contador y obtener un bucle infinito, que nunca dará falso):
Label1.Text += "¡Hola Mundo!" + vbCrLf
x += 1

Así que la implementación completa es:
   Dim x As Integer = 1
   While x <= 5
       Label1.Text += "¡Hola Mundo!" + vbCrLf
       x += 1
   End While

Otra cosa a tener presente es que se imprime 5 veces el saludo ya que inicia en 1 y se detiene luego de llegar a 5, pero, el resultado será otro si iniciamos elcontador en 0, o si el operador de comparación es “<” en vez de “<=”, el resultado al ejecutar es:
image

Form2, pidiendo datos

Ahora usaremos un InputBox para solicitar que el usuario ingrese el número de veces que desea imprimir el saludo, menú “Proyecto” clic en “Agregar WindowsForm…”, le dejaré el nombre por defecto y clic en “Agregar”.
Igualmente agregamos un label, borramos el texto de la propiedad Text y Dock lo pasamos a Fill (vea el ejercicio anterior), para el evento Form2_Load() implementamos:
   Dim mensaje As String
   mensaje = "¿Cuántos saludos desea imprimir?"""
   Dim x = 1, num As Byte
   num = Byte.Parse(InputBox(mensaje, "¿Continuar?"))
   While x <= num
       Label1.Text += "¡Hola Mundo!" + vbCrLf
       x += 1
   End While

  1. Variable mensaje de tipo cadena
  2. Iniciamos mensaje asignándole un valor
  3. Dos variable de tipo Byte: x y num
  4. Pedimos un número y lo asignamos a num
  5. Mientras x sea menor o igual a num
  6. Agregamos al label un saludo y un salto de línea
  7. Incrementamos el contador x += 1
  8. Finaliza el bucle y vuelve a evaluar la condición

Usando Do Until

Do Until sería el antagónico de While en el tema de evaluar la condición. Mientras un bucle con While se detendrá cuando la condición devuelva “False”, Do Until se detendrá cuando la condición devuelva “True”.
En resumen, Do Until se continuará ejecutando hasta que la condición llegue a devolver “Verdadero”, si a la primera la condición es verdadera, el bucle no se ejecutará. La sntaxis:
   Do Until condición_evaluar
       sentencias_mientras_faso
   Loop

Por ejemplo, para solicitar el ingreso de un valor iniciaremos un bucle, este bucle no se detendrá hasta que se ingrese el valor solicitado (debe ingresar la cadena “18”).
Así que agregamos un cuadro de texto (dejaré su nombre por defecto TextBox1) en donde el usuario ingresará un valor, también agregamos un ítem en el mainMenu1 y le implementamos:
image
  1. Recuperamos la cadena ingresada en el TextBox1
    Dim cadena As String = TextBox1.Text
  2. Iniciamos el bucle Do Until que se ejecutará mientras el valor ingresado no sea la cadena “18”:
    Do Until cadena = “18”
  3. Si resulta falso, pedimos que ingrese su edad:
    cadena = InputBox(“Ingrese su edad”, “Su edad”)
  4. El bucle se detendrá cuando el usuario llegue a ingresar la cadena “18”, entonces la edad correcta la escribimos en el TextBox1 y mostramos un mensaje de bienvenida:
    TextBox1.Text = cadena
    MessageBox.Show(El dato ingresado es correcto”; “OK”)
La implementación quedaría así:
   Private Sub MenuItem1_Click()
       Dim cadena As String = TextBox1.Text
       Do Until cadena = "18"
           cadena = InputBox("Ingrese su edad", "Su edad")
       Loop
       TextBox1.Text = cadena
       MessageBox.Show("El dato ingresado es correcto", "OK")   
   End Sub

Si el usuario a la primera ingresa “18” el bucle Until nunca se ejecutará ya que la evaluación devolverá “verdadero”.
Nota: Si desea evitar errores con los espacios en blanco revise la función Trim que usamos en el ejercicio anterior.

Usando For

La estructura “For” es una de las más usadas en la mayoría (si no en todos) de los lenguajes de programación, su sintaxis es:
   For valor_inicial To valor_final [Step paso]
      sentencias_mientras_no_se_cumpla_valor_final
   Next

Por ejemplo, la sentencia:
   For x As Integer = 1 To x <=10 Step 1
      Label1.Text = “Saludo “ + x.ToString
   Next

Ímprimirá desde “Saludo 1” hasta "Saludo 10”, y si “Step = 1” entonces podría omitirse, este es el incremento por defecto, pero si desea dar los pasos de 2 en 2 entonces esa línea obligatoriamente sería:
   For x As Integer = 1 To x <=10 Step 2
image
Preparemos el diseño anterior, tres TextBox para pedir que ingrese el número de inicio, el número final y el incremento (salto), agregamos un ítem al mainMenu1 e implementamos:
        Label4.Text = ""
        Dim inicio, fin, paso As Integer
        inicio = Integer.Parse(TextBox1.Text)
        fin = Integer.Parse(TextBox2.Text)
        paso = Integer.Parse(TextBox3.Text)
        For x As Integer = inicio To fin Step 3
            Label4.Text += x.ToString + " "
        Next
Esto nos llevará a encontrar otras situaciones (la impredictibilidad del usuario) y otras soluciones.

Recursos

  1. http://msdn.microsoft.com/es-es/library/zh1f56zs%28v=vs.80%29.aspx
  2. http://mmalicea.tripod.com/vbwhileuntil.htm

No hay comentarios.:

Publicar un comentario

Tu comentario