|
11
|
Programación / .NET (C#, VB.NET, ASP) / Re: Ejercicio básico de combinaciones
|
en: 5 Mayo 2021, 06:46 am
|
Bien la primera parte esta bien, a si mismo es pero en la parte que me comentas que debe aparecer dos veces el mismo digito no podrá ser ya que son números que no se repiten y además se prestaría a confusión ,si no se puede hacer vamos a dejarlo por ahora (después miramos a hacerlo sin tener que meter dos veces el mismo digito ,por lo demás esta bien a si es como debe funcionar,
Saludos y gracias Luis
|
|
|
12
|
Programación / .NET (C#, VB.NET, ASP) / Re: Ejercicio básico de combinaciones
|
en: 4 Mayo 2021, 21:24 pm
|
ien Serapis tratare de explicarlo al pelo ya que tienes razon,esta desde el princio mal planteado , bueno la idea es poder combinar 6 digitos iniciales que van desde el 0 hasta el 9 (0,1,2,3,4,5,6,7,8,9 ), bien de estos numeros que yo escojo segun una ecuacion matematica (mia) 6 digitos los cuales yo combino segun la tematica de apuesta de la primitiva que ya sabemos es hasta el 49, con estos 6 digitos se deben formar los numeros (decenas) que componen el sorteo ejemplo : introducimos ( 1, 2, 3, 4, 5, 6 ) con estos numeros se formarian los siguientes numeros: 12 13 14 15 16 21 23 24 25 26 31 32 34 35 36 41 42 43 45 46 <----tomariamos hasta aca los numeros para combinarlos entre si formando grupos de 6 51 52 53 54 56 <----ya estos no se toman en cuenta ( se eliminan del calculo) 61 62 63 64 65 <----ya estos no se toman en cuenta ya que se salen del rango max (49) Seguimos: del grupo de arriba tomariamos los numeros desde el 12 hasta el 46, ya que como sabemos las loteria llegan hasta el 49 y habiendo excluido el 51 hasta el 65 nos quedarian desde el 12 hasta el 46 y esos son los numeros que vamos a combinar vamos a calcular otro ejemplo ( 1,3,4,5,7,9 ) se deben de formar los siguientes numeros 13,14,15,17,19 31,34,35,37,39 41,43,45,47,49 y con estos numeros formar las combinaciones posibles de 6 Muy importante es lo siguiente debe tomar en cuenta cuando se introducen los 6 digitos que los digitos( 0 1 2 3 y 4 ) forman las decenas y que se deben combinar con el resto de los digitos y entre si para formar lo que ya sabemos es la forma de juego de la loteria primitiva y bonoloto. gracias de antemano por tu enorme paciencia Luis
|
|
|
13
|
Programación / .NET (C#, VB.NET, ASP) / Re: Ejercicio básico de combinaciones
|
en: 3 Mayo 2021, 13:16 pm
|
UFFFF JAJJAJA Bueno tendré que imprimir esto y llevármelo al trabajo a ver si asimilo todo y muchas gracias por tu paciencia ,pero te explico estoy haciendo pruebas con varios ejemplos y en una de ellas pongo 2 3 4 6 7 8 y no me salen combinaciones con el cuatro si de terminal estilo 24 34 pero no me salen con el cuatro 42 43 etc etc . y lo de las 210 combinaciones no es limitante se supone que con otro digito saldrán mas combinaciones ,no te preocupes por lo demás que aunque no sea experto ,se como hacer que guarde, imprima libere las variables etc , esto lo puse d prisa y corriendo tengo muchos modelos a usar pero me vale para ir viendo como funciona el codigo ' FUNCION LIMPIAR LISTBOSX... Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.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()
Y claro que tomare en cuenta tus métodos pero ya tenia mas de dos años sin programar y lo mío es autodidacta aunque no se crea jejje (eso que estudie Cobol y Pascal ) cuando los Dinosaurios no tenían ni disco duro 😲 es que no se como pasar una toma de pantalla para que veas que es lo que hago, porque no entiendo si pongo 1 3 4, 6 7 8 no me salen combinaciones con el cuatro adelante ??? 13 14 31 34 41 43 Saludos Luis
|
|
|
14
|
Programación / .NET (C#, VB.NET, ASP) / Re: Ejercicio básico de combinaciones
|
en: 3 Mayo 2021, 08:31 am
|
Gracias Serapis por tu ayuda he estado probando el código y bien vamos Bien jejje pero (siempre hay un pero ) no quiero que me hagas todo el trabajo ,solo explícame como funcionan algunas cosas para yo modificarlo , en el ejemplo anterior usas los números que pongo de ejemplo " 2, 3, 5,6,8, 9 " pero estos números cambian después de cada sorteo (después os explicare como los saco) según voy entiendo el código este toma solo los dos primeros y los combina con el resto ,bien el tema es que como sabemos las decenas son hasta el cuatro y a veces tendría que introducir ejemplo ( 1 , 2 ,4 - 5,7,8 ) y ahora el programa para las combinaciones no toma el cuatro solo el 1 y 2 , he puesto un botón para limpiar y poder hacer pruebas y el código va de maravilla ,pongo el código y algunas observaciones a ver que te parece ? Imports System.Text Public Class Form1 Private Permuta As New Permutaciones Private Decenas(2) As Byte, Unidades(4) As Byte ' El botón de la interfaz... Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Nums() As String, txt As String Dim k As UInt16 txt = TextBox1.Text.Replace(" ", "") ' <<<<<<<<<<<<<< ACA CAMBIAN LOS NUMEROS NUNCA SON LOS MISMOS ...Y DEBE TOMAR HASTA EL DIGITO 4 SABEMOS QUE LAS DECENAS SON 0 1 2 3 Y 4 Nums = txt.Split(",") If (Nums.Length = 6) Then ' crear los parámetros para la funcion de Transformacion: Decenas(0) = System.Byte.Parse(Nums(0)) Decenas(1) = System.Byte.Parse(Nums(1)) For k = 2 To 5 Unidades(k - 2) = System.Byte.Parse(Nums(k)) Next ListBox1.Items.Clear() For j = 0 To Permuta.Cantidad - 1 ListBox1.Items.Add(Permuta.Transforma(j, Decenas, Unidades)) Next Label1.Text = "Cantidad en lista: " & ListBox1.Items.Count.ToString Else MessageBox.Show("No, no no... Debe haber 6 y solo 6 numeros, separados por 1 coma...") End If End Sub Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load End Sub ' FUNCION LIMPIAR LISTBOSX... Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.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 Private Class Permutaciones Const MAX_COMBINAS As UInt16 = 210 Private s_Combinas(MAX_COMBINAS) As UInt32 Public ReadOnly Property Cantidad As UInt16 Get Return MAX_COMBINAS End Get End Property Public Function Transforma(ByVal Indice As UInt16, ByVal Dec() As Byte, ByVal Uni() As Byte) As String Dim permuta As UInt32 = s_Combinas(Indice) Dim s As String = "", valor As String = "" Dim x As Byte = 0, k As Byte For k = 0 To 5 x = (permuta Mod 10) permuta \= 10 Select Case x ' forma C en que quedan ordenados más aproximado al ejemplo de muestra... Case 0 : x = ((Dec(0) * 10) + Dec(1)) Case 1 To 4 : x = ((Dec(0) * 10) + Uni(x - 1)) Case 5 To 8 : x = ((Dec(1) * 10) + Uni(x - 5)) Case 9 : x = ((Dec(1) * 10) + Dec(0)) ' Otra forma B en que quedan ordenados... 'Case 0 : x = ((Dec(0) * 10) + Dec(1)) 'Case 1 : x = ((Dec(1) * 10) + Dec(0)) 'Case 2 To 5 : x = ((Dec(0) * 10) + Uni(x - 2)) 'Case 6 To 9 : x = ((Dec(1) * 10) + Uni(x - 6)) ' Otra forma A en que quedan ordenados... 'Case 0 To 3 : x = ((Dec(0) * 10) + Uni(x)) 'Case 4 To 7 : x = ((Dec(1) * 10) + Uni(x - 4)) 'Case 8 : x = ((Dec(0) * 10) + Dec(1)) 'Case 9 : x = ((Dec(1) * 10) + Dec(0)) End Select If (x < 10) Then s = "0" & x.ToString Else s = x.ToString valor = (s & ", ") & valor Next Return valor End Function ' Genera todas las permutaciones posibles (210) en formato numerico. ' Alfabeto = X,Y, R,S,T,U ' solo hay 8 pares de combinaciones: Resultado de combinar cada uno del GrupoDec con cada uno del GrupoUni ' XR, XS, XT, XU (0,1,2,3) ' YR, YS, YT, YU (4,5,6,7) ' Más las 2 combinaciones de intercambiar de posicion los valores del 'grupoDec' ' XY, YX (8,9) ' Cada par de esos 10 se enumeran ahora como 0-9 (usando una solo caracter) ' Ahora el numero de combinaciones con esos 10 pares tomados de 6 en 6 son: 210 Public Sub New() Dim combina As UInteger = 12345 ' combinacion inicial -----------NO ENTIENDO ESTO YA QUE LOS NUMEROS DE LAS DECENAS NO PUEDEN PASAR DEL 4 Dim final As UInteger = 456789 ' combinación final --------------??????????????? Dim k As UInt16 Dim digitos(0 To 5) As Byte, n As Byte ' control de límite de cada dígito. For k = 0 To 5 digitos(k) = k Next k = 0 Do s_Combinas(k) = combina If (digitos(5) = 9) Then n = 4 Do While digitos(n) = digitos(n + 1) - 1 n -= 1 Loop digitos(n) += 1 For n = n + 1 To 5 digitos(n) = digitos(n - 1) + 1 Next combina = 0 For n = 0 To 5 combina += digitos(n) * (10 ^ (5 - n)) Next Else combina += 1 : digitos(5) += 1 End If k += 1 Loop While (combina < final) s_Combinas(k) = combina End Sub 'Public ReadOnly Property Permuta(ByVal X As UInt16) ' Get ' Return s_Combinas(X) ' End Get 'End Property End Class ' Mostras la lista de permutaciones en el listbox.... va en conjunto con la propiedad 'Permuta' de la clase permutaciones. 'Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ' Dim k As UInt16, j As UInt32, s As String = "" ' ListBox1.Items.Clear() ' For k = 0 To Permuta.Cantidad - 1 ' j = (Permuta.Permuta(k)) ' If (j < 123456) Then s = "0" & j.ToString Else s = j.ToString ' ListBox1.Items.Add(s) ' Next 'End Sub End Class
Despues los adornos se los pongo jejeje saludos Luis
|
|
|
15
|
Programación / .NET (C#, VB.NET, ASP) / Re: Ejercicio básico de combinaciones
|
en: 1 Mayo 2021, 22:28 pm
|
Voy a tratar de explicarlo (siempre me pasa lo mismo yo se lo que quiero pero no se explicarlo)
yo tengo 6 dígitos ejemplo 2 3 5 6 8 9 <--- esos números deberán de formar parejas de esta forma :
de este grupo se toma el 2 y 3 solamente y se combinan con el resto : 5 6 8 9 formando pares de dígitos :
estos son los números resultantes
23 25 26 28 29 32 35 36 38 39
Resultado de esa combinación es esta (no las pongo todas son bastantes )
23,25,26,28,29,32 23,25,26,28,29,35 23,25,26,28,29,36 23,25,26,28,29,38 23,25,26,28,29,39 23,25,26,28,32,35 23,25,26,28,32,36 23,25,26,28,32,38 23,25,26,28,32,39 23,25,26,28,35,36 23,25,26,28,35,38
Como ven solo no salen combinaciones con el cuatro ni el uno ni cero ya que no salen en los números para combinar ( 2 3 5 6 8 9 )
saludos Luis
|
|
|
16
|
Programación / .NET (C#, VB.NET, ASP) / Re: Ejercicio básico de combinaciones
|
en: 1 Mayo 2021, 11:27 am
|
Hola a todos de nuevo al ataque jjejej Por fin instale de nuevo el Visual y he podido probar el código de Serapis Codigo Imports System.Text Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Nums() As String, txt As String Dim Valores() As Byte, k As UInt16 txt = TextBox1.Text.Replace(" ", "") Nums = txt.Split(",") If (Nums.Length = 6) Then ReDim Valores(0 To 5) For k = 0 To 5 Valores(k) = System.Byte.Parse(Nums(k)) Next Call Combinaciones(Valores) Else MessageBox.Show("No, no no... Debe haber 6 y solo 6 numeros, separados por 1 coma...") End If End Sub Private Sub Combinaciones(ByVal Valores As Byte()) Dim j, k, max As Byte Dim combinacion As String = "" ListBox1.Items.Clear() max = (49 - Valores.Max) For j = 0 To max For k = 0 To 5 combinacion &= ((Valores(k) + j).ToString) & ", " Next ListBox1.Items.Add(combinacion) combinacion = "" Next End Sub End Class
Bueno funciona bien dentro lo que cabe pero no hace lo que que quiero al 100 % ya que me hace combinaciones con números que no están dentro de los que introduzco: Ejemplo si introduzco 2 , 3 , 5 , 7 , 8 , 9 primero los números que se deben formar son 23 25 27 28 29 después 32 35 37 38 39 y con estos números hacer las combinaciones ya que como vemos no hay 0, 4, 1 en este caso serian 12 números a combinar formando combinaciones de 6 que cumplan la condición mirar (bonoloto primitiva) Si nos hacemos ricos lo haremos entre todos jejejje NOTA (no se como ostias subir una captura de pantalla ) Saludos todos Luis
|
|
|
20
|
Programación / .NET (C#, VB.NET, ASP) / Ejercicio básico de combinaciones
|
en: 25 Abril 2021, 11:21 am
|
Hola a Todos Tengo algún tiempo sin programar y se me ha olvidado algunas cosas ya muchos me conocéis, como siempre he trabajado sobre la base de dos dígitos, ahora se me ocurre hacerlo con 6 0 8 números y que me haga las combinaciones del 01 al 49 y si claro es para loterías jejej .bien mi idea es la siguiente : introduzco seis números ejemplo 1, 4, 5, 7, 8, 9 y que con estos números se me formen resultados de 6 números : 14 15 17 18 19 41 45 47 48 49 como vemos la condición es que no se formen números mayores a 49 Encontre este codigo dentro de mis archivos pero creo es de excel y quiero convertirlo a Net Sub Combinacion() i = 1 For b1 = 1 To 61 For b2 = b1 + 1 To 62 For b3 = b2 + 1 To 63 For b4 = b3 + 1 To 64 Cells(i, 1) = b1 Cells(i, 2) = b2 Cells(i, 3) = b3 Cells(i, 4) = b4 Range("E1") = i i = i + 1 Next Next Next Next End Sub
A ver quien le echa una mano a este VIEJO jejej y espero para este septiembre 14 me feliciten por mis 61 años 😨 Luis
|
|
|
|
|
|
|