Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: karlos en 07 de Febrero 2013, 14:06

Título: Semana 8 - Ejercicio 9 curso bases de la programación I tutorizado online
Publicado por: karlos en 07 de Febrero 2013, 14:06
Hola,

He resuelto el problema de la siguiente forma puesto que he tenido muchos problemas utilizando While....  los bucles se me quedaban colgados.  No termino de entender la funcionalidad de la herramienta While.

La pregunta es: mejora la eficiencia, rendimiento del programa utilizando la herramienta While? como se introduciría en el codigo que he creado?

Public Class Form1
    Dim cantidadExcedida As Boolean
    Dim extracción As Integer
    Dim totalextraccion As Integer
    Dim valorLimite As Integer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Label1.Text = "Introducir la cantidad extraida "
        valorLimite = 600

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        extracción = Val(TextBox1.Text)
        totalextraccion = totalextraccion + extracción
        Label2.Text = "Cantidad de dinero extraida total ha sido " & totalextraccion & " €"

        If totalextraccion >= valorLimite Then

            MsgBox("La cantidad de dinero extraida ha sido superior a " & valorLimite & " €")
            totalextraccion = 0

        End If
    End Sub
End Class
Título: Re:Semana 8 - Ejercicio 9
Publicado por: Mario R. Rancel en 07 de Febrero 2013, 17:06
Continúo con las cuestiones: la herramienta while se utiliza para crear bucles. De hecho, en vez de usar for podríamos usar while si quisiéramos.

El código que has creado está bien resuelto, el único problema que le veo es que no pareces usar un interruptor (cuestión que te pedía el enunciado). Usar una herramienta como while u otra como inputbox, textbox, etc. depende del lenguaje que estemos utilizando y de lo que sea más apropiado. Con Visual Basic tendría poco sentido resolver este programa usando un while, con otros lenguajes que por ejemplo no disponen de textboxes sí podría tener más sentido.

Si aún así quisiéramos resolverlo con un while tenemos que tener presente una cosa: un while no se detiene hasta que exista una condición por la cual se detenga. Esta condición puede ser una petición de datos interactiva al usuario o que se alcance la condición de terminación del bucle. Si quisiéramos forzosamente hacerlo con un while la idea sería que en cada pasada el bucle se detenga para pedirle el dato al usuario.

Código orientativo:

Dim cantidadExcedida As Boolean
Dim extraccion As Integer
Dim totalextraccion As Integer
Dim valorLimite As Integer

Private Sub Form_Load()
Label1.Caption = "Introducir la cantidad extraida "
valorLimite = 600
extraccion = InputBox("Cuál es la cantidad a extraer del cajero?", "Cantidad")

Do While extraccion < valorLimite

extraccion = InputBox("Cuál es la cantidad a extraer del cajero?", "Cantidad")

        totalextraccion = totalextraccion + extraccion
        Label2.Caption = "Cantidad de dinero extraida total ha sido " & totalextraccion & " €"

        If totalextraccion >= valorLimite Then

            MsgBox ("La cantidad de dinero extraida ha sido superior a " & valorLimite & " €")
            totalextraccion = 0
        Exit Sub
        End If
Loop
End Sub

Pero reitero dos cuestiones:

No hay que obcecarse por usar una herramienta (while u otra). Valorar alternativas y escoger la más razonable / eficiente.

Con Visual Basic tiene más sentido la solución como la has planteado que usando un while. El único cambio que te propondría es que introduzcas un interruptor como limiteExcedido tipo boolean, y que cambies el fragmento condicional para usar el interruptor

If limiteExcedido = True Then

            MsgBox("La cantidad de dinero extraida ha sido superior a " & valorLimite & " €")
            totalextraccion = 0

        End If
Título: Re:Semana 8 - Ejercicio 9
Publicado por: karlos en 07 de Febrero 2013, 22:54
Gracias.