Permutation de colonnes

Résolu
Osiris6880 Messages postés 36 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 7 décembre 2007 - 1 avril 2007 à 18:52
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 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 ??

Merci d'avance

Osiris6880

31 réponses

chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
15 avril 2007 à 16:10
Bonjour Marques,
mais files nous ton code pour qu' on puisse le tester...!
même si une idée de cinglé ..
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
15 avril 2007 à 16:14
Salut Chaibat,
Je vais voir la mer et taquiner les pêcheurs (c'est mon heure) et poste ce code à mon retour (vers 18 heures)
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
15 avril 2007 à 16:18
Fais gaffe quand mêe avec les pêcheur...!
Ils ont la vie dure en ce moment...
et peut être qu' ils n' ont pas envie de plasanter

A ce soir...
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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é....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
15 avril 2007 à 18:10
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
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
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 ..
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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 !
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
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...


A+
0
Osiris6880 Messages postés 36 Date d'inscription vendredi 29 octobre 2004 Statut Membre Derniè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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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 "
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
15 avril 2007 à 20:07
Salut  Osiris6880,

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.
0
Rejoignez-nous