Autor Tema: Ejercicio 7 Semana 8 - Ayuda curso tutorizado on-line bases de la programación  (Leído 3628 veces)

JValero

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 27
    • Ver Perfil
Buenos días,

Haciendo el ejercicio 7 correspondiente a la semana 8 me encuentro con el siguiente problema. El programa me entra en un bucle a la hora de ejecutar el Msgbox y de ahí no sale. El código utilizado es el siguiente:

Option Explicit

Dim TotalCemento As Integer
Dim CemEntregado As Integer

Private Sub Form_load()
Form1.Caption = "Control de cemento en almacén"
Label1.Alignment = 2
Label1.Caption = "Por favor, introduzca el total de kilos de cemento a retirar:"
Command1.Caption = "Retirar cemento"
TotalCemento = 25000
End Sub

Private Sub Command1_Click()
Text1 = CemEntregado
Do While TotalCemento >= 6000
CemEntregado = MsgBox("Cemento retirado de almacén")
TotalCemento = TotalCemento - CemEntregado
Loop
Label2.Alignment = 2
Label2.FontBold = True
Label2 = "El inventario ha bajado de 6000 kilos de cemento. Por favor, comuníquelo al almacén"
End Sub


Entiendo perfectamente el porqué entra en el bucle y de ahí no sale. Le estoy diciendo que mientras el TotalCemento sea mayor o igual de 6.000 que muestre el mensaje de "Cemento retirado de almacén" en un msgbox.

Lo que me gustaría saber es cómo solucionar este problema, es decir, como meter la cantidad de kilos a retirar en el TextBox, pulsar sobre el command button, que me muestre el mensaje en el msgbox y acto seguido vuelva a la pantalla principal a poner una nueva cantidad de cemento a retirar hasta que llegue a los 6000 kilos en el almacén y muestre el mensaje final en Label2.

Cualquier ayuda será bienvenida y muy agradecida. Si no queda clara mi explicación, por favor, indicármelo y trataré de aportar nuevos datos.

Muchas gracias de antemano.
« Última modificación: 02 de Septiembre 2014, 18:33 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Ejercicio 7 Semana 8 - Ayuda
« Respuesta #1 en: 26 de Abril 2014, 19:02 »
Hola, te comento las cuestiones a tener en cuenta:

Para insertar código usa el botón # que aparece en el editor del foro, así el código saldrá como código, de otra forma puede aparecer distorsionado. Para ello pulsa el botón # y escribe el código entre las etiquetas [ code ] ... [ / code] que aparecerán.

Text1 = CemEntregado se lee "Text1 toma el valor que tenga CemEntregado"

Esto es incorrecto, tú quieres que CemEntregado tome el valor de Text1, por tanto habría que escribir:

CemEntregado = Text1

Recordar siempre que a = b se lee como "a toma el valor que tenga b", o en el caso de

a = a * a se lee "a toma el valor que tenía a previmente multiplicado por el valor que tenía a previamente"

Por ejemplo a = 6

a = a * a

Supone que a ahora tiene el valor 6*6, es decir, a = 36



La siguiente cuestión:

CemEntregado = MsgBox("Cemento retirado de almacén") se lee de la siguiente manera "CemEntregado vale <<mostrar por pantalla Cemento retirado de almacén>>". Esto no es una sintaxis válida. ¿Qué necesitamos? Que en cada pasada del bucle se pida el dato de cemento entregado, esa es la condición que permite la evolución del bucle hasta llegar a poder salir de él. Si no hay evolución, el bucle se repite indefinidamente (bucle infinito) La sintaxis a emplear para realizar esta operación es:

CemEntregado = Val(InputBox("Introduzca cantidad de cemento entregado", "Entrega"))

Esto se lee: "La variable CemEntregado toma el valor numérico (Val) introducido por el usuario en una ventana de petición de datos (inputbox) donde el mensaje que se muestra al usuario es "Introduzca cantidad de cemento entregado" y el titulillo de la ventana es "Entrega".

El código nos quedaría entonces así (eliminamos el text1, puesto que no vamos a hacer uso del textbox, sino que la petición de datos se hará a través del inputbox, que es otra forma de pedir datos al usuario:

Código: [Seleccionar]
Option Explicit
Dim TotalCemento As Integer
Dim CemEntregado As Integer

Private Sub Form_load()
Form1.Caption = "Control de cemento en almacén"
Label1.Alignment = 2
Label1.Caption = "Por favor, introduzca el total de kilos de cemento a retirar:"
Command1.Caption = "Retirar cemento"
TotalCemento = 25000
End Sub

Private Sub Command1_Click()
Do While TotalCemento >= 6000
CemEntregado = Val(InputBox("Introduzca cantidad de cemento entregado", "Entrega"))
TotalCemento = TotalCemento - CemEntregado
Loop
Label2.Alignment = 2
Label2.FontBold = True
Label2 = "El inventario ha bajado de 6000 kilos de cemento. Por favor, comuníquelo al almacén"
End Sub

También nos podemos plantear la opción de hacerlo a través del textBox. Pero en ese caso no podríamos usar un bucle do while, porque no tendríamos forma de salir de él, la repetición se produciría porque el usuario iría haciendo click muchas veces en el commandbutton hasta llegar a cumplirse la condición de terminación. En este momento mostraríamos un mensaje indicando que ya no se puede retirar más cemento:

Código: [Seleccionar]
Option Explicit
Dim TotalCemento As Integer
Dim CemEntregado As Integer

Private Sub Form_load()
Text1 = "" 'Limpiamos el text1
Label2 = "" 'Limpiamos el text2
Form1.Caption = "Control de cemento en almacén"
Label1.Alignment = 2
Label1.Caption = "Por favor, introduzca el total de kilos de cemento a retirar:"
Command1.Caption = "Retirar cemento"
TotalCemento = 25000
End Sub

Private Sub Command1_Click()
If TotalCemento >= 6000 Then
CemEntregado = Text1
TotalCemento = TotalCemento - CemEntregado
MsgBox ("Se han retirado " & CemEntregado & " kilos de cemento y quedan " & TotalCemento & " kgs")
Text1 = "" 'Limpiamos el text1
Else
MsgBox ("El inventario ha bajado de 6000 kilos de cemento. Por favor, comuníquelo al almacén")
End If
End Sub

¿Es mejor hacerlo con un bucle do while o mediante el commandbutton? Depende de lo que se pretenda. A veces hay múltiples maneras de hacer las cosas y ninguna de ellas puede decirse que sea mejor que otra, simplemente serían distintas alternativas. Posiblemente este problema se pueda resolver de más maneras, muchas veces hay múltiples alternativas. En este caso al ser un ejercicio fíjate en lo que pida el enunciado y hazlo de la forma que se adapte mejor a lo que indique el enunciado.

Quizás me he alargado demasiado, si hay algo que no se entienda dímelo. Saludos.

JValero

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 27
    • Ver Perfil
Re:Ejercicio 7 Semana 8 - Ayuda
« Respuesta #2 en: 27 de Abril 2014, 18:17 »
Hola Alex,

Te agradezco muchísimo tu respuesta. Todas las dudas aclaradas. Sobre todo te agradezco los dos ejemplos que me has puesto, tanto mediante el uso de Do..While y de cómo realizar el ejercicio mediante el uso de un TextBox.

Repito, muchísimas gracias.

Saludos.

 

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".