begin process at 2012 02 13 21:03:06
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths

 > TOUS LES ANAGRAMMES D'UN MOT ( COMBINATOIRE + PERMUTATION )

TOUS LES ANAGRAMMES D'UN MOT ( COMBINATOIRE + PERMUTATION )


 Information sur la source

Note :
7,75 / 10 - par 4 personnes
7,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths Classé sous :anagramme, combinatoire, permutation, combinaison, mot Niveau :Initié Date de création :12/04/2003 Date de mise à jour :26/02/2010 09:22:57 Vu / téléchargé :50 785 / 1 081

Auteur : Alain Proviste

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (33)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
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
i evo
ieov
evoi
evio
eovi
eoiv
eivo
eiov

D ans 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

  • 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
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

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

04 décembre 2004 02:06:25 :
orthographe
26 février 2010 09:22:57 :
rien

 Sources du même auteur

Source .NET (Dotnet) SAVOIR SI UNE FENETRE EST VISIBLE DANS LA BARRE DE TACHE ( ....
Source avec Zip TUTORIAL VB6 : UN CARNET D'ADRESSE / REPERTOIRE TELEPHONIQUE
Source .NET (Dotnet) EXECUTER EN TANT QUE EN .NET
Source .NET (Dotnet) FONCTION D'ACKERMAN
Source avec Zip Source .NET (Dotnet) VB.NET : DRAG & DROP DE FICHIER 'PAR EXEMPLE DEPUIS LE BURE...

 Sources de la même categorie

Source avec Zip Source avec une capture CONVERTISSEUR HEXAVIGÉSIMAL par shaeks
Source avec Zip Source avec une capture Source .NET (Dotnet) CRYPTOGRAPHIE AFFINE par Tigrou66
Source avec Zip Source avec une capture SCANNER FLEX par lajouad
Source avec Zip EQUATIONSECONDDEGRÉ,MATH,DEGRÉ par shadkitenge
Source avec Zip Source .NET (Dotnet) SOMME DE CHIFFRES CONTENUE DANS UN NOMBRE par alpha5

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture DICTIONNAIRE DU SCRABBLE par Sinsitrus
Source .NET (Dotnet) ORDRE ALPHABÉTIQUE par michael59330
Source avec Zip Source .NET (Dotnet) REPRESENTATION GRAPHIQUE D'UN MOT par ShayW
Source avec Zip Source avec une capture Source .NET (Dotnet) DÉTECTION DES MOTS DANS UN TEXTBOX OU UN RICHTEXTBOX AU PASS... par XDarwin
Source avec Zip Source avec une capture ANAGRAMMES par optimist

Commentaires et avis

Commentaire de Ricpperso le 12/04/2003 21:34:54

pas trés interressant, car, sa melange uniquement les lettres, rien de plus, ca en forme pas des mots a partir d'autres mots.

Commentaire de Alain Proviste le 12/04/2003 21:38:25 administrateur CS

ouais je sais je l'ai marqué que ca servait à rien patate. C'est l'algo qui est interressant patate.

Commentaire de DeAtHCrAsH le 12/04/2003 22:15:54

Rien qu'une petite remarque ... Prend ton dico et regarde la definition du mot anagrame .... Un anagrame est une combinaison de lettre qui selon leur positions, forment un mot qui existe .. et non pas ce que tu as fait ... =)

Commentaire de DeAtHCrAsH le 12/04/2003 22:33:49

LoooooL ... Je critique pas ta source coco =)
Le code est peut etre bien... Mais ton titre est mal choisi ...

Commentaire de wbr le 12/04/2003 23:00:12

Ton prog il est bien je trouve, ça me servira probablement jamais mais je l'aime!

De l'art qu'on dit lol ;)

Commentaire de MPi le 13/04/2003 04:59:52

3 tableaux, 10 variables...
il me semble qu'on aurait pu faire mieux...

mais c'est un bel effort et ça donne une vitesse d'exécution quand même bonne.

Commentaire de Nestor le 13/04/2003 11:06:23

MANQUE DE COMMANTAIRES !!!!!!

2/10

Commentaire de Nestor le 13/04/2003 16:09:27

alors 1/10 :D

Commentaire de wbr le 13/04/2003 16:12:50

Un ptit 10 ça va peut-être pouvoir réajuster la connerie de Nestor! Dites, ya que moi qui l'aime cette source?

Commentaire de DeAtHCrAsH le 13/04/2003 17:15:35

Un deuxieme petit 10 de quoi remonter tout ca ...
NESTOR> COmme on dis charité bien ordonné commence par sois meme " ... Alors avant de de poser tes commentaires bidon, montre nous ce que tu vaut =)

Commentaire de Bricomix le 13/04/2003 17:58:15

C'est très bien mais ...

Je viens d'en faire un en environ 30 minutes, beaucoup plus rapide :
- le tiens met 2.9 secondes sur mon ordi pour faire un mot de 7 lettres
- le miens met 0.06 scondes sur mon ordi pour faire un mot de 7 lettres, et 0.33 secondes pour faire un mot de 8 lettres (ce qui donne 40320 mots à la fin...)

Si vous le voulez, demander le moi en-dessous pour que je poste le mien.

Commentaire de wbr le 13/04/2003 19:24:51

Pourquoi pas

Commentaire de Alain Proviste le 13/04/2003 19:34:02 administrateur CS

je veux bien voir parce que 0.33 secondes pour 40000 mots ce serait pas mal. ( moi pour 8 lettres ça met 20 minutes sur mon 300 lol )

Commentaire de Ricpperso le 13/04/2003 19:37:12

bon, d'abors alain proviste, certe c'est un site de code, mais, faut aussi que les sujets collent avec les progs.

De plus, tu n'accepte pas les critiques, alors dehors.

Certe l'algo est bien, mais, moi je parle du prog, pas de l'algo, l'algo de plus peut être amélioré.

Autre chose, commenté n'est pas unitile mais bien, en effet, même si t'es comme moi ou d'autre, autodydacte, trés bien, mais tous le monde ne l'est pas, il y a plein de novice.

Dernière chose, sache que je ne t'es aps mis de note, car je voulais pas te rabaisser.

Sinon bonne continuation, tes autres progs sont pas mal.

aller je te mets un 7/10. ;)

Commentaire de Bricomix le 14/04/2003 10:32:28

C'est bon, la source est dispo ici : http://www.vbfrance.com/article.aspx?Val=8419

Venez la tester, et comparez la avec celle-ci SVP !

Commentaire de Seb_d_angers le 14/04/2003 11:11:32

Ricpperso  > "Autre chose, commenté n'est pas unitile mais bien, en effet, même si t'es comme moi ou d'autre, autodydacte, trés bien, mais tous le monde ne l'est pas, il y a plein de novice"

Permet moi de te dire que les commentaires ne servent pas qu'aux novices... dis toi qu'il peuvent meme te servir à toi, toi qui a créer ton propre soft !!!! Bah oui, reviens sur un programme que tu as fais il y a quelques mois ou plus... c'est compliqué de savoir ce qu'on a bien pu faire à cet endroit, on se demande meme si ce code est bien de nous...
Les commentaires c'est pour les "pros", les "vrais" développeurs...

Commentaire de Bricomix le 14/04/2003 11:29:47

Ricperso > Seb_d_angers a raison ... reviens donc sur un code assez complexe que tu as écrit il y a 6 mois... Si tu l'avais commenté, je suis sur que tu aurais passé moins de temps à le comprendre

Commentaire de Ricpperso le 14/04/2003 12:06:15

j'ai cité une utilité entre autre des commentaire (excuzer moi d'avoir oublié par exemple), et je me suis amélioré dans la prog ;) (bien que j'en mets plus, car la j'ai plus du tout le tps, j'ai un prog (en c++) qui me prends tous me tps).

Commentaire de Warny le 14/04/2003 14:10:21

Alain Proviste, quelques remarque sur ton code

Sur la forme pour commencer :
- Comme d'autres ici te l'on déjà dit, il faut mettre des commentaires
- Il faut aussi que tes variables aient des noms explicites

En un coup d'oueil, je ne comprend pas comment marche ton programme, je suis obligé de l'analyser finement. Ceci lui enlève la valeur d'exemple que tu veux lui donner. Les commentaires ont donc déjà deux utilités premières : comprendre ton code et partager ton code.
En plus Les commentaires te permettent de voir que tu fais des programmes pas optimisés (je ne parle pas que pour toi ;) ). En effet, lorsque tu écris ton commentaire, 90% du temps tu te rend compte qu'il y a plus simple, les 10% restant n'arrivant... qu'au bout d'un ou deux essais voire peut-être plus.

Sur le fond :
- Plutôt que de te pourrir la vie avec des listes, fait une procédure de sortie dans laquelle tu indiques toutes les démarches à suivre pour enregistrer tes anagrammes (par exemple les écrire dans un fichier :) ). ceci permet de te concentrer sur l'algorithme lui-même
- lorsque tu calcules l'anagramme d'un mot avec plusieurs lettre identiques, ça génère plusieurs anagrammes identiques, il faut donc que tu prennes en compte l'élimination de ces anagrammes (il y a plusieurs méthodes)
- L'affichage prend toujours énormement de temps il ne faut donc pas toujours metre à jour les éléments graphique et la liste en est un (et oui windows est et reste un os graphique). Ne fait donc pas les doevents à chaque boucle, ajuste les au 1/12 ou 1/24 de seconde d'execution.

Pour la petite indiquation, ta définition d'anagramme est bonne.

Commentaire de Alain Proviste le 14/04/2003 18:49:03 administrateur CS

Warny lis les sources avant de mettre de commentaires. L'affichage dans la liste ne se fait qu'après que tous les anagrammes aient été trouvés et j'ai bien précisé que je moquais des doublons.

Commentaire de Kaisermann le 14/04/2003 19:41:18

Tu t'es fait devancé sur ce coup là Alain P, Bricomix a tout niqué !

Commentaire de Bricomix le 14/04/2003 19:52:10

J'ai updaté ma source maintenant pour 9 lettres sur le miens ca met 1 seconde.

Commentaire de Ricpperso le 14/04/2003 20:18:16

dis, Alain, pour savoir si le mot existe, tu prends un fichiers texte, et tu regarde si le mot est dans le fichier, tu veux un dico, prend celui de Word XP ou d'un autre traitement de texte, ou encore il y a plein de super dico. Le code est trés simple, suffit de faire une boucle.

Seul hic, ca risque d'être un peu long.

Commentaire de Ricpperso le 14/04/2003 20:18:31

un peu long => l'éxécution.

Commentaire de Alain Proviste le 14/04/2003 20:28:38 administrateur CS

Oui ricpperso, j'y avais pensé mais ce n'était pas mon but de trouver les ana existants.

Commentaire de Bricomix le 14/04/2003 20:36:18

Ricpperso > pour un jeu j'avais fais un algo pour ca. Plutot que de chercher a chaquae fois si le mot existe, autant prendre chaque mot et verifier qu'il y a les bonnes lettres ! Moi ca prenait 5 secondes (sur mon XP1900+) pour un fichier texte avec + de 60000 mots

Commentaire de Ricpperso le 15/04/2003 13:27:52

oui, c'est mieux.

Commentaire de Florent le 22/04/2003 16:46:27

Faut espérer qui ait un amateur des chiffres et des lettres qui tombe sur cette page...
CONSONNE

Commentaire de fredoche4 le 14/11/2004 16:45:55

salut Alain ,
c pas mal continue ton tonton de jacou

Commentaire de kalif le 01/02/2007 15:55:10

bravo, c'est exactement ce que je cherchais lol ( :o je parie que tu avais deviné )

Commentaire de viier le 18/06/2010 15:55:22

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.

Commentaire de Alain Proviste le 18/06/2010 16:30:34 administrateur CS

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

Commentaire de viier le 19/06/2010 12:57:54

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!

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Combinaison chaîne de charactères [ par Spr ] Bonjour, je cherche à partir d'un mot à trouver toutes les combinaisons possibles que l'on peut faire avec les lettres qu'il contient.Ex: mot tmo Probléme d'ouverture de base de données suite à un mot de passe [ par alinebb ] J'ai mis en un mot de passe sur ma base de données mais maintenant tous mes docs Access s'ouvrent avec le mot de passe mais quand je le rentre ça ne f VB [ par midou21 ] Quand j'ouvre un fichier en ecriture,comment puis je remplacer un mot par un autre mot conextion BDD access avec VB avec un mot de passe [ par PDT ] comment faut il faire pour connecter une base de données access avec un mot de passe à un projet VB6 sans avoir à saisir le mot de passe mais en le s Ecriture dans la base de registre [ par Hypnoide ] Je souhaite réaliser 1 petit script vbs qui permette d'éviter la saisie du mot de passe lors du premier lancement du logiciel de prise en main à dista Ecriture dans la base de registre [ par Hypnoide ] Je souhaite réaliser 1 petit script vbs qui permette d'éviter la saisie du mot de passe lors du premier lancement du logiciel de prise en main à dista Ecriture dans la base de registre [ par Hypnoide ] Je souhaite réaliser 1 petit script vbs qui permette d'éviter la saisie du mot de passe lors du premier lancement du logiciel de prise en main à dista La lettre du milieu d'un mot exemple : VOITURES, lettre : T [ par Spiritu4L ] Voilà j'aimerais savoir comment remplacer la lettre du milieu d'un mot par un # exemple : VOITURE devient VOI#URE merci d'avance mot passe admini [ par sadequi ] bonjour ! svp si il y'a quelq'un qui peu m'aider , je veus savoir comment installer un logiciel sans être un administrateur , si non comment je peus Comment chercher un mot dans un fichier EXE ? [ par rino ] Ptite question:Comment faire pour pouvoir lire un mot dans un fichier *.exe, une information, et l'indiquer dans un MsgBox ?Merci pour toute personne


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,075 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales