elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Mensajes
Páginas: 1 [2] 3 4 5 6
11  Programación / .NET (C#, VB.NET, ASP) / Re: Duda acerca del calculo de combinaciones de numeros y letras en vb.net 2010 en: 24 Noviembre 2015, 12:29 pm
Entonces no es mi funcion lo que necesitas.

No se me ocurría por donde pillarlo, asi que he usado una sub recursiva muy chula que nos dejó seba123neo, con algunas modificaciones.

Aquí está la sub original:
http://foro.elhacker.net/programacion_vb/combinaciones_vb-t240009.0.html

Y esto es lo que he sacado:

Hace falta un command button y un listbox.

Código
  1. Option Explicit
  2. Private Sub Command1_Click()
  3.  Dim F As Long
  4.  Dim F2 As Long
  5.  Dim Matriz1() As String
  6.  Dim Matriz2() As String
  7.  Dim MatrizFinal() As String
  8.  Dim Linea As String
  9.  Dim Contador As Long
  10.  Dim ListaElementos As String
  11.  
  12.  List1.Clear
  13.  
  14.  ListaElementos = "AA,BB,CC,15,EE,20,GG,01" ' max. 10 elementos
  15.  
  16.  Matriz1 = Split(ListaElementos, ",") 'separamos los elementos
  17.  For F = 0 To UBound(Matriz1) ' creamos una linea con X numeros
  18.    Linea = Linea & CStr(F)
  19.  Next F
  20.  
  21.  ReDim Matriz2(0)
  22.  Call Combinaciones(Linea, Matriz2) ' creamos la matriz con las combinaciones de los X numeros
  23.  
  24.  ReDim MatrizFinal(0)
  25.  For F = 0 To UBound(Matriz2) - 1
  26.    Linea = ""
  27.    For F2 = 1 To UBound(Matriz1) + 1 ' reemplazamos los numeros por los elementos de la lista
  28.      Linea = Linea & Matriz1(Val(Mid$(Matriz2(F), F2, 1))) & ","
  29.    Next F2
  30.    ReDim Preserve MatrizFinal(Contador)
  31.    MatrizFinal(Contador) = Left(Linea, Len(Linea) - 1) 'guardamos quitando la ultima coma
  32.    Contador = Contador + 1
  33.  Next F
  34.  
  35.  ' mostramos el resultado
  36.  MsgBox "Total " & Contador & " grupos" ' mostramos la cantidad de grupos extraidos
  37.  For F = 0 To UBound(MatrizFinal)
  38.    List1.AddItem MatrizFinal(F) ' y los cargamos en el listbox
  39.  Next F
  40.  
  41.  
  42. End Sub
  43.  
  44. Private Sub Combinaciones(Palabra As String, ByRef Matriz() As String, Optional strFixed As String)
  45.  
  46.    Dim i As Integer
  47.  
  48.    If Len(Palabra) > 1 Then
  49.  
  50.        For i = 1 To Len(Palabra)
  51.  
  52.            Combinaciones Left$(Palabra, i - 1) & Mid$(Palabra, i + 1), Matriz, strFixed & Mid$(Palabra, i, 1)
  53.  
  54.        Next i
  55.  
  56.    Else
  57.        Matriz(UBound(Matriz)) = strFixed & Palabra
  58.        ReDim Preserve Matriz(UBound(Matriz) + 1)
  59.  
  60.    End If
  61.  
  62. End Sub

A la sub de seba123neo solo le he añadido una matriz donde ir dejando los grupos que luego convertiremos segun nuestra necesidad.
Es mejor usar matrices porque un listbox tiene más limitaciones de capacidad.

Espero que te sirva.
Saludos
12  Programación / .NET (C#, VB.NET, ASP) / Re: Duda acerca del calculo de combinaciones de numeros y letras en vb.net 2010 en: 22 Noviembre 2015, 09:46 am
Hola Arturoro.
No tengo muy claro lo que explicas ni como te ha salido el numero 40320.
Las combinaciones sin repetición de 8 elementos en grupos de 2 creo que serian algo como 7+6+5+4+3+2+1
En tu ejemplo:
7
AA,BB
AA,CC
AA,15
AA,EE
AA,20
AA,GG
AA,01
6
BB,CC
BB,15
BB,EE
BB,20
BB,GG
BB,01
5
CC,15
CC,EE
CC,20
CC,GG
CC,01
4
15,EE
15,20
15,GG
15,01
3
EE,20
EE,GG
EE,01
2
20,GG
20,01
1
GG,01

El problema que veo es que pones grupos de 8 donde deberias poner un 2
Public TamGrupos As Integer = 8 ' Tamaño de los grupos
De modo que solo te muestra 1 grupo con los 8 elementos

Saludos



13  Programación / Programación Visual Basic / Re: Ayuda para comparar dos archivos txt y extraer el contenido de uno de ellos?? en: 14 Julio 2015, 17:50 pm
Supongo que solo te falta añadir una linea para conseguir el valor que buscas.
Algo así en esta zona:

Código
  1. Do While fich2.atEndOfStream <> True
  2.  linea2=fich2.ReadLine
  3. ' Ahora mostramos la línea leída
  4.  wscript.echo linea2
  5. ' Parseamos los campos
  6.  campos = split(linea2,"#")
  7.  for each b in campos
  8.    wscript.echo "valor del campo: "&b
  9.  next
  10.  
  11.  if campos(0)=linea then valorbuscado=campos(1): exit do
  12.  
  13. Loop
  14.  
  15. wscript.echo linea
  16. wscript.echo linea2
  17.  
  18. wscript.echo valorbuscado
  19.  
  20.  

Saludos
14  Programación / Programación Visual Basic / Re: Ayuda Programa despues de cerrarlo se queda en 2do plano en: 12 Julio 2015, 09:14 am
Despues de cerrar las ventanas con unload añade End y se cerrara el programa.
Algo asi:

Código
  1. Unload form2
  2. Unload form1
  3. End

Saludos
15  Programación / Programación Visual Basic / Re: Pequeño reto en: 7 Julio 2015, 10:29 am
Algo debo estar haciendo mal, porque mi nombre no aparece en la lista de errores  :o

Código
  1. Private Function IsNumeric_PKJ(Cadena As String) As Boolean
  2.  Dim Valor As Variant
  3.  On Error GoTo Error1
  4.  Valor = CDbl(Cadena)
  5.  IsNumeric_PKJ = True
  6. Error1:
  7. End Function

O eso o 7913+pkj = 1Genius
EDIT: No, ahora me estoy fijando que 7913 no necesita socios :D
Su nombre tampoco aparece en la lista de fallos.
EDIT2:
En realidad hemos pensado lo mismo pero al revés.
Supongo que parece que lo he copiado, pero ha sido pura casualidad.
Intentaré buscar otro modo, aunque ya digo que esto esta muy trillado.

EDIT3:
Lo siento. Solo se me ocurren variantes de lo mismo.
Si lo que quiero es saber si es un número no se me ocurre nada mejor que esto, y ya que funciona creo que me conformaré:

Código
  1. Private Function IsNumeric_PKJ(Cadena As String) As Boolean
  2.  On Error GoTo Error1
  3.  If CDbl(Cadena) = 0 Or CDbl(Cadena) <> 0 Then IsNumeric_PKJ = True
  4. Error1:
  5. End Function
  6.  

Por cierto, pensaba que ninguna funcion superaba el test y resulta que hay varias que tampoco dan errores, solo que como no dan errores pasan desapercibidas y no lo habia notado. Por eso cuando me ha funcionado a la primera no me lo creia.
Copie la funcion de 7913 para evitarme escribir el encabezado y cuando vi que era parecida a lo que queria hacer, pense que habia mejorado esa funcion, cuando de por si ya funcionaba.
En fin, creo que darle mas vueltas es complicarse la vida.

Saludos
16  Programación / Programación Visual Basic / Re: Pequeño reto en: 7 Julio 2015, 09:55 am

Es lo que me animó a poner el reto.
Estuve mirando, e incluso he comentado algo, pero en general acabo mareado si intento descifrar los codigos :P
Trabajais con cosas que nunca he visto o que no entiendo y me hago un lio.

Si puedes superar esta te ganas mi respeto :).

He echado un vistazo y me parece que teneis el tema bien trillado. No creo que se me ocurra nada nuevo. Ni siquiera he usado nunca esa función IsNumeric :D
De todos modos, al menos lo voy a pensar. Igual salta la liebre.

Saludos
17  Programación / Programación Visual Basic / Re: Pequeño reto en: 6 Julio 2015, 20:27 pm
Buen trabajo, BlackZeroX, algo tarde pero muy bueno.

Solo he tenido que retocarla un pelín y es mucho mas rápida que la de muestra.
Parece incluso más rápida que la más rápida que he hecho yo :P

Código
  1. Function DimeQueHagoB(ByVal Valor1 As Long, ByVal Valor2 As Long, Bits As Byte) As Integer
  2.  
  3.  Dim lV3 As Long
  4.  
  5.  Dim iCount As Byte
  6.  
  7.  lV3 = (Valor1 Xor Valor2)
  8.  
  9.  If lV3 = 0 Then Exit Function
  10.  
  11.  If (Bits > 32) Then Bits = 32
  12.  
  13.  For iCount = 1 To Bits
  14.  
  15.    If (lV3 And &H1) Then
  16.  
  17.      DimeQueHagoB = DimeQueHagoB + 1
  18.  
  19.    ElseIf (lV3 = 0) Then
  20.  
  21.      Exit For
  22.  
  23.    End If
  24.  
  25.    lV3 = lV3 \ 2
  26.  
  27.  Next iCount
  28.  
  29. End Function
  30.  

En VB6 un Long tiene 32 bits, en VB.Net creo que son 64

¿Veis los demás como solo era ponerse?

Saludos
18  Programación / Programación Visual Basic / Re: Pequeño reto en: 6 Julio 2015, 10:15 am
Vaya decepción. Parece que ni siquiera lo habéis intentado.

Lo explicaré brevemente para no haceros perder vuestro tiempo. Las hice para un programa de reducciones 1X2.

La segunda función, la pequeña, compara 2 números binarios a partir de sus equivalentes decimales y devuelve las diferencias. Compara 2 dobles a partir de sus números de orden.

La primera función, la grande, hace lo mismo pero con 2 valores que representan dos potencias de 3. Compara 2 triples.

Las dos se pueden mejorar mucho, pero no voy a entrar en detalles.

Saludos
19  Programación / Programación Visual Basic / Re: Pequeño reto en: 16 Junio 2015, 20:34 pm
Para los que quieran intentarlo, aquí os dejo una pista.

Esta es su hermanita pequeña. La otra me costó más sacarla (que borrico).

Código
  1. Function DimeQueHagoB(ByVal Valor1 As Long, ByVal Valor2 As Long, Bits As Integer) As Integer
  2.  Dim Valor3 As Long
  3.  Dim F As Integer
  4.  
  5.  Valor3 = (Valor1 Xor Valor2)
  6.  
  7.  For F = 0 To Bits - 1
  8.    If Valor3 And (2 ^ F) Then DimeQueHagoB = DimeQueHagoB + 1
  9.  Next F
  10.  
  11. End Function
  12.  

Las dos las tengo ya mejoradas reemplazando las operaciones mas gordas por sus resultados.
Mas código pero más velocidad.

Espero que con esto al menos sepáis lo que son los Trits :D

Saludos
20  Programación / Programación Visual Basic / Pequeño reto en: 13 Junio 2015, 21:52 pm
Quiero proponeros una adivinanza y un reto:

Adivinanza: ¿Que hace esta función que he inventado?
Os dejo las variables con nombres descriptivos para que podais seguirla mejor.
Los mas iniciados seguro que lo adivinan en un vistazo y se ríen de mis métodos.
El caso es que a veces se me enciende la bombilla, pero parpadea mucho :P

Reto: Mejorar esta función. Fácil.

No es que tenga demasiado interés en que sea más rápida, aunque me gustaría ver el sistema que usaría alguien con conocimientos de matemáticas (o igual hay una API para esto :D). Yo en el colegio nunca presté atención :(

He pensado que son dos buenos retos.

Espero que os animéis muchos.
Si se me ocurre como, yo también la intentaré mejorar (bueno, mas rápido ya se me está ocurriendo: puedo quitar los xor si copio 2 veces el código... o quizás no).

Haced vuestras propias versiones una vez que sepais lo que hace.

Código
  1. Function DimeQueHago(ByVal Valor1 As Long, ByVal Valor2 As Long, Trits As Integer) As Long
  2.  Dim Acu As Integer
  3.  Dim Bloque As Long
  4.  Dim Bloque2 As Long
  5.  Valor1 = Valor1 + 1 ' yo lo uso sin
  6.  Valor2 = Valor2 + 1 ' estas 2 lineas
  7.  If Valor2 > Valor1 Then
  8.    Valor1 = Valor1 Xor Valor2
  9.    Valor2 = Valor1 Xor Valor2
  10.    Valor1 = Valor1 Xor Valor2
  11.  End If
  12.  Bloque = (3 ^ Trits) / 3
  13.  Do Until Bloque = 1
  14.    Bloque2 = Bloque * 2
  15.    If Valor1 > Bloque2 Then
  16.      Valor1 = Valor1 - Bloque2
  17.      If Valor2 > Bloque2 Then
  18.        Valor2 = Valor2 - Bloque2
  19.      Else
  20.        Acu = Acu + 1
  21.        If Valor2 > Bloque Then Valor2 = Valor2 - Bloque
  22.      End If
  23.      GoTo Sort
  24.    End If
  25.  
  26.    If Valor1 > Bloque Then
  27.      Valor1 = Valor1 - Bloque
  28.      If Valor2 > Bloque Then
  29.        Valor2 = Valor2 - Bloque
  30.      Else
  31.        Acu = Acu + 1
  32.      End If
  33.    End If
  34. Sort:
  35.    If Valor2 > Valor1 Then
  36.      Valor1 = Valor1 Xor Valor2
  37.      Valor2 = Valor1 Xor Valor2
  38.      Valor1 = Valor1 Xor Valor2
  39.    End If
  40.    Bloque = Bloque / 3
  41.  Loop
  42.  If Valor1 = Valor2 Then
  43.  Else
  44.    Acu = Acu + 1
  45.  End If
  46.  
  47.  DimeQueHago = Acu
  48.  
  49.  
  50. End Function
  51.  

Lo dicho. Animaos y usad el coco un poco.

Saludos

EDIT:

¿que pasa?
¿no os interesa?
¿estáis deliberando?
¿me he pasado con el reto?
Igual no es tan fácil como pensé.
¿queréis que diga la solución?
¿queréis una pista?
Páginas: 1 [2] 3 4 5 6
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines