Valores combinados

Estoy atascado con una rutina No acabo de dar con la composcion del bucle que me lo solucione a ver si tu me puedes ayudar:
Tengo un recordset con (n) registros quiero cargar en una tabla todas las combinaciones posibles con esos valores mejor si solo me da los resultados no repetidos.
Por ejemplo si tengo a- b -c tendria que devolverme a b c aa ab ac bb bc cc aaa aab aac abb abc acc bbb bbc bcc ccc, en este caso no se repiten las combinaciones pero si se repiten, tampoco es un problema insoluble me apañaria con eso, necesito poder hacerlo con cualquier numero de registros.

1 respuesta

Respuesta
1
Perdona por el retraso. Te adjunto la rutina en visual basic para hacer lo que pides; la rutina no devuelve combinaciones repetidas. La función Command1_Click es un ejemplo.
Pt:
En el caso de que modifiques la rutina o encuentres algún error ruego que me lo comuniques.
Rutina:
Private Sub Command1_Click()
Dim lista() As String, n As Integer
Dim contador As Integer
Dim resultado() As String
n = 5
List1.Clear
ReDim lista(0 To n) As String
For contador = 1 To n
lista(contador) = Chr(64 + contador)
Next
Combinatoria n, lista, resultado
End Sub
Sub Combinatoria(ByVal n As Integer, ByRef origen() As String, ByRef resultado() As String)
'rutina que halla las combinaciones posibles de elementos insertados
'en la tabla origen y las devuelve en la tabla resultado
Dim contador As Integer, contLetra As Integer, indiceP As Integer
Dim letraActual As String
ReDim resultado(0 To 1000) As String
contLetra = 1
indiceP = 0
Do
For contador = 1 To n
letraActual = origen(contLetra)
If UBound(resultado) < indice Then
ReDim Preserve resultado(indice + 1000)
End If
resultado(indice) = parcial + letraActual
List1.AddItem resultado(indice)
indice = indice + 1
contLetra = contLetra + 1
Next
contLetra = 1
parcial = resultado(indiceP)
indiceP = indiceP + 1
Loop Until Len(parcial) = n
ReDim Preserve resultado(0 To indice - 1)
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas