Osiris6880
Messages postés36Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention 7 décembre 2007
-
1 avril 2007 à 18:52
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 2014
-
15 avril 2007 à 20:07
Bonjour à vous tous,
Je programme en VB 2005 et je voudrais créer un algorithme permettant de faire toutes les permutations de colonnes possibles.
Je m'explique dans l'exemple suivant :
Dim chaine as string
Dim tableau_permut[] as string
Dim nombre_possibilite as double
chaine = "1234"
nombre_possibilite = 24 '(factorielle(len(chaine))) je ne me rappelle plus de la fonction factorielle
redim tableau_permut[nombre_possibilite]
Ensuite je voudrais executer une fonction qui fasse cela
tableau_permut[1] = "1234"
tableau_permut[2] = "1243"
tableau_permut[3] = "1342"
tableau_permut[4] = "1324"
tableau_permut[5] = "1423"
tableau_permut[6] = "1432"
tableau_permut[7] = "2431"
...etc.
Est ce que quelqu'un à quelque chose à me proposer ??
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 15 avril 2007 à 18:03
De retour,
T'inquiète ! Tout le monde me connait à Anglet, même ceux qui ne m'ont pas encore rencontré (ils me lisent périodiquement et connaissent tous mon côté farceur ...)
Bon... A nos moutons, donc..
Voilà la folie, que j'expliquerai plus complètement quand le moment sera venu....
Elle se base sur un principe (celui du sigma) et un fait : aucune permutation ne peut conduire à un écart inférieur à 9, c'est tout.
Si ce chemin vous parait bon, je m'amuserai à rechercher dans quelles circonstances le pas de ma boucle peut être accru... encore qu'en empoisonnant la vie des pêcheurs, une autre idée encore pluys folle a germé dans ma boîte creuse...
Voilà donc :
Une forme avec une listbox list1 et un bouton de commande command1 à lancer pour les permutations
La borne des permutations est à définir dans la constante choix
Ne m'envoyez pas à l'asile, hein !....
Private Sub Command1_Click()
' la constante choix définit la borne supérieure des chiffres de 1 à choix inclus
Const choix As Integer = 5
Dim nbor As Integer, rentre As String, sorti As String
For i = 1 To choix
rentre = rentre & i
sorti = i & sorti
nbor = nbor + i
Next i
ReDim titi(choix) As Integer
titi(1) = 1
List1.Visible = False
List1.Clear
For i = Val(rentre) To Val(sorti) Step 9
nb = 0
For J = 1 To choix '+ 1
nb1 = Val(Mid(i, J, 1))
If InStr(i, nb1) < J Or nb1 = 0 Then Exit For
If nb1 > choix Then Exit For
nb = nb + nb1
Next J
If nb = nbor Then List1.AddItem i
Next
List1.Visible = True
MsgBox List1.ListCount & " permutations trouvées "
End Sub
Z'avez vu ? Quand je vous le dis : je suis un cinglé....
Vous n’avez pas trouvé la réponse que vous recherchez ?
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 15 avril 2007 à 18:44
Salut,
généralement je comprend le langage des cinglés...
pour cause je le suis moi-même..
mais là je "seiche"..
ou sont les permutations ? je ne vois que le total ..
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 15 avril 2007 à 19:48
Dans la listbox list1, pardi...
Une Form - Une listbox List1 et un bouton de commande Command1
Et un copier-coller !
Ne me dis pas que rien n'apparaît chez toi ???????? (je ne verrais pas comment ...) Tu fais bien celà avec VB ?
Ecoute : je viens de faire ces gestes et de copier coller ... et j'ai tout !
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 15 avril 2007 à 19:58
pardon Marques...
c' est que j' avais l' esprit ailleurs...et j' ai pas vu AddItem...
c' est titi que je ne vois pas .
si je suis encore distrait et que je ne te suis pas encore,
c' est qu' en ce moment j' ai souci avec un code...
Osiris6880
Messages postés36Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention 7 décembre 2007 15 avril 2007 à 20:00
Bonjour à tous,
Pour te répondre chaibat05, je crois que tu à oublié de mettre une listbox (c'est elle qui contient les résultats).
En ce qui concerne le code de jmfmarques, je le trouve intéressant ou plutôt "bizarre mais intéressant". Et pour les temps d'éxecution ton code semble plus rapide jusqu'a 7, puis c'est le mien qui est plus rapide. Mais tous comme toi mon code ne fonctionne pas au dessus de 9.
Sinon, je cherche encore une solution plus rapide.
Merci encore,
Osiris6880
PS : L'informatique rend fou mais la société aide bien
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 15 avril 2007 à 20:01
Fiche titi à la poubelle ...
Regarde ce que j'ai écrit au dessus :
"2 lignes sont à envoyer à la poubelle (résidus d'essais antérieurs) :
ReDim titi(choix) As Integer
titi(1) = 1
Elles ne gênent pas mais sont inutiles "
Bon... voilà qui m'encourage à chercher d'autres accélérations intermédiaires de ma boucle ....
Ce code n'est pas aussi extravagant qu'il le parait et je l'expliquerai pas à pas in fine... tu verras que tout est simple... Regarde bien comment j'utilise le sigma (nbor) car toute l'astuce de ce code est là.
Comme dit plus haut, j'ai par ailleurs une autre idée encore plus folle qui a germé cet après-midi !!
Je rigolerai peut-être avec la semaine prochaine... Si elle marche, ce ne sera pas "piqué des vers" et je me bidonne à l'avance.