Test Foro de elhacker.net SMF 2.1

Programación => Programación General => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: andaluz en 3 Enero 2012, 13:56 PM

Título: desglosar
Publicado por: andaluz en 3 Enero 2012, 13:56 PM
Hola a todos, estoy realizando una aplicación que me desglose una cantidad que le introduzco por teclado en los billetes y monedas correspondientes, aquí os dejo el programa y el código que he implementado yo, en el código le he introducido algunos Messagebox para que me enseñe por pantalla lo que me va devolviendo en la operación de la cantidad que le introduzco.

código de la aplicación:
Código (vbnet) [Seleccionar]

Public Class Form1
    ' Una máquina expendedora de dinero necesita calcular el número de billetes y monedas que corresponden
    ' a una cantidad (sin decimales.) Elaborar una aplicación que a través de un TEXTBOX introduzca una cantidad
    ' y con LABELS que me muestre cuántos billetes de 500 100 50 20 10 5 hay en esa cantidad. Ejemplo: 472 -> 4
    ' de 100, 1 de 50, 1 de 20 (me sobran 2 euros que no los tengo presentes pues no hay un billete de 2 euros)

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub

    Private Sub btn_Desglosar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Desglosar.Click
        Dim resto As Integer = 0
        Dim b_500, b_200, b_100, b_50, b_20, b_10, b_5, m_2, m_1 As Integer

        'b_500 = 0 & b_200 = 0 & b_100 = 0 & b_50 = 0 & b_20 = 0 & b_10 = 0 & b_5 = 0 & m_2 = 0 = 0 & m_1 = 0

        Try
            If txt_Cantidad.Text = "" Then
                MessageBox.Show("No ha introducido ninguna cantidad a desglosar", "Informacion", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If

            If txt_Cantidad.Text > 500 Then
                b_500 = CInt(txt_Cantidad.Text) / 500
                txt_Cantidad.Text = CInt(txt_Cantidad.Text) - (b_500 * 500)
                MessageBox.Show("Billetes de 500: " & txt_Cantidad.Text, "informacion", MessageBoxButtons.OK)
            End If

            If txt_Cantidad.Text > 200 Then
                b_200 = CInt(txt_Cantidad.Text) / 200
                txt_Cantidad.Text = CInt(txt_Cantidad.Text) - (b_200 * 200)
                MessageBox.Show("Billetes de 200: " & txt_Cantidad.Text, "informacion", MessageBoxButtons.OK)
            End If

            If txt_Cantidad.Text > 100 Then
                b_100 = CInt(txt_Cantidad.Text) / 100
                txt_Cantidad.Text = CInt(txt_Cantidad.Text) - (b_100 * 100)
                MessageBox.Show("Billetes de 100: " & txt_Cantidad.Text, "informacion", MessageBoxButtons.OK)
            End If

            If txt_Cantidad.Text > 50 Then
                b_50 = CInt(txt_Cantidad.Text) / 50
                txt_Cantidad.Text = CInt(txt_Cantidad.Text) - (b_50 * 50)
                MessageBox.Show("Billetes de 50: " & txt_Cantidad.Text, "informacion", MessageBoxButtons.OK)
            End If

            If txt_Cantidad.Text > 20 Then
                b_20 = CInt(txt_Cantidad.Text) / 20
                txt_Cantidad.Text = CInt(txt_Cantidad.Text) - (b_20 * 20)
                MessageBox.Show("Billetes de 20: " & txt_Cantidad.Text, "informacion", MessageBoxButtons.OK)
            End If

            If txt_Cantidad.Text > 10 Then
                b_10 = CInt(txt_Cantidad.Text) / 10
                txt_Cantidad.Text = CInt(txt_Cantidad.Text) - (b_10 * 10)
                MessageBox.Show("Billetes de 10: " & txt_Cantidad.Text, "informacion", MessageBoxButtons.OK)
            End If

            If txt_Cantidad.Text > 5 Then
                b_5 = CInt(txt_Cantidad.Text) / 5
                txt_Cantidad.Text = CInt(txt_Cantidad.Text) - (b_5 * 5)
                MessageBox.Show("Billetes de 5: " & txt_Cantidad.Text, "informacion", MessageBoxButtons.OK)
            End If

            If txt_Cantidad.Text > 2 Then
                m_2 = CInt(txt_Cantidad.Text) / 2
                txt_Cantidad.Text = CInt(txt_Cantidad.Text) - (m_2 * 2)
                MessageBox.Show("Monedas de 2: " & txt_Cantidad.Text, "informacion", MessageBoxButtons.OK)
            End If

            If txt_Cantidad.Text >= 1 Then
                m_1 = CInt(txt_Cantidad.Text) / 1
                txt_Cantidad.Text = CInt(txt_Cantidad.Text) - (m_1 * 1)
                MessageBox.Show("Monedas de 1: " & txt_Cantidad.Text, "informacion", MessageBoxButtons.OK)
            End If
            txt_Cantidad.Text = ""

            MessageBox.Show("La cantidad desblosada en billetes es: " & vbCrLf &
                        "Billetes de 500: " & b_500 & " Billetes" & vbCrLf &
                        "Billetes de 200: " & b_200 & " Billetes" & vbCrLf &
                        "Billetes de 100: " & b_100 & " Billetes" & vbCrLf &
                        "Billetes de 50: " & b_50 & " Billetes" & vbCrLf &
                        "Billetes de 20: " & b_20 & " Billetes" & vbCrLf &
                        "Billetes de 10: " & b_10 & " Billetes" & vbCrLf &
                        "Billetes de 5: " & b_5 & " Billetes" & vbCrLf &
                        "Monedas de 2: " & m_2 & " Monedas" & vbCrLf &
                        "Monedad de 1: " & m_1 & " Monedas" & vbCrLf, "Billetes", MessageBoxButtons.OK)
        Catch ex As Exception

        End Try

    End Sub
End Class
Título: Re: desglosar
Publicado por: Unbr0ken en 3 Enero 2012, 22:35 PM
Y... ¿tu error/problema es?
Título: Re: desglosar
Publicado por: andaluz en 9 Enero 2012, 12:25 PM
mi error/problema es el siguiente:

no me desglosa bien en los billetes que deben de ser, por ejemplo si quiero desglosar 2348 me devuelve solo:
       5 billetes de 500
Título: Re: desglosar
Publicado por: Novlucker en 9 Enero 2012, 13:03 PM
Cuando te ocurra eso, depuralo paso a paso.

Para empezar, deberías de utilizar CInt en cada if ...
Código (vbnet) [Seleccionar]
If CInt(txt_Cantidad.Text) > 500)
... y luego al dividir 2348 entre 500, el resultado debería de ser 4.696, por lo que te deberías de quedar con 4, pero te estas quedando con 5

