Visual Basic para Aplicaciones - Algoritmo de permutación

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Algoritmo de permutación

Publicado por Ana (1 intervención) el 29/04/2014 23:41:18
Hola a todos

Necesito hacer un algoritmo de permutación que muesre todas las combinaciones posibles, pero que las haga dependiendo de un número que ingrese el usuario. Por ejemplo permutar 12345 tomando de 2 elementos, entonces saldrían:

12
13
14
15
21
23
24
25
31
32
34
35
41
... y así sucesivamente.

Encontré una entrada del 2007 (http://www.lawebdelprogramador.com/foros/Visual_Basic/892503-permutaciones.html#last) en el que proponían esto:

Coloca en un Form un TextBox con el número que quieres permutar (p.e. 12345) además un ListBox (para mostrar los resultados) y un CommandButton y le pones este codigo

Option Base 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Private Sub Command1_Click()
Dim x As Integer, i As Integer
Dim a() As String
x = Len(Text1)
ReDim a(x)
For i = 1 To Len(Text1)
a(i) = Mid(Text1, i, 1)
Next i
Permutaciones a(), x, x
MsgBox List1.ListCount & " permutaciones."
End Sub
 
Sub Permutaciones(a() As String, j, k As Integer)
Dim i As Integer, s As String, sTemp As String
If j = 1 Then
For i = 1 To k
s = s & a(i)
Next i
List1.AddItem s
Else
For i = 1 To j
sTemp = a(i)
a(i) = a(j)
a(j) = sTemp
Permutaciones a, j - 1, k
sTemp = a(j)
a(j) = a(i)
a(i) = sTemp
Next i
End If
End Sub

Aquí salen todas las permutaciones del número de elementos que se ingresen, ejemplo: 1234, arroja:

1234
1243
1342
1324
1432
1423
2341
2314
2413
... y así sucesivamente.

¿Hay forma de modificar el algoritmo?

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JuanC

Algoritmo de permutación

Publicado por JuanC (565 intervenciones) el 29/04/2014 23:53:26
te hice un pequeño código, espero te sirva... (los detalles te los dejo de tarea...)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Option Explicit
Option Base 1
 
Sub test()
Dim num$, per$
Dim n%, p$, s$, i%, j%
 
num = "12345"
n = 5
 
For i = 1 To n
    p = Mid(num, i, 1)
    For j = 1 To n
        If j <> i Then
           s = Mid(num, j, 1)
           per = p & s
        End If
    Next
Next
 
End Sub

Saludos, desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar