Test Foro de elhacker.net SMF 2.1

Programación => Programación General => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: luis456 en 9 Agosto 2014, 15:07 PM

Título: Mis malas combinaciones :(
Publicado por: luis456 en 9 Agosto 2014, 15:07 PM
Al ataque de nuevo jeje bueno ya ustedes saben como se frustra uno cuando no se logra hacer funcionar algo, vueltas y vueltas y nada tengo el siguiente programa que funciona bien hasta llegar a la función de combinar los numeros pero es un código de basic que quiero implementar pero no soy capaz ( como siempre)


Código (vbnet) [Seleccionar]
Public Class Form1
    Dim maximum As Short = 99
    Dim x As Integer = 0
    Dim Número As Double
    Private TextBoxes As TextBox() = {Nothing}
    Private Result1 As Int32(), Result2 As Int32(), Result3 As Int32()
    Private _textBox As Object
    Private Property ListBox1Count As Integer
    ReadOnly MAX As Integer = 99

    Dim auxiliar As Integer
    Dim auxiliar1 As Integer

    Dim auxiliar2 As String
    Dim auxiliar3 As String
    Dim anterior As String

    Dim recorrer As Integer
    Dim recorrer1 As Integer
    Dim recorrer2 As Integer
    Dim recorrer3 As Integer

    Private Property Calcular As Object

    Private Property TextBox(ByVal TextBoxCount As Short) As Object
        Get
            Return _textBox
        End Get
        Set(ByVal value As Object)
            _textBox = value
        End Set
    End Property

    Public Sub solonumeros(ByRef e As System.Windows.Forms.KeyPressEventArgs)
        ' evitar letras
        If Char.IsDigit(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsControl(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsSeparator(e.KeyChar) Then
            e.Handled = False
        Else
            e.Handled = True
        End If

    End Sub


    ReadOnly Property Num1 As Int32
        Get
            Return CInt(TextBox1.Text)
        End Get
    End Property

    ReadOnly Property Num2 As Int32
        Get
            Return CInt(TextBox2.Text)
        End Get
    End Property
    ReadOnly Property Num3 As Int32
        Get
            Return CInt(TextBox3.Text)
        End Get
    End Property
   

    Private Sub Sumar(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click


        Result1 = {Num1 + 1, Num1 + 2, Num1 + 4, Num1 + 6, Num1 - 4, Num1 - 1} _
                  .Distinct().ToArray ' Elimino duplicados

        Result2 = {Num2 + 1, Num2 + 2, Num2 + 3, Num2 - 1, Num2 - 2, Num1 - 3} _
                  .Distinct().ToArray ' Elimino duplicados

        Result3 = {Num3 - 1, Num3 - 2, Num3 - 3, Num3 + 2, Num3 + 3, Num3 + 5} _
                  .Distinct().ToArray ' Elimino duplicados

       
        Dim Rand As New Random
        ' Concateno, y...
        ' Elimino duplicados, y...
        ' Selecciono los números inferiores a MAX, y...
        ' Convierto los números mayores a MAX a números aleatorios entre 0 y MAX.
        Dim Result As IEnumerable(Of Integer) =
            (Result1.Concat(Result2).Concat(Result3)).
            Distinct.
            Select(Function(Value As Integer)
                       Return If(Value < MAX, Value, Rand.Next(0, MAX))
                   End Function)


        ListBox1.Items.AddRange(Result.Cast(Of Object).ToArray)
       
        ' Result2---------------------------------------------------------
        Dim Rand2 As New Random
        ' Concateno, y...
        ' Elimino duplicados, y...
        ' Selecciono los números inferiores a MAX, y...
        ' Convierto los números mayores a MAX a números aleatorios entre 0 y MAX.
        Dim Result22 As IEnumerable(Of Integer) =
            (Result1).
            Distinct.
            Select(Function(Value As Integer)
                       Return If(Value < MAX, Value, Rand.Next(0, MAX))
                   End Function)



        ListBox2.Items.AddRange(Result22.Cast(Of Object).ToArray)



        Dim Rand22 As New Random
        ' Concateno, y...
        ' Elimino duplicados, y...
        ' Selecciono los números inferiores a MAX, y...
        ' Convierto los números mayores a MAX a números aleatorios entre 0 y MAX.
        Dim Result222 As IEnumerable(Of Integer) =
            (Result2).
            Distinct.
            Select(Function(Value As Integer)
                       Return If(Value < MAX, Value, Rand.Next(0, MAX))
                   End Function)

        ListBox3.Items.AddRange(Result222.Cast(Of Object).ToArray)


       
       
    End Sub
    ' funcion combinar la variable " resul " que contiene la cantidad de numeros a combinar (no funciona)
    ' esto es de basic pero es para cojer la idea :) no se como hacerlo en net

     For recorrer = 1 To Len(resul)
            auxiliar = Mid(palabra, recorrer, 1)
            For recorrer1 = 1 To Len(resul)
                auxiliar1 = Mid(palabra, recorrer1, 1)
                For recorrer2 = 1 To Len(resul)
                    auxiliar2 = Mid(palabra, recorrer2, 1)
                    For recorrer3 = 1 To Len(resul)
                        auxiliar3 = Mid(resul, recorrer3, 1)
                        If anterior <> auxiliar3 Then

                            Print(auxiliar & auxiliar1 & auxiliar2 & auxiliar3) <------------mostrar esto en un lixbox

                        End If
                        anterior = auxiliar3
                    Next
                Next
            Next
        Next
    End Sub



    '--------------------------- limpiar texboxes
    Private Sub Button2_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        For Each obj As Control In Me.Controls
            If (TypeOf obj Is TextBox) Then
                obj.Text = ""
            End If
            If (TypeOf obj Is GroupBox) Then
                For Each caja As Control In obj.Controls
                    If (TypeOf caja Is TextBox) Then
                        caja.Text = ""
                    End If
                Next
            End If

            ListBox1.Items.Clear()
            ListBox2.Items.Clear()
            ListBox3.Items.Clear()
           

        Next
    End Sub


End Class
Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 9 Agosto 2014, 21:01 PM
Cita de: luis456 en  9 Agosto 2014, 15:07 PMfunciona bien hasta llegar a la función de combinar los numeros pero es un código de basic que quiero implementar pero no soy capaz ( como siempre)

¿Que es exactamente lo que "falla"?, y en caso de dar error, ¿cual es el error?.

saludos
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 9 Agosto 2014, 21:37 PM
En la parte de las combinaciones me dice que se esperaba una declaración  ???

resul no esta declarado
palabra no declarado

de paso he visto un error que tenia y era que tenia que hacer un boton para introduce la funcion jejej

Código (vbnet) [Seleccionar]
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        ' funcion combinar la variable " resul " que contiene la cantidad de numeros a combinar (no funciona)
        ' esto es de basic pero es para cojer la idea :) no se como hacerlo en net

        For recorrer = 1 To Len(resul)
            auxiliar = Mid(palabra, recorrer, 1)
            For recorrer1 = 1 To Len(resul)
                auxiliar1 = Mid(palabra, recorrer1, 1)
                For recorrer2 = 1 To Len(resul)
                    auxiliar2 = Mid(palabra, recorrer2, 1)
                    For recorrer3 = 1 To Len(resul)
                        auxiliar3 = Mid(resul, recorrer3, 1)
                        If anterior <> auxiliar3 Then

                            Print(auxiliar & auxiliar1 & auxiliar2 & auxiliar3)
                        End If
                        anterior = auxiliar3
                    Next
                Next
            Next
        Next
    End Sub
Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 11 Agosto 2014, 19:29 PM
Cita de: luis456 en  9 Agosto 2014, 21:37 PM
En la parte de las combinaciones me dice que se esperaba una declaración  ???

resul no esta declarado
palabra no declarado

Luis, si te pido la información de un error no espero escuchar tu versión modificada del mensaje de error, sino el mensaje de error tal cual es, ¿sino como esperas que te ayudemos a depurarlo o encontremos información al respecto? (en este caso no hacia falta buscar nada, con tu explicación fue suficiente intuir el problema, pero la próxima vez quizás no sea tan intuitivo),
no creo que sea tan dificil darle click derecho al error y luego darle al botón de "Copiar" para pegarlo aquí de esta manera:
'resul' is not declared. It may be inaccessible due to its protection level.

Disulpa pero sabes que soy muy estricto con los detalles, proporcionar la información del error (el mensaje y el stacktrace, sin modificar) es el detalle más importante que se debería tener en cuenta cuando alguien tiene una duda.

Dicho esto, el error se debe a que no has declarado ninguna variable con el nombre 'resul' ni 'palabra', si quieres solucionar el error debes declararlas ...obviamente, jeje.
Código (vbnet) [Seleccionar]
Dim resul As ¿? = ¿?
Dim palabra As String = ""


Fuera de los Subs tienes declaradas las variables 'Result1', 'Result2' y 'Result3'.
Luego en el bloque del método 'Sumar' tienes una variable 'result' declarada, la 'vida' de esta variable se termina al finalizar el método.
Luego dentro del mismo bloque de 'Sumar' tienes una variable llamada 'Result22' y otra 'Result222'

¿Que lio es ese?, en serio, depeja todo ese lio de variables, colócalas al inicio del código (es decir, fuera de los subs), asígnales un nombre apropiado a cada variable para saber cual es su finalidad y así no dar lugar a equivocaciones, también podrías añadirle un pequeño comentario a cada una de las variables para dejarlo más claro incluso, y luego inizializa cada variable ahí mismo o cuando sea necesario si lo prefieres...

Creo que solo tú te puedes hacerte una idea de que variables deberían ir en 'resul' y 'palabra' para poder corregir esa parte del código que mostraste.

Saludos!
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 15 Agosto 2014, 21:16 PM
Bien te esplico mi proyecto :) jejej a ver si me hago entender, como siempre pasa uno sabe lo que quiere pero nunca logro hacerlo entender o explicar

input como tu dices :)

la variable result contiene x numeros que van desde 01 hasta el 99 pero según los resultados pueden ser menos.

supongamos que que la variable contenga estos números; ( pongo solo hasta el 30 para hacerlo corto )


input
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30


con estos números hay que formar grupos o combinaciones de 10 números saltando de dos en dos:

salida...

01 04 07 10 13 16 19 22 25 28

02 05 08 11 14 17 20 23 26 29

03 06 09 12 15 18 21 24 27 30

04 07 10 13 16 19 22 24 28  ?  <- aca rellenar con un numero dentro del rango 01 al 99 y por supuesto no se repita en la conbinacion esto es cuando se agoten los números de que tenga la variable

05 08 11 14 17 20 23 26 29  ? < igual poner numero dentro del rango y que no repita y esto hasta que acabe con el ultimo numero que seria el numero 30


30 ? ? ? ? ? ? ? ? ? ?

Motrar de menor a mayor en un lisxbot



saludos


Luis


Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 16 Agosto 2014, 03:29 AM
Cita de: luis456 en 15 Agosto 2014, 21:16 PM04 07 10 13 16 19 22 24 28  ?  <- aca rellenar con un numero dentro del rango 01 al 99 y por supuesto no se repita en la conbinacion esto es cuando se agoten los números de que tenga la variable

1.
¿el número del 1 al 99 del interogante debe ser aleatorio? (ej: ¿daría igual si es 5 o 95?), o por lo contrario debería seguir un orden de incremento (primero el 1, luego en el siguiente interrogante el 2, y en otro interrogante el 3, etc...)

2.
¿el número del interogante debe ser un número del 1 al 99, pero ese número además debe existir dentro de la variable Result? (y, repito lo del punto .1, ¿debe ser aleatorio?)



En teoría supongo que con un For asignándole un Step de 2 e incrementando el valor de una variable que usariamos para especificar el índice del elemento inicial en cada repetición del búcle sería suficiente, pero lo de los interrogantes lo veo algo más complicado, quizás no lo sea tanto, aclárame eso y veré lo que puedo hacer.

Saludos!
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 16 Agosto 2014, 05:02 AM
Cita de: Eleкtro en 16 Agosto 2014, 03:29 AM
1.
¿el número del 1 al 99 del interogante debe ser aleatorio? (ej: ¿daría igual si es 5 o 95?), o por lo contrario debería seguir un orden de incremento (primero el 1, luego en el siguiente interrogante el 2, y en otro interrogante el 3, etc...)

2.
¿el número del interogante debe ser un número del 1 al 99, pero ese número además debe existir dentro de la variable Result? (y, repito lo del punto .1, ¿debe ser aleatorio?)




En teoría supongo que con un For asignándole un Step de 2 e incrementando el valor de una variable que usariamos para especificar el índice del elemento inicial en cada repetición del búcle sería suficiente, pero lo de los interrogantes lo veo algo más complicado, quizás no lo sea tanto, aclárame eso y veré lo que puedo hacer.

Saludos!



Diossssssss son las 4 y bastante de la madrugada  vengo de fiesta y estas aca jo descanza chico mañana te cuento :)

luis



Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 16 Agosto 2014, 11:40 AM

Hola

no debe ser aleatorio, ya que siempre cuando se ejecute el programa siempre deben salir las mismas combinaciones salvo que cambie el imput o los numeros en la variable

los números a rellenar no importa estén o no en la variable siempre y cuando no repitan en la misma combinación y estén dentro del rango establecido .y termina cuando acabe el ultimo numero de la variable


Buen dia ;)

