LukeSkywalker67
Messages postés20Date d'inscriptionvendredi 18 mars 2005StatutMembreDernière intervention21 août 2006
-
11 août 2006 à 16:52
LukeSkywalker67
Messages postés20Date d'inscriptionvendredi 18 mars 2005StatutMembreDernière intervention21 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.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 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
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 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
LukeSkywalker67
Messages postés20Date d'inscriptionvendredi 18 mars 2005StatutMembreDernière intervention21 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.