Autor Tema: Similitudes y diferencias entre bucle y programa con botón Visual Basic eventos  (Leído 2196 veces)

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
En los cursos de fundamentos (bases) de programación generalmente usamos el pseudocódigo y diagramas de flujo para aprender a plantear la solución a problemas. El pseudocódigo no es un lenguaje propiamente dicho, por lo que no se puede ejecutar sobre un computador. No obstante, sí podemos ejecutarlo mentalmente para valorar su corrección y ver si un programa planteado con esa lógica daría los resultados adecuados.

Normalmente se usa un lenguaje para hacer prácticas y ver cómo trasladar a resultados prácticos sobre un computador los planteamientos lógicos. El lenguaje que se usa depende del curso, pero grosso modo podemos pensar en dos tipos de lenguajes:

- "Tradicionales de consola" como C o Pascal tradicional etc.
- "Gráficos con ventanas y botones" como Visual Basic

Hay lenguajes que pueden trabajarse tanto en modo consola como en modo gráfico, pero no vamos a detenernos en esto.

Usar uno u otro tipo de lenguaje tiene ventajas e inconvenientes. Si se trabaja mediante consola, los resultados visualmente son más pobres. Sin embargo, son buenos para empezar porque permiten trasladar el pseudocódigo muy fácilmente a código. No obstante, la pobreza visual en general desmotiva a los alumnos porque les parece que no obtienen resultados "profesionales".

Si se trabaja en un entorno de tipo Visual Basic, los resultados son visualmente más atractivos al usarse ventanas y botones. Esto es motivador y alienta a los alumnos a continuar. Como desventaja podemos indicar que la lógica de estos entornos no es tan lineal, y trasladar el pseudocódigo a código a veces puede no ser tan fácil.

Supongamos que se nos plantea este ejercicio:

1. Crear el pseudocódigo que pida al usuario la base y la altura de un rectángulo, y que a partir de esos datos proporcione el área del rectángulo. Una vez mostrado al usuario, se le debe preguntar al usuario si quiere repetir y realizar otro cálculo (en cuyo caso se le pedirán de nuevo los datos y se realizará y mostrará de nuevo el cálculo) o no (en cuyo caso el algoritmo termina).

Una solución posible para este ejercicio es este pseudocódigo:

1-Inicio
2-Respuesta= ”s”
3-Mientras Respuesta= “s” ó Respuesta= “S” Hacer
3.1-Mostrar "Introduzca la base": Pedir a: Mostrar "Introduzca la altura": Pedir b
3.2-Area = a*b
3.3-Mostrar “El área del rectángulo es”, Area
3.4-Mostrar “Quiere continuar (S/N)”
3.5-Pedir Respuesta
Repetr
4-Fin

Este ejercicio usa un bucle do while para permitir tantas repeticiones como el usuario desee.

Un programa en Visual Basic para implementar lo anterior podría ser este código 1:

Código: [Seleccionar]
Option Explicit
Dim i As Integer
Dim respuesta As Boolean
Dim pregunta As Integer
Dim a%, b As Integer
Dim resultado As Integer

Private Sub Form_Load()
Show
Label1 = "Introduzca base y altura" & vbCrLf
End Sub

Private Sub Command1_Click()
respuesta = False
Label1 = Label1
Do While respuesta = False
a = Val(Text1)
b = Val(Text2)
resultado = a * b
Label1 = Label1 & "El área del rectángulo es" & Space(1) & resultado & vbCrLf
pregunta = MsgBox("¿Desea continuar?", vbQuestion + vbYesNo, "Pregunta")
If pregunta = vbYes Then
respuesta = True
Else
Unload Form1
End
End If
Loop
End Sub


Este programa utiliza un do while con msgbox. Esta forma de escritura se asemeja a la del pseudocódigo, aunque la forma más “natural” de generar un programa de este tipo en Visual Basic sería usar textboxes y un botón para repetir y otro para finalizar. Ambas opciones, dentro de un curso de fundamentos, las consideraríamos correctas para este ejercicio, aunque podemos extendernos en explicar esto un poco si queremos.

La solución planteada anterior en Visual Basic es un poco "farragosa" desde la perspectiva de la forma de programación propia de este entorno, que podemos llamar "programación orientada a eventos". Si nos fijamos en el código 1, se usa un msgBox para preguntar si se quiere continuar o no, y si no se quiere continuar se termina el programa descargando el formulario. Esto es una forma de hacer las cosas poco natural para Visual Basic. Pensemos en cocinar algo: para hacer un potaje de verduras es más natural hacerlo en un caldero (olla) porque su altura nos permite llenarlo de agua y que no se derrame. Pero también podemos hacerlo en una sartén aunque no sea tan natural, y nos puede quedar bien también.

En Visual Basic, lo más natural sería un programa de este tipo, código 2:

Código: [Seleccionar]
Option Explicit
Dim i As Integer
Dim respuesta As Boolean
Dim pregunta As Integer
Dim a%, b As Integer
Dim resultado As Integer

Private Sub Form_Load()
Show
Label1 = "Introduzca base y altura" & vbCrLf
Command1.Text = "Calcular área"
End Sub

Private Sub Command1_Click()
respuesta = False
Label1 = Label1
a = Val(Text1)
b = Val(Text2)
resultado = a * b
Label2 = "El área del rectángulo es" & Space(1) & resultado & vbCrLf
End Sub

¿Qué ha cambiado? El bucle do while ha desaparecido, y ya no se pregunta directamente al usuario si quiere repetir o no.

¿Este programa responde al objetivo que se plantea en el pseudocódigo?

La respuesta es que sí, lo que pasa es que lo hace con otra lógica propia de aplicaciones visuales.

Esto quizás no es tan propio de explicarlo en un curso básico, pero podemos intentarlo.

En las aplicaciones tradicionales de consola, no hay bucle si no se escribe el bucle en el código. En cambio en entornos como Visual Basic hay un "bucle continuo" en segundo plano, que no está escrito en código, sino que se ejecuta por defecto cuando se ejecuta un programa. Este bucle al que me refiero es un bucle de "Captura de eventos". Estos entornos están preparados para detectar lo que hace el usuario con el ratón o con el teclado, y ejecutar algo en respuesta a eso que ha hecho el usuario, lo que llamamos un evento. Por ejemplo si el usuario pulsa un botón se produce un evento. Si pulsa sobre el formulario es otro evento. Si escribe en un textbox es otro evento, etc. Así, se pueden producir muchos eventos en muy poco tiempo.

En este programa, el bucle sería el bucle de segundo plano de captura de eventos al que nos hemos referido, y la ejecución del código ante el evento click sobre el botón de cálculo sería el código que calcula el área y muestra el resultado.

Cada vez que se pulsa el botón, se hace el cálculo y se muestra el resultado. Entre dos pulsaciones de botón el usuario puede cambiar los datos de base y altura. El usuario puede repetir tantas veces como desee.

Sería una lógica como esta:

Inicio
Mientras [Aspa de cierre pulsada == false] hacer
Mostrar el formulario y contenidos
Si usuario pulsa botón
   Hacer cálculos y mostrar resultados
FinSi
Repetir
Fin

Aquí vemos que el programa está en un "bucle infinito" esperando a que el usuario pulse el botón. Si no pulsa el botón, el programa espera. Si pulsa el botón, calcula. Si pulsa el aspa de cierre, se cierra.

Nos encontramos así que tanto el pseudocódigo como el código 1 como el código 2 cumplen los objetivos planteados que eran:
- Que el usuario pueda introducir datos de base y altura y calcular el área de rectángulo tantas veces como quiera
- Que cuando el usuario lo decida, el programa termine

Usar textboxes y un botón es la forma de programar más habitual para hacer algo de este tipo en Visual Basic. Es más natural que usar un msgBox y unload. Pero para un curso de fundamentos nos vale tanto plantearlo de una manera como de otra, porque ambas son formas válidas de implementar la lógica.

Este tipo de cuestiones pueden resultar un tanto complicadas de comprender, por lo que en los cursos de fundamentos no nos detenemos en este tipo de cuestiones normalmente, es preferible dejarlo para un poco más adelante.


 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".