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)
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
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
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
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
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.
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!
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
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!
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
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
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:
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
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
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 " ListBox1.Items.AddRange(combos.Cast(Of Object).ToArray)
gracias por tu infinita paciencia
luis
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:
CitarEnumerable.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?:
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.
Combos.ForEach(Sub(comb As List(Of Integer))
ListBox1.Items.Add(String.Join(", ", comb))
End Sub)
2.
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:
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
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
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
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 ?
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 esoPD: Por si acaso te recuerdo que para ordenar de mayor a menor lo tienes facil usando una LINQ-query:
dim values as integer() = (from n as integer in TUSNUMEROS order by n ascending).toarray
o el método
Sort, en una lista.
Saludos!
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 ?
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
Cita de: luis456 en 20 Agosto 2014, 13:56 PMporque no me salen los números que he puesto para combinar ?
Por esto:
CitarFor 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: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
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
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
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!
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
' ******** 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
¿
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í:
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!
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'. "
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
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:
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:
ListBox1.Sorted = True
(http://i.imgur.com/szIoECn.jpg)
Saludos.
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
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)
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
No me sale y nada significa que no me ordena las combinaciones
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
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
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
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.
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
Listo :) funciona como quería
Muchas gracias elektro
Luis
( nos levantamos pronto ee)
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 :)
' 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
Solucionado ;)
Label1.Text = CStr(ListBox1.Items.Count)
luis
Cita de: luis456 en 28 Agosto 2014, 13:23 PMSolucionado ;)
Bien, pero debes intentar interactuar lo más mínimo con la UI.
Combos.Count
Saludos
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
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
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
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 :)
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
Citar 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:
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.
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[]'
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)
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 Dim Rand As New Random
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
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 "
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
Los índices empiezan por Cero en .Net, así que debes descontarle un 1 a FixedValues.Count (no debes aumentar nada)
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!
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
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!
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
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
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
Con esta secuencia de numeros me da el error
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
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):
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
:-X :-X :-X :-X :-X :-X :rolleyes: :rolleyes: :rolleyes: :rolleyes:
Vere que pasa sera otra cosa
gracias
Luis
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
Cita de: luis456 en 1 Septiembre 2014, 17:44 PMComo hago para que en las combinaciones no me salga 00
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:
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)
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
¿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!
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
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!