Generateur de mot à partir d'une chaine (recursive)

Contenu du snippet

ce code premet de generer de smot a partir d'une serie de lettre
ex : "abc" donne aaa, aab,aac,aba,abc etc ..

la fonction est une fonction recursive
l'avantage de cette source est que pour une chaine de 8 lettres, il n'y a pas besoin d'imbriquer 8 boucles

Maj la mise a jour permet de choisir le nombre de lettre en sorti
ex : abc avec 3,3 = aaa,aab,aac,aba etc ..
abc avec 3,2 = aa,ab,ac etc ..

ATTENTION : ce code de mande pas mal de memoire vive si l'on veut bcp de lettre

Voila
desole c'est du code vba donc pas d'interface

Source / Exemple :


Public Sub AppelleGeneMot()
Dim chaine As String
Dim PosLettre(1 To 3) As Integer 'initiale un tableau de n case pour un mot à n lettre
chaine = ""
PosLettre(1) = 1
PosLettre(2) = 1
PosLettre(3) = 1
'le premier chiffre correspond au nombre lettre de la chaine ex abc = 3
' le deuxieme correspond au nombre de lettre voulue en sortie ex 3= aaa,aab,aac 2=aa,ab,ac
GeneMot "abc", PosLettre, chaine, 3, 3
MsgBox chaine
End Sub
Public Function GeneMot(chaine As String, PosLettre As Variant, ch As String, LongeurChaine As Integer, nbLettreVoulue As Integer)

While PosLettre(1) < LongeurChaine + 1
    
    For l = 1 To nbLettreVoulue
        a = a & Mid(chaine, PosLettre(l), 1)
    Next l
    ch = ch & a & Chr(13)
    
    For m = nbLettreVoulue To 1 Step -1
        If PosLettre(m) = LongeurChaine Then
            If m <> 1 Then
                PosLettre(m) = 1
            Else
                PosLettre(m) = PosLettre(m) + 1
            End If
        Else
            PosLettre(m) = PosLettre(m) + 1
            Exit For
        End If
    Next m
    GeneMot chaine, PosLettre, ch, LongeurChaine, nbLettreVoulue
Wend
End Function

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.