Combinaison

fanfanpsm Messages postés 2 Date d'inscription mardi 3 août 2010 Statut Membre Dernière intervention 20 juillet 2012 - 20 juil. 2012 à 07:33
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 22 juil. 2012 à 10:37
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

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 juil. 2012 à 08:04
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
0
DamienGB Messages postés 30 Date d'inscription mercredi 23 mai 2012 Statut Membre Dernière intervention 13 août 2012
20 juil. 2012 à 10:12
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 juil. 2012 à 11:27
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
0
fanfanpsm Messages postés 2 Date d'inscription mardi 3 août 2010 Statut Membre Dernière intervention 20 juillet 2012
20 juil. 2012 à 13:07
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
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 juil. 2012 à 13:18
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
0
DamienGB Messages postés 30 Date d'inscription mercredi 23 mai 2012 Statut Membre Dernière intervention 13 août 2012
20 juil. 2012 à 13:50
Autant pour moi j'avais rien compris je pensé que l'on se contenter de chercher les paires différentes qui existait.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
20 juil. 2012 à 15:32
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.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
22 juil. 2012 à 10:37
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
0
Rejoignez-nous