fiorah
Messages postés6Date d'inscriptionmercredi 15 novembre 2000StatutMembreDernière intervention 3 mai 2005
-
2 mai 2005 à 17:19
fiorah
Messages postés6Date d'inscriptionmercredi 15 novembre 2000StatutMembreDernière intervention 3 mai 2005
-
3 mai 2005 à 01:36
Bonjour,
J'ai des valeurs que je souhaite additionner entre elles afin de tester le résultat.
Comment prévoir et tester toutes les combinaisons possibles ?
For i = 1 To (2 ^ (Nb)) - 1
z = 2 ^ (Nb - 1) j 0: n Nb: s = ""
While z > 0 If (i And z) Then j j + 1: s s & T(n) z z \ 2: n n - 1
Wend
If j > 1 Then Debug.Print s
Next
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 2 mai 2005 à 20:37
Ton problème est intéressant... Cependant, je crois que ta formule est trop compliquée!!! Il faut se souvenir d'un truc pour calculer le nombre totale de possibilités : 8=23
C'est à dire, si on a 3 cases et deux possibilités par cases (000-111) on n'a que 8 combinaisons possibles. En fait, cette "formule" permet de connaitre le nombre de "nombres" dans une base donnée avec un nombre de chiffres donné. Autrement dit, la "formule" est :
NbrDePossibilités = Base puissance Cases
où Cases est le nombre de nombres.
Max=B
<SUP>Nbr
</SUP>Je ne comprends d'ailleurs pas ton équation!!! Faudrait-en expliquer les termes tu ne crois pas???
Mais ton problème est plus complexe puisque visiblement tu ne veux pas de "a+a"! Je crois qu'il faut déjà le diviser en 2 parties. C'est à dire, la première, connaitre le nombre de formes (2 [x+x], 3 [x+x+x], ...) et la deuxième, calculer, pour chacune de ces formes le nombre de possibilités sans doublons. Resterait plus qu'a additionner le tout.
Si on pose le problème à plat concernant les formes, il ressort déjà clairement une règle :
avec 2 entités, on peut avoir qu'une addition
avec 3 entités et le nombre maximum d'additions on n'a qu'une seule possibilité (ABC => A+B+C [puisque l'addition est commutative!])
avec 4, idem.
Donc, si on veut le nombre maximum d'additions possible dans une forme donnée en utilisant toutes les entittés, ce sera toujours 1!!!
(oui, je sais, c'est con mais faut quand même bien le dire!!!)
Enfin, tout ça pour dire que j'en sais foutrement rien et que j'aimerais autant que toi le savoir!!!
fiorah
Messages postés6Date d'inscriptionmercredi 15 novembre 2000StatutMembreDernière intervention 3 mai 2005 2 mai 2005 à 22:51
Dans l'absolu, tu as raison.
Mais dans le cas qui m'intéresse non, étant donné que ce que je veux faire
c'est tester la somme des valeurs pour évaluer le résultat de toutes les
opérations possibles. Autrement dit, il me faut au moins 2 valeurs, ce qui
exclue de facto les valeure seules.
Fior@H.
______________________________________
Salut,
Si je suis ton raisonnement fiorah, tu as oublié ::
a;b;c;d
donc 15 possibilités
Loup Gris
Vous n’avez pas trouvé la réponse que vous recherchez ?
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 2 mai 2005 à 22:59
Mais que cherches-tu vraiment à faire au juste ???
N'y aurait-il pas un autre moyen d'y arriver en contournant ton problème par quelque astuce de prog ???
Explique, chuit sûr qu'on va trouver la solution ;-)
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 2 mai 2005 à 23:07
Si j'ai bien compris... moi, ce que je te propose c'est d'implémenter une fonction qui fera successivement chaque test. Alors certes, c'est moins propre qu'une fonction mathématique mais c'est toujours mieux que de rester bloqué 20 ans sur un truc pareil!!! Ceci dit, si tu as beaucoup d'entités, ça risque de ne pas être super rapide (encore que, avec les processeurs de nos jours!!!)... Mais ce n'est peut-être pas non plus le but!!!
Si tu veux je peux te coder un ptit truc si tu m'expliques mieux...
fiorah
Messages postés6Date d'inscriptionmercredi 15 novembre 2000StatutMembreDernière intervention 3 mai 2005 2 mai 2005 à 23:44
La formule que j'ai donné n'est autre que le binôme de Newton (bon, là je fais le cake, mais y'a 1 semaine j'en avais jamais entendu parler ).
Si je ne me suis pas étendu sur le sujet, c'est que ce n'est pas ce qui a motivé
mon post au départ, étant donné que ça, je sais déjà le calculer.
Ce qui m'intéresse donc, n'est pas de savoir le nombre de calculs possibles, mais de
tous les tester individuellement.
Ceci étant, je peux qd même expliquer la formule pour calculer le nbre
de possibilités :
(Cnk=n!/(k!*(n-k)!))
1° n représente le nombre total de valeurs
k représente le nombre de valeurs que je veux additionner ensemble
(donc, le max de k est n)
2° le '!' est la factorielle (ex !3=3x2x1=6
!20=20x19x18...x1=190)
pour info voir la fonction Excel FACT() et, tant que j'y suis, je fournis ma version
VB de ladite fonction EXCEL :
--------------------------------------------
Function Fact(nb As Integer) As Variant
Dim i As Integer
' Donne la factorielle du nbre passé en argument
' ex : Fact(4)=4*3*2*1=24
If nb 0 Then Fact 1: Exit Function
For i = nb To 1 Step -1 If i nb Then Fact nb Else Fact = Fact * i
Next
End Function
--------------------------------------------
3° Donc, si je veux savoir combien il y a de calculs possibles sur 2 valeurs
parmi 20 valeurs, je fais ds la fenêtre de debug (cf binôme de Newton) :
? FACT(20)/(FACT(2)*FACT(20-2))
-> ce qui donne bien 190
et pour ce qui m'intéresse, je retrancherai de ces 190 les 20 possibilités ne
concernant qu'1 valeur (vu que pour additionner, il m'en faudra au moins 2)
=> il me reste donc 170 additions possibles pour une somme de 2 valeurs
parmi 20
Reste ensuite que pour 20 valeurs, il faut tester également les calculs sur
3 valeurs, 4 valeurs... jusqu'au dernier calcul impliquant 20 valeurs et pour lequel
on sait qu'il n'y aura forcément qu'une seule opération possible.
Bref j'ai codé une fonction permettant de calculer tout ça et juste pour 20
valeurs, il y a 1.048.555 possibilités (pour 30 : 1.073.741.793)
Maintenant reste plus qu'à coder ds des boucles pour gérer tout ça
Si ça peut inspirer quelqu'un, j'ai trouvé une page web qui fait ça, mais le code
est en javascript et c'est pas mon truc :
fiorah
Messages postés6Date d'inscriptionmercredi 15 novembre 2000StatutMembreDernière intervention 3 mai 2005 2 mai 2005 à 23:50
petite précision, qd j'écris :
valeurs, il y a 1.048.555 possibilités (pour 30 : 1.073.741.793)
Maintenant reste plus qu'à coder ds des boucles pour gérer tout ça>
Je veux en fait dire que j'ai déjà codé ce qui me permet de savoir le nbre
total de calculs possibles. Mais en fait, ce qui m'intéresse est bien de tous
les tester, et c'est là que j'ai besoin d'aide.
fiorah
Messages postés6Date d'inscriptionmercredi 15 novembre 2000StatutMembreDernière intervention 3 mai 2005 2 mai 2005 à 23:56
T'as tout compris
La fonction Mathématique, c'était juste pour calculer le nombre de possibilités.
Par contre ce que je voudrais c'est justement de monter une fonction qui
saura faire tous les calculs, quel que soit leur nombre ! Evidemment je verrai
ensuite les temps de traitement pour voir où je devrais borner, encore que,
je pourrai tjrs rafraîchir régulièrement un txtbox afin de voir évoluer les calculs et de
ne pas avoir l'impression d'être 'planté'
[mailto:Fior@H Fior@H].
__________________________________________________________
Si j'ai bien compris... moi, ce que je te propose c'est d'implémenter une fonction qui fera successivement chaque test. Alors certes, c'est moins propre qu'une fonction mathématique mais c'est toujours mieux que de rester bloqué 20 ans sur un truc pareil!!! Ceci dit, si tu as beaucoup d'entités, ça risque de ne pas être super rapide (encore que, avec les processeurs de nos jours!!!)... Mais ce n'est peut-être pas non plus le but!!!
Si tu veux je peux te coder un ptit truc si tu m'expliques mieux...