Saludos
Título: Re: desglosar
Publicado por: andaluz en 9 Enero 2012, 13:49 PM
sigue si hacerlo bien!!! la verdad es que no se cual sera el problema que tiene el código, espero que me puedan ayudar
Título: Re: desglosar
Publicado por: andaluz en 10 Enero 2012, 19:12 PM
alguien sabe cual es el fallo que tiene este código??

Código (vbnet) [Seleccionar]

Public Class Form1
   ' Una máquina expendedora de dinero necesita calcular el número de billetes y monedas que corresponden
   ' a una cantidad (sin decimales.) Elaborar una aplicación que a través de un TEXTBOX introduzca una cantidad
   ' y con LABELS que me muestre cuántos billetes de 500 100 50 20 10 5 hay en esa cantidad. Ejemplo: 472 -> 4
   ' de 100, 1 de 50, 1 de 20 (me sobran 2 euros que no los tengo presentes pues no hay un billete de 2 euros)

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

   End Sub

   Private Sub btn_Desglosar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Desglosar.Click
       Dim resto As Integer = 0
       Dim b_500, b_200, b_100, b_50, b_20, b_10, b_5, m_2, m_1 As Integer

       'b_500 = 0 & b_200 = 0 & b_100 = 0 & b_50 = 0 & b_20 = 0 & b_10 = 0 & b_5 = 0 & m_2 = 0 = 0 & m_1 = 0

       Try
           If txt_Cantidad.Text = "" Then
               MessageBox.Show("No ha introducido ninguna cantidad a desglosar", "Informacion", MessageBoxButtons.OK, MessageBoxIcon.Information)
           End If

           If CInt(txt_Cantidad.Text) > 500 Then
               b_500 = CInt(txt_Cantidad.Text) / 500
               txt_Cantidad.Text = CInt(txt_Cantidad.Text) - (b_500 * 500)
               'MessageBox.Show("Billetes de 500: " & txt_Cantidad.Text, "informacion", MessageBoxButtons.OK)
           End If

           If CInt(txt_Cantidad.Text) > 200 Then
               b_200 = CInt(txt_Cantidad.Text) / 200
               txt_Cantidad.Text = CInt(txt_Cantidad.Text) - (b_200 * 200)
               'MessageBox.Show("Billetes de 200: " & txt_Cantidad.Text, "informacion", MessageBoxButtons.OK)
           End If

           If CInt(txt_Cantidad.Text) > 100 Then
               b_100 = CInt(txt_Cantidad.Text) / 100
               txt_Cantidad.Text = CInt(txt_Cantidad.Text) - (b_100 * 100)
               'MessageBox.Show("Billetes de 100: " & txt_Cantidad.Text, "informacion", MessageBoxButtons.OK)
           End If

           If CInt(txt_Cantidad.Text) > 50 Then
               b_50 = CInt(txt_Cantidad.Text) / 50
               txt_Cantidad.Text = CInt(txt_Cantidad.Text) - (b_50 * 50)
               'MessageBox.Show("Billetes de 50: " & txt_Cantidad.Text, "informacion", MessageBoxButtons.OK)
           End If

           If CInt(txt_Cantidad.Text) > 20 Then
               b_20 = CInt(txt_Cantidad.Text) / 20
               txt_Cantidad.Text = CInt(txt_Cantidad.Text) - (b_20 * 20)
               'MessageBox.Show("Billetes de 20: " & txt_Cantidad.Text, "informacion", MessageBoxButtons.OK)
           End If

           If CInt(txt_Cantidad.Text) > 10 Then
               b_10 = CInt(txt_Cantidad.Text) / 10
               txt_Cantidad.Text = CInt(txt_Cantidad.Text) - (b_10 * 10)
               'MessageBox.Show("Billetes de 10: " & txt_Cantidad.Text, "informacion", MessageBoxButtons.OK)
           End If

           If CInt(txt_Cantidad.Text) > 5 Then
               b_5 = CInt(txt_Cantidad.Text) / 5
               txt_Cantidad.Text = CInt(txt_Cantidad.Text) - (b_5 * 5)
               'MessageBox.Show("Billetes de 5: " & txt_Cantidad.Text, "informacion", MessageBoxButtons.OK)
           End If

           If CInt(txt_Cantidad.Text) > 2 Then
               m_2 = CInt(txt_Cantidad.Text) / 2
               txt_Cantidad.Text = CInt(txt_Cantidad.Text) - (m_2 * 2)
               'MessageBox.Show("Monedas de 2: " & txt_Cantidad.Text, "informacion", MessageBoxButtons.OK)
           End If

           If CInt(txt_Cantidad.Text) >= 1 Then
               m_1 = CInt(txt_Cantidad.Text) / 1
               txt_Cantidad.Text = CInt(txt_Cantidad.Text) - (m_1 * 1)
               'MessageBox.Show("Monedas de 1: " & txt_Cantidad.Text, "informacion", MessageBoxButtons.OK)
           End If
           txt_Cantidad.Text = ""

           MessageBox.Show("La cantidad desblosada en billetes es: " & vbCrLf &
                       "Billetes de 500: " & b_500 & " Billetes" & vbCrLf &
                       "Billetes de 200: " & b_200 & " Billetes" & vbCrLf &
                       "Billetes de 100: " & b_100 & " Billetes" & vbCrLf &
                       "Billetes de 50: " & b_50 & " Billetes" & vbCrLf &
                       "Billetes de 20: " & b_20 & " Billetes" & vbCrLf &
                       "Billetes de 10: " & b_10 & " Billetes" & vbCrLf &
                       "Billetes de 5: " & b_5 & " Billetes" & vbCrLf &
                       "Monedas de 2: " & m_2 & " Monedas" & vbCrLf &
                       "Monedad de 1: " & m_1 & " Monedas" & vbCrLf, "Desglose", MessageBoxButtons.OK)
       Catch ex As Exception

       End Try

   End Sub
End Class
Título: Re: desglosar
Publicado por: Novlucker en 10 Enero 2012, 19:19 PM
Cita de: Novlucker en  9 Enero 2012, 13:03 PM
... y luego al dividir 2348 entre 500, el resultado debería de ser 4.696, por lo que te deberías de quedar con 4, pero te estas quedando con 5

Te lo he puesto antes, pero simplemente te lo has salteado

Saludos
Título: Re: desglosar
Publicado por: andaluz en 10 Enero 2012, 19:22 PM
pero si le e echo el cint() a lo que tengo que calcular en cada if??
Título: Re: desglosar
Publicado por: andaluz en 10 Enero 2012, 19:24 PM
le tendría que realizar el modulo a la cantidad que tengo que dividir para quedarme con el resto verdad???
Título: Re: desglosar
Publicado por: Novlucker en 10 Enero 2012, 19:37 PM
Cita de: andaluz en 10 Enero 2012, 19:22 PM
pero si le e echo el cint() a lo que tengo que calcular en cada if??
Pero también había puesto eso.
Tu estas dividiendo, y al convertir a int redondea para arriba, cuando debería de ser para abajo.

Saludos
Título: Re: desglosar
Publicado por: seba123neo en 10 Enero 2012, 22:44 PM
te deberias hacer una funcion, te ahorras todos esos if y lineas de codigo.

saludos.
Título: Re: desglosar
Publicado por: andaluz en 13 Enero 2012, 17:31 PM
ok ya lo he solucionado!!!