Bonjour à tous,
je cherche à faire un algorithme qui me produise toutes les combinaisons
d'un groupe d'éléments.
Par exemple si j'ai 1,2,3 et 4
Je voudrais obtenir :
1
2
3
4
1.2
1.3
1.4
2.3
2.4
3.4
1.2.3
1.2.4
2.3.4
1.2.3.4
(1.2 et 2.1 sont,pour moi, la même chose et ne m'interesse pas)
J'ai donc écris ceci:
Dim NombreClient As Integer
Dim Client(100) As Integer
NombreClient = 5
For i = 1 To NombreClient
Client(i) = i
Next
Open App.Path & "\Resultat.txt" For Output As #1
Message = ""
Compteur = 0
For i = 1 To NombreClient
Message = Message & Client(i) & vbCrLf
Compteur = Compteur + 1
For b = i + 1 To NombreClient
Message = Message & Client(i) & Client(b) & vbCrLf
Compteur = Compteur + 1
For c = b + 1 To NombreClient
Message = Message & Client(i) & Client(b) & Client(c) & vbCrLf
Compteur = Compteur + 1
Next
Next
Next
Print #1, Message
Close #1
MsgBox Compteur & " combinaisons !!" & vbCrLf & vbCrLf & Message
========================================================
ceci fonctionne sauf que je ne peux utiliser Client(i), Client(b) etc...,
car il faut que ce bout
de code soit en relatif, sinon si j'ai 3 clients je n'aurai pas le même code
que si j'en ai 4, etc....
Si je ne vous semble pas clair, je peux expliquer plus.
Merci d'avance,
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean-Marc
"Daniel AUBRY" a écrit dans le message de news:4272720d$0$10664$
Bonjour à tous, je cherche à faire un algorithme qui me produise toutes les combinaisons d'un groupe d'éléments.
Par exemple si j'ai 1,2,3 et 4 Je voudrais obtenir : 1 2 3 4 1.2 1.3 1.4 2.3 2.4 3.4 1.2.3 1.2.4 2.3.4 1.2.3.4
(1.2 et 2.1 sont,pour moi, la même chose et ne m'interesse pas)
Hello,
Voici un petit bout de code qui fait ça très bien. La manière est amusante, l'algorithme est efficace, mais l'implémentation que j'en ai faite est volontairement non optimisée, pour bien montrer ce qui se passe;
Voici:
Option Explicit
Private Sub Command1_Click() Dim client(100) Dim nb_cli As Integer Dim i As Integer Dim j As Integer Dim s As String Dim ch As String
nb_cli = 5
For i = 1 To nb_cli client(i) = i Next i
For i = 1 To 2 ^ (nb_cli) s = cvrt_bin(i) ch = "" For j = Len(s) To 1 Step -1 If Mid$(s, j, 1) = "1" Then If ch <> "" Then ch = ch & "." & client(Len(s) - j + 1) Else ch = client(Len(s) - j + 1) End If End If Next j
Debug.Print i; " "; ch Next i End Sub
Private Function cvrt_bin(n As Integer) As String Dim s As String Dim s_bin As String Dim i As Integer Dim v As Integer Dim c As String Dim t_bin(15) As String
t_bin(0) = "0000" t_bin(1) = "0001" t_bin(2) = "0010" t_bin(3) = "0011" t_bin(4) = "0100" t_bin(5) = "0101" t_bin(6) = "0110" t_bin(7) = "0111" t_bin(8) = "1000" t_bin(9) = "1001" t_bin(10) = "1010" t_bin(11) = "1011" t_bin(12) = "1100" t_bin(13) = "1101" t_bin(14) = "1110" t_bin(15) = "1111" s = Hex$(n) For i = 1 To Len(s) c = Mid$(s, i, 1) If c >= "A" Then v = 10 + Asc(c) - 65 Else v = c End If s_bin = s_bin & t_bin(v) Next i cvrt_bin = s_bin End Function
C'est incroyable le nombre de problème que l'on peut régler de façon simple juste en comptant en binaire...
-- Jean-marc "There are only 10 kind of people those who understand binary and those who don't."
"Daniel AUBRY" <mail@daniel-aubry.com> a écrit dans le message de
news:4272720d$0$10664$636a15ce@news.free.fr...
Bonjour à tous,
je cherche à faire un algorithme qui me produise toutes les combinaisons
d'un groupe d'éléments.
Par exemple si j'ai 1,2,3 et 4
Je voudrais obtenir :
1
2
3
4
1.2
1.3
1.4
2.3
2.4
3.4
1.2.3
1.2.4
2.3.4
1.2.3.4
(1.2 et 2.1 sont,pour moi, la même chose et ne m'interesse pas)
Hello,
Voici un petit bout de code qui fait ça très bien.
La manière est amusante, l'algorithme est efficace, mais
l'implémentation que j'en ai faite est volontairement non
optimisée, pour bien montrer ce qui se passe;
Voici:
Option Explicit
Private Sub Command1_Click()
Dim client(100)
Dim nb_cli As Integer
Dim i As Integer
Dim j As Integer
Dim s As String
Dim ch As String
nb_cli = 5
For i = 1 To nb_cli
client(i) = i
Next i
For i = 1 To 2 ^ (nb_cli)
s = cvrt_bin(i)
ch = ""
For j = Len(s) To 1 Step -1
If Mid$(s, j, 1) = "1" Then
If ch <> "" Then
ch = ch & "." & client(Len(s) - j + 1)
Else
ch = client(Len(s) - j + 1)
End If
End If
Next j
Debug.Print i; " "; ch
Next i
End Sub
Private Function cvrt_bin(n As Integer) As String
Dim s As String
Dim s_bin As String
Dim i As Integer
Dim v As Integer
Dim c As String
Dim t_bin(15) As String
t_bin(0) = "0000"
t_bin(1) = "0001"
t_bin(2) = "0010"
t_bin(3) = "0011"
t_bin(4) = "0100"
t_bin(5) = "0101"
t_bin(6) = "0110"
t_bin(7) = "0111"
t_bin(8) = "1000"
t_bin(9) = "1001"
t_bin(10) = "1010"
t_bin(11) = "1011"
t_bin(12) = "1100"
t_bin(13) = "1101"
t_bin(14) = "1110"
t_bin(15) = "1111"
s = Hex$(n)
For i = 1 To Len(s)
c = Mid$(s, i, 1)
If c >= "A" Then
v = 10 + Asc(c) - 65
Else
v = c
End If
s_bin = s_bin & t_bin(v)
Next i
cvrt_bin = s_bin
End Function
C'est incroyable le nombre de problème que l'on peut
régler de façon simple juste en comptant en binaire...
--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
"Daniel AUBRY" a écrit dans le message de news:4272720d$0$10664$
Bonjour à tous, je cherche à faire un algorithme qui me produise toutes les combinaisons d'un groupe d'éléments.
Par exemple si j'ai 1,2,3 et 4 Je voudrais obtenir : 1 2 3 4 1.2 1.3 1.4 2.3 2.4 3.4 1.2.3 1.2.4 2.3.4 1.2.3.4
(1.2 et 2.1 sont,pour moi, la même chose et ne m'interesse pas)
Hello,
Voici un petit bout de code qui fait ça très bien. La manière est amusante, l'algorithme est efficace, mais l'implémentation que j'en ai faite est volontairement non optimisée, pour bien montrer ce qui se passe;
Voici:
Option Explicit
Private Sub Command1_Click() Dim client(100) Dim nb_cli As Integer Dim i As Integer Dim j As Integer Dim s As String Dim ch As String
nb_cli = 5
For i = 1 To nb_cli client(i) = i Next i
For i = 1 To 2 ^ (nb_cli) s = cvrt_bin(i) ch = "" For j = Len(s) To 1 Step -1 If Mid$(s, j, 1) = "1" Then If ch <> "" Then ch = ch & "." & client(Len(s) - j + 1) Else ch = client(Len(s) - j + 1) End If End If Next j
Debug.Print i; " "; ch Next i End Sub
Private Function cvrt_bin(n As Integer) As String Dim s As String Dim s_bin As String Dim i As Integer Dim v As Integer Dim c As String Dim t_bin(15) As String
t_bin(0) = "0000" t_bin(1) = "0001" t_bin(2) = "0010" t_bin(3) = "0011" t_bin(4) = "0100" t_bin(5) = "0101" t_bin(6) = "0110" t_bin(7) = "0111" t_bin(8) = "1000" t_bin(9) = "1001" t_bin(10) = "1010" t_bin(11) = "1011" t_bin(12) = "1100" t_bin(13) = "1101" t_bin(14) = "1110" t_bin(15) = "1111" s = Hex$(n) For i = 1 To Len(s) c = Mid$(s, i, 1) If c >= "A" Then v = 10 + Asc(c) - 65 Else v = c End If s_bin = s_bin & t_bin(v) Next i cvrt_bin = s_bin End Function
C'est incroyable le nombre de problème que l'on peut régler de façon simple juste en comptant en binaire...
-- Jean-marc "There are only 10 kind of people those who understand binary and those who don't."
Daniel AUBRY
Bonsoir,
J'ai testé et ça marche. Par contre j'avoue que je n'ai pas tout saisi. Si je pouvais abuser un peu de ton temps .......
Merci beaucoup.
Dany "Jean-Marc" a écrit dans le message de news: 42728eeb$0$1419$
"Daniel AUBRY" a écrit dans le message de news:4272720d$0$10664$
Bonjour à tous, je cherche à faire un algorithme qui me produise toutes les combinaisons d'un groupe d'éléments.
Par exemple si j'ai 1,2,3 et 4 Je voudrais obtenir : 1 2 3 4 1.2 1.3 1.4 2.3 2.4 3.4 1.2.3 1.2.4 2.3.4 1.2.3.4
(1.2 et 2.1 sont,pour moi, la même chose et ne m'interesse pas)
Hello,
Voici un petit bout de code qui fait ça très bien. La manière est amusante, l'algorithme est efficace, mais l'implémentation que j'en ai faite est volontairement non optimisée, pour bien montrer ce qui se passe;
Voici:
Option Explicit
Private Sub Command1_Click() Dim client(100) Dim nb_cli As Integer Dim i As Integer Dim j As Integer Dim s As String Dim ch As String
nb_cli = 5
For i = 1 To nb_cli client(i) = i Next i
For i = 1 To 2 ^ (nb_cli) s = cvrt_bin(i) ch = "" For j = Len(s) To 1 Step -1 If Mid$(s, j, 1) = "1" Then If ch <> "" Then ch = ch & "." & client(Len(s) - j + 1) Else ch = client(Len(s) - j + 1) End If End If Next j
Debug.Print i; " "; ch Next i End Sub
Private Function cvrt_bin(n As Integer) As String Dim s As String Dim s_bin As String Dim i As Integer Dim v As Integer Dim c As String Dim t_bin(15) As String
t_bin(0) = "0000" t_bin(1) = "0001" t_bin(2) = "0010" t_bin(3) = "0011" t_bin(4) = "0100" t_bin(5) = "0101" t_bin(6) = "0110" t_bin(7) = "0111" t_bin(8) = "1000" t_bin(9) = "1001" t_bin(10) = "1010" t_bin(11) = "1011" t_bin(12) = "1100" t_bin(13) = "1101" t_bin(14) = "1110" t_bin(15) = "1111" s = Hex$(n) For i = 1 To Len(s) c = Mid$(s, i, 1) If c >= "A" Then v = 10 + Asc(c) - 65 Else v = c End If s_bin = s_bin & t_bin(v) Next i cvrt_bin = s_bin End Function
C'est incroyable le nombre de problème que l'on peut régler de façon simple juste en comptant en binaire...
-- Jean-marc "There are only 10 kind of people those who understand binary and those who don't."
Bonsoir,
J'ai testé et ça marche.
Par contre j'avoue que je n'ai pas tout saisi.
Si je pouvais abuser un peu de ton temps .......
Merci beaucoup.
Dany
"Jean-Marc" <webmaster@planetejm.atspace.com> a écrit dans le message de
news: 42728eeb$0$1419$ba620e4c@news.skynet.be...
"Daniel AUBRY" <mail@daniel-aubry.com> a écrit dans le message de
news:4272720d$0$10664$636a15ce@news.free.fr...
Bonjour à tous,
je cherche à faire un algorithme qui me produise toutes les combinaisons
d'un groupe d'éléments.
Par exemple si j'ai 1,2,3 et 4
Je voudrais obtenir :
1
2
3
4
1.2
1.3
1.4
2.3
2.4
3.4
1.2.3
1.2.4
2.3.4
1.2.3.4
(1.2 et 2.1 sont,pour moi, la même chose et ne m'interesse pas)
Hello,
Voici un petit bout de code qui fait ça très bien.
La manière est amusante, l'algorithme est efficace, mais
l'implémentation que j'en ai faite est volontairement non
optimisée, pour bien montrer ce qui se passe;
Voici:
Option Explicit
Private Sub Command1_Click()
Dim client(100)
Dim nb_cli As Integer
Dim i As Integer
Dim j As Integer
Dim s As String
Dim ch As String
nb_cli = 5
For i = 1 To nb_cli
client(i) = i
Next i
For i = 1 To 2 ^ (nb_cli)
s = cvrt_bin(i)
ch = ""
For j = Len(s) To 1 Step -1
If Mid$(s, j, 1) = "1" Then
If ch <> "" Then
ch = ch & "." & client(Len(s) - j + 1)
Else
ch = client(Len(s) - j + 1)
End If
End If
Next j
Debug.Print i; " "; ch
Next i
End Sub
Private Function cvrt_bin(n As Integer) As String
Dim s As String
Dim s_bin As String
Dim i As Integer
Dim v As Integer
Dim c As String
Dim t_bin(15) As String
t_bin(0) = "0000"
t_bin(1) = "0001"
t_bin(2) = "0010"
t_bin(3) = "0011"
t_bin(4) = "0100"
t_bin(5) = "0101"
t_bin(6) = "0110"
t_bin(7) = "0111"
t_bin(8) = "1000"
t_bin(9) = "1001"
t_bin(10) = "1010"
t_bin(11) = "1011"
t_bin(12) = "1100"
t_bin(13) = "1101"
t_bin(14) = "1110"
t_bin(15) = "1111"
s = Hex$(n)
For i = 1 To Len(s)
c = Mid$(s, i, 1)
If c >= "A" Then
v = 10 + Asc(c) - 65
Else
v = c
End If
s_bin = s_bin & t_bin(v)
Next i
cvrt_bin = s_bin
End Function
C'est incroyable le nombre de problème que l'on peut
régler de façon simple juste en comptant en binaire...
--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
J'ai testé et ça marche. Par contre j'avoue que je n'ai pas tout saisi. Si je pouvais abuser un peu de ton temps .......
Merci beaucoup.
Dany "Jean-Marc" a écrit dans le message de news: 42728eeb$0$1419$
"Daniel AUBRY" a écrit dans le message de news:4272720d$0$10664$
Bonjour à tous, je cherche à faire un algorithme qui me produise toutes les combinaisons d'un groupe d'éléments.
Par exemple si j'ai 1,2,3 et 4 Je voudrais obtenir : 1 2 3 4 1.2 1.3 1.4 2.3 2.4 3.4 1.2.3 1.2.4 2.3.4 1.2.3.4
(1.2 et 2.1 sont,pour moi, la même chose et ne m'interesse pas)
Hello,
Voici un petit bout de code qui fait ça très bien. La manière est amusante, l'algorithme est efficace, mais l'implémentation que j'en ai faite est volontairement non optimisée, pour bien montrer ce qui se passe;
Voici:
Option Explicit
Private Sub Command1_Click() Dim client(100) Dim nb_cli As Integer Dim i As Integer Dim j As Integer Dim s As String Dim ch As String
nb_cli = 5
For i = 1 To nb_cli client(i) = i Next i
For i = 1 To 2 ^ (nb_cli) s = cvrt_bin(i) ch = "" For j = Len(s) To 1 Step -1 If Mid$(s, j, 1) = "1" Then If ch <> "" Then ch = ch & "." & client(Len(s) - j + 1) Else ch = client(Len(s) - j + 1) End If End If Next j
Debug.Print i; " "; ch Next i End Sub
Private Function cvrt_bin(n As Integer) As String Dim s As String Dim s_bin As String Dim i As Integer Dim v As Integer Dim c As String Dim t_bin(15) As String
t_bin(0) = "0000" t_bin(1) = "0001" t_bin(2) = "0010" t_bin(3) = "0011" t_bin(4) = "0100" t_bin(5) = "0101" t_bin(6) = "0110" t_bin(7) = "0111" t_bin(8) = "1000" t_bin(9) = "1001" t_bin(10) = "1010" t_bin(11) = "1011" t_bin(12) = "1100" t_bin(13) = "1101" t_bin(14) = "1110" t_bin(15) = "1111" s = Hex$(n) For i = 1 To Len(s) c = Mid$(s, i, 1) If c >= "A" Then v = 10 + Asc(c) - 65 Else v = c End If s_bin = s_bin & t_bin(v) Next i cvrt_bin = s_bin End Function
C'est incroyable le nombre de problème que l'on peut régler de façon simple juste en comptant en binaire...
-- Jean-marc "There are only 10 kind of people those who understand binary and those who don't."
Jean-Marc
"Daniel AUBRY" a écrit dans le message de news:42729beb$0$10665$
Bonsoir,
J'ai testé et ça marche. Par contre j'avoue que je n'ai pas tout saisi. Si je pouvais abuser un peu de ton temps .......
Hello, c'est tout simple. Disons que tu as N elements. Pour l'exemple, prenons N=3
Appelons nos 3 elements A, B et C
calculons 2^N = 2^3 = 8
Comptons en binaire de 1 à 2^N-1, donc de 1 à 7 nous avons: 001 (1) 010 (2) 011 (3) 100 (4) 101 (5) 110 (6) 111 (7)
Maintenant on dispose virtuellement les elements au dessus, comme ça (l'odre n'a pas d'importance) ABC 001 010 011 etc.
l'idée est juste de dire: Je calcule la représentation binaire de toutes les valeurs entre 1 et 2^N - 1 je parcours la représentation binaire de gauche à droite Si j'ai un 0, je ne fais rien. Si j'ai un 1, je place à cette position l'element correspondant.
L'idée repose sur le fait que la représentation binaire d'un nombre est exactement ce que tu veux faire. Pour une position donnée dans la représentation binaire, le digit vaut 0 ou 1. Si on compte de 1 à 2^N - 1, on va faire toutes les combinaisons possibles de 0 et de 1, à toutes les places. C'est précisément ce que tu veux faire. il ne reste plus qu'à mettre en pratique:
A B C ----- (1) 0 0 1 => - - C (2) 0 1 0 => - B - (3) 0 1 1 => - B C (4) 1 0 0 => A - - (5) 1 0 1 => A - C (6) 1 1 0 => A B - (7) 1 1 1 => A B C
Est ce plus clair ?
-- Jean-marc "There are only 10 kind of people those who understand binary and those who don't."
"Daniel AUBRY" <mail@daniel-aubry.com> a écrit dans le message de
news:42729beb$0$10665$636a15ce@news.free.fr...
Bonsoir,
J'ai testé et ça marche.
Par contre j'avoue que je n'ai pas tout saisi.
Si je pouvais abuser un peu de ton temps .......
Hello,
c'est tout simple.
Disons que tu as N elements. Pour l'exemple, prenons N=3
Appelons nos 3 elements A, B et C
calculons 2^N = 2^3 = 8
Comptons en binaire de 1 à 2^N-1, donc de 1 à 7
nous avons:
001 (1)
010 (2)
011 (3)
100 (4)
101 (5)
110 (6)
111 (7)
Maintenant on dispose virtuellement les elements au dessus,
comme ça (l'odre n'a pas d'importance)
ABC
001
010
011
etc.
l'idée est juste de dire:
Je calcule la représentation binaire de toutes les valeurs entre
1 et 2^N - 1
je parcours la représentation binaire de gauche à droite
Si j'ai un 0, je ne fais rien.
Si j'ai un 1, je place à cette position l'element correspondant.
L'idée repose sur le fait que la représentation binaire d'un nombre
est exactement ce que tu veux faire. Pour une position donnée dans
la représentation binaire, le digit vaut 0 ou 1.
Si on compte de 1 à 2^N - 1, on va faire toutes les combinaisons possibles
de 0 et de 1, à toutes les places. C'est précisément ce que tu veux faire.
il ne reste plus qu'à mettre en pratique:
A B C
-----
(1) 0 0 1 => - - C
(2) 0 1 0 => - B -
(3) 0 1 1 => - B C
(4) 1 0 0 => A - -
(5) 1 0 1 => A - C
(6) 1 1 0 => A B -
(7) 1 1 1 => A B C
Est ce plus clair ?
--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
"Daniel AUBRY" a écrit dans le message de news:42729beb$0$10665$
Bonsoir,
J'ai testé et ça marche. Par contre j'avoue que je n'ai pas tout saisi. Si je pouvais abuser un peu de ton temps .......
Hello, c'est tout simple. Disons que tu as N elements. Pour l'exemple, prenons N=3
Appelons nos 3 elements A, B et C
calculons 2^N = 2^3 = 8
Comptons en binaire de 1 à 2^N-1, donc de 1 à 7 nous avons: 001 (1) 010 (2) 011 (3) 100 (4) 101 (5) 110 (6) 111 (7)
Maintenant on dispose virtuellement les elements au dessus, comme ça (l'odre n'a pas d'importance) ABC 001 010 011 etc.
l'idée est juste de dire: Je calcule la représentation binaire de toutes les valeurs entre 1 et 2^N - 1 je parcours la représentation binaire de gauche à droite Si j'ai un 0, je ne fais rien. Si j'ai un 1, je place à cette position l'element correspondant.
L'idée repose sur le fait que la représentation binaire d'un nombre est exactement ce que tu veux faire. Pour une position donnée dans la représentation binaire, le digit vaut 0 ou 1. Si on compte de 1 à 2^N - 1, on va faire toutes les combinaisons possibles de 0 et de 1, à toutes les places. C'est précisément ce que tu veux faire. il ne reste plus qu'à mettre en pratique:
A B C ----- (1) 0 0 1 => - - C (2) 0 1 0 => - B - (3) 0 1 1 => - B C (4) 1 0 0 => A - - (5) 1 0 1 => A - C (6) 1 1 0 => A B - (7) 1 1 1 => A B C
Est ce plus clair ?
-- Jean-marc "There are only 10 kind of people those who understand binary and those who don't."
LE TROLL
Mais avec des boucles tous simplement, sans trop réfléchir (ma spécialité), n'arrive-t-on pas à faire la même chose???
' Toutes les combinaisons pour 3 chiffres:
Sub Form_Activate() Dim i As Byte Dim j As Byte Dim k As Byte ' List1.Clear For i = 1 To 9 For j = 0 To 9 For k = 0 To 9 List1.AddItem i & j & k Next k Next j Next i ' Text1 = List1.ListCount ' 300 End Sub ' -----------
"Jean-Marc" a écrit dans le message de news: 42732514$0$1415$
"Daniel AUBRY" a écrit dans le message de news:42729beb$0$10665$
Bonsoir,
J'ai testé et ça marche. Par contre j'avoue que je n'ai pas tout saisi. Si je pouvais abuser un peu de ton temps .......
Hello, c'est tout simple. Disons que tu as N elements. Pour l'exemple, prenons N=3
Appelons nos 3 elements A, B et C
calculons 2^N = 2^3 = 8
Comptons en binaire de 1 à 2^N-1, donc de 1 à 7 nous avons: 001 (1) 010 (2) 011 (3) 100 (4) 101 (5) 110 (6) 111 (7)
Maintenant on dispose virtuellement les elements au dessus, comme ça (l'odre n'a pas d'importance) ABC 001 010 011 etc.
l'idée est juste de dire: Je calcule la représentation binaire de toutes les valeurs entre 1 et 2^N - 1 je parcours la représentation binaire de gauche à droite Si j'ai un 0, je ne fais rien. Si j'ai un 1, je place à cette position l'element correspondant.
L'idée repose sur le fait que la représentation binaire d'un nombre est exactement ce que tu veux faire. Pour une position donnée dans la représentation binaire, le digit vaut 0 ou 1. Si on compte de 1 à 2^N - 1, on va faire toutes les combinaisons possibles de 0 et de 1, à toutes les places. C'est précisément ce que tu veux faire. il ne reste plus qu'à mettre en pratique:
A B C ----- (1) 0 0 1 => - - C (2) 0 1 0 => - B - (3) 0 1 1 => - B C (4) 1 0 0 => A - - (5) 1 0 1 => A - C (6) 1 1 0 => A B - (7) 1 1 1 => A B C
Est ce plus clair ?
-- Jean-marc "There are only 10 kind of people those who understand binary and those who don't."
Mais avec des boucles tous simplement, sans trop réfléchir
(ma spécialité), n'arrive-t-on pas à faire la même chose???
' Toutes les combinaisons pour 3 chiffres:
Sub Form_Activate()
Dim i As Byte
Dim j As Byte
Dim k As Byte
'
List1.Clear
For i = 1 To 9
For j = 0 To 9
For k = 0 To 9
List1.AddItem i & j & k
Next k
Next j
Next i
'
Text1 = List1.ListCount ' 300
End Sub
' -----------
"Jean-Marc" <webmaster@planetejm.atspace.com> a écrit dans
le message de news:
42732514$0$1415$ba620e4c@news.skynet.be...
"Daniel AUBRY" <mail@daniel-aubry.com> a écrit dans le
message de
news:42729beb$0$10665$636a15ce@news.free.fr...
Bonsoir,
J'ai testé et ça marche.
Par contre j'avoue que je n'ai pas tout saisi.
Si je pouvais abuser un peu de ton temps .......
Hello,
c'est tout simple.
Disons que tu as N elements. Pour l'exemple, prenons N=3
Appelons nos 3 elements A, B et C
calculons 2^N = 2^3 = 8
Comptons en binaire de 1 à 2^N-1, donc de 1 à 7
nous avons:
001 (1)
010 (2)
011 (3)
100 (4)
101 (5)
110 (6)
111 (7)
Maintenant on dispose virtuellement les elements au
dessus,
comme ça (l'odre n'a pas d'importance)
ABC
001
010
011
etc.
l'idée est juste de dire:
Je calcule la représentation binaire de toutes les valeurs
entre
1 et 2^N - 1
je parcours la représentation binaire de gauche à droite
Si j'ai un 0, je ne fais rien.
Si j'ai un 1, je place à cette position l'element
correspondant.
L'idée repose sur le fait que la représentation binaire
d'un nombre
est exactement ce que tu veux faire. Pour une position
donnée dans
la représentation binaire, le digit vaut 0 ou 1.
Si on compte de 1 à 2^N - 1, on va faire toutes les
combinaisons possibles
de 0 et de 1, à toutes les places. C'est précisément ce
que tu veux faire.
il ne reste plus qu'à mettre en pratique:
A B C
-----
(1) 0 0 1 => - - C
(2) 0 1 0 => - B -
(3) 0 1 1 => - B C
(4) 1 0 0 => A - -
(5) 1 0 1 => A - C
(6) 1 1 0 => A B -
(7) 1 1 1 => A B C
Est ce plus clair ?
--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
Mais avec des boucles tous simplement, sans trop réfléchir (ma spécialité), n'arrive-t-on pas à faire la même chose???
' Toutes les combinaisons pour 3 chiffres:
Sub Form_Activate() Dim i As Byte Dim j As Byte Dim k As Byte ' List1.Clear For i = 1 To 9 For j = 0 To 9 For k = 0 To 9 List1.AddItem i & j & k Next k Next j Next i ' Text1 = List1.ListCount ' 300 End Sub ' -----------
"Jean-Marc" a écrit dans le message de news: 42732514$0$1415$
"Daniel AUBRY" a écrit dans le message de news:42729beb$0$10665$
Bonsoir,
J'ai testé et ça marche. Par contre j'avoue que je n'ai pas tout saisi. Si je pouvais abuser un peu de ton temps .......
Hello, c'est tout simple. Disons que tu as N elements. Pour l'exemple, prenons N=3
Appelons nos 3 elements A, B et C
calculons 2^N = 2^3 = 8
Comptons en binaire de 1 à 2^N-1, donc de 1 à 7 nous avons: 001 (1) 010 (2) 011 (3) 100 (4) 101 (5) 110 (6) 111 (7)
Maintenant on dispose virtuellement les elements au dessus, comme ça (l'odre n'a pas d'importance) ABC 001 010 011 etc.
l'idée est juste de dire: Je calcule la représentation binaire de toutes les valeurs entre 1 et 2^N - 1 je parcours la représentation binaire de gauche à droite Si j'ai un 0, je ne fais rien. Si j'ai un 1, je place à cette position l'element correspondant.
L'idée repose sur le fait que la représentation binaire d'un nombre est exactement ce que tu veux faire. Pour une position donnée dans la représentation binaire, le digit vaut 0 ou 1. Si on compte de 1 à 2^N - 1, on va faire toutes les combinaisons possibles de 0 et de 1, à toutes les places. C'est précisément ce que tu veux faire. il ne reste plus qu'à mettre en pratique:
A B C ----- (1) 0 0 1 => - - C (2) 0 1 0 => - B - (3) 0 1 1 => - B C (4) 1 0 0 => A - - (5) 1 0 1 => A - C (6) 1 1 0 => A B - (7) 1 1 1 => A B C
Est ce plus clair ?
-- Jean-marc "There are only 10 kind of people those who understand binary and those who don't."
Daniel AUBRY
Salut, non ton idée ne fonctionne pas car tu sais que tu as 3 éléments et tu fais 3 boucles avec i, j et k. Mais moi je ne connais pas le nombre d'éléments et il est, bien sur, variable.
Merci quand même,
Dany
"LE TROLL" <le a écrit dans le message de news:
Mais avec des boucles tous simplement, sans trop réfléchir (ma spécialité), n'arrive-t-on pas à faire la même chose???
' Toutes les combinaisons pour 3 chiffres:
Sub Form_Activate() Dim i As Byte Dim j As Byte Dim k As Byte ' List1.Clear For i = 1 To 9 For j = 0 To 9 For k = 0 To 9 List1.AddItem i & j & k Next k Next j Next i ' Text1 = List1.ListCount ' 300 End Sub ' -----------
"Jean-Marc" a écrit dans le message de news: 42732514$0$1415$
"Daniel AUBRY" a écrit dans le message de news:42729beb$0$10665$
Bonsoir,
J'ai testé et ça marche. Par contre j'avoue que je n'ai pas tout saisi. Si je pouvais abuser un peu de ton temps .......
Hello, c'est tout simple. Disons que tu as N elements. Pour l'exemple, prenons N=3
Appelons nos 3 elements A, B et C
calculons 2^N = 2^3 = 8
Comptons en binaire de 1 à 2^N-1, donc de 1 à 7 nous avons: 001 (1) 010 (2) 011 (3) 100 (4) 101 (5) 110 (6) 111 (7)
Maintenant on dispose virtuellement les elements au dessus, comme ça (l'odre n'a pas d'importance) ABC 001 010 011 etc.
l'idée est juste de dire: Je calcule la représentation binaire de toutes les valeurs entre 1 et 2^N - 1 je parcours la représentation binaire de gauche à droite Si j'ai un 0, je ne fais rien. Si j'ai un 1, je place à cette position l'element correspondant.
L'idée repose sur le fait que la représentation binaire d'un nombre est exactement ce que tu veux faire. Pour une position donnée dans la représentation binaire, le digit vaut 0 ou 1. Si on compte de 1 à 2^N - 1, on va faire toutes les combinaisons possibles de 0 et de 1, à toutes les places. C'est précisément ce que tu veux faire. il ne reste plus qu'à mettre en pratique:
A B C ----- (1) 0 0 1 => - - C (2) 0 1 0 => - B - (3) 0 1 1 => - B C (4) 1 0 0 => A - - (5) 1 0 1 => A - C (6) 1 1 0 => A B - (7) 1 1 1 => A B C
Est ce plus clair ?
-- Jean-marc "There are only 10 kind of people those who understand binary and those who don't."
Salut,
non ton idée ne fonctionne pas car tu sais que tu as 3 éléments et tu fais 3
boucles
avec i, j et k.
Mais moi je ne connais pas le nombre d'éléments et il est, bien sur,
variable.
Merci quand même,
Dany
"LE TROLL" <le troll@paris.fr> a écrit dans le message de news:
uuPomUWTFHA.3188@TK2MSFTNGP09.phx.gbl...
Mais avec des boucles tous simplement, sans trop réfléchir (ma
spécialité), n'arrive-t-on pas à faire la même chose???
' Toutes les combinaisons pour 3 chiffres:
Sub Form_Activate()
Dim i As Byte
Dim j As Byte
Dim k As Byte
'
List1.Clear
For i = 1 To 9
For j = 0 To 9
For k = 0 To 9
List1.AddItem i & j & k
Next k
Next j
Next i
'
Text1 = List1.ListCount ' 300
End Sub
' -----------
"Jean-Marc" <webmaster@planetejm.atspace.com> a écrit dans le message de
news: 42732514$0$1415$ba620e4c@news.skynet.be...
"Daniel AUBRY" <mail@daniel-aubry.com> a écrit dans le message de
news:42729beb$0$10665$636a15ce@news.free.fr...
Bonsoir,
J'ai testé et ça marche.
Par contre j'avoue que je n'ai pas tout saisi.
Si je pouvais abuser un peu de ton temps .......
Hello,
c'est tout simple.
Disons que tu as N elements. Pour l'exemple, prenons N=3
Appelons nos 3 elements A, B et C
calculons 2^N = 2^3 = 8
Comptons en binaire de 1 à 2^N-1, donc de 1 à 7
nous avons:
001 (1)
010 (2)
011 (3)
100 (4)
101 (5)
110 (6)
111 (7)
Maintenant on dispose virtuellement les elements au dessus,
comme ça (l'odre n'a pas d'importance)
ABC
001
010
011
etc.
l'idée est juste de dire:
Je calcule la représentation binaire de toutes les valeurs entre
1 et 2^N - 1
je parcours la représentation binaire de gauche à droite
Si j'ai un 0, je ne fais rien.
Si j'ai un 1, je place à cette position l'element correspondant.
L'idée repose sur le fait que la représentation binaire d'un nombre
est exactement ce que tu veux faire. Pour une position donnée dans
la représentation binaire, le digit vaut 0 ou 1.
Si on compte de 1 à 2^N - 1, on va faire toutes les combinaisons
possibles
de 0 et de 1, à toutes les places. C'est précisément ce que tu veux
faire.
il ne reste plus qu'à mettre en pratique:
A B C
-----
(1) 0 0 1 => - - C
(2) 0 1 0 => - B -
(3) 0 1 1 => - B C
(4) 1 0 0 => A - -
(5) 1 0 1 => A - C
(6) 1 1 0 => A B -
(7) 1 1 1 => A B C
Est ce plus clair ?
--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
Salut, non ton idée ne fonctionne pas car tu sais que tu as 3 éléments et tu fais 3 boucles avec i, j et k. Mais moi je ne connais pas le nombre d'éléments et il est, bien sur, variable.
Merci quand même,
Dany
"LE TROLL" <le a écrit dans le message de news:
Mais avec des boucles tous simplement, sans trop réfléchir (ma spécialité), n'arrive-t-on pas à faire la même chose???
' Toutes les combinaisons pour 3 chiffres:
Sub Form_Activate() Dim i As Byte Dim j As Byte Dim k As Byte ' List1.Clear For i = 1 To 9 For j = 0 To 9 For k = 0 To 9 List1.AddItem i & j & k Next k Next j Next i ' Text1 = List1.ListCount ' 300 End Sub ' -----------
"Jean-Marc" a écrit dans le message de news: 42732514$0$1415$
"Daniel AUBRY" a écrit dans le message de news:42729beb$0$10665$
Bonsoir,
J'ai testé et ça marche. Par contre j'avoue que je n'ai pas tout saisi. Si je pouvais abuser un peu de ton temps .......
Hello, c'est tout simple. Disons que tu as N elements. Pour l'exemple, prenons N=3
Appelons nos 3 elements A, B et C
calculons 2^N = 2^3 = 8
Comptons en binaire de 1 à 2^N-1, donc de 1 à 7 nous avons: 001 (1) 010 (2) 011 (3) 100 (4) 101 (5) 110 (6) 111 (7)
Maintenant on dispose virtuellement les elements au dessus, comme ça (l'odre n'a pas d'importance) ABC 001 010 011 etc.
l'idée est juste de dire: Je calcule la représentation binaire de toutes les valeurs entre 1 et 2^N - 1 je parcours la représentation binaire de gauche à droite Si j'ai un 0, je ne fais rien. Si j'ai un 1, je place à cette position l'element correspondant.
L'idée repose sur le fait que la représentation binaire d'un nombre est exactement ce que tu veux faire. Pour une position donnée dans la représentation binaire, le digit vaut 0 ou 1. Si on compte de 1 à 2^N - 1, on va faire toutes les combinaisons possibles de 0 et de 1, à toutes les places. C'est précisément ce que tu veux faire. il ne reste plus qu'à mettre en pratique:
A B C ----- (1) 0 0 1 => - - C (2) 0 1 0 => - B - (3) 0 1 1 => - B C (4) 1 0 0 => A - - (5) 1 0 1 => A - C (6) 1 1 0 => A B - (7) 1 1 1 => A B C
Est ce plus clair ?
-- Jean-marc "There are only 10 kind of people those who understand binary and those who don't."
Daniel AUBRY
Très clair. Merci beaucoup.
Dany
"Jean-Marc" a écrit dans le message de news: 42732514$0$1415$
"Daniel AUBRY" a écrit dans le message de news:42729beb$0$10665$
Bonsoir,
J'ai testé et ça marche. Par contre j'avoue que je n'ai pas tout saisi. Si je pouvais abuser un peu de ton temps .......
Hello, c'est tout simple. Disons que tu as N elements. Pour l'exemple, prenons N=3
Appelons nos 3 elements A, B et C
calculons 2^N = 2^3 = 8
Comptons en binaire de 1 à 2^N-1, donc de 1 à 7 nous avons: 001 (1) 010 (2) 011 (3) 100 (4) 101 (5) 110 (6) 111 (7)
Maintenant on dispose virtuellement les elements au dessus, comme ça (l'odre n'a pas d'importance) ABC 001 010 011 etc.
l'idée est juste de dire: Je calcule la représentation binaire de toutes les valeurs entre 1 et 2^N - 1 je parcours la représentation binaire de gauche à droite Si j'ai un 0, je ne fais rien. Si j'ai un 1, je place à cette position l'element correspondant.
L'idée repose sur le fait que la représentation binaire d'un nombre est exactement ce que tu veux faire. Pour une position donnée dans la représentation binaire, le digit vaut 0 ou 1. Si on compte de 1 à 2^N - 1, on va faire toutes les combinaisons possibles de 0 et de 1, à toutes les places. C'est précisément ce que tu veux faire. il ne reste plus qu'à mettre en pratique:
A B C ----- (1) 0 0 1 => - - C (2) 0 1 0 => - B - (3) 0 1 1 => - B C (4) 1 0 0 => A - - (5) 1 0 1 => A - C (6) 1 1 0 => A B - (7) 1 1 1 => A B C
Est ce plus clair ?
-- Jean-marc "There are only 10 kind of people those who understand binary and those who don't."
Très clair.
Merci beaucoup.
Dany
"Jean-Marc" <webmaster@planetejm.atspace.com> a écrit dans le message de
news: 42732514$0$1415$ba620e4c@news.skynet.be...
"Daniel AUBRY" <mail@daniel-aubry.com> a écrit dans le message de
news:42729beb$0$10665$636a15ce@news.free.fr...
Bonsoir,
J'ai testé et ça marche.
Par contre j'avoue que je n'ai pas tout saisi.
Si je pouvais abuser un peu de ton temps .......
Hello,
c'est tout simple.
Disons que tu as N elements. Pour l'exemple, prenons N=3
Appelons nos 3 elements A, B et C
calculons 2^N = 2^3 = 8
Comptons en binaire de 1 à 2^N-1, donc de 1 à 7
nous avons:
001 (1)
010 (2)
011 (3)
100 (4)
101 (5)
110 (6)
111 (7)
Maintenant on dispose virtuellement les elements au dessus,
comme ça (l'odre n'a pas d'importance)
ABC
001
010
011
etc.
l'idée est juste de dire:
Je calcule la représentation binaire de toutes les valeurs entre
1 et 2^N - 1
je parcours la représentation binaire de gauche à droite
Si j'ai un 0, je ne fais rien.
Si j'ai un 1, je place à cette position l'element correspondant.
L'idée repose sur le fait que la représentation binaire d'un nombre
est exactement ce que tu veux faire. Pour une position donnée dans
la représentation binaire, le digit vaut 0 ou 1.
Si on compte de 1 à 2^N - 1, on va faire toutes les combinaisons possibles
de 0 et de 1, à toutes les places. C'est précisément ce que tu veux faire.
il ne reste plus qu'à mettre en pratique:
A B C
-----
(1) 0 0 1 => - - C
(2) 0 1 0 => - B -
(3) 0 1 1 => - B C
(4) 1 0 0 => A - -
(5) 1 0 1 => A - C
(6) 1 1 0 => A B -
(7) 1 1 1 => A B C
Est ce plus clair ?
--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
"Jean-Marc" a écrit dans le message de news: 42732514$0$1415$
"Daniel AUBRY" a écrit dans le message de news:42729beb$0$10665$
Bonsoir,
J'ai testé et ça marche. Par contre j'avoue que je n'ai pas tout saisi. Si je pouvais abuser un peu de ton temps .......
Hello, c'est tout simple. Disons que tu as N elements. Pour l'exemple, prenons N=3
Appelons nos 3 elements A, B et C
calculons 2^N = 2^3 = 8
Comptons en binaire de 1 à 2^N-1, donc de 1 à 7 nous avons: 001 (1) 010 (2) 011 (3) 100 (4) 101 (5) 110 (6) 111 (7)
Maintenant on dispose virtuellement les elements au dessus, comme ça (l'odre n'a pas d'importance) ABC 001 010 011 etc.
l'idée est juste de dire: Je calcule la représentation binaire de toutes les valeurs entre 1 et 2^N - 1 je parcours la représentation binaire de gauche à droite Si j'ai un 0, je ne fais rien. Si j'ai un 1, je place à cette position l'element correspondant.
L'idée repose sur le fait que la représentation binaire d'un nombre est exactement ce que tu veux faire. Pour une position donnée dans la représentation binaire, le digit vaut 0 ou 1. Si on compte de 1 à 2^N - 1, on va faire toutes les combinaisons possibles de 0 et de 1, à toutes les places. C'est précisément ce que tu veux faire. il ne reste plus qu'à mettre en pratique:
A B C ----- (1) 0 0 1 => - - C (2) 0 1 0 => - B - (3) 0 1 1 => - B C (4) 1 0 0 => A - - (5) 1 0 1 => A - C (6) 1 1 0 => A B - (7) 1 1 1 => A B C
Est ce plus clair ?
-- Jean-marc "There are only 10 kind of people those who understand binary and those who don't."