Luis
Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 18 Agosto 2014, 07:25 AM
Cita de: luis456 en 16 Agosto 2014, 11:40 AMlos números a rellenar no importa estén o no en la variable siempre y cuando no repitan en la misma combinación

Sinceramente, no se si es esto lo que andas buscando, pero es que con todo el material que se te ha ofrecido a lo largo del tiempo (incluyendo el siguiente código), creo que ya debería ser suficiente para que pudieras adaptar el código a tus necesidades haciendole los cambios que creas necesario.

Bueno, a ver si esta vez es la buena,
los números a rellenar no se repiten en la combinación actual, pero como siempre hay un "pero"... quizás te referías a que no se repitiera en ninguna de las combinaciones tampoco, pero eso sería imposible con un rango del 1 al 99 (ya que con los 30 números fijos de tu ejemplo y en combinaciones de 10 dígitos, sería necesario más de 99 números distintos aleatorios para rellenar los interrogantes, así que supongo que no lo habré entendido mal).

Nota: En la lista Combo se va generando la combinación actual, y una vez la combinación se completa ésta se añade a la colección Combos.

El código:

Código (vbnet) [Seleccionar]
Public Class LuisClass

   ReadOnly Randomizer As New Random

   ReadOnly FixedValues As Integer() =
       Enumerable.Range(1I, 30I).ToArray ' 1 to 30

   ReadOnly RandomValues As Integer() =
       Enumerable.Range(FixedValues.First, FixedValues.Last).ToArray ' 1 to 30

   Private Sub Test() Handles MyBase.Shown

       Dim IndexCounter As Integer = FixedValues.First ' 1
       Dim LenCounter As Integer = 0I

       Const NumStep As Integer = 3I
       Const NumLen As Integer = 10I

       Dim Combo As New List(Of Integer)
       Dim Combos As New List(Of List(Of Integer))

       Do Until IndexCounter > FixedValues.Last ' IndexCounter > 30

           For Num As Integer = IndexCounter To (FixedValues.Count) Step NumStep ' 1 to 30 Step 3

               Combo.Add(Num)
               LenCounter += 1I

               If LenCounter >= NumLen Then ' Esto no es necesario en este ejemplo porque siempre dará Falso, pero lo dejo aquí.
                   Exit For
               End If

           Next ' Num

           If LenCounter < NumLen Then ' If LenCounter < 10

               For RandomNum As Integer = 1I To (NumLen - LenCounter)

                   Dim n As Integer = Randomizer.Next(RandomValues.First, RandomValues.Last)

                   Do Until Not Combo.Contains(n)
                       n = Randomizer.Next(RandomValues.First, RandomValues.Last)
                   Loop

                   Combo.Add(n)

               Next ' RandomNum

           End If ' LenCounter < NumLen

#If DEBUG Then ' #Debug
           Debug.WriteLine(String.Join(", ", Combo))
           ' Stop
#End If

           Combos.Add(Combo)
           Combo.Clear()

           IndexCounter += 1I
           LenCounter = 0I

       Loop ' IndexCounter >= FixedValues.Last

   End Sub ' Test

End Class





Output (lo he formateado manualmente en el editor de texto con un RegEx para añadirle los "0"):

01, 04, 07, 10, 13, 16, 19, 22, 25, 28
02, 05, 08, 11, 14, 17, 20, 23, 26, 29
03, 06, 09, 12, 15, 18, 21, 24, 27, 30
04, 07, 10, 13, 16, 19, 22, 25, 28, 08
05, 08, 11, 14, 17, 20, 23, 26, 29, 09
06, 09, 12, 15, 18, 21, 24, 27, 30, 22
07, 10, 13, 16, 19, 22, 25, 28, 03, 23
08, 11, 14, 17, 20, 23, 26, 29, 18, 19
09, 12, 15, 18, 21, 24, 27, 30, 14, 22
10, 13, 16, 19, 22, 25, 28, 17, 08, 14
11, 14, 17, 20, 23, 26, 29, 02, 24, 07
12, 15, 18, 21, 24, 27, 30, 04, 22, 13
13, 16, 19, 22, 25, 28, 20, 27, 04, 01
14, 17, 20, 23, 26, 29, 21, 09, 02, 10
15, 18, 21, 24, 27, 30, 29, 26, 08, 13
16, 19, 22, 25, 28, 11, 20, 03, 04, 10
17, 20, 23, 26, 29, 28, 02, 03, 21, 09
18, 21, 24, 27, 30, 01, 26, 13, 17, 25
19, 22, 25, 28, 20, 16, 29, 08, 21, 15
20, 23, 26, 29, 10, 09, 01, 08, 07, 05
21, 24, 27, 30, 03, 28, 23, 22, 18, 17
22, 25, 28, 14, 15, 18, 13, 29, 24, 10
23, 26, 29, 21, 13, 18, 05, 07, 22, 14
24, 27, 30, 04, 29, 17, 23, 02, 28, 25
25, 28, 24, 11, 19, 07, 21, 08, 02, 03
26, 29, 15, 09, 25, 18, 11, 28, 20, 06
27, 30, 18, 19, 03, 06, 24, 16, 21, 23
28, 14, 04, 19, 21, 18, 26, 24, 01, 03
29, 09, 08, 14, 02, 19, 28, 07, 17, 27
30, 04, 05, 01, 18, 21, 16, 11, 14, 02
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 18 Agosto 2014, 15:36 PM
Gracias elektro

Como creo no saber nada :) algunas cosas ya que me da este error


Error   1   No se puede encontrar el evento 'Shown'.   ( edito ya lo resolví)

otra cosa " leyendo el codigo donde pones

Código (vbnet) [Seleccionar]
Enumerable.Range(1I, 30I).ToArray ' 1 to 30

asumo que el programa lee que son números desde el 01 al 30 correlativamente ? si es así, no es la idea jejej ya que sabes que yo extraigo en el viejo programa unos resultados que varían y pueden ser 01 05 19 22 34 55 66 88 99 por ejemplo,y como no logro entender donde pongo mi variable para probarlo a ver

también perdona mi ignorancia pero donde muestro los resultados  estoy poniendo esto pero solo me sale  " colección "
Código (vbnet) [Seleccionar]
ListBox1.Items.AddRange(combos.Cast(Of Object).ToArray)

gracias por tu infinita paciencia

luis
Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 19 Agosto 2014, 02:28 AM
Citarasumo que el programa lee que son números desde el 01 al 30 correlativamente ?

Tu input, del 1 al 30:
Cita de: luis456 en 15 Agosto 2014, 21:16 PMinput
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Mi input, del 1 al 30:
Citar
Código (vbnet) [Seleccionar]
Enumerable.Range(1I, 30I).ToArray ' 1 to 30

Recuerda que el código que te he ofrecido solo es un algoritmo que mimica los pasos que has explicado en tu ejemplo, es decir: 30 combinaciones del 1 al 30, dando saltos de 3 posiciones, los combos de 10 numeros de longitud cada combo, y con numeros aleatorios dentro de un rango específico en los espacios libres a rellenar.




Citarno es la idea
¿Que te impide modificar manualmente el array?:

Código (vbnet) [Seleccionar]
ReadOnly FixedValues As Integer() = {1, 5, 19, 22, 34, 55, 66, 88, 99, etc...}

El código actuará (o debería actuar) de la misma manera.




Citardonde muestro los resultados  estoy poniendo esto pero solo me sale  " colección "

Es que le estás intentando pasar una colección que tiene más colecciones dentro, es decir, una Lista de Listas (List(Of List(Of Integer))), debes pasarle solo las colecciones del interior, las sub-listas de la lista (List(Of Integer)) y tienes que pasarselas como String.

Puedes hacerlo por ejemplo de una de estas dos maneras:

1.
Código (vbnet) [Seleccionar]
       Combos.ForEach(Sub(comb As List(Of Integer))
                          ListBox1.Items.Add(String.Join(", ", comb))
                      End Sub)


2.
Código (vbnet) [Seleccionar]

       ListBox1.Items.AddRange(
           (From comb As List(Of Integer) In Combos
            Select String.Join(", ", comb)).ToArray
        )





De todas formas habia un fallo con la colección Combos (al utilizar el método Combo.Clear se limpiaba también la referencia del Combo que habia dentro de Combos, por ende al final Combos resultaba ser una colección de listas vacías) así que te dejo esta nueva versión corregida y con el ejemplo del Listbox:

Código (vbnet) [Seleccionar]
Public Class LuisClass_v2

   ReadOnly Randomizer As New Random

   ReadOnly FixedValues As Integer() =
       Enumerable.Range(1I, 30I).ToArray ' 1 to 30

   ReadOnly RandomValues As Integer() =
       Enumerable.Range(FixedValues.First, FixedValues.Last).ToArray ' 1 to 30

   Dim Combo As List(Of Integer) = Nothing
   Dim Combos As New List(Of List(Of Integer))

   Private Sub Test() Handles MyBase.Shown

       Dim IndexCounter As Integer = FixedValues.First ' 1
       Dim LenCounter As Integer = 0I

       Const NumStep As Integer = 3I
       Const NumLen As Integer = 10I

       Do Until IndexCounter > FixedValues.Last ' IndexCounter > 30

           Combo = New List(Of Integer)

           For Num As Integer = IndexCounter To (FixedValues.Count) Step NumStep ' 1 to 30 Step 3

               Combo.Add(Num)
               LenCounter += 1I

               If LenCounter >= NumLen Then
                   Exit For
               End If

           Next ' Num

           If LenCounter < NumLen Then ' If LenCounter < 10

               For RandomNum As Integer = 1I To (NumLen - LenCounter)

                   Dim n As Integer = Randomizer.Next(RandomValues.First, RandomValues.Last)

                   Do Until Not Combo.Contains(n)
                       n = Randomizer.Next(RandomValues.First, RandomValues.Last)
                   Loop

                   Combo.Add(n)

               Next ' RandomNum

           End If ' LenCounter < NumLen

#If DEBUG Then ' #Debug
           Debug.WriteLine(String.Join(", ", Combo))
           ' Stop
#End If

           Combos.Add(Combo)
           IndexCounter += 1I
           LenCounter = 0I

       Loop ' IndexCounter >= FixedValues.Last

       ' ********
       ' Listbox:
       ' ********
       Combos.ForEach(Sub(comb As List(Of Integer))

                          ' Convierto la Lista a 'String', le añado los ceros, y añado el string formateado al Listbox.
                          ListBox1.Items.Add(String.Join(", ",
                                                         From value As String In comb
                                                         Select If(value.Length = 1I,
                                                                   value.Insert(0I, "0"c),
                                                                   value)))

                      End Sub)

   End Sub ' Test

End Class
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 19 Agosto 2014, 13:31 PM
Mil gracias de nuevo ahora si pude hacerlo funcionar :)

Bien aca donde me pones esto , es lo debería de cambiar por mi variable " result " que es la que tiene los números después de efectuada la operación que hago en mi programa ? ya que mi idea es implementarlo a mi programa

Código (vbnet) [Seleccionar]
ReadOnly FixedValues As Integer() = {1, 5, 19, 22, 34, 55, 66, 88, 99, etc...}

por lo demas funciona como queria lo de ordenar de menor a mayor ya me ocupo :)


gracias muchas gracias  :) :)

Luis

Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 19 Agosto 2014, 13:49 PM
Cita de: luis456 en 19 Agosto 2014, 13:31 PM
Mil gracias de nuevo ahora si pude hacerlo funcionar :)

Bien aca donde me pones esto , es lo debería de cambiar por mi variable " result " que es la que tiene los números después de efectuada la operación que hago en mi programa ?

Código (vbnet) [Seleccionar]
ReadOnly FixedValues As Integer() = {1, 5, 19, 22, 34, 55, 66, 88, 99, etc...}

¿A cual de las miles de variables que bautizaste con el nombre de "Result" te refieres? :P

Supongo que si, en la variable FixedValues debes especificarle los numeros que se tomarán para hacer las combinaciones, en tu ejemplo pusiste del 1 al 30, no se si harás eso con la variable "result" que mencionas, pero creo que ya te hiciste una idea de lo que debe ir en esa variable FixedValues (valores fijos).

Cita de: luis456 en 19 Agosto 2014, 13:31 PMpor lo demas funciona como queria

Me alegro de oir eso

PD: Por si acaso te recuerdo que para ordenar de mayor a menor lo tienes facil usando una LINQ-query:
Código (vbnet) [Seleccionar]
dim values as integer() = (from n as integer in TUSNUMEROS order by n ascending).toarray

o el método Sort, en una lista.

Saludos!
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 20 Agosto 2014, 13:56 PM
Hola porque no me salen los números que he puesto para combinar ? he echo algunos arreglos para combinar con cinco ya que según la cantidad de números en la variable si me paso se queda en un loop esto lo detecta,pero los números que pongo en ella no ?

Código (vbnet) [Seleccionar]
Public Class LuisClass_v2

    ReadOnly Randomizer As New Random

    ReadOnly FixedValues As Integer() = {1, 5, 19, 22, 34, 55, 66, 88, 9, 20, 25}

    ReadOnly RandomValues As Integer() =
        Enumerable.Range(FixedValues.First, FixedValues.Last).ToArray ' 1 to 30

    Dim Combo As List(Of Integer) = Nothing
    Dim Combos As New List(Of List(Of Integer))

    Private Sub Test() Handles MyBase.Shown

        Dim IndexCounter As Integer = FixedValues.First ' 1
        Dim LenCounter As Integer = 0I

        Const NumStep As Integer = 3I
        Const NumLen As Integer = 5I

        Do Until IndexCounter > FixedValues.Last ' IndexCounter > 30

            Combo = New List(Of Integer)

            For Num As Integer = IndexCounter To (FixedValues.Count) Step NumStep ' 1 to 30 Step 3

                Combo.Add(Num)
                LenCounter += 1I

                If LenCounter >= NumLen Then
                    Exit For
                End If

            Next ' Num

            If LenCounter < NumLen Then ' If LenCounter < 10

                For RandomNum As Integer = 1I To (NumLen - LenCounter)

                    Dim n As Integer = Randomizer.Next(RandomValues.First, RandomValues.Last)

                    Do Until Not Combo.Contains(n)
                        n = Randomizer.Next(RandomValues.First, RandomValues.Last)
                    Loop

                    Combo.Add(n)

                Next ' RandomNum

            End If ' LenCounter < NumLen

#If DEBUG Then ' #Debug
            Debug.WriteLine(String.Join(", ", Combo))
            ' Stop
#End If

            Combos.Add(Combo)
            IndexCounter += 1I
            LenCounter = 0I

        Loop ' IndexCounter >= FixedValues.Last

        ' ********
        ' Listbox:
        ' ********
        Combos.ForEach(Sub(comb As List(Of Integer))

                           ' Convierto la Lista a 'String', le añado los ceros, y añado el string formateado al Listbox.
                           ListBox1.Items.Add(String.Join(", ",
                                                          From value As String In comb
                                                          Select If(value.Length = 1I,
                                                                    value.Insert(0I, "0"c),
                                                                    value)))

                       End Sub)

    End Sub ' Test

End Class
Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 21 Agosto 2014, 10:22 AM
Cita de: luis456 en 20 Agosto 2014, 13:56 PMporque no me salen los números que he puesto para combinar ?

Por esto:
Citar
Código (vbnet) [Seleccionar]
For Num As Integer = IndexCounter To (FixedValues.Count) Step NumStep ' 1 to 30 Step 3

              Combo.Add(Num)
              ...

Estás tomando el número de la variable num en lugar de tomar un item de la colección FixedValues, se puede decir que esto ha sido un fallo mio porque como ya sabes en ese ejemplo usé una secuencia ordenada del 1 al 30, así que se me pasó por alto ese detalle al desordenar la secuencia xD.

Prueba a ver si este es el resultado que quieres obtener:
Combo.Add(FixedValues(NumStep * LenCounter))
Edito: o lo que viene a ser lo mismo:

Código (vb) [Seleccionar]
Combo.Add(FixedValues(Num - 1))

Explico:
Para generar la primera combinación con los números que has mostrado, daría saltos de '3' para tomar estas posiciones:
{ 1, , , 22, , , 66, , , 20, }
+ un número aleatorio aleatorio del rango que especificaste EDITO: del rango de 'RandomValues', para dejarlo claro.

Saludos
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 25 Agosto 2014, 19:58 PM
Hola

Bueno tengo algunos dias tratando de hacer lo que me pusiste elektro pero no me sale

o me da combianciones raras o me da el error de variable fuera de rango te pongo el codigo a ver donde me estoy pelando


Código (vbnet) [Seleccionar]
Public Class LuisClass_v2

    ReadOnly Randomizer As New Random

    ' Num ReadOnly FixedValues As Integer() =
    ' Num   Enumerable.Range(1I, 49I).ToArray ' 1 to 30

    ReadOnly FixedValues As Integer() = {1, 5, 19, 22, 34, 55, 66, 88, 9, 20, 25}

    ReadOnly RandomValues As Integer() =
        Enumerable.Range(FixedValues.First, FixedValues.Last).ToArray ' 1 to 30

    Dim Combo As List(Of Integer) = Nothing
    Dim Combos As New List(Of List(Of Integer))

    Private Sub Test() Handles MyBase.Shown

        Dim IndexCounter As Integer = FixedValues.First ' 1
        Dim LenCounter As Integer = 0I

        Const NumStep As Integer = 3I
        Const NumLen As Integer = 6I

        Do Until IndexCounter > FixedValues.Last ' IndexCounter > 30

            Combo = New List(Of Integer)

            For Num As Integer = IndexCounter To (FixedValues.Count) Step NumStep ' 1 to 30 Step 3

                '  Combo.Add(Num)
                '  LenCounter += 1I

                Combo.Add(FixedValues(NumStep * LenCounter))

                If LenCounter >= NumLen Then
                    Exit For
                End If

            Next ' Num

            If LenCounter < NumLen Then ' If LenCounter < 10

                For RandomNum As Integer = 1I To (NumLen - LenCounter)

                    Dim n As Integer = Randomizer.Next(RandomValues.First, RandomValues.Last)

                    Do Until Not Combo.Contains(n)
                        n = Randomizer.Next(RandomValues.First, RandomValues.Last)
                    Loop

                    Combo.Add(n)

                Next ' RandomNum

            End If ' LenCounter < NumLen

#If DEBUG Then ' #Debug
            Debug.WriteLine(String.Join(", ", Combo))
            ' Stop
#End If

            Combos.Add(Combo)
            IndexCounter += 1I
            LenCounter = 0I

        Loop ' IndexCounter >= FixedValues.Last

        ' ********
        ' Listbox:
        ' ********
        Combos.ForEach(Sub(comb As List(Of Integer))

                           ' Convierto la Lista a 'String', le añado los ceros, y añado el string formateado al Listbox.
                           ListBox1.Items.Add(String.Join(", ",
                                                          From value As String In comb
                                                          Select If(value.Length = 1I,
                                                                    value.Insert(0I, "0"c),
                                                                    value)))

                       End Sub)

    End Sub ' Test

End Class
Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 25 Agosto 2014, 20:11 PM
Código (vbnet) [Seleccionar]
           For Num As Integer = IndexCounter To (FixedValues.Count) Step NumStep

               LenCounter += 1I
               Combo.Add(FixedValues(Num - 1I))

               If LenCounter >= NumLen Then
                   Exit For
               End If

           Next Num


PD: no se si ese será el resultado que quieres obtener, pero esa es la correción para que funcione el código.

saludos!
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 26 Agosto 2014, 06:52 AM
Ahora si :) ya me toma los numeros y los combina

ya estoy con lo del ordenamiento de menor a mayor pero me da este error que un valor de sistems no se puede convertir a string

Código (vbnet) [Seleccionar]
' ******** ordenamiento-------------
        Dim values As Integer() = (From n As Integer In Combos Order By n Ascending).ToArray

        ' ********
        ' Listbox:
        ' ********
        Combos.ForEach(Sub(comb As List(Of Integer))

                           ' Convierto la Lista a 'String', le añado los ceros, y añado el string formateado al Listbox.
                           ListBox1.Items.Add(String.Join(", ",
                                                          From value As String In comb
                                                          Select If(value.Length = 1I,
                                                                    value.Insert(0I, "0"c),
                                                                    value)))

                       End Sub)

    End Sub ' Test




saludos
Luis
Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 26 Agosto 2014, 10:34 AM
¿Que habiamos hablado sobre dar detalles específicos del error?.

De decir esto:
Cita de: luis456 en 26 Agosto 2014, 06:52 AMme da este error que un valor de sistems no se puede convertir a string

A esto:
Value of type 'System.Collections.Generic.List(Of Integer)' cannot be converted to 'String'.

...hay todo un trecho. y ya si indicases que instrucción es la que te da error, mejor aún.




Si has modificado la declaración de Combos entonces muestrala (Dim Combos As...)

El código me funciona, ¿quizás tengas activado Option Strict On?

Prueba así:

Código (vbnet) [Seleccionar]
   ListBox1.Items.Add(String.Join(", ",
                                  From value As Integer In comb
                                  Select If(CStr(value).Length = 1I,
                                            CStr(value).Insert(0I, "0"),
                                            CStr(value))))


Saludos!
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 26 Agosto 2014, 19:38 PM
Hola

Bien sigo probando no he modificado nada del codigo solo añadi la rutina que me pusiste arriba y esta es la que me da  " Error 1 Un valor de tipo 'System.Collections.Generic.List(Of Integer)' no se puede convertir en 'Integer'. "

Código (vbnet) [Seleccionar]
Dim values As Integer() = (From n As Integer In Combos Order By n Ascending).ToArray

lo que busco es ordenar las combinaciones que se muestran en el listbox ordenados de menor a mayor


luis
Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 26 Agosto 2014, 20:32 PM
Cita de: luis456 en 26 Agosto 2014, 19:38 PMlo que busco es ordenar las combinaciones que se muestran en el listbox ordenados de menor a mayor

Con esto ordenas las combinaciones de menor a mayor:
Código (vbnet) [Seleccionar]
       Dim Sorted As List(Of List(Of Integer)) =
           (From combo As List(Of Integer) In Combos
            Order By Convert.ToInt64(String.Join("", combo)) Ascending).ToList


Pero eso no es suficiente, sería algo más complicado de hacer ya que las combinaciones no tienen la misma longitud, los "0" son un añadido después.

Lo mejor es que olvides eso de ordenarlas tú y dejes que el listbox ordene los items por ti:

Código (vbnet) [Seleccionar]
ListBox1.Sorted = True

(http://i.imgur.com/szIoECn.jpg)

Saludos.
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 26 Agosto 2014, 20:57 PM
Hola
Cuando me dices que pruebe con " ListBox1.Sorted = True " lo hice en diseño o propiedad del listbox y nada tambien lo puse en el codigo y nada


Código (vbnet) [Seleccionar]
Combos.ForEach(Sub(comb As List(Of Integer))

                           ' Convierto la Lista a 'String', le añado los ceros, y añado el string formateado al Listbox.
                           ListBox1.Items.Add(String.Join(", ",
                                                          From value As String In comb
                                                          Select If(value.Length = 1I,
                                                                    value.Insert(0I, "0"c),
                                                                    value)))
                           ListBox1.Sorted = True

                       End Sub)
Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 26 Agosto 2014, 21:36 PM
Cita de: luis456 en 26 Agosto 2014, 20:57 PMnada tambien lo puse en el codigo y nada

No se que significa "nada", Luis.

Mira la imagen de mi último comentario, están las combinaciones ordenadas de menor a mayor, ¿ves alguna diferencia entre ese "output" y el que tu obtienes?, da más detalles, si el código es el que me pasaste y no le has echo modificaciones en este rato entonces tendría que funcionar.

Con que actives la propiedad una sola vez (sea donde sea) es suficiente, sácala del foreach porque la estás activando una y otra vez, de todas formas eso no supondría un problema, pero es innecesario.

saludos
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 26 Agosto 2014, 22:05 PM
No me sale y nada significa que no me ordena las combinaciones

Código (vbnet) [Seleccionar]
Public Class LuisClass_v2

    ReadOnly Randomizer As New Random

    ' Num ReadOnly FixedValues As Integer() =
    ' Num   Enumerable.Range(1I, 49I).ToArray ' 1 to 30

    ReadOnly FixedValues As Integer() = {1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50}

    ReadOnly RandomValues As Integer() =
        Enumerable.Range(FixedValues.First, FixedValues.Last).ToArray ' 1 to 30

    Dim Combo As List(Of Integer) = Nothing
    Dim Combos As New List(Of List(Of Integer))

    Private Sub Test() Handles MyBase.Shown

        Dim IndexCounter As Integer = FixedValues.First ' 1
        Dim LenCounter As Integer = 0I

        Const NumStep As Integer = 3I
        Const NumLen As Integer = 10I

        Do Until IndexCounter > FixedValues.Last ' IndexCounter > 30

            Combo = New List(Of Integer)

            For Num As Integer = IndexCounter To (FixedValues.Count) Step NumStep

                LenCounter += 1I
                Combo.Add(FixedValues(Num - 1I))

                If LenCounter >= NumLen Then
                    Exit For
                End If

            Next Num



            If LenCounter < NumLen Then ' If LenCounter < 10

                For RandomNum As Integer = 1I To (NumLen - LenCounter)

                    Dim n As Integer = Randomizer.Next(RandomValues.First, RandomValues.Last)

                    Do Until Not Combo.Contains(n)
                        n = Randomizer.Next(RandomValues.First, RandomValues.Last)
                    Loop

                    Combo.Add(n)

                Next ' RandomNum

            End If ' LenCounter < NumLen

#If DEBUG Then ' #Debug
            Debug.WriteLine(String.Join(", ", Combo))
            ' Stop
#End If

            Combos.Add(Combo)
            IndexCounter += 1I
            LenCounter = 0I

        Loop ' IndexCounter >= FixedValues.Last

        ' ******** ordenamiento-------------
        '  Dim values As Integer() = (From n As Integer In Combos Order By n Ascending).ToArray

        ' ********
        ' Listbox:
        ' ********
        Combos.ForEach(Sub(comb As List(Of Integer))

                           ' Convierto la Lista a 'String', le añado los ceros, y añado el string formateado al Listbox.
                           ListBox1.Items.Add(String.Join(", ",
                                                          From value As String In comb
                                                          Select If(value.Length = 1I,
                                                                    value.Insert(0I, "0"c),
                                                                    value)))
                           ListBox1.Sorted = True

                       End Sub)
    End Sub ' Test

End Class
Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 26 Agosto 2014, 22:35 PM
A mi me las ordena, Luis.

Creo que tu te estás refiriendo que además de ordenar la lista que contiene las combinaciones (de menos a mayor), ¿quieres ordenar los números de cada combinacion, por separado?.

saludos
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 27 Agosto 2014, 05:31 AM
Hola

Lo que me refiero es que cada combinación este ordenada de menor a mayor

Tomo una combinación que me da el programa y veras que esta desordenada

01 15 30 45 49 10 39 28 04 03 <-- asi me los pone el código ahora

01 03 04 10 15 28 30 39 45 49 <---asi es que quiero ordenarlos


Luis



Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 27 Agosto 2014, 05:50 AM
Cita de: luis456 en 27 Agosto 2014, 05:31 AMLo que me refiero es que cada combinación este ordenada de menor a mayor

Entonces, antes de añadir la combinación (Combo) a la lista de combinaciones (Combos), ordénala usando el método Sort.

Código (vbnet) [Seleccionar]
Combo.Sort() ' <---- aquí ordeno la combinación actual.

Combos.Add(Combo) ' <---- aquí añado la combinación ordenada al resto de combinaciones.

' y aquí sigo con el código como estaba...
IndexCounter += 1I
LenCounter = 0I
etc...


saludos
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 27 Agosto 2014, 06:06 AM
Listo :)    funciona como quería

Muchas gracias elektro

Luis

( nos levantamos pronto ee)
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 28 Agosto 2014, 13:11 PM
Como contar cuantas combinaciones hay en el listbox ?

Buscando encontre esta rutina funciona pero lo que hace es comparar las combinaciones y decirme que solo hay una combinacion eso lo sabemos ya que el pograma no da repetidos nesecito saber cuantas hay en total.

contar y mostrar    " Combinaciones = 30 "  o la cantidad que salgan :)

codigo que encontre a alguien le puede servir para comparar registros :)

Código (vbnet) [Seleccionar]
' contar que no ay repetidos

    Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click

        Dim query = From item As String In ListBox1.Items.Cast(Of String)() _
                    Order By item _
                    Group By item = item _
                    Into Total = Group, Count() _
                    Select Total

        Dim msg As New System.Text.StringBuilder()

        For Each item In query
            msg.AppendLine(String.Format("Combinaciones {0} existen {1}", item(0), item.Count))
        Next

        MessageBox.Show(msg.ToString())

    End Sub
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 28 Agosto 2014, 13:23 PM
Solucionado ;)

Código (vbnet) [Seleccionar]
Label1.Text = CStr(ListBox1.Items.Count)


luis
Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 28 Agosto 2014, 13:49 PM
Cita de: luis456 en 28 Agosto 2014, 13:23 PMSolucionado ;)

Bien, pero debes intentar interactuar lo más mínimo con la UI.

Código (vbnet) [Seleccionar]
Combos.Count

Saludos
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 28 Agosto 2014, 14:18 PM
Gracias Elektro por tus consejos :) ahora tengo otro reto (para mi jeje) no me respondas que voy a ver si lo hago ( si no lo logro, grito auxilio ) tengo este código que ya conoces de sobra jejej

Código (vbnet) [Seleccionar]
Public Class Form1

    Dim maximum As Short = 99
    Dim x As Integer = 0
    Dim Número As Double
    Private TextBoxes As TextBox() = {Nothing}
    Private Result1 As Int32(), Result2 As Int32(), Result3 As Int32()
    Private _textBox As Object
    Private Property ListBox1Count As Integer
    ReadOnly MAX As Integer = 99

   

    Private Property Calcular As Object

    Private Property TextBox(ByVal TextBoxCount As Short) As Object
        Get
            Return _textBox
        End Get
        Set(ByVal value As Object)
            _textBox = value
        End Set
    End Property

    Public Sub solonumeros(ByRef e As System.Windows.Forms.KeyPressEventArgs)
        ' evitar letras
        If Char.IsDigit(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsControl(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsSeparator(e.KeyChar) Then
            e.Handled = False
        Else
            e.Handled = True
        End If

    End Sub


    ReadOnly Property Num1 As Int32
        Get
            Return CInt(TextBox1.Text)
        End Get
    End Property

    ReadOnly Property Num2 As Int32
        Get
            Return CInt(TextBox2.Text)
        End Get
    End Property
    ReadOnly Property Num3 As Int32
        Get
            Return CInt(TextBox3.Text)
        End Get
    End Property


    Private Sub Sumar(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click


        Result1 = {Num1 + 1, Num1 + 2, Num1 + 4, Num1 + 6, Num1 - 4, Num1 - 1} _
                  .Distinct().ToArray ' Elimino duplicados

        Result2 = {Num2 + 1, Num2 + 2, Num2 + 3, Num2 - 1, Num2 - 2, Num1 - 3} _
                  .Distinct().ToArray ' Elimino duplicados

        Result3 = {Num3 - 1, Num3 - 2, Num3 - 3, Num3 + 2, Num3 + 3, Num3 + 5} _
                  .Distinct().ToArray ' Elimino duplicados


        Dim Rand As New Random
        ' Concateno, y...
        ' Elimino duplicados, y...
        ' Selecciono los números inferiores a MAX, y...
        ' Convierto los números mayores a MAX a números aleatorios entre 0 y MAX.
        Dim Result As IEnumerable(Of Integer) =
            (Result1.Concat(Result2).Concat(Result3)).
            Distinct.
            Select(Function(Value As Integer)
                       Return If(Value < MAX, Value, Rand.Next(0, MAX))
                   End Function)
        ListBox1.Items.AddRange(Result.Cast(Of Object).ToArray)
    End Sub
End Class




Y quiero integrarlo a este que funciona ya gracias a ti :) donde  a la variable " FixedValues " enviarle los datos de la variable " Result "  ya seguro me dara errores del tipo integer :) y esas cosas jejej


Código (vbnet) [Seleccionar]
Imports System.IO

Public Class LuisClass_v2

    ReadOnly Randomizer As New Random

    ' Num ReadOnly FixedValues As Integer() =
    ' Num   Enumerable.Range(1I, 49I).ToArray ' 1 to 30

    ReadOnly FixedValues As Integer() = {1, 5, 10, 15, 20, 25, 30, 33, 35, 38, 40, 45, 48}

    ReadOnly RandomValues As Integer() =
        Enumerable.Range(FixedValues.First, FixedValues.Last).ToArray ' 1 to 30

    Dim Combo As List(Of Integer) = Nothing
    Dim Combos As New List(Of List(Of Integer))

    Private Sub Test() Handles MyBase.Shown

        Dim IndexCounter As Integer = FixedValues.First ' 1
        Dim LenCounter As Integer = 0I

        Const NumStep As Integer = 5I
        Const NumLen As Integer = 6I

        Do Until IndexCounter > FixedValues.Last ' IndexCounter > 30

            Combo = New List(Of Integer)

            For Num As Integer = IndexCounter To (FixedValues.Count) Step NumStep

                LenCounter += 1I
                Combo.Add(FixedValues(Num - 1I))

                If LenCounter >= NumLen Then
                    Exit For
                End If

            Next Num



            If LenCounter < NumLen Then ' If LenCounter < 10

                For RandomNum As Integer = 1I To (NumLen - LenCounter)

                    Dim n As Integer = Randomizer.Next(RandomValues.First, RandomValues.Last)

                    Do Until Not Combo.Contains(n)
                        n = Randomizer.Next(RandomValues.First, RandomValues.Last)
                    Loop

                    Combo.Add(n)

                Next ' RandomNum

            End If ' LenCounter < NumLen

#If DEBUG Then ' #Debug
            Debug.WriteLine(String.Join(", ", Combo))
            ' Stop
#End If
            Combo.Sort()
            Combos.Add(Combo)
            IndexCounter += 1I
            LenCounter = 0I

        Loop ' IndexCounter >= FixedValues.Last

        ' ******** ordenamiento-------------
        '  Dim values As Integer() = (From n As Integer In Combos Order By n Ascending).ToArray

        ' ********
        ' Listbox:
        ' ********
        Combos.ForEach(Sub(comb As List(Of Integer))

                           ' Convierto la Lista a 'String', le añado los ceros, y añado el string formateado al Listbox.
                           ListBox1.Items.Add(String.Join(", ",
                                                          From value As String In comb
                                                          Select If(value.Length = 1I,
                                                                    value.Insert(0I, "0"c),
                                                                    value)))
                           ListBox1.Sorted = True



                       End Sub)
    End Sub ' Test



    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim rutaFichero As String
        Dim i As Integer

        rutaFichero = Path.Combine(Application.StartupPath, "contenido_listbox.txt")
        Dim fichero As New IO.StreamWriter(rutaFichero)
        For i = 0 To ListBox1.Items.Count - 1
            fichero.WriteLine(ListBox1.Items(i))
        Next
        fichero.Close()
    End Sub
    ' contar que no ay repetidos

    Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click

        Label1.Text = CStr(ListBox1.Items.Count)

        Dim query = From item As String In ListBox1.Items.Cast(Of String)() _
                    Order By item _
                    Group By item = item _
                    Into Total = Group, Count() _
                    Select Total

        Dim msg As New System.Text.StringBuilder()

        For Each item In query
            msg.AppendLine(String.Format("Combinaciones {0} existen {1}", item(0), item.Count))
        Next

        MessageBox.Show(msg.ToString())

    End Sub

   
End Class



Gracias por tu paciencia

Luis






Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 28 Agosto 2014, 14:55 PM
jeje AUXILIO, No de verdad que no tengo nocion de como unir esto ;( ya sera que confundo mucho con tantas cosas a la ves

Cuando lo ejecuto de una ves me hace lo del segundo codigo y se supone que debe ser cuando se ejecute el primero y cambie los valores de " FixedValues " con los de  " Result "


Chapuza que tengo echa :)

Código (vbnet) [Seleccionar]
Imports System.IO
Public Class Form1

    Dim maximum As Short = 99
    Dim x As Integer = 0
    Dim Número As Double
    Private TextBoxes As TextBox() = {Nothing}
    Private Result1 As Int32(), Result2 As Int32(), Result3 As Int32()
    Private _textBox As Object
    Private Property ListBox1Count As Integer
    ReadOnly MAX As Integer = 99
    ReadOnly Randomizer As New Random
    Dim Combo As List(Of Integer) = Nothing
    Dim Combos As New List(Of List(Of Integer))

    ReadOnly FixedValues As Integer() = {1, 5, 10, 15, 20, 25, 30, 33, 35, 38, 40, 45, 48}
    ReadOnly RandomValues As Integer() =
        Enumerable.Range(FixedValues.First, FixedValues.Last).ToArray ' 1 to 30


    Private Property Calcular As Object

    Private Property TextBox(ByVal TextBoxCount As Short) As Object
        Get
            Return _textBox
        End Get
        Set(ByVal value As Object)
            _textBox = value
        End Set
    End Property

    Public Sub solonumeros(ByRef e As System.Windows.Forms.KeyPressEventArgs)
        ' evitar letras
        If Char.IsDigit(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsControl(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsSeparator(e.KeyChar) Then
            e.Handled = False
        Else
            e.Handled = True
        End If

    End Sub


    ReadOnly Property Num1 As Int32
        Get
            Return CInt(TextBox1.Text)
        End Get
    End Property

    ReadOnly Property Num2 As Int32
        Get
            Return CInt(TextBox2.Text)
        End Get
    End Property
    ReadOnly Property Num3 As Int32
        Get
            Return CInt(TextBox3.Text)
        End Get
    End Property


    Private Sub Sumar(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click


        Result1 = {Num1 + 1, Num1 + 2, Num1 + 4, Num1 + 6, Num1 - 4, Num1 - 1} _
                  .Distinct().ToArray ' Elimino duplicados

        Result2 = {Num2 + 1, Num2 + 2, Num2 + 3, Num2 - 1, Num2 - 2, Num1 - 3} _
                  .Distinct().ToArray ' Elimino duplicados

        Result3 = {Num3 - 1, Num3 - 2, Num3 - 3, Num3 + 2, Num3 + 3, Num3 + 5} _
                  .Distinct().ToArray ' Elimino duplicados


        Dim Rand As New Random
        ' Concateno, y...
        ' Elimino duplicados, y...
        ' Selecciono los números inferiores a MAX, y...
        ' Convierto los números mayores a MAX a números aleatorios entre 0 y MAX.
        Dim Result As IEnumerable(Of Integer) =
            (Result1.Concat(Result2).Concat(Result3)).
            Distinct.
            Select(Function(Value As Integer)
                       Return If(Value < MAX, Value, Rand.Next(0, MAX))
                   End Function)
        ListBox1.Items.AddRange(Result.Cast(Of Object).ToArray)
        ' ******** ------------------------------------------------------------------


        ' Num ReadOnly FixedValues As Integer() =
        ' Num   Enumerable.Range(1I, 49I).ToArray ' 1 to 30

    End Sub
    Private Sub Test() Handles MyBase.Shown

        Dim IndexCounter As Integer = FixedValues.First ' 1
        Dim LenCounter As Integer = 0I

        Const NumStep As Integer = 5I
        Const NumLen As Integer = 6I

        Do Until IndexCounter > FixedValues.Last ' IndexCounter > 30

            Combo = New List(Of Integer)

            For Num As Integer = IndexCounter To (FixedValues.Count) Step NumStep

                LenCounter += 1I
                Combo.Add(FixedValues(Num - 1I))

                If LenCounter >= NumLen Then
                    Exit For
                End If

            Next Num



            If LenCounter < NumLen Then ' If LenCounter < 10

                For RandomNum As Integer = 1I To (NumLen - LenCounter)

                    Dim n As Integer = Randomizer.Next(RandomValues.First, RandomValues.Last)

                    Do Until Not Combo.Contains(n)
                        n = Randomizer.Next(RandomValues.First, RandomValues.Last)
                    Loop

                    Combo.Add(n)

                Next ' RandomNum

            End If ' LenCounter < NumLen

#If DEBUG Then ' #Debug
            Debug.WriteLine(String.Join(", ", Combo))
            ' Stop
#End If
            Combo.Sort()
            Combos.Add(Combo)
            IndexCounter += 1I
            LenCounter = 0I

        Loop ' IndexCounter >= FixedValues.Last

        ' ******** ordenamiento-------------
        '  Dim values As Integer() = (From n As Integer In Combos Order By n Ascending).ToArray

        ' ********
        ' Listbox:
        ' ********
        Combos.ForEach(Sub(comb As List(Of Integer))

                           ' Convierto la Lista a 'String', le añado los ceros, y añado el string formateado al Listbox.
                           ListBox1.Items.Add(String.Join(", ",
                                                          From value As String In comb
                                                          Select If(value.Length = 1I,
                                                                    value.Insert(0I, "0"c),
                                                                    value)))
                           ListBox1.Sorted = True



                       End Sub)
    End Sub ' Test
   
End Class
Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 28 Agosto 2014, 20:38 PM
Citar
Código (vbnet) [Seleccionar]
   Private Sub Test() Handles MyBase.Shown

¿Eso no te dice nada?

Todo lo que hay en el interior de ese bloque se ejecuta en el evento Shown.

La finalidad (según me parece a mi tu intención) sería quitarlo de ahí para meterlo/adaptarlo en el bloque del sub Sumar.

Saludos

EDITO: por lo que dices, quizás pueda ser algo como esto:

Código (vbnet) [Seleccionar]
Imports System.IO
Public Class Form1

   Dim maximum As Short = 99
   Dim x As Integer = 0
   Dim Número As Double
   Private TextBoxes As TextBox() = {Nothing}
   Private Result1 As Int32(), Result2 As Int32(), Result3 As Int32()
   Private _textBox As Object
   Private Property ListBox1Count As Integer
   ReadOnly MAX As Integer = 99
   ReadOnly Randomizer As New Random
   Dim Combo As List(Of Integer) = Nothing
   Dim Combos As New List(Of List(Of Integer))

   Dim FixedValues As Integer() = Nothing
   ReadOnly RandomValues As Integer() =
       Enumerable.Range(0, 99).ToArray


   Private Property Calcular As Object

   Private Property TextBoX(ByVal TextBoxCount As Short) As Object
       Get
           Return _textBox
       End Get
       Set(ByVal value As Object)
           _textBox = value
       End Set
   End Property

   Public Sub solonumeros(ByRef e As System.Windows.Forms.KeyPressEventArgs)
       ' evitar letras
       If Char.IsDigit(e.KeyChar) Then
           e.Handled = False
       ElseIf Char.IsControl(e.KeyChar) Then
           e.Handled = False
       ElseIf Char.IsSeparator(e.KeyChar) Then
           e.Handled = False
       Else
           e.Handled = True
       End If

   End Sub


   ReadOnly Property Num1 As Int32
       Get
           Return CInt(TextBox1.Text)
       End Get
   End Property

   ReadOnly Property Num2 As Int32
       Get
           Return CInt(TextBox2.Text)
       End Get
   End Property
   ReadOnly Property Num3 As Int32
       Get
           Return CInt(TextBox3.Text)
       End Get
   End Property


   Private Sub Sumar(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click

       Result1 = {Num1 + 1, Num1 + 2, Num1 + 4, Num1 + 6, Num1 - 4, Num1 - 1} _
                 .Distinct().ToArray ' Elimino duplicados

       Result2 = {Num2 + 1, Num2 + 2, Num2 + 3, Num2 - 1, Num2 - 2, Num1 - 3} _
                 .Distinct().ToArray ' Elimino duplicados

       Result3 = {Num3 - 1, Num3 - 2, Num3 - 3, Num3 + 2, Num3 + 3, Num3 + 5} _
                 .Distinct().ToArray ' Elimino duplicados

       Dim Rand As New Random
       FixedValues =
           (Result1.Concat(Result2).Concat(Result3)).
           Distinct.
           Select(Function(Value As Integer)
                      Return If(Value < MAX, Value, Rand.Next(0, MAX))
                  End Function)

       Dim IndexCounter As Integer = FixedValues.First ' 1
       Dim LenCounter As Integer = 0I

       Const NumStep As Integer = 5I
       Const NumLen As Integer = 6I

       Do Until IndexCounter > FixedValues.Last

           Combo = New List(Of Integer)

           For Num As Integer = IndexCounter To (FixedValues.Count) Step NumStep

               LenCounter += 1I
               Combo.Add(FixedValues(Num - 1I))

               If LenCounter >= NumLen Then
                   Exit For
               End If

           Next Num

           If LenCounter < NumLen Then

               For RandomNum As Integer = 1I To (NumLen - LenCounter)

                   Dim n As Integer = Randomizer.Next(RandomValues.First, RandomValues.Last)

                   Do Until Not Combo.Contains(n)
                       n = Randomizer.Next(RandomValues.First, RandomValues.Last)
                   Loop

                   Combo.Add(n)

               Next ' RandomNum

           End If ' LenCounter < NumLen

#If DEBUG Then ' #Debug
           Debug.WriteLine(String.Join(", ", Combo))
           ' Stop
#End If
           Combo.Sort()
           Combos.Add(Combo)
           IndexCounter += 1I
           LenCounter = 0I

       Loop ' IndexCounter >= FixedValues.Last

       ' ******** ordenamiento-------------
       '  Dim values As Integer() = (From n As Integer In Combos Order By n Ascending).ToArray

       ' ********
       ' Listbox:
       ' ********
       Combos.ForEach(Sub(comb As List(Of Integer))

                          ' Convierto la Lista a 'String', le añado los ceros, y añado el string formateado al Listbox.
                          ListBox1.Items.Add(String.Join(", ",
                                                         From value As String In comb
                                                         Select If(value.Length = 1I,
                                                                   value.Insert(0I, "0"c),
                                                                   value)))
                          ListBox1.Sorted = True



                      End Sub)

   End Sub


End Class


Cosas a tener en cuenta:

1. No le asignes un nombre reservado a una propiedad (TextBox), y asignale el Type de retorno adecuado (no Object)

2. Intenta organizar ese código, es un desastre visual, métodos en medio de propiedades y luego más propiedades, constantes dentro de métodos, algoritmos largos dentro del bloque de un event-handler (aunque bueno, estu último lo añadi yo xD pero ya habia algo ahí de antes), un desastre.

Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 29 Agosto 2014, 02:07 AM
Bueno ya me vas cojiendo la idea :) y gracias por tu paciencia jeje.

Bien seguimos con los problemas ,y tienes razón en el desorden, es que tengo una mala maña , como quiero que funcione de una no presto atencion al orden y esa es una de mis fallas ;(

Bien lo ejecuto y me da este error en :

No se puede convertir un objeto de tipo 'WhereSelectEnumerableIterator`2[System.Int32,System.Int32]' al tipo 'System.Int32[]'



Código (vbnet) [Seleccionar]
Dim Rand As New Random
        FixedValues =
            (Result1.Concat(Result2).Concat(Result3)).
            Distinct.
            Select(Function(Value As Integer)
                       Return If(Value < MAX, Value, Rand.Next(0, MAX))
                   End Function)

Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 29 Agosto 2014, 11:47 AM
Código (vbnet) [Seleccionar]
       FixedValues =
           (Result1.Concat(Result2).Concat(Result3)).
           Distinct.
           Select(Function(Value As Integer)
                      Return If(Value < MAX, Value, Rand.Next(0, MAX))
                  End Function).ToArray


PD: esto ponlo fuera del sub
Citar
Código (vbnet) [Seleccionar]
       Dim Rand As New Random
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 29 Agosto 2014, 12:10 PM
Hola
Hice lo que me pones pero me sigue dando error,


  " no se controlo InvalidCastException "

No se puede convertir un objeto de tipo 'WhereSelectEnumerableIterator`2[System.Int32,System.Int32]' al tipo 'System.Int32[]'.



sugerencias " Cuando realiza la conversion de un numero,el valor debe ser un numero menor que intinito "
" asegurese que el tipo de origen se puede convertir en el tipo de destino"


SOLUCIONADO " Cada dia me pongo mas ciego y leo mal jejeje )


gracias Elektro

Luis



Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 29 Agosto 2014, 15:19 PM
otro rollo jejej

Trasteando para aumentar los números ahora me encuentro este error cuando ejecuto el programa pero lo curioso es que con algunos numeros que introduzco no lo hace y variando estos números ( imput) si me sale el error ? si entiendo que se sale de la capacidad del la variable pero lo que no entiendo donde aumentar esta capacidad


" Índice fuera de los límites de la matriz "



Código (vbnet) [Seleccionar]
For Num As Integer = IndexCounter To (FixedValues.Count) Step NumStep

                LenCounter += 1I
                Combo.Add(FixedValues(Num - 1I)) '<-------Índice fuera de los límites de la matriz.
                If LenCounter >= NumLen Then
                    Exit For
                End If

            Next Num




Luis
Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 29 Agosto 2014, 15:56 PM
Los índices empiezan por Cero en .Net, así que debes descontarle un 1 a FixedValues.Count (no debes aumentar nada)

Código (vbnet) [Seleccionar]
For Num As Integer = IndexCounter To (FixedValues.Count - 1I) Step NumStep

Supongo que eso debería solucionar el problema, quizás haya más cosas a tener en cuenta (IndexCounter, NumStep), pero de momento prueba lo que te dije a ver si te da el resultado que tu esperas.

Saludos!
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 29 Agosto 2014, 16:42 PM
Sigue igual :(

sera porque la función que estoy empleando no tiene un largo especifico ? ya que como me da 50 números unas veces otras  también puede dar 80 o sea que los números a combinar nunca son del mismo largo o cantidades ..

Edito) me he dado cuenta que si colocoal principio en el imput números desde el 01 hasta el 09 me produce el error y a partir del numero 10 no lo hace ???

" Índice fuera de los límites de la matriz "

Luis
Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 29 Agosto 2014, 17:33 PM
1) pon el código entero que estás usando

2) a la variable FixedValues asignale manualmente los numeros que tocan ( que no lo tenga q hacer yo porque no los se :-/ ) para probar el For.

3) pon el output que debería dar al menos las primeras 3 combinaciones para saber por donde corregir el problema...

saludos!
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 29 Agosto 2014, 18:09 PM
Hola pongo el código entero, lo de poner los números en la variable es como difícil sin tener que cortar el código, que como veras hace una serie de cálculos con 20 dígitos que introduzco y saber cuantos números salen de esa ecuación es un poco difícil


Codigo

Código (vbnet) [Seleccionar]
Public Class Form1
    Dim maximum As Short = 99
    Dim Número As Double
    Private TextBoxes As TextBox() = {Nothing}
    Private Result1 As Int32(), Result2 As Int32(), Result3 As Int32(), Result4 As Int32(), Result5 As Int32(), Result6 As Int32(), Result7 As Int32(), Result8 As Int32(), Result9 As Int32(), Result10 As Int32(), Result11 As Int32(), Result12 As Int32(), Result13 As Int32(), Result14 As Int32(), Result15 As Int32(), Result16 As Int32(), Result17 As Int32(), Result18 As Int32(), Result19 As Int32(), Result20 As Int32()
    Private _textBox As Object
    ReadOnly MAX As Integer = 99
    Dim Rand As New Random
    Dim Rand2 As New Random
    Dim Result22 As Integer
    Dim Counter, Counter2 As Integer
    Dim myLabelArray(6) As Label
    Dim x As Integer = 0
    Private Property ListBox1Count As Integer
    ReadOnly Randomizer As New Random
    Dim Combo As List(Of Integer) = Nothing
    Dim Combos As New List(Of List(Of Integer))
    Dim FixedValues As Integer() = Nothing
    ReadOnly RandomValues As Integer() =
        Enumerable.Range(0, 99).ToArray

    Public Sub solonumeros(ByRef e As System.Windows.Forms.KeyPressEventArgs)
        ' evitar letras
        If Char.IsDigit(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsControl(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsSeparator(e.KeyChar) Then
            e.Handled = False
        Else
            e.Handled = True
        End If

    End Sub

    Private Property Calcular As Object

    Private Property TextBox(ByVal TextBoxCount As Short) As Object
        Get
            Return _textBox
        End Get
        Set(ByVal value As Object)
            _textBox = value
        End Set
    End Property

    ReadOnly Property Num1 As Int32
        Get
            Return CInt(TextBox1.Text)
        End Get
    End Property
    ReadOnly Property Num2 As Int32
        Get
            Return CInt(TextBox2.Text)
        End Get
    End Property
    ReadOnly Property Num3 As Int32
        Get
            Return CInt(TextBox3.Text)
        End Get
    End Property
    ReadOnly Property Num4 As Int32
        Get
            Return CInt(TextBox4.Text)
        End Get
    End Property

    ReadOnly Property Num5 As Int32
        Get
            Return CInt(TextBox5.Text)
        End Get
    End Property
    '---------------------------------
    ReadOnly Property Num6 As Int32
        Get
            Return CInt(TextBox6.Text)
        End Get
    End Property

    ReadOnly Property Num7 As Int32
        Get
            Return CInt(TextBox7.Text)
        End Get
    End Property
    ReadOnly Property Num8 As Int32
        Get
            Return CInt(TextBox8.Text)
        End Get
    End Property
    ReadOnly Property Num9 As Int32
        Get
            Return CInt(TextBox9.Text)
        End Get
    End Property
    ReadOnly Property Num10 As Int32
        Get
            Return CInt(TextBox10.Text)
        End Get
    End Property
    ReadOnly Property Num11 As Int32
        Get
            Return CInt(TextBox11.Text)
        End Get
    End Property
    ReadOnly Property Num12 As Int32
        Get
            Return CInt(TextBox12.Text)
        End Get
    End Property
    ReadOnly Property Num13 As Int32
        Get
            Return CInt(TextBox13.Text)
        End Get
    End Property
    ReadOnly Property Num14 As Int32
        Get
            Return CInt(TextBox14.Text)
        End Get
    End Property
    ReadOnly Property Num15 As Int32
        Get
            Return CInt(TextBox15.Text)
        End Get
    End Property

    ReadOnly Property Num16 As Int32
        Get
            Return CInt(TextBox16.Text)
        End Get
    End Property
    ReadOnly Property Num17 As Int32
        Get
            Return CInt(TextBox17.Text)
        End Get
    End Property
    ReadOnly Property Num18 As Int32
        Get
            Return CInt(TextBox18.Text)
        End Get
    End Property
    ReadOnly Property Num19 As Int32
        Get
            Return CInt(TextBox19.Text)
        End Get
    End Property
    ReadOnly Property Num20 As Int32
        Get
            Return CInt(TextBox20.Text)
        End Get
    End Property

    Private Sub Sumar(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        '--------------------------------------------------
        Dim Result1 As Integer() = {Num1 - 1, Num1 - 2, Num1 - 3, Num1 + 1, Num1 + 2, Num1 + 3}

        For Index As Integer = 0 To (Result1.Count - 1)

            Select Case Result1(Index)

                Case Is = 0 ' El valor es 0. esto todavia no me funciona
                    ' Hacer algo con el número 0 aquí. no mostrar el 0
                    '   Result1(Index) = Not 0

                Case Is < 0 ' El valor es negativo.
                    ' Lo convierto a positivo si funciona.
                    Result1(Index) = Math.Abs(Result1(Index))

            End Select '/ Result1(Index)


        Next Index

        Result1 = Result1.Distinct().ToArray
        Array.Sort(Result1)

        '---------------------------------------------------

        Result2 = {Num2 + 1, Num2 + 2, Num2 + 3, Num2 - 1, Num2 - 2} _
                  .Distinct().ToArray
        Array.Sort(Result2)

        Result3 = {Num3 + 1, Num3 + 2, Num3 + 3, Num3 - 1, Num3 - 2, Num3 - 3} _
                  .Distinct().ToArray
        Array.Sort(Result3)

        Result4 = {Num4 + 1, Num4 + 2, Num4 + 3, Num4 - 1, Num4 - 2, Num4 - 3} _
                  .Distinct().ToArray
        Array.Sort(Result4)

        Result5 = {Num5 + 1, Num5 + 2, Num5 + 3, Num5 - 1, Num5 - 2, Num5 - 3} _
                  .Distinct().ToArray
        Array.Sort(Result5)

        Result6 = {Num6 + 1, Num6 + 2, Num6 + 3, Num6 - 1, Num6 - 2, Num6 - 3} _
                  .Distinct().ToArray

        Array.Sort(Result6)

        Result7 = {Num7 + 1, Num7 + 2, Num7 + 3, Num7 - 1, Num7 - 2, Num7 - 3} _
                  .Distinct().ToArray

        Array.Sort(Result7)

        Result8 = {Num8 + 1, Num8 + 2, Num8 + 3, Num8 - 1, Num8 - 2, Num8 - 3} _
                  .Distinct().ToArray
        Array.Sort(Result8)

        Result9 = {Num9 + 1, Num9 + 2, Num9 + 3, Num9 - 1, Num9 - 2, Num9 - 3} _
                  .Distinct().ToArray
        Array.Sort(Result9)

        Result10 = {Num10 + 1, Num10 + 2, Num10 - 1, Num10 - 2, Num10 - 3} _
                  .Distinct().ToArray
        Array.Sort(Result10)

        Result11 = {Num11 + 1, Num11 + 2, Num11 + 3, Num11 - 1, Num11 - 2, Num11 - 3} _
                  .Distinct().ToArray
        Array.Sort(Result11)

        Result12 = {Num12 + 1, Num12 + 2, Num12 + 3, Num12 - 1, Num12 - 2, Num12 - 3} _
                  .Distinct().ToArray
        Array.Sort(Result12)

        Result13 = {Num13 + 1, Num13 + 2, Num13 + 3, Num13 - 1, Num13 - 2, Num13 - 3} _
                  .Distinct().ToArray
        Array.Sort(Result13)

        Result14 = {Num14 + 1, Num14 + 2, Num14 + 3, Num14 - 1, Num14 - 2, Num14 - 3} _
                  .Distinct().ToArray
        Array.Sort(Result14)

        Result15 = {Num15 + 1, Num15 + 2, Num15 + 3, Num15 - 1, Num15 - 2, Num15 - 3} _
                  .Distinct().ToArray
        Array.Sort(Result15)

        Result16 = {Num16 + 1, Num16 + 2, Num16 + 3, Num16 - 1, Num16 - 2, Num16 - 3} _
                  .Distinct().ToArray
        Array.Sort(Result16)

        Result17 = {Num17 + 1, Num17 + 2, Num17 + 3, Num17 - 1, Num17 - 2, Num17 - 3} _
                  .Distinct().ToArray
        Array.Sort(Result17)

        Result18 = {Num18 + 1, Num18 + 2, Num18 + 3, Num18 - 1, Num18 - 2, Num18 - 3} _
                  .Distinct().ToArray
        Array.Sort(Result18)

        Result19 = {Num19 + 1, Num19 + 2, Num19 + 3, Num19 - 1, Num19 - 2, Num19 - 3} _
                  .Distinct().ToArray

        Array.Sort(Result19)
        Result20 = {Num20 + 1, Num20 + 2, Num20 + 3, Num20 - 1, Num20 - 2, Num20 - 3} _
                  .Distinct().ToArray

        Array.Sort(Result20)
        ' Elimino duplicados al mismo tiempo que selecciono los números inferiores a MAX.
        Dim Resultss As IEnumerable(Of Integer) =
            (
                From Value As Integer
                In (Result1.Concat(Result2).Concat(Result3).Concat(Result4).Concat(Result5).Concat(Result6).Concat(Result7).Concat(Result8).Concat(Result9).Concat(Result10).Concat(Result11).Concat(Result12).Concat(Result13).Concat(Result14).Concat(Result15).Concat(Result16).Concat(Result17).Concat(Result18).Concat(Result19).Concat(Result20)).Distinct
                Where Value <= MAX
            )

        ListBox2.Items.AddRange(Resultss.Cast(Of Object).ToArray)

        'funcion unir combis
        FixedValues =
             ((Result1.Concat(Result2).Concat(Result3).Concat(Result4).Concat(Result5).Concat(Result6).Concat(Result7).Concat(Result8).Concat(Result9).Concat(Result10).Concat(Result11).Concat(Result12).Concat(Result13).Concat(Result14).Concat(Result15).Concat(Result16).Concat(Result17).Concat(Result18).Concat(Result19).Concat(Result20)).Distinct).
             Distinct.
             Select(Function(Value As Integer)
                        Return If(Value < MAX, Value, Rand.Next(0, MAX))
                    End Function).ToArray

        Dim IndexCounter As Integer = FixedValues.First ' 1
        Dim LenCounter As Integer = 0I

        Const NumStep As Integer = 3I
        Const NumLen As Integer = 10I

        Do Until IndexCounter > FixedValues.Last

            Combo = New List(Of Integer)


            For Num As Integer = IndexCounter To (FixedValues.Count - 1I) Step NumStep

                LenCounter += 1I
                Combo.Add(FixedValues(Num - 1I)) 'matrix fuersa

                If LenCounter >= NumLen Then
                    Exit For
                End If

            Next Num

            If LenCounter < NumLen Then

                For RandomNum As Integer = 1I To (NumLen - LenCounter)

                    Dim n As Integer = Randomizer.Next(RandomValues.First, RandomValues.Last)

                    Do Until Not Combo.Contains(n)
                        n = Randomizer.Next(RandomValues.First, RandomValues.Last)
                    Loop

                    Combo.Add(n)

                Next ' RandomNum

            End If ' LenCounter < NumLen

#If DEBUG Then ' #Debug
            Debug.WriteLine(String.Join(", ", Combo))
            ' Stop
#End If
            Combo.Sort()
            Combos.Add(Combo)
            IndexCounter += 1I
            LenCounter = 0I

        Loop ' IndexCounter >= FixedValues.Last

        ' ******** ordenamiento-------------
        '  Dim values As Integer() = (From n As Integer In Combos Order By n Ascending).ToArray

        ' ********
        ' Listbox:
        ' ********
        Combos.ForEach(Sub(comb As List(Of Integer))

                           ' Convierto la Lista a 'String', le añado los ceros, y añado el string formateado al Listbox.
                           ListBox1.Items.Add(String.Join(", ",
                                                          From value As String In comb
                                                          Select If(value.Length = 1I,
                                                                    value.Insert(0I, "0"c),
                                                                    value)))
                           ListBox1.Sorted = True



                       End Sub)

    End Sub


        ' Application.Exit()

    Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        sender.text = System.Text.RegularExpressions.Regex.Replace(sender.text, "\D", "")

    End Sub

    Private Sub TextBox3_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        sender.text = System.Text.RegularExpressions.Regex.Replace(sender.text, "\D", "")
    End Sub

    Private Sub TextBox4_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        sender.text = System.Text.RegularExpressions.Regex.Replace(sender.text, "\D", "")
    End Sub

    Private Sub TextBox5_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        sender.text = System.Text.RegularExpressions.Regex.Replace(sender.text, "\D", "")
    End Sub

    Private Sub TextBox2_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        sender.text = System.Text.RegularExpressions.Regex.Replace(sender.text, "\D", "")
    End Sub


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

    End Sub

    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")
        End If
    End Sub

    Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")
        End If
    End Sub

    Private Sub TextBox3_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox3.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")
        End If
    End Sub

    Private Sub TextBox4_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox4.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")
        End If
    End Sub

    Private Sub TextBox5_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox5.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")
        End If
    End Sub
    Private Sub TextBox6_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox6.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")

        End If

    End Sub
    Private Sub TextBox7_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox7.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")

        End If

    End Sub

    Private Sub TextBox8_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox8.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")

        End If

    End Sub

    Private Sub TextBox9_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox9.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")

        End If

    End Sub
    Private Sub TextBox10_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox10.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")

        End If

    End Sub

    Private Sub TextBox11_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox11.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")

        End If

    End Sub
    Private Sub TextBox12_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox12.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")

        End If

    End Sub
    Private Sub TextBox13_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox13.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")

        End If

    End Sub
    Private Sub TextBox14_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox14.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")

        End If

    End Sub
    Private Sub TextBox15_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox15.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")

        End If

    End Sub
    Private Sub TextBox16_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox16.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")

        End If

    End Sub
    Private Sub TextBox17_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox17.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")

        End If

    End Sub
    Private Sub TextBox18_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox18.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")

        End If

    End Sub
    Private Sub TextBox19_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox19.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")

        End If

    End Sub
    Private Sub TextBox20_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox20.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")

        End If

    End Sub

    Private Sub Button2_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        For Each obj As Control In Me.Controls
            If (TypeOf obj Is TextBox) Then
                obj.Text = ""
            End If
            If (TypeOf obj Is GroupBox) Then
                For Each caja As Control In obj.Controls
                    If (TypeOf caja Is TextBox) Then
                        caja.Text = ""
                    End If
                Next
            End If
            ListBox1.Items.Clear()
           
           
        Next
    End Sub

End Class






Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 29 Agosto 2014, 18:16 PM
Cita de: luis456 en 29 Agosto 2014, 18:09 PM
Hola pongo el código entero, lo de poner los números en la variable es como difícil sin tener que cortar el código, que como veras hace una serie de cálculos con 20 dígitos que introduzco y saber cuantos números salen de esa ecuación es un poco difícil

ya, el programa hace el cálculo, ¿pero para que pueda buscar el error no puedes ponerme algo así?:

Dim fixedvalues as integer() = {1,2,3 etc,...}

Si no no se con que números debería probar en el for...

cuando pueda le echo un ojo

saludos
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 29 Agosto 2014, 18:56 PM
Con esta secuencia de numeros me da el error


Código (vbnet) [Seleccionar]
Dim fixedvalues as integer() = {02, 03, 11, 12, 16, 18, 25, 27, 28, 31,40, 41, 43, 52, 53, 56, 57, 70, 77, 80}  

Luis




[ELEKTRO]: Mañana lo miro con calma luis, lo siento si te hice esperar
Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 30 Agosto 2014, 20:16 PM
He probado el For con la secuencia que dijiste y no me da ningún error de tipo " Índice fuera de los límites de la matriz ", así que no le hice ninguna modificación al código, está todo correcto en este código? (fixedvalues, numstep, numlen, IndexCounter):

Código (vbnet) [Seleccionar]
Public Class Form1

   ReadOnly Randomizer As New Random

   Private Sub Sumar(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Shown

       Dim Combo As List(Of Integer) = Nothing
       Dim Combos As New List(Of List(Of Integer))

       Dim fixedvalues As Integer() = {2, 3, 11, 12, 16, 18, 25, 27, 28, 31, 40, 41, 43, 52, 53, 56, 57, 70, 77, 80}
       Dim RandomValues As Integer() = Enumerable.Range(0, 99).ToArray

       Dim IndexCounter As Integer = fixedvalues.First ' 1
       Dim LenCounter As Integer = 0I

       Const NumStep As Integer = 3I
       Const NumLen As Integer = 10I

       Do Until IndexCounter > fixedvalues.Last

           Combo = New List(Of Integer)

           For Num As Integer = IndexCounter To (fixedvalues.Count - 1I) Step NumStep

               LenCounter += 1I
               Combo.Add(fixedvalues(Num - 1I)) 'matrix fuersa

               If LenCounter >= NumLen Then
                   Exit For
               End If

           Next Num

           If LenCounter < NumLen Then

               For RandomNum As Integer = 1I To (NumLen - LenCounter)

                   Dim n As Integer = Randomizer.Next(RandomValues.First, RandomValues.Last)

                   Do Until Not Combo.Contains(n)
                       n = Randomizer.Next(RandomValues.First, RandomValues.Last)
                   Loop

                   Combo.Add(n)

               Next ' RandomNum

           End If ' LenCounter < NumLen

           Combo.Sort()
           Combos.Add(Combo)
           IndexCounter += 1I
           LenCounter = 0I

       Loop ' IndexCounter >= FixedValues.Last

       Combos.ForEach(Sub(comb As List(Of Integer))

                          ' Convierto la Lista a 'String', le añado los ceros, y añado el string formateado al Listbox.
                          ListBox1.Items.Add(String.Join(", ",
                                                         From value As String In comb
                                                         Select If(value.Length = 1I,
                                                                   value.Insert(0I, "0"c),
                                                                   value)))
                          ListBox1.Sorted = True



                      End Sub)

   End Sub

End Class


saludos
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 30 Agosto 2014, 21:40 PM
 :-X :-X :-X :-X :-X :-X :rolleyes: :rolleyes: :rolleyes: :rolleyes:

Vere que pasa sera otra cosa

gracias

Luis
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 1 Septiembre 2014, 17:44 PM
Bien lo he probado repasado y parece que ya el error no me lo hace realmente no se como se arreglo jejej,lo que hice fue hacer un nuevo proyecto lo renombre y ahora va bien salvo jjejjj siempre hay un pero,

Como hago para que en las  combinaciones no me salga 00

00 10 25 35 48 49 50 51 70 72 90
00 15 25 38 45 48 49 52 56 70 88

Saludos
Luis
Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 1 Septiembre 2014, 19:39 PM
Cita de: luis456 en  1 Septiembre 2014, 17:44 PMComo hago para que en las  combinaciones no me salga 00

Código (vbnet) [Seleccionar]

       Combos.ForEach(Sub(comb As List(Of Integer))

                         ' Convierto la Lista a 'String', le añado los ceros, y añado el string formateado al Listbox.
                         ListBox1.Items.Add(String.Join(", ",
                                                        From value As String In comb
                                                        Select If(value.Length = 1I,
                                                                  value.Insert(0I, "0"c),
                                                                  value)))
                         ListBox1.Sorted = True



                     End Sub)

Supongo que te refieres a poner "0" y no "00", entonces:

Código (vbnet,6) [Seleccionar]
       Combos.ForEach(Sub(comb As List(Of Integer))

                         ' Convierto la Lista a 'String', le añado los ceros, y añado el string formateado al Listbox.
                         ListBox1.Items.Add(String.Join(", ",
                                                        From value As String In comb
                                                        Select If(value.Length = 1I andalso not value.equals("0"),
                                                                  value.Insert(0I, "0"c),
                                                                  value)))
                         ListBox1.Sorted = True



                     End Sub)
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 2 Septiembre 2014, 07:55 AM
Hola

" Supongo que te refieres a poner "0" y no "00", entonces: "

No me refiero a que no muestre combinaciones que tengan 00 o  0

Luis
Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 2 Septiembre 2014, 15:34 PM
¿y entonces que quieres mostrar en su lugar?, no soy adivino, luis.

pero de todas formas creo que eso ya puedes hacerlo tu solito

saludos!
Título: Re: Mis malas combinaciones :(
Publicado por: luis456 en 2 Septiembre 2014, 22:29 PM
Pos no mostrar combinaciones con 00 o 0 eliminarlas .pero ya estoy en ello claro hasta el fin de semana que viene ya estoy currando de nuevo jej


Gracias por tu ayuda pero seguro este sábado andaré por aca jejej


Luis
Título: Re: Mis malas combinaciones :(
Publicado por: Eleкtro en 3 Septiembre 2014, 00:24 AM
pues excluye el 0 al crear la combinación, tan facil como eso, tienes una mezcla de 20 códigos que se te han ido proporcionando para hacer todo lo que deseas, creo que ya es suficiente, preguntar "¿como hago para que no salga un 00?" a estas alturas... fíjate en el código que tienes y aprende a usarlo.

Saludos!