|
161
|
Programación / .NET (C#, VB.NET, ASP) / Re: Mas problemas :( filtrar o eliminar registros iguales
|
en: 25 Marzo 2016, 19:34 pm
|
joer El código de elektro te hace esto; 20, 24, 34 20, 24, 44 20, 24, 45 20, 34, 24 20, 34, 44 20, 34, 45 20, 44, 24 20, 44, 34 20, 44, 45 20, 45, 24 20, 45, 34 20, 45, 44 24, 20, 34 24, 20, 44 24, 20, 45 24, 34, 20 24, 34, 44 24, 34, 45 24, 44, 20 24, 44, 34 24, 44, 45 24, 45, 20 24, 45, 34 24, 45, 44 34, 20, 24 34, 20, 44 34, 20, 45 34, 24, 20 34, 24, 44 34, 24, 45 34, 44, 20 34, 44, 24 34, 44, 45 34, 45, 20 34, 45, 24 34, 45, 44 44, 20, 24 44, 20, 34 44, 20, 45 44, 24, 20 44, 24, 34 44, 24, 45 44, 34, 20 44, 34, 24 44, 34, 45 44, 45, 20 44, 45, 24 44, 45, 34 45, 20, 24 45, 20, 34 45, 20, 44 45, 24, 20 45, 24, 34 45, 24, 44 45, 34, 20 45, 34, 24 45, 34, 44 45, 44, 20 45, 44, 24 45, 44, 34
y tu quieres quitar repeticiones de modo que si pone ABC , ni otro ABC, ni ponga BCA o BAC, esto REPIIIIITOOOOOO son COMBINACIONES SIN REPETICION y al final te queda esto: 20, 24, 34 20, 24, 44 20, 24, 45 20, 34, 44 20, 34, 45 20, 44, 45 24, 34, 44 24, 34, 45 24, 44, 45 34, 44, 45
Que es lo que hace mi código ¿Cual es el problema? Quien entienda que te compre ajajja.
|
|
|
162
|
Programación / .NET (C#, VB.NET, ASP) / Re: Mas problemas :( filtrar o eliminar registros iguales
|
en: 25 Marzo 2016, 19:01 pm
|
Amos a ver ¿Y esto que es lo que hace? Dim Elementos As IEnumerable(Of Integer) = {20, 24, 34, 44, 45} Dim EleX As Integer = 0 Dim EleX2 As Integer = 0 ListBox1.Items.Clear() 'Limpia el ListBox For I1 As Integer = 0 To Elementos.Count - 1 : EleX += 1 For I2 As Integer = EleX To Elementos.Count - 1 For I3 As Integer = EleX To Elementos.Count - 1 If Elementos(I2) <> Elementos(I3) And Elementos(I3) > Elementos(I2) Then ListBox1.Items.Add(String.Format("{0:00}, {1:00}, {2:00}", Elementos(I1), Elementos(I2), Elementos(I3))) End If Next Next Next MessageBox.Show("Combinaciones: " & ListBox1.Items.Count)
20, 24, 34 20, 24, 44 20, 24, 45 20, 34, 44 20, 34, 45 20, 44, 45 24, 34, 44 24, 34, 45 24, 44, 45 34, 44, 45 madre miaaaa!!!!! El de la primitiva tenía un fallo, no salía el 49, ya lo he arreglado
El de la primitiva modificando un poco también hace LO MISMO Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim ListaComb As New List(Of String) '//Lista de combinaciones Dim NumCombinaciones As Integer = 10 '<---OJO EN ESTE CASO SOLO LO MAXÍMO SON 10 Dim NewComb As String ListaComb.Clear() For B1 As Integer = 1 To NumCombinaciones While ListaComb.Count < NumCombinaciones NewComb = GetCombPrimitiva() ListaComb.Add(NewComb) ListaComb = ListaComb.Distinct.ToList My.Application.DoEvents() End While Next B1 ListaComb.Sort() ListBox1.Items.Clear() For Each Elem As String In ListaComb ListBox1.Items.Add(Elem) Next End Sub Public Function GetCombPrimitiva() As String Dim MisBolas() As String = {20, 24, 34, 44, 45} Dim Bombo As New List(Of Integer) '//Bombo para meter las bolas Dim Fila As New List(Of Integer) '//Fila virtual para poner las bolas en orden Dim Combinación As String = Nothing Dim NumRandom As New Random '//Llena el bombo For Index As Integer = 0 To MisBolas.Count - 1 Bombo.Add(MisBolas(Index)) Next '//Extrae las bolas For Index As Integer = 1 To 3 '//Devuelve números del 0 a 48 (49 números, Bola(0): contiene 1, Bola(1): Bolcontiene 2 ...) Dim Bola As Integer = NumRandom.Next(0, Bombo.Count) '//Mete la bola en la "fila" Fila.Add(Bombo(Bola)) '//Quita la bola obtenida del bombo Bombo.RemoveAt(Bola) Next Fila.Sort() 'Ordena la fila de bolas For Each Bola As Integer In Fila Combinación += String.Format("{0:00} ", Bola) Next Return Combinación End Function End Class
Pero OJO con el valor que pones a NumCombinaciones , pues lo máximo que debes poner es el máximo que permite las condiciones que en este caso son : C5,3= 5!/(3!·(5-3)!) = 10 combinaciones
|
|
|
163
|
Programación / .NET (C#, VB.NET, ASP) / Re: Mas problemas :( filtrar o eliminar registros iguales
|
en: 25 Marzo 2016, 18:29 pm
|
Si lo que nesecito no es modificar el codigo. es eliminar en el listbox los numeros o lineas repetidas ........como ufff se me seca la lengua jajajja no me interesa modificar el codigo gracias por tu paciencia Luis ahí está compi, para hacer eso cambias el código o usas el que ya te di uno usando For Next o añades más còdigo para quitar las repeticones lo cual es un royo. Por eso te digo que si yo ya he puesto un código que hace esto mismo porque te empeñas en usar este XD
|
|
|
164
|
Programación / .NET (C#, VB.NET, ASP) / Re: Mas problemas :( filtrar o eliminar registros iguales
|
en: 25 Marzo 2016, 18:11 pm
|
Bueno esto es como la once que le han puesto lo de los números de serie, pero en lo básico es 100000 números, luego tienes + el número de serie y todas las jodidos 'TIMOJUEGOS' que se les ocurra. Realmente no me queda lo claro lo que quieres, . Pero mientras escribías hice este código a ver si te sirve. Crea los seis números de la Primitiva, sin repetir y en orden de numeración con la función GetCombPrimitiva . Además crea tantas combinaciones como quieras hacer y SIN REPETIR, establecido en NumCombinacionesSi hay algún fallo pues que alguien lo digo o lo arregle jaja GENERADOR DE COMBINACIONES DEL LA PRIMITIVAPublic Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim ListaComb As New List(Of String) '//Lista de combinaciones Dim NumCombinaciones As Integer = 5 Dim NewComb As String ListaComb.Clear() For B1 As Integer = 1 To NumCombinaciones While ListaComb.Count < NumCombinaciones NewComb = GetCombPrimitiva() ListaComb.Add(NewComb) ListaComb = ListaComb.Distinct.ToList My.Application.DoEvents() End While Next B1 ListBox1.Items.Clear() For Each Elem As String In ListaComb ListBox1.Items.Add(Elem) Next End Sub Public Function GetCombPrimitiva() As String Dim Bombo As New List(Of Integer) '//Bombo para meter las bolas Dim Fila As New List(Of Integer) '//Fila virtual para poner las bolas en orden Dim Combinación As String = Nothing Dim NumRandom As New Random '//Llena el bombo For Bolas As Integer = 1 To 49 Bombo.Add(Bolas) Next '//Extrae las bolas For Index As Integer = 1 To 6 '//Devuelve números del 0 a 48 (49 números, Bola(0): contiene 1, Bola(1): Bolcontiene 2 ...) Dim Bola As Integer = NumRandom.Next(0, Bombo.Count) '//Mete la bola en la "fila" Fila.Add(Bombo(Bola)) '//Quita la bola obtenida del bombo Bombo.RemoveAt(Bola) Next Fila.Sort() 'Ordena la fila de bolas For Each Bola As Integer In Fila Combinación += String.Format("{0:00} ", Bola) Next Return Combinación End Function End Class
Por cierto que si Elektro no te lo ha resuelto ya es que no se puede Además que lo que pides ya lo he puesto yo, creo , pero tu te has empeñado en usar este código: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim intCol As IEnumerable(Of Integer) = {20, 24, 34, 44, 45} Dim pairsCol As IEnumerable(Of String) = From value1 As Integer In intCol From value2 As Integer In intCol Select String.Join(Environment.NewLine, ( From value3 As Integer In intCol Where (value1 <> value2) AndAlso (value1 <> value3) AndAlso (value2 <> value3) Select String.Format("{0:00}, {1:00}, {2:00}", value1, value2, value3))) For Each pairs As String In pairsCol For Each line As String In pairs.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries) ' MsgBox(pairs.Count) ' MsgBox(line1.Count) Me.ListBox1.Items.Add(line) Next line Next pairs
y quieres quitar repeticiones... este código ya está hecho para crear las combinaciones así, tendrías que cambiar las condiciones o añadir más código para ir leyendo línea tras línea y comprando para ir eliminado, un rollo Sinceramente, no se como hacerlo usando ese código . Yo ta te lo hice. Parece que hablo chino yo jaja. Hasta he dado clases de combinatoria que más quieres XD
|
|
|
165
|
Programación / .NET (C#, VB.NET, ASP) / Re: Mas problemas :( filtrar o eliminar registros iguales
|
en: 25 Marzo 2016, 15:27 pm
|
Chacho, por correo privado ya te contesté. ¿Dónde ves tú que aquí se repitan? Dim Elementos As IEnumerable(Of Integer) = {1, 3, 4, 5, 6} Dim EleX As Integer = 0 Dim EleX2 As Integer = 0 ListBox1.Items.Clear() 'Limpia el ListBox For I1 As Integer = 0 To Elementos.Count - 1 : EleX += 1 For I2 As Integer = EleX To Elementos.Count - 1 For I3 As Integer = EleX To Elementos.Count - 1 If Elementos(I2) <> Elementos(I3) And Elementos(I3) > Elementos(I2) Then ListBox1.Items.Add(String.Format("{0:00}, {1:00}, {2:00}", Elementos(I1), Elementos(I2), Elementos(I3))) End If Next Next Next MessageBox.Show("Combinaciones: " & ListBox1.Items.Count)
01, 03, 04 01, 03, 05 01, 03, 06 01, 04, 05 01, 04, 06 01, 05, 06 03, 04, 05 03, 04, 06 03, 05, 06 04, 05, 06
Bueno, y está..el de 3 Lo que tengo una duda respecto a como quieres combinarlos, ya que hay muchas posibilidades. Te aconsejo, cuando preguntes aquí en el foro que especifiques bien las condiciones, más que nada para ahorrarte tener que volver a preguntar y trabajo y tiempo perdido para los demás.POSIBILIDADES DE COMBINAR DE TRES EN TRES: Combinarlos de modos que el segundo y el tercero de puedan repetir 1,2,2 1,2,31,2,4 Igual y que tercero pueda ser MENOR que el segundo. ... 1, 3, 21, 3, 3 1, 3, 4 Que el segundo y que el tercero no puedan ser iguales... 1, 3, 2 1, 3, 41, 3, 5 Que el segundo y el tercero no puedan ser iguales y el tercero no pueda ser menor que el segundo 1, 2 ,3 1, 2, 4 1, 3, 4 1, 3, 5 2, 3, 4 CÓDIGO: OPCIÓN 1: Permite el tercero menor que el segundo y que tercero y segundo sena iguales Dim Elementos As IEnumerable(Of Integer) = {1, 3, 4, 5, 8, 13, 34, 55, 84, 99} Dim EleX As Integer = 0 Dim EleX2 As Integer = 0 ListBox1.Items.Clear() 'Limpia el ListBox For I1 As Integer = 0 To Elementos.Count - 1 : EleX += 1 For I2 As Integer = EleX To Elementos.Count - 1 For I3 As Integer = EleX - 1 To Elementos.Count - 1 ListBox1.Items.Add(String.Format("{0:00}, {1:00}, {2:00}", Elementos(I1), Elementos(I2), Elementos(I3))) Next Next Next MessageBox.Show("Combinaciones: " & ListBox1.Items.Count)
OPCIÓN 2: No permite segundo y tercero sean iguales pero si que el tercero sea menor que el segundo. Dim Elementos As IEnumerable(Of Integer) = {1, 3, 4, 5, 8, 13, 34, 55, 84, 99} Dim EleX As Integer = 0 Dim EleX2 As Integer = 0 ListBox1.Items.Clear() 'Limpia el ListBox For I1 As Integer = 0 To Elementos.Count - 1 : EleX += 1 For I2 As Integer = EleX To Elementos.Count - 1 For I3 As Integer = EleX - 1 To Elementos.Count - 1 If Elementos(I2) <> Elementos(I3) Then ListBox1.Items.Add(String.Format("{0:00}, {1:00}, {2:00}", Elementos(I1), Elementos(I2), Elementos(I3))) End If Next Next Next MessageBox.Show("Combinaciones: " & ListBox1.Items.Count)
OPCIÓN 3: No permite que el segundo y el tercero sean iguales, ni tampoco que el tercero sea menor que el segundo. Dim Elementos As IEnumerable(Of Integer) = {1, 3, 4, 5, 8, 13, 34, 55, 84, 99} Dim EleX As Integer = 0 Dim EleX2 As Integer = 0 ListBox1.Items.Clear() 'Limpia el ListBox For I1 As Integer = 0 To Elementos.Count - 1 : EleX += 1 For I2 As Integer = EleX To Elementos.Count - 1 For I3 As Integer = EleX To Elementos.Count - 1 If Elementos(I2) <> Elementos(I3) And Elementos(I3) > Elementos(I2) Then ListBox1.Items.Add(String.Format("{0:00}, {1:00}, {2:00}", Elementos(I1), Elementos(I2), Elementos(I3))) End If Next Next Next MessageBox.Show("Combinaciones: " & ListBox1.Items.Count)
Creo que no hay errores Si eso me lo cuentas S2s
Se llaman Combinaciones SIN REPETICIÓN y en combinatoria se puede simbolizar así: y la fórmula para determinar el número de combinaciones: m! C m,n = ___________ n! · ( m-n)!donde m! es el factorial del número total de elementos y n un número de elementos de cada grupo Consiste por ejemplo en realizar con un determinado grupo de elementos E={A,B,C,D,E} grupos de 3 en 3 y sin repetición. Si hay ABC, no vale BCA, ni tampoco AAA o ABB. Si m=[A,B,C,D,E] = 5 elementos n= grupos de 3 en 3 5! C 5,3 = ___________ = 10 combinaciones 3! · ( 5-3)! Dim Elementos As IEnumerable(Of Integer) = {1, 2, 3, 4, 5} Dim EleX As Integer = 0 Dim EleX2 As Integer = 0 ListBox1.Items.Clear() 'Limpia el ListBox For I1 As Integer = 0 To Elementos.Count - 1 : EleX += 1 For I2 As Integer = EleX To Elementos.Count - 1 For I3 As Integer = EleX To Elementos.Count - 1 If Elementos(I2) <> Elementos(I3) And Elementos(I3) > Elementos(I2) Then ListBox1.Items.Add(String.Format("{0:00}, {1:00}, {2:00}", Elementos(I1), Elementos(I2), Elementos(I3))) End If Next Next Next MessageBox.Show("Combinaciones: " & ListBox1.Items.Count)
Como ves salen 10
En la primitiva te saldrían ni más ni menos que...... 49!/(6!·(49 - 6)!)= 13.983.816Ya que en la primitiva da igual 14, 5 ,25 que 5, 14 ,25. Las bolas salen en un orden pero luego se ordenan, y no pueden volver a salir repetidas porque todas están en el mismo bombo. Como ya te dije son casi 14 millones de combinaciones...
|
|
|
166
|
Programación / .NET (C#, VB.NET, ASP) / Re: Mas problemas :( filtrar o eliminar registros iguales
|
en: 24 Marzo 2016, 13:56 pm
|
Hola Luis Ya te comenté lo de meter la lista en un Array list: Dim Elementos() As String = {1, 2, 3, 3, 3, 4, 4, 5} Dim LISTA As New List(Of String)(Elementos) MsgBox("Con repeticiones") For Each N As String In LISTA ListBox1.Items.Add(N) Next MsgBox("Sin repeticiones") ListBox1.Items.Clear() LISTA = LISTA.Distinct.ToList '<---Elimina las repeticones de la lista For Each N As String In LISTA ListBox1.Items.Add(N) Next
Con integer: Dim Elementos() As Integer = {1, 2, 3, 3, 3, 4, 4, 5} Dim LISTA As New List(Of Integer)(Elementos) MsgBox("Con repeticiones") For Each N As String In LISTA ListBox1.Items.Add(N) Next MsgBox("Sin repeticiones") ListBox1.Items.Clear() LISTA = LISTA.Distinct.ToList '<---Elimina las repeticones de la lista For Each N As String In LISTA ListBox1.Items.Add(N) Next
|
|
|
167
|
Programación / Scripting / Acceso denegado al crear acceso directo desde consola de windows
|
en: 20 Marzo 2016, 16:38 pm
|
hola Desde Vista y posterior funciona este código: Vista/Windows7 @Echo off
REM <<<< Crea acceso directo >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> echo Set oWS = WScript.CreateObject("WScript.Shell") > %~dp0CreateShortcut.vbs echo sLinkFile = "%userprofile%\Desktop\Notepad.lnk" >> %~dp0CreateShortcut.vbs echo Set oLink = oWS.CreateShortcut(sLinkFile) >> %~dp0CreateShortcut.vbs echo oLink.TargetPath = "%systemroot%\System32\Notepad.exe" >> %~dp0CreateShortcut.vbs echo oLink.Save >> %~dp0CreateShortcut.vbs cscript %~dp0CreateShortcut.vbs del %~dp0CreateShortcut.vbs REM >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> XP [ DEVUELVE ACCESO DENEGADO ( y como Administrador)] @Echo off
REM <<<< Crea acceso directo >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> echo Set oWS = WScript.CreateObject("WScript.Shell") > %~dp0CreateShortcut.vbs echo sLinkFile = "%userprofile%\Escritorio\Notepad.lnk" >> %~dp0CreateShortcut.vbs echo Set oLink = oWS.CreateShortcut(sLinkFile) >> %~dp0CreateShortcut.vbs echo oLink.TargetPath = "%systemroot%\System32\Notepad.exe" >> %~dp0CreateShortcut.vbs echo oLink.Save >> %~dp0CreateShortcut.vbs cscript %~dp0CreateShortcut.vbs del %~dp0CreateShortcut.vbs REM >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Gracias
He hecho un prueba creando un paquete de instalación con WinRAR, de modo que se ejecute como administrador. En tal caso, si que funciona. ¿Como puedo ejecutarlo como Administrador directamente?, ya que realmente lo ejecuto desde una cuenta con privilegios de administrador. No entiendo porqué me da Acceso denegado.. [SOLUCIONADO]Ya lo he solucionado quitando %~dp0 y cambiando el directorio mediante PUSHD. Ahora funciona en ambos sistemas y en Administrador o No adeministrador REM <<<< Crea acceso directo >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> PUSHD %APPPATH% echo Set oWS = WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs echo sLinkFile = "%userprofile%\Escritorio\Notepad.lnk" >> CreateShortcut.vbs echo Set oLink = oWS.CreateShortcut(sLinkFile) >> CreateShortcut.vbs echo oLink.TargetPath = "%systemroot%\System32\Notepad.exe" >> CreateShortcut.vbs echo oLink.Save >> CreateShortcut.vbs cscript CreateShortcut.vbs del CreateShortcut.vbs REM >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
|
168
|
Programación / .NET (C#, VB.NET, ASP) / Re: Combis :(
|
en: 20 Marzo 2016, 16:23 pm
|
De nada, bueno en el código que has citado se me coló un 868, porque estaba haciendo pruebas, por si acaso. En cuyo caso devolvería.. 01, 03 01, 84 01, 99 01, 868 03, 84 03, 99 03, 868 84, 99 84, 868 99, 868 S2s
Además... que sobra la comparación If N <> NumElementos ... en la secuencia del primer ejemplo. (Esto me ha ocurrido porque el primer ejemplo lo obtuve a partir del segundo, jeje) Dim NumElementos As IEnumerable(Of Integer) = {1, 3, 84, 99}, Secuencia As String = Nothing Dim nu As Integer = 0 For Each N As Integer In NumElementos : nu += 1 For I As Integer = nu To NumElementos.Count - 1 Secuencia += String.Format("{0:00}, {1:00}{2}", N, NumElementos(I), Environment.NewLine) Next Next MessageBox.Show(Secuencia)
|
|
|
169
|
Programación / .NET (C#, VB.NET, ASP) / Re: Combis :(
|
en: 20 Marzo 2016, 16:05 pm
|
hola de nuevo... Bueno, creo que la pregunta está mas que respondida, pero tras revisar los comentarios me di cuenta que la secuencia de mi código, aunque lógica no era la que demandabas, así que pongo la rectificación y fiel a mi estilo ya que hay códigos que se entienden mejor que otros. Dim NumElementos As IEnumerable(Of Integer) = {1, 3, 84, 99}, Secuencia As String = Nothing Dim nu As Integer = 0 For Each N As Integer In NumElementos : nu += 1 For I As Integer = nu To NumElementos.Count - 1 If N <> NumElementos(I) Then _ Secuencia += String.Format("{0:00}, {1:00}{2}", N, NumElementos(I), Environment.NewLine) Next Next MessageBox.Show(Secuencia)
Devuelve 01, 03 01, 84 01, 99 03, 84 03, 99 84, 99 ( he reducido la secuencia pero puedes poner tantos números como quieras) O bien: Dim NumElementos As IEnumerable(Of Integer) = {1, 3, 84, 99}, Secuencia As String = Nothing For Each N As Integer In NumElementos For I As Integer = 0 To NumElementos.Count - 1 If N <> NumElementos(I) Then _ Secuencia += String.Format("{0:00}, {1:00}{2}", N, NumElementos(I), Environment.NewLine) Next Next MessageBox.Show(Secuencia)
Devuelve: 01, 03 01, 84 01, 99 03, 01 03, 84 03, 99 84, 01 84, 03 84, 99 99, 01 99, 03 99, 84 S2s
|
|
|
170
|
Programación / .NET (C#, VB.NET, ASP) / Re: Combis :(
|
en: 20 Marzo 2016, 15:00 pm
|
Si lo prefieres puedes meter la lista en un Array. Dim NumElementos As IEnumerable(Of Integer) = {1, 3, 84, 99}, Secuencia As New List(Of String) For Each N As Integer In NumElementos For I As Integer = 0 To NumElementos.Count - 1 Secuencia.Add(String.Format("{0:00}, {1:00}", N, NumElementos(I))) Next Next '//Mete los elementos del Array (List) en una Variable String y la muestra Dim lista As String = Nothing For Each S As String In Secuencia : lista += S + Environment.NewLine : Next MessageBox.Show(lista)
|
|
|
|
|
|
|