Combinaison

Signaler
Messages postés
2
Date d'inscription
mardi 3 août 2010
Statut
Membre
Dernière intervention
20 juillet 2012
-
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
-
Bonjour,

Pour simplifier, j'ai une série de 5 fruits, disons "Pomme", "Poire", "Orange", "Banane", "Fraise".

Je cherche à obtenir toutes les combinaisons de 1 à 5 fruits sans tenir compte de l'ordre. Précision, chaque fruit est unique.

En utilisant des boucles imbriquées, j'affiche toutes les combinaisons mais il m'est impossible d'éliminer les doublons tels que "Pomme/Orange" et "Orange/Pomme"

Quelqu’un aurait-il une idée ?

Merci d'avance

8 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Bonjour,
C'est à croire que le même professeur impose le même exercice, avec le même nombre de fruits, une fois tous les 5 ans !
Montre-nous donc ce que tu as écrit, déjà, pour tenter d'obtenir ces 31 malheureux breuvages ...
Et montre-nous aussi quel "algo" tu as conçu (il est pourtant fort simple).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
30
Date d'inscription
mercredi 23 mai 2012
Statut
Membre
Dernière intervention
13 août 2012

Il ne suffit pas que de changer le start de la boucle

Pour le nombre de paire
1 prod j'y acolle tous les produits suivant
2 prod j'y acolle tous les produits SUIVANTS donc le 3,4,5
...
n-1 prod j'y acolle le produit n

=>
Du coup j'aurais fais 2 boucles imbriquées
La 1 de i=1 à n-1
La 2 de start=i à n qui colle le produit i aux produits suivants

[color=]12
13
14
15/color
23
24
25
34
35
45
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Et c'est cela (cette manière d'exposer) que toi, tu appelles un algorithme ?
Je veux bien t'aider, mais je veux d'abord te voir travailler un peu, hein ...
Je répète :
Nous voulons voir :
1) un algorithme (pas du n'importe quoi exprimé n'importe comment)
2) au moins ton code actuel


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
2
Date d'inscription
mardi 3 août 2010
Statut
Membre
Dernière intervention
20 juillet 2012

Après recherche, j'ai trouvé la réponse.
http://www.vbfrance.com/codes/TROUVER-TOUTES-COMBINAISONS-VARIABLES-GRACE-CONVERSION-BINAIRE_32193.aspx
Merci alonsyl
Mais voici mon code. Si j'ai choisi la rubrique "débutant", ce n'est pas pour rien....
Sub main()
Dim occu1 As Integer
Dim occu2 As Integer
Dim occu3 As Integer
Dim occu4 As Integer
i = 1

combi = Array("Pomme", "Poire", "Orange", "Banane")

For occu1 = 0 To UBound(combi)
i = i + 1
Cells(i, 1) = combi(occu1)
For occu2 = 1 To UBound(combi)
If occu2 <> occu1 Then
i = i + 1
Cells(i, 1) = combi(occu1) & "" & combi(occu2)
For occu3 = 2 To UBound(combi)
If occu3 <> occu2 And occu3 <> occu1 Then
i = i + 1
Cells(i, 1) = combi(occu1) & "" & combi(occu2) & "" & combi(occu3)
For occu4 = 3 To UBound(combi)
If occu4 <> occu3 And occu4 <> occu2 And occu4 <> occu1 Then
i = i + 1
Cells(i, 1) = combi(occu1) & "" & combi(occu2) & "" & combi(occu3) & "" & combi(occu4)
End If
Next
End If
Next
End If
Next
Next
End Sub

Bonne journée à tous
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Tu permets ?
On y va donc :
Mais voici mon code. Si j'ai choisi la rubrique "débutant", ce n'est pas pour rien....

et :
Après recherche, j'ai trouvé la réponse

Ah ? c'est cela, travailler ? C'est Chercher ailmleurs ? C'est Copier/coller ? Ah bon ?
Regarde ce que je t'avais préparé :
une listbox nommée mes_cocktails et ce code :
 Dim mes_fruits
 mes_fruits = Array("pomme", "poire", "orange", "banane", "fraise")
 Dim nb As Integer, i As Integer, debut As Integer, fin As Integer, j As Integer, Ah As String, Oh As String, Hou As Integer
 mes_cocktails.Clear
 mes_cocktails.Visible = False
 nb = UBound(mes_fruits) + 1
 For i = 1 To nb
     mes_cocktails.AddItem i
 Next
 debut = 0
 fin = mes_cocktails.ListCount - 1
 Do
   For i = debut To fin
     Ah = Val(mes_cocktails.List(i))
     If Ah = 0 Then Exit Do
     Oh = mes_cocktails.List(i)
     Hou = InStr(Oh, "-")
     If Hou Then
       mes_cocktails.List(i) = mes_fruits(Val(Oh) - 1) & Mid(Oh, Hou)
     Else
       mes_cocktails.List(i) = mes_fruits(Val(Oh) - 1)
     End If
     For j = Ah + 1 To nb
       mes_cocktails.AddItem j & "-" & mes_cocktails.List(i)
     Next
   Next
   debut = fin + 1
   fin = mes_cocktails.ListCount
 Loop
 mes_cocktails.Visible = True
 MsgBox mes_cocktails.ListCount & " coquetels (restons français)"

On pourrait en inventer d'autres, sans jamais se contenter de "chercher sur le net" et de copier/coller, en ayant ensuite le front de dire : "mon code" !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
30
Date d'inscription
mercredi 23 mai 2012
Statut
Membre
Dernière intervention
13 août 2012

Autant pour moi j'avais rien compris je pensé que l'on se contenter de chercher les paires différentes qui existait.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Bonjour tout le monde,

Jacques a dit:

On pourrait en inventer d'autres



Dim i As Integer,j As Integer,k As Integer, _
m As Integer,n As Integer

Dim T1(2) As String,T2(2) As String,T3(2) As String, _
T4(2) As String,T5(2) As String

Dim c As Integer
Dim COMBI() As String

T1(1)="Pomme-":T1(2)=""
T2(1)="Poire-":T2(2)=""
T3(1)="Orange-":T3(2)=""
T4(1)="Banane-":T4(2)=""
T5(1)="Fraise":T5(2)=""

For I=1 To 2
  For j=1 To 2
    For k=1 To 2
      For m=1 To 2
        For n=1 To 2
          
           c=c+1
           Redim Preserve COMBI(c)
           COMBI(c)=T1(i) & T2(j) & _
               T3(k) & T4(m) & T5(n) 
 
        Next
      Next
    Next
  Next
Next







[] Ce qui va sans dire. va mieux en le disant.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Salut
Const Element = 5
Private listmots(Element - 1) As String
Private combinaisons() As String

Private Sub MakeCombinaison()
Dim place As Integer
Dim strcomb As String
Dim counter As Long
Dim checknum As Integer
counter = 0
For number = 1 To 2 ^ (Element) - 1
strcomb = ""
  'on convertit number en binaire et on verifie si le digit obtenu = 1 et on prend
  ' la valeur de listmots indexe par place
  place = 0
  checknum = number
   While checknum > 0
     If checknum Mod 2 = 1 Then
     strcomb = strcomb & listmots(place) & " "
     End If
     place = place + 1
      checknum = checknum \ 2
  Wend
  ReDim Preserve combinaisons(counter)
  combinaisons(counter) = strcomb
  counter = counter + 1
Next number

End Sub

Private Sub Form_Load()
listmots(0) = "pomme"
listmots(1) = "poire"
listmots(2) = "banane"
listmots(3) = "orange"
listmots(4) = "fraise"
MakeCombinaison
End Sub