Tous les anagrammes d'un mot ( combinatoire + permutation )

Soyez le premier à donner votre avis sur cette source.

Vue 56 451 fois - Téléchargée 1 332 fois

Description

Voici un petit programme qui renvoit dans un tableau passer by ref dans une procédure toutes les combinaisons possibles des lettres d'un mot.
Le traitement est plutôt rapide : 26 secondes sur mon Pii-300 196 Mo de ram pour traiter un mot de 7 lettres ( soit 7! = + de 5000 combinaisons ), sachant que c'est beaucoup plus rapide sans le DoEvents
Un petit exemple :

Call AnnaGramme("voie",tbl())

renverra dans le tableau tbl redimmensionner à Factorielle de 4 = 24 cases les mots suivants :
voie
voei
vioe
vieo
veoi
veio
ovie
ovei
oive
oiev
oevi
oeiv
ivoe
iveo
iove
ioev
ievo
ieov
evoi
evio
eovi
eoiv
eivo
eiov

Dans le zip un exemple d'utilisation de la procédure.

A partir de 8 lettres le programme dans le zip bug. Ca ne vient pas de ma routine mais plutôt du fait que les listbox ne peuvent pas accepter plus de 32767 entrées et qu'il y a plus de 40000 anagrammes d'un mot de 8 lettres.

Voici la procédure AnnaGramme en question :

Source / Exemple :


Option Base 1

Private Sub AnnaGramme(mot As String, ByRef tablo() As String)

    Dim longueur  As Byte
    Dim i         As Byte
    Dim l         As Double
    Dim k         As Byte
    Dim j         As Double
    Dim motTab()  As String * 1
    Dim annaTab() As String
    Dim tempmot   As String
    Dim temptab() As String
    Dim lenTab    As Double
    Dim pos       As Double
    Dim Find      As Boolean
   
    longueur = Len(mot)
    
    If longueur = 1 Then
        ReDim tablo(1)
        tablo(1) = mot
        Exit Sub
    End If
    
    ReDim motTab(longueur)
    
    For i = 1 To longueur
        
        motTab(i) = Mid(mot, i, 1)
        
    Next i
    
    lenTab = Fac(longueur)
    
    ReDim annaTab(lenTab)
    
    For i = 1 To longueur
        
        tempmot = vbNullString
        
        Find = False
        
        For k = 1 To longueur
            If Find Then
                tempmot = tempmot & motTab(k)
            Else
                If motTab(k) = motTab(i) Then
                    Find = True
                Else
                    tempmot = tempmot & motTab(k)
                End If
            End If
        Next k
     
        If Len(tempmot) = 1 Then
            ReDim temptab(1)
            temptab(1) = tempmot
        Else
            Call AnnaGramme(tempmot, temptab())
        End If
        
        For j = 1 To lenTab / longueur
            For l = 1 To UBound(temptab())
                annaTab(l + pos) = motTab(i) & temptab(l)
            Next l
            DoEvents
        Next j
        
        pos = pos + lenTab / longueur
        
    Next i
    
    tablo() = annaTab()

End Sub

Private Function Fac(Number As Byte) As Double

    Dim i As Byte
    Dim a As Double
    
    a = 1
    
    For i = 1 To Number
        a = a * i
    Next i
    
    Fac = a

End Function

Conclusion :


Voir la source de Bricomix :

http://www.vbfrance.com/article.aspx?Val=8419

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
2
Date d'inscription
jeudi 1 juillet 2004
Statut
Membre
Dernière intervention
19 juin 2010

Bonjour, merci pour ta réponse, j'ai bien compris que ce programme ne choisissait pas et j'espère pourvoir ce choix moi même, j'ai aussi compris qu'il générait des mots qui existes et surtout (et c'est ça qui m'interesse) qui n'existe pas.
En effet je souhaite editer une liste mots issu d'une combinaisont de lettres et choisir dans cette derniére celui qui me plais.
Cependant je ne sais comment utiliser ce logiciel!
Messages postés
908
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
2
bonjour viier,

ce programme ne permet pas de choisir : il renvoit tous les mots, même ceux qui "n'existent" pas dans le langage... je pense qu'il existe des logiciels gratuits et mieux conçus qui répondent mieux à tes besoins
Messages postés
2
Date d'inscription
jeudi 1 juillet 2004
Statut
Membre
Dernière intervention
19 juin 2010

Bonjour, je suis un utilisateur lambda d'ordinateur.
je souhaiterai utilisé ce code source pour en sortir une liste de mots existant ou n'existant pas ce qui semble pouvoir faire cependant aprés avoir télécharger ce dernier je ne sais que faire des fichiers obtenus et comment "lancer" celui-ci?

merci par avance d'une aide qui serai bienvenu.
Messages postés
362
Date d'inscription
mardi 18 décembre 2001
Statut
Membre
Dernière intervention
24 août 2012

bravo, c'est exactement ce que je cherchais lol ( :o je parie que tu avais deviné )
Messages postés
1
Date d'inscription
dimanche 14 novembre 2004
Statut
Membre
Dernière intervention
14 novembre 2004

salut Alain ,
c pas mal continue ton tonton de jacou
Afficher les 33 commentaires

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.