Visual Basic.NET - OBTENER VALOR DE CONSIGNA CON 20 VARIABLES

 
Vista:
sin imagen de perfil
Val: 32
Ha aumentado su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

OBTENER VALOR DE CONSIGNA CON 20 VARIABLES

Publicado por christian (16 intervenciones) el 28/05/2021 20:47:05
Hola, tengo la siguiente problemática: tengo 20 valores que serán fijos o estarán preestablecidos (las variables) y tengo un textbox donde se insertara una consigna (un valor x deseado por el usuario), el algoritrmo debe ser capaz de llegar al valor de consigna eligiendo entre esos 20 valores preestablecidos.
El programa esta enfocado a resolver un tema de pesaje donde se inserta un peso X por ejemplo 500 grs y el algoritmo prueba todas las formas de llegar a esos 500 grs con los 20 valores predefinidos que son de distinto valor cada uno por ejemplo 100 grs 200 grs 350 grs etc.....

Lo que yo tengo es asigne las 20 variables y con IF y ELSEIF voy probando si la variable 1 + la 2 llegan al valor, sino continuo con variable 1 + la 3 así sucesivamente, luego la variable 2 + la 3, varialbe 2 + la 4, etc.....

Dejo parte de esa logica los label es solo para corroborar la salida y seleccione valores en el form.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim consigna As String = TextBox1.Text
If consigna = "0" Then
    MsgBox("inserte consigna")
    TextBox1.Focus()
 
ElseIf peso1 = CInt(consigna) Then
    Label2.BackColor = Color.Green
 
ElseIf peso1 + peso2 = CInt(consigna) Then
    Label2.BackColor = Color.Green
    Label3.BackColor = Color.Green
ElseIf peso1 + peso3 = CInt(consigna) Then
    Label3.BackColor = Color.Green
    Label4.BackColor = Color.Green
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 32
Ha aumentado su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

OBTENER VALOR DE CONSIGNA CON 20 VARIABLES

Publicado por christian (16 intervenciones) el 28/05/2021 23:35:17
la cosulta es como puedo generar un unico codigo que pruebe todas las opciones? y no hacer cada suma ya que son artas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

OBTENER VALOR DE CONSIGNA CON 20 VARIABLES

Publicado por Phil Rob (1546 intervenciones) el 29/05/2021 13:55:30
Hola,

Tengo un algoritmo que da casi este que buscas (si he comprendido bien).

Mi programa calcular las monedas necesarias para una cantidad de dinero dada.
He lo escrito en un Module para testar.

En mi ejemplo, los valores conocidos están Euros, la moneda en Europa. Existen 15 valores escritos en la tabla ValoresQueExisten(), del mas grande hasta el mas pequeño.
Otra tabla llamada Resultados() contiene la cantidad de moneda necesaria por cada valor que existe, o cero si ninguna.

El cantidad de decímales utilizadas debe ser conocidos para escribir el coeficiente 10 ^ CantidadDecimal necesario para permitir la división entera cuando arribamos en los céntimos.

Este el código :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Sub Main()
 
    ' Algoritmo
 
    Dim ValoresQueExisten() As Double = {500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01}  ' Aqui esta los valores del Euro. 15 valores, indicios de 0 hasta 14
    Dim CantidadValores As Integer = 15
    Dim CantidadDecimal As Integer = 2 ' para el euro, existen las décimales hasta el céntimo con las modenas
    Dim Resultados(CantidadValores - 1) As Integer
 
    Dim ValorATratar As Double
    Dim ValorATratarTmp As Double
    Dim ValorTratado As Double
 
    Console.Write("Valor a tratar : ")
    ValorATratar = Console.ReadLine()
    ValorATratarTmp = ValorATratar
    ValorTratado = 0.0
 
    ' Attencion : division entera \
    For i As Integer = 0 To CantidadValores - 1
        Resultados(i) = ValorATratarTmp * 10 ^ CantidadDecimal \ ValoresQueExisten(i) * 10 ^ CantidadDecimal
        ValorTratado += Resultados(i) * ValoresQueExisten(i)
        ValorATratarTmp = ValorATratar - ValorTratado
    Next
 
    ' Prueba : mostrar en Console
 
    For i As Integer = 0 To CantidadValores - 1
        If Resultados(i) > 0 Then
            Console.WriteLine(Resultados(i) & " x " & ValoresQueExisten(i) & " = " & Resultados(i) * ValoresQueExisten(i))
        End If
    Next
    Console.ReadKey()
End Sub

Espero que est te ayudará ...

Money
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 32
Ha aumentado su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

OBTENER VALOR DE CONSIGNA CON 20 VARIABLES

Publicado por christian (16 intervenciones) el 30/05/2021 04:41:23
Gracias Phil....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar