IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Générateur de combinaisons


Sujet :

VB 6 et antérieur

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Générateur de combinaisons
    Bonjour à tous,
    je cherche à faire un algorithme qui me produise toutes les combinaisons
    d'un groupe d'éléments.

    Par exemple si j'ai 1,2,3 et 4
    Je voudrais obtenir :
    1
    2
    3
    4
    1.2
    1.3
    1.4
    2.3
    2.4
    3.4
    1.2.3
    1.2.4
    2.3.4
    1.2.3.4

    (1.2 et 2.1 sont,pour moi, la même chose et ne m'interesse pas)

    J'ai donc écris ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Dim NombreClient As Integer
    Dim Client(100) As Integer
     
    NombreClient = 5
     
    For i = 1 To NombreClient
        Client(i) = i
    Next
     
    Open App.Path & "\Resultat.txt" For Output As #1
     
    Message = ""
    Compteur = 0
     
    For i = 1 To NombreClient
        Message = Message & Client(i) & vbCrLf
        Compteur = Compteur + 1
     
        For b = i + 1 To NombreClient
            Message = Message & Client(i) & Client(b) & vbCrLf
            Compteur = Compteur + 1
            For c = b + 1 To NombreClient
                Message = Message & Client(i) & Client(b) & Client(c) & vbCrLf
                Compteur = Compteur + 1
            Next
        Next
    Next
     
    Print #1, Message
     
    Close #1
     
    MsgBox Compteur & " combinaisons !!" & vbCrLf & vbCrLf & Message
    ========================================================
    ceci fonctionne sauf que je ne peux utiliser Client(i), Client(b) etc...,
    car il faut que ce bout
    de code soit en relatif, sinon si j'ai 3 clients je n'aurai pas le même code
    que si j'en ai 4, etc....

    Si je ne vous semble pas clair, je peux expliquer plus.
    Merci d'avance,

    Dany

    [ Edité par ridan ] Veuillez utiliser les balises CODE

  2. #2
    Tan
    Tan est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 168
    Points : 158
    Points
    158
    Par défaut
    Je te dirai peut être que ton code n'est pas bon, si seulement c'était lisible, mets dans une balise code, s'il te plais (en rééditant ton mesage)
    Un peu de présentation (tabulation pour reperer facilement les différents bloc) serait la bien venu aussi

  3. #3
    Tan
    Tan est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 168
    Points : 158
    Points
    158
    Par défaut
    Bon, j'ai pris le temps de déchiffrer un peu (mais que cela ne t'empêche pas de mettre les balises code).

    Voilà comment je vois les choses.

    Par exemple, 1,2,3 et 4 par rapport à 1,2,3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
         -------->      4               
    1    -------->      14
    2    -------->      24
    3    -------->      34
    12   -------->      124
    13   -------->      134
    123  -------->      1234
    Si tu prend la partie gauche (résultat de 123) plus la partie droite (résultat de 123 + 4), tu dois obtenir ton résultat.

    Il te suffit donc de créer, soit une fonction récursive (qui s'appelle elle-même), soit une boucle on tu lances une fonction qui concatène

    Je voulais te mettre un peu de code pour te lancer, mais j'était tellement bien partie...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Public Sub recupCombi(ByRef partGauche() As String, ByVal partDroite As Integer)
        Dim elt As String
        Dim NBelt As Integer
     
     
        NBelt = UBound(partGauche)
     
        ' Pour tous les élément de gauche, on concatène avec partDroite
        For i = 0 To NBelt
            ReDim Preserve partGauche(0 To UBound(partGauche) + 1)
            partGauche(UBound(partGauche)) = partGauche(i) & partDroite
        Next i
     
        ' On ajoute le nombre de la partie droite
        ReDim Preserve partGauche(0 To UBound(partGauche) + 1)
        partGauche(UBound(partGauche)) = partDroite
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Private Sub test()
        Dim NBelt As Variant
        Dim result() As String
        ReDim result(0 To 0)
     
        NBelt = 5         ' Initialisation
        result(0) = 1     ' Premier élément
     
        ' Pour tout les chiffre
        For i = 2 To elt
            recupCombi result, i
        Next i
     
        ' Pour afficher le résultat dans la fenêtre d'execution
        For Each elt In result
            Debug.Print elt
        Next elt
    End Sub
    Salut, et n'oublies pas le tag résolu si c'est bon.

  4. #4
    Futur Membre du Club
    Inscrit en
    Février 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 6
    Points : 7
    Points
    7
    Par défaut C'est tout bon
    a part un petit bug sur qui devrait être c'est tout bon.
    Je te remercie vivement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Algo] Trouver un arrangement ou une combinaison d'éléments
    Par Morvan Mikael dans le forum Algorithmes et structures de données
    Réponses: 16
    Dernier message: 20/04/2013, 12h46
  2. Générateur de combinaisons
    Par kwariz dans le forum Contribuez
    Réponses: 0
    Dernier message: 01/03/2012, 02h34
  3. Générateur de combinaisons, comment séquencer le travail ?
    Par Gilles57-H-G dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 01/12/2010, 02h37
  4. [combinatoire] combinaisons de toutes longueur
    Par Toorop dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 16/02/2007, 17h08
  5. Réponses: 2
    Dernier message: 22/07/2002, 19h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo