Comment lister des combinaisons ???

LukeSkywalker67 Messages postés 20 Date d'inscription vendredi 18 mars 2005 Statut Membre Dernière intervention 21 août 2006 - 11 août 2006 à 16:52
LukeSkywalker67 Messages postés 20 Date d'inscription vendredi 18 mars 2005 Statut Membre Dernière intervention 21 août 2006 - 18 août 2006 à 11:01
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

pymaster Messages postés 74 Date d'inscription vendredi 14 juillet 2006 Statut Membre Dernière intervention 14 août 2006
11 août 2006 à 17:22
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
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
11 août 2006 à 17:51
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
0
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
12 août 2006 à 20:30
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.
0
cs_zephyrin Messages postés 47 Date d'inscription mercredi 29 mai 2002 Statut Membre Dernière intervention 17 août 2006
17 août 2006 à 16:43
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
0

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

Posez votre question
LukeSkywalker67 Messages postés 20 Date d'inscription vendredi 18 mars 2005 Statut Membre Dernière intervention 21 août 2006
18 août 2006 à 11:01
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+
0
Rejoignez-nous