Comment lister des combinaisons ???

Messages postés
20
Date d'inscription
vendredi 18 mars 2005
Statut
Membre
Dernière intervention
21 août 2006
-
Messages postés
20
Date d'inscription
vendredi 18 mars 2005
Statut
Membre
Dernière intervention
21 août 2006
-
Bonjour à tous,


Je cherche à établir la liste de toutes les combinaisons possibles d'une table de N élément par


un programme VB.NET.


La taille de ce tableau étant variable je ne peux pas utiliser de For imbriqués.


J'ai essayer d'utiliser une fonction récursive mais je galère à fond.


Quelqu'un à t'il une idée ???


Merci d'avance


 


 




 

5 réponses

Messages postés
74
Date d'inscription
vendredi 14 juillet 2006
Statut
Membre
Dernière intervention
14 août 2006

Bonjour

Si les for te gène à cause de ton tableau variable alors utilise un While non ? Tu pouras alors placer tes propres conditions plus librement.

Aussi c'est pas très clair :

Je cherche à établir la liste de toutes les combinaisons possibles d'une table de N élément

Parceque même avec un for normalement c'est facile non ?

dim tabCombi as List(of string) ' Je suppose que c'est de string
dim i as integer
dim j as integer
dim tabVar() as string

code ....
i = nbElementTabVar
j = nbElementTabVar

for i = 0 to nbElementTabVar - 1
for j = 0 to nbElementTabVar - 1
tabCombi.add(tabVar(i) & tabVar(j))
next
next

Est ce que c'est ce genre de chose que tu veux ?

PY
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Si la taille de tes tableaux sont variables, il te faut en effet recourir à la récursion (c'est le plus simple !).

Ca te fera deux boucles : Une boucle pour les lignes, et une boucle pour les colonnes de ton tableau.
Cependant, attention aux boucles infinies !

Ca donnerai un truc de ce genre (à tester donc !) :

function combinaison(x, y)
if x = limiteX then exit function
if y = limiteY then exit function
For i = x to limiteX
    For j = y to limiteY
       combinaison(x, y+1)
    next j
next i
end function
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

Salut, je ne sais pas si ça te convient mais j'ai retrouvé un de mes bout de code écrit en VB6 avec une form et un commandbutton (mais ça peut surement marcher en vb.net) qui trouve toutes les combinaisons possibles d'un tableau à une dimension et n éléments avec exclusion des valeurs déjà connues (ici, j'ai limité le nombre d'éléments à 3 - en rouge -) :

'déclaration des tableaux utilisés
Dim tablo_origine() As Integer
Dim tablo_test() As Boolean
Dim tablo_resultat() As Integer


Private Sub Command1_Click()
Dim i As Integer, nElements As Integer
  'dimensionnement du tableau d'origine et remplissage
  ReDim tablo_origine(3)
  nElements = UBound(tablo_origine)
  For i = 0 To nElements
    tablo_origine(i) = i
  Next
  'dimensionnement des tableaux test et résultat
  ReDim tablo_test(nElements)
  ReDim tablo_resultat(0)
  'lancement de la procédure récursive
  test 0
End Sub


Sub test(n As Integer)
Dim i As Integer, i1 As Integer
Dim s As String
  For i = 0 To UBound(tablo_origine)
    'si valeur non sélectionnée
    If tablo_test(i) = False Then
      tablo_resultat(n) = tablo_origine(i)
      'si on a parcourru tout le tableau d'origine
      If n = UBound(tablo_origine) Then
        'on construit la chaine d'affichage
        s = ""
        For i1 = 0 To n
          s = s & tablo_resultat(i1)
        Next
        'on affiche la chaine
        MsgBox s
      'sinon, on relance la procédure récursive
      Else
        'on coche la valeur déjà choisie
        tablo_test(i) = True
        'on prépare le tableau résultat
        ReDim Preserve tablo_resultat(n + 1)
        'on relance la procédure
        test UBound(tablo_resultat)
        'on rétablit le tableau résultat d'avant
        ReDim Preserve tablo_resultat(n)
        'on décoche la valeur déjà choisie
        tablo_test(i) = False
      End If
    End If
  Next
End Sub


Si tu as des questions, je reste à l'écoute.
Messages postés
47
Date d'inscription
mercredi 29 mai 2002
Statut
Membre
Dernière intervention
17 août 2006

Salut


essaie dans ton for de mettre :


 




dim i as interger



for i = 0 to ubound(MonTab)



...



next



et ainsi tu ne t'occupes pas de la taille de tes tableaux.






Zephyrin
Messages postés
20
Date d'inscription
vendredi 18 mars 2005
Statut
Membre
Dernière intervention
21 août 2006

Merci à tous de vos réponses,
J'avais mal poser mon problème : en fait cela revient à établir une table de vérité à 2^N combinaisons.
J'ai fait un petit algo tout simple qui marche bien.

A+