Hola chicos, tengo un problema y no tengo ni idea de como hacerlo, los molesto porque quiero saber si alguien me puede ayudar a resolverlo simplemente para aprenderlo, porque es un tema que me tomarán en una examen (no me tomarán el enunciado, sí la metodología)
Bueno ahí vamos:
Con las cifras del año 2010, un usuario armó una contraseña. Averiguar esa contraseña sabiendo que es un número de cuatro dígitos (lo que da un total de 128 posibilidades), divisible por 11 donde, la suma de sus dígitos es igual a 2. Se deberán utilizar Funciones y Procedimientos para los diferentes procesos de cálculo y búsqueda del resultado.
Aclaro no es tarea, sino que simplemente estuve un buen rato tratando de resolver y no sé como coño puedo hacerlo, si alguien me puede dejar la resolución con un código no muy difícil de entender, sino simple
Gracias! ;)
PD: Lo que sí se es que hay que usar vectores, e ir swapeando (intercambiando) los valores del mismo hasta que se cumplan las condiciones pero no me sale hacerlo. Si pueden no poner códigos en inglés como he visto por allí, mejor ;D
Si puedes poner tus intentos y de ahí irlos corrigiendo mejor.
Saludos
Es que osea estuve tratando lo que dije, ir swapeando pero no me sale que swapee todas las veces que sean necesarias hasta que llegue a la condición a cumplir y muestre el número correspondiente :-\
usa el buscador, publique un codigo de combinaciones hace ya tiempo.
P.D.: Me suena a tarea!¡.
Dulces Lunas!¡.
No importa si es tarea o para examen,si alguien del foro soluciona esa pregunta me saco el sombrero :-(, nunca pude resolver ese tipo de pregunta y los profesores nunca dieron la solucion, "por que sera", siempre me quedo la duda si era joda lo que dejaban
Creo que sebaneo postio algo de combinaciones no hace mucho tiempo solo busca la combinacion y los comparas en todo caso hasta te sale con if anidado eso creo.. :P solo es inmaginacion y busqueda
Yo no lo veo tan dificil, la unica cifra que cumple con esas caracteristicas es 1001, y se puede sacar con un par de ciclos for sin problema.
Saludos
Cita de: rob1104 en 9 Agosto 2010, 20:28 PM
la unica cifra que cumple con esas caracteristicas es 1001
tengo una duda, 1100 no ?
y 0011?, y 0110?, etc...
No sé, en mi criterio en la pregunta dice un número de 4 cifras, no contariá los ceros por delante, esa es mi duda, sino seria un strng con 4 numeros.
jeje es un numero aqui y en china (los 0 solo son relleno, pero aun asi es un NUMERO)!¡.
Para el caso seria lo mismo, eso elevaria las posibilidades a 4 números (corrijanme si me equivoco), los 4 son divisibles por 11, tambien los 4 numeros son de 4 cifras y tambien la suma de las cifras de esos 4 números es 2, por lo tanto, Dreamaker, la forma de averiguar el password de ese usuario es el "ophcrack" :D
Te respondí en CPH :P
Aunque no creo que esté correcto pero como voy a mencionar más adelante, no entendí como lo planteas :P
Copy And Paste: :D
Me entretuve un rato, no se si entendí bien lo que planteas:
Me salió esto:
Private Sub Command1_Click()
Dim Bit() As String, A As Integer, B As Integer, C As Integer, D As Integer, E As Integer
Dim Total As String, Div11 As Long, SumaDig As Long
Bit = Split(StrConv("2010", vbUnicode), Chr(0))
For A = 0 To 1
For B = 0 To 1
For C = 2 To 3
For D = 2 To 3
Total = Bit(A) & Bit(B) & Bit(C) & Bit(D)
Div11 = Total / 11
SumaDig = 0
For E = 1 To Len(Div11)
SumaDig = SumaDig + Val(Mid(Val(Div11), E, 1))
Next
' Suma de digitos igual a 2
If SumaDig = 2 Then
List1.AddItem "Gen:> " & Total & " -Div11>" & Div11 & " -Suma>" & SumaDig
End If
DoEvents
Next: Next: Next: Next
MsgBox List1.ListCount
End Sub
Como que no me cuadra, podrías mencionar el sitio de donde sacaste el ejercicio ;)
SaluDOS!!!
Bueno paso a aclararle las dudas a los que les interesó, es formar un una contraseña sabiendo que es un número de 4 dígitos formado por las cifras del año 2010 por lo cual queda sobreentendido que como bien dijeron algunos no podrá empezar con "0012" o "0021" o similares sino con "1 o 2" para que tenga 4 dígitos, ya que a "01" se considera su parte entera como "1"
Vuelvo a aclarar que no es ninguna tarea para los que pensaron así (y sino vean mi trayectoria en el foro) y que es más, voy a revisar los códigos por ahí y tratar de hacerlo nuevamente, y cuando lo tenga hecho dejaré la solución para todos, si alguien lo consigue hacer y quiere dejar la solución para que lo vean los demás puede hacerlo que de seguro a más de uno le servirá y no sólo a mi ya que lo voy a hacer igual ;D
Bueno, ahora no estoy como para hacer de nuevo el code, creo que es como lo puse solo que hay que corregir los for por:
For A = 0 To 3
For B = 0 To 3
For C = 0 To 3
For D = 0 To 3
Eso genera 256 posibilidades, en realidad 128 como dice el ejercicio, pero fallé en algo por eso aparecen repetidas 2 veces..
Si analizas el code verás como funca ;)
SaluDOS!!!
Para mi hay 2 resultados
Private Sub Form_Load()
Dim x As Variant
Dim m As Double
Dim i As Byte
Dim suma As Byte
For x = 1000 To 2000
If InStr(1, x, "0") > 0 Or InStr(1, x, "1") > 0 Or InStr(1, x, "2") > 0 Then
m = x Mod 11
If m = 0 Then
suma = 0
For i = 1 To Len(x)
suma = suma + Mid(x, i, 1)
Next
If suma = 2 Then MsgBox x
End If
End If
Next
End Sub
para mi hay 4
Option Explicit
Private Sub Form_Load()
Dim ThisNumberNow As Integer
Dim StrNumber As String * 4
Dim IndexString As Byte
Dim Suma As Byte
For ThisNumberNow = 1 To 9999
If ThisNumberNow Mod 11 = 0 Then
StrNumber = Format(ThisNumberNow, "0000")
Suma = 0
For IndexString = 1 To Len(StrNumber)
Suma = Suma + Val(Mid(StrNumber, IndexString, 1))
Next
If Suma = 2 Then MsgBox StrNumber
End If
Next
End Sub
Cumple TODOS los criterios ( Jamas se dice que no puede estar compuesto por 0 antes xD )
P.D.: Tarea en Proceso xP.
Dulces Lunas!¡.
Ducles Lunas!¡.
Cita de: Dreamaker en 10 Agosto 2010, 05:29 AM
Bueno paso a aclararle las dudas a los que les interesó, es formar un una contraseña sabiendo que es un número de 4 dígitos formado por las cifras del año 2010 por lo cual queda sobreentendido que como bien dijeron algunos no podrá empezar con "0012" o "0021" o similares sino con "1 o 2" para que tenga 4 dígitos, ya que a "01" se considera su parte entera como "1"
Si, lo aclaró nuevamente, pero para el caso es lo mismo, un ejercicio para determinar un passwod tendria que tener un resultado solo , no ?
A mi solo me da una opcion posible, ¿se me estará pasando algo? Private Sub Form_Load()
Dim Div As Integer
Dim Num As String
Dim Suma As String
Dim Bucle1 As Integer
Dim Bucle2 As Integer
Suma = ""
Div = 2010 \ 11 'cant. de num divisibles por 11
For Bucle1 = 1 To Div
Num = 11 * Bucle1
If Num > 999 Then 'preguntamos si es de 4 cifras
For Bucle2 = 1 To Len(Num)
Suma = Val(Suma) + Val(Mid(Num, Bucle2, 1)) 'suma de sus digitos
If Suma = 2 Then
MsgBox Num
End If
Next
End If
Next
End Sub
HOLA!!!!
Yo lo hice con la funcion "mod" que devuelve el resto de la division:
For PASS = 1000 To 2222
If PASS Mod 11 = 0 Then 'SE FIJA QUE DIVISIONES DE PASS/11 DAN RESTO 0
If Val(Mid(PASS, 1, 1)) + Val(Mid(PASS, 2, 1)) + Val(Mid(PASS, 3, 1)) + Val(Mid(PASS, 1, 1)) = 2 Then ' SE FIJA SI LA SUMA DE LAS CIFRAS DA 2
MsgBox "LA CONTRASEÑA ES " & PASS ' DEVUELVE LA CONTRASEÑA
End If
End If
Next
Segun estas condiciones:
- 4 cifras (Quitando los ceros a la izquierda)
- Sus cifras suman 2
- Formado con 2,1,0
- Multiple de 11
El resultado seria este:
1001
1100
Algoritmo:
Private Sub Form_Load()
Dim i As Long
For i = 0 To 111
If SumDigits(1001 + i * 11) = 2 Then Debug.Print 1001 + i * 11
Next i
End Sub
Public Function SumDigits(ByVal lNumb As Long) As Long
Dim bvTmp() As Byte
Dim i As Long
bvTmp = StrConv(Trim$(Str$(lNumb)), vbFromUnicode)
For i = LBound(bvTmp) To UBound(bvTmp)
SumDigits = SumDigits + (bvTmp(i) - vbKey0)
Next i
End Function