Permuta

Como hago para pasarles lo que tengo en un text1.text a la función de permuta de números, y como hago para que si le doy 6 números a combinar, dichas combinaciones me las muestre en grupos de 3, que no se repitan..

1 Respuesta

Respuesta
1
Podes por ejemplo llamarlo así
MSGBOX Permutar(text1.text)
Ok esa parte la entendí.. declare una variable como string y a esa variable le asigne lo que tenia text1.text, ahora el problema me da cuando necesito tratar cada combinación posible una por una.. osea quiero trabajar 123, y luego 132 y así sucesivamente...
Disculpame pensé que había utilizado vbCrLf (salto de linea) para separar cada permuta así que te adapte el código y te lo envío completo, espero que ahora si te sirva, saludos
///////////////////////////
Private Sub Form_Load()
Dim s As String
s = Permutar("123")
Dim vP() As String
' llamamos a la funcion split que corta en trozos
' el string que nos devuelve la funcion permuta
' fijate que el " " es el caracter que separa a cada
' Permuta
vP = Split(s, " ")
' luego recorremos el vector para lo que necesitemos
Dim i As Integer
For i = 0 To UBound(vP)
MsgBox "esta es la permuta " & vP(i)
Next
End Sub
Function Permutar(s As String) As String
Dim i As Integer
Dim s2 As String
Dim sOut As String
Dox s, Len(s), sOut
Permutar = Trim(sOut)
End Function
Sub AgregarCombinacion(ByRef s As String, sNew As String)
' no agrega elementos duplicados
If InStr(1, s, sNew) = 0 Then
s = s & sNew & " "
End If
End Sub
Sub Dox(ByRef s As String, m As Integer, ByRef sOut As String)
Dim s2 As String, x As Integer
s2 = s
If m > 2 Then
For x = 1 To m
Dox s2, m - 1, sOut
s2 = Desplazar(s2, m)
Next x
Else
AgregarCombinacion sOut, s
AgregarCombinacion sOut, Desplazar(s2, m)
End If
End Sub
Function Desplazar(ByRef s As String, m As Integer) As String
If Len(s) > m Then
sStg = Left(s, Len(s) - m) & Right(s, m - 1) & Mid(s, IIf(m = 2, Len(s), m) - 1, 1)
Else
sStg = Right(s, m - 1) & Left(s, 1)
End If
Desplazar = sStg
End Function
Trate y trate pero no pude hacer que me dijera cada uno de los elementos del array...
Acá te paso un código simple en base a lo que devuelve la función Permuta.
///////////////////////////
' definimos un arreglo de string
Dim vP() As String
' Llamamos a la función split que corta en trozos
' el string que nos devuelve la función permuta
' fíjate que el vbCrLf es el carácter que separa a cada
' Permuta
vP = Split(text1.txt, vbCrLf)
' luego recorremos el vector para lo que necesitemos
Dim i As Integer
For i = 0 To UBound(vP)
msbox "esta es la permuta " & vP(i)
Next
Te paso un código más copado
Agrega un modulo de clase y pegale el siguiente código y llamalo Permuta
////////////////////////////
Private oCol As Collection
Sub Permutar(s As String)
Dim i As Integer
Dim s2 As String
Dim sOut As String
Dox s, Len(s), sOut
End Sub
Function getCombinacion() As Collection
Set getCombinacion = oCol
End Function
Private Sub AgregarCombinacion(sNew As String)
' no agrega elementos duplicados
If Not Existe(sNew) Then
oCol.Add sNew, sNew
End If
End Sub
Private Function Existe(sNew As String) As Boolean
Existe = False
For Each x In oCol
If x = sNew Then
Existe = True
Exit For
End If
Next
End Function
Private Sub Dox(ByRef s As String, m As Integer, ByRef sOut As String)
Dim s2 As String, x As Integer
s2 = s
If m > 2 Then
For x = 1 To m
Dox s2, m - 1, sOut
s2 = Desplazar(s2, m)
Next x
Else
AgregarCombinacion s
AgregarCombinacion Desplazar(s2, m)
End If
End Sub
Private Function Desplazar(ByRef s As String, m As Integer) As String
If Len(s) > m Then
sStg = Left(s, Len(s) - m) & Right(s, m - 1) & Mid(s, IIf(m = 2, Len(s), m) - 1, 1)
Else
sStg = Right(s, m - 1) & Left(s, 1)
End If
Desplazar = sStg
End Function
Private Sub Class_Initialize()
Set oCol = New Collection
End Sub
Private Sub Class_Terminate()
Set oCol = Nothing
End Sub
///////////////////////
y para usarlo lo llamas asi
////////////////////////////
Private Sub Form_Load()
Dim oPermuta As New Permuta
oPermuta.Permutar ("123")
For Each x In oPermuta.getCombinacion
MsgBox "esta es la permuta " & x
Next
End Sub
////////////////////////

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas