De entrada gracias por leer esto. Mi pregunta es la siguiente.
Hice un programa que genera todas las combinaciones posibles con "2" "3" "4" "5" "6" y "7" caracteres el problema es que tarda demasiado alguien sabe como acelerar el proceso. este es el codigo.
Necesita 11 LABEL
Un listbox
Un timer con intervalo de 100 (inicia enabled "false")
Y tres botones
Public mil As Integer
Public seg As Integer
Public min As Integer
Public hor As Integer
Public cont As Long
Public detener As Boolean
Private Sub Command1_Click()
'Programa que genera todas las combinaciones posibles con "2","3","4","5","6", y "7"
'caracteres el metodo es un poco tardado pero solo asi he logrado generarlo
'Si deseas que se formen combinaciones con mas de "7" caracteres solo sigue la misma
'estructura
'Creado por Sergio Uziel Tovar Lemus
Timer1.Enabled = True
Label5.Caption = "Procesando"
Command2.Enabled = False
Command3.Enabled = True
detener = False
cont = 0
'Comienza a generar combinaciones con dos caracteres
For chr_uno = Asc("a") To Asc("z")
For chr_dos = Asc("a") To Asc("z")
List1.AddItem Chr(chr_uno) & Chr(chr_dos) & Chr(chr_tres) & Chr(chr_cuatro) & Chr(chr_cinco) & Chr(chr_seis) & Chr(chr_siete)
cont = cont + 1
Label2.Caption = cont
If detener = True Then
Command2.Enabled = True
Command3.Enabled = False
MsgBox "El proceso ha sido detenido por el usuario." & vbCrLf & vbCrLf & "Resultados obtenidos." & vbCrLf & vbCrLf & "Numeros de combinaciones: " & cont & vbCrLf & vbCrLf & "Tiempo transcurrido" & vbCrLf & Label6.Caption & vbCrLf & Label7.Caption & vbCrLf & Label8.Caption & vbCrLf & Label9.Caption & vbCrLf & vbCrLf & "Porcentaje del proceso: " & ProgressBar1.Value & "% de un 100% posible", vbInformation, "Informacion para el usuario"
mil = 0
seg = 0
min = 0
hor = 0
Label6.Caption = "Horas: " & hor
Label7.Caption = "Minutos: " & min
Label8.Caption = "Segundos: " & seg
Label9.Caption = "Milesimas: " & mil
List1.Clear
Label2.Caption = List1.ListCount
Label5.Caption = "Detenido por el usuario"
ProgressBar1.Value = 0
Exit Sub
End If
DoEvents
Next chr_dos
DoEvents
Next chr_uno
ProgressBar1.Value = ProgressBar1.Value + 18.3
'Ahora hace las combinaciones con tres caracteres
For chr_uno = Asc("a") To Asc("z")
For chr_dos = Asc("a") To Asc("z")
For chr_tres = Asc("a") To Asc("z")
List1.AddItem Chr(chr_uno) & Chr(chr_dos) & Chr(chr_tres) & Chr(chr_cuatro) & Chr(chr_cinco) & Chr(chr_seis) & Chr(chr_siete)
cont = cont + 1
Label2.Caption = cont
If detener = True Then
Command2.Enabled = True
Command3.Enabled = False
MsgBox "El proceso ha sido detenido por el usuario." & vbCrLf & vbCrLf & "Resultados obtenidos." & vbCrLf & vbCrLf & "Numeros de combinaciones: " & cont & vbCrLf & vbCrLf & "Tiempo transcurrido" & vbCrLf & Label6.Caption & vbCrLf & Label7.Caption & vbCrLf & Label8.Caption & vbCrLf & Label9.Caption & vbCrLf & vbCrLf & "Porcentaje del proceso: " & ProgressBar1.Value & "% de un 100% posible", vbInformation, "Informacion para el usuario"
mil = 0
seg = 0
min = 0
hor = 0
Label6.Caption = "Horas: " & hor
Label7.Caption = "Minutos: " & min
Label8.Caption = "Segundos: " & seg
Label9.Caption = "Milesimas: " & mil
List1.Clear
Label2.Caption = List1.ListCount
Label5.Caption = "Detenido por el usuario"
ProgressBar1.Value = 0
Exit Sub
End If
DoEvents
Next chr_tres
DoEvents
Next chr_dos
DoEvents
Next chr_uno
ProgressBar1.Value = ProgressBar1.Value + 18.3
'Ahora hace las combinaciones con cuatro caracteres
For chr_uno = Asc("a") To Asc("z")
For chr_dos = Asc("a") To Asc("z")
For chr_tres = Asc("a") To Asc("z")
For chr_cuatro = Asc("a") To Asc("z")
List1.AddItem Chr(chr_uno) & Chr(chr_dos) & Chr(chr_tres) & Chr(chr_cuatro) & Chr(chr_cinco) & Chr(chr_seis) & Chr(chr_siete)
cont = cont + 1
Label2.Caption = cont
If detener = True Then
Command2.Enabled = True
Command3.Enabled = False
MsgBox "El proceso ha sido detenido por el usuario." & vbCrLf & vbCrLf & "Resultados obtenidos." & vbCrLf & vbCrLf & "Numeros de combinaciones: " & cont & vbCrLf & vbCrLf & "Tiempo transcurrido" & vbCrLf & Label6.Caption & vbCrLf & Label7.Caption & vbCrLf & Label8.Caption & vbCrLf & Label9.Caption & vbCrLf & vbCrLf & "Porcentaje del proceso: " & ProgressBar1.Value & "% de un 100% posible", vbInformation, "Informacion para el usuario"
mil = 0
seg = 0
min = 0
hor = 0
Label6.Caption = "Horas: " & hor
Label7.Caption = "Minutos: " & min
Label8.Caption = "Segundos: " & seg
Label9.Caption = "Milesimas: " & mil
List1.Clear
Label2.Caption = List1.ListCount
Label5.Caption = "Detenido por el usuario"
ProgressBar1.Value = 0
Exit Sub
End If
DoEvents
Next chr_cuatro
DoEvents
Next chr_tres
Next chr_dos
DoEvents
Next chr_uno
ProgressBar1.Value = ProgressBar1.Value + 18.3
'Ahora comenzamos con cinco caracteres
For chr_uno = Asc("a") To Asc("z")
For chr_dos = Asc("a") To Asc("z")
For chr_tres = Asc("a") To Asc("z")
For chr_cuatro = Asc("a") To Asc("z")
For chr_cinco = Asc("a") To Asc("z")
List1.AddItem Chr(chr_uno) & Chr(chr_dos) & Chr(chr_tres) & Chr(chr_cuatro) & Chr(chr_cinco) & Chr(chr_seis) & Chr(chr_siete)
cont = cont + 1
Label2.Caption = cont
If detener = True Then
Command2.Enabled = True
Command3.Enabled = False
MsgBox "El proceso ha sido detenido por el usuario." & vbCrLf & vbCrLf & "Resultados obtenidos." & vbCrLf & vbCrLf & "Numeros de combinaciones: " & cont & vbCrLf & vbCrLf & "Tiempo transcurrido" & vbCrLf & Label6.Caption & vbCrLf & Label7.Caption & vbCrLf & Label8.Caption & vbCrLf & Label9.Caption & vbCrLf & vbCrLf & "Porcentaje del proceso: " & ProgressBar1.Value & "% de un 100% posible", vbInformation, "Informacion para el usuario"
mil = 0
seg = 0
min = 0
hor = 0
Label6.Caption = "Horas: " & hor
Label7.Caption = "Minutos: " & min
Label8.Caption = "Segundos: " & seg
Label9.Caption = "Milesimas: " & mil
List1.Clear
Label2.Caption = List1.ListCount
Label5.Caption = "Detenido por el usuario"
ProgressBar1.Value = 0
Exit Sub
End If
DoEvents
Next chr_cinco
DoEvents
Next chr_cuatro
DoEvents
Next chr_tres
Next chr_dos
DoEvents
Next chr_uno
ProgressBar1.Value = ProgressBar1.Value + 18.3
'Con seis caracteres
For chr_uno = Asc("a") To Asc("z")
For chr_dos = Asc("a") To Asc("z")
For chr_tres = Asc("a") To Asc("z")
For chr_cuatro = Asc("a") To Asc("z")
For chr_cinco = Asc("a") To Asc("z")
For chr_seis = Asc("a") To Asc("z")
List1.AddItem Chr(chr_uno) & Chr(chr_dos) & Chr(chr_tres) & Chr(chr_cuatro) & Chr(chr_cinco) & Chr(chr_seis) & Chr(chr_siete)
cont = cont + 1
Label2.Caption = cont
If detener = True Then
Command2.Enabled = True
Command3.Enabled = False
MsgBox "El proceso ha sido detenido por el usuario." & vbCrLf & vbCrLf & "Resultados obtenidos." & vbCrLf & vbCrLf & "Numeros de combinaciones: " & cont & vbCrLf & vbCrLf & "Tiempo transcurrido" & vbCrLf & Label6.Caption & vbCrLf & Label7.Caption & vbCrLf & Label8.Caption & vbCrLf & Label9.Caption & vbCrLf & vbCrLf & "Porcentaje del proceso: " & ProgressBar1.Value & "% de un 100% posible", vbInformation, "Informacion para el usuario"
mil = 0
seg = 0
min = 0
hor = 0
Label6.Caption = "Horas: " & hor
Label7.Caption = "Minutos: " & min
Label8.Caption = "Segundos: " & seg
Label9.Caption = "Milesimas: " & mil
List1.Clear
Label2.Caption = List1.ListCount
Label5.Caption = "Detenido por el usuario"
ProgressBar1.Value = 0
Exit Sub
End If
DoEvents
Next chr_seis
DoEvents
Next chr_cinco
DoEvents
Next chr_cuatro
DoEvents
Next chr_tres
Next chr_dos
DoEvents
Next chr_uno
ProgressBar1.Value = ProgressBar1.Value + 18.3
'Finalmente con siete
For chr_uno = Asc("a") To Asc("z")
For chr_dos = Asc("a") To Asc("z")
For chr_tres = Asc("a") To Asc("z")
For chr_cuatro = Asc("a") To Asc("z")
For chr_cinco = Asc("a") To Asc("z")
For chr_seis = Asc("a") To Asc("z")
For chr_siete = Asc("a") To Asc("z")
List1.AddItem Chr(chr_uno) & Chr(chr_dos) & Chr(chr_tres) & Chr(chr_cuatro) & Chr(chr_cinco) & Chr(chr_seis) & Chr(chr_siete)
cont = cont + 1
Label2.Caption = cont
If detener = True Then
Command2.Enabled = True
Command3.Enabled = False
MsgBox "El proceso ha sido detenido por el usuario." & vbCrLf & vbCrLf & "Resultados obtenidos." & vbCrLf & vbCrLf & "Numeros de combinaciones: " & cont & vbCrLf & vbCrLf & "Tiempo transcurrido" & vbCrLf & Label6.Caption & vbCrLf & Label7.Caption & vbCrLf & Label8.Caption & vbCrLf & Label9.Caption & vbCrLf & vbCrLf & "Porcentaje del proceso: " & ProgressBar1.Value & "% de un 100% posible", vbInformation, "Informacion para el usuario"
mil = 0
seg = 0
min = 0
hor = 0
Label6.Caption = "Horas: " & hor
Label7.Caption = "Minutos: " & min
Label8.Caption = "Segundos: " & seg
Label9.Caption = "Milesimas: " & mil
List1.Clear
Label2.Caption = List1.ListCount
Label5.Caption = "Detenido por el usuario"
ProgressBar1.Value = 0
Exit Sub
End If
DoEvents
Next chr_siete
DoEvents
Next chr_seis
DoEvents
Next chr_cinco
DoEvents
Next chr_cuatro
DoEvents
Next chr_tres
Next chr_dos
DoEvents
Next chr_uno
Command2.Enabled = True
ProgressBar1.Value = ProgressBar1.Value + 18.3
Label5.Caption = "Terminado"
Timer1.Enabled = False
mil = 0
seg = 0
min = 0
hor = 0
Label6.Caption = "Horas: " & hor
Label7.Caption = "Minutos: " & min
Label8.Caption = "Segundos: " & seg
Label9.Caption = "Milesimas: " & mil
MsgBox "El proceso ha terminado satisfactoriamente." & vbCrLf & vbCrLf & "Resultados obtenidos." & vbCrLf & vbCrLf & "Numeros de combinaciones: " & cont & vbCrLf & vbCrLf & "Tiempo transcurrido" & vbCrLf & Label6.Caption & vbCrLf & Label7.Caption & vbCrLf & Label8.Caption & vbCrLf & Label9.Caption & vbCrLf & vbCrLf & "Porcentaje del proceso: " & ProgressBar1.Value & "% de un 100% posible", vbInformation, "Informacion para el usuario"
mil = 0
seg = 0
min = 0
hor = 0
Label6.Caption = "Horas: " & hor
Label7.Caption = "Minutos: " & min
Label8.Caption = "Segundos: " & seg
Label9.Caption = "Milesimas: " & mil
List1.Clear
Label2.Caption = List1.ListCount
Label5.Caption = "Detenido por el usuario"
ProgressBar1.Value = 0
End Sub
Private Sub Command2_Click()
Label5.Caption = "Limpiando"
List1.Clear
Label2.Caption = List1.ListCount
Label5.Caption = "Detenido"
End Sub
Private Sub Command3_Click()
detener = True
Timer1.Enabled = False
End Sub
Private Sub Command8_Click()
End Sub
Private Sub Command9_Click()
End Sub
Private Sub Form_Load()
Label1.Caption = "combinaciones generadas: "
Label2.Caption = List1.ListCount
Label6.Caption = "Horas: " & hor
Label7.Caption = "Minutos: " & min
Label8.Caption = "Segundos: " & seg
Label9.Caption = "Milesimas: " & mil
End Sub
Private Sub Timer1_Timer()
mil = mil + 1
Label6.Caption = "Horas: " & hor
Label7.Caption = "Minutos: " & min
Label8.Caption = "Segundos: " & seg
Label9.Caption = "Milesimas: " & mil
If mil = 10 Then
mil = 0
seg = seg + 1
If seg = 60 Then
seg = 0
min = min + 1
If min = 60 Then
min = 0
hor = hor + 1
End If
End If
End If
End Sub
Pues la verdad ni me moleste en revisar el codigo y no quiero ser grocero con eso pero es que no utilizaste las etiquetas code..
Y es muy complicado asi...
Algunos te diran que el VB es muy lento..
Salu2..!!
PD: utiliza las etiquetas y te ayudo...
Yo soy nuevo en programacion asi que todo es bienvenido
Me podris decir cuales son las etiquetas code
Es dificil de hacer esto pero ahi va:
[ code]
Private sub form_load ()
[/ code]
PD: Quitale los espacios...
Para ser nuevo en programación, menudo source manejas :P
El código ese me parece una chapuza (no es por desanimar) pero repites el código muchas veces el mismo, haces bucles sucesivos para mismas cosas, el tiempo es mejor sacar la hora del sistema al iniciar y luego ir sacando la hora del sistema y restarla.
Yo no soy un experto en fuerza bruta, pero he visto códigos de 30 lineas que trabajaban con matrices que les pasabas una cadena con caracteres posibles y numero máximo de caracteres resultantes y te lo calculaban todo a velocidades inusuales en vb.
Le pasabas a la función:
X("abcdefghijklmnopqrstuvwxyz1234567890",9)
y lo demás lo hacia ella sola.
No se donde la vi, mañana intento mejorar tu code si tengo tiempo.
De Echo es mas correcto usar las etiquetas
[ c o d e = vb ]
Sub ModuleExcel()
MsgBox "Hola mundo", vbCritical, "Perrin"
End Sub
[ / c o d e ]
Las podras encontrar en la lista desplegable donde dice por default GeSHi
Sep tambien perooo...
Al hacer copy & paste se deforma el code..
Es mejor para codes pequeños...
Hola acabo de crear un code con:
1 TextBox
1 Timer
Y 0 Lag...
Genera Numeros tales como:
944228846138855337157339976448264336133311773592774422684614886633815733997725927641377553399572599664482684311883593775522994724886644816834724996644826836118855137155329946248866448168351177559379547744926944228836138155331157352188661374492694488664475422694625757229977242711885927644226843379572299762482664311115835997755927944228846148865331157359461488663381573399772592794422883613885533715721381553249266442168361188551379552299683613885533795722997724926644661481683311873593775422794622886613815833197725927744226846664411683613875533795722997624816633115868461188551371553399572722996624816833117735937755226946228859977542279462273599775492694422884614815533195725997744826844118835422994624886643815833117735937744229846148866338157339977259277442299462488663381583319772592886633115835197755927944229846147259279442299461481886695137755227947249866448168331187359377553279472499664481683311883518897754926946228866138155339957259977448265532794722997624826644116835117755337957226633815833197725927744229846148866338158331177359277442299462488653371573399772592664422884614886633815733997725927644228846148855337957329
En menos de 10 segundos... Claro esa no es la idea pero ustedes me diran...
PD: Espero a tughack por aqui...
Salu2..!!
Bue, lo dejo porque aunque lo mejore no sera eficiente.
Yo empezaria por aqui....
Dim I As Long, cadena As String, num As Integer, pr() As String
cadena = "abcdefghijklmnopqrstuvwxyz"
num = 3
'combinaciones = len(cadena) ^ num
ReDim pr(Len(cadena))
For I = 1 To Len(cadena)
pr(I) = Mid(cadena, I, 1)
Next I
Ese code no lo entiendo...
Yo se que es demasado codigo poro es la unica forma que se me ocurrio