F-BVXT le 12/06/2012 à 20:36
Bonjour,
Je suis en train de faire un programme mais j'ai une expression vraiment longue à entrer, que je ne sais pas vraiment comment optimiser :
Code
If XY=L²(1)L²(2:EffVar L²(1)EffVar L²(2
If XY=L²(3)L²(4:EffVar L²(3)EffVar L²(4
If XY=L²(5)L²(6:EffVar L²(5)EffVar L²(6
If XY=L²(7)L²(8:EffVar L²(7)EffVar L²(8
...
If XY=L²(33)L²(34:EffVar L²(33)EffVar L²(34
Je sais que c'est faisable en utilisant une boucle "For" mais ça risque quand même de ralentir le programme. Donc j'ai pensé tout réunir dans une seule condition :
Code
If max(XY={L²(1)L²(2),L²(3)L²(4),...,L²(33)L²(34
Mais le problème c'est qu'il me faudrait une fonction qui me dirait quel produit est égal à XY pour pouvoir l'effacer, parce que là, je ne sais pas quoi mettre après.
Si vous avez des propositions, je suis preneur.
Merci d'avance.
linkakro le 12/06/2012 à 22:22
Si on sépare les données en deux listes, il sera possible d'effectuer un simple produit ou test.
Mettons L2(2) dans L3(1), L2(3) dans L2(2), L2(4) dans L3(2) ...
Code
L2L3->L4
For(A,1,17
If XY=L4(A
Then
0->L2(A
0->L3(A
End
...
End
Le produit XY est-il une manière de tester une double égalité ?
Quel type de données peuvent représenter X,Y et la liste ?
Est-ce possible que plusieurs If soient validés au même moment ?
Si non, il est probablement possible d'effectuer une simple affectation.
Mais cela reste encore trop compliqué si je ne connais pas tout ton concept.
Si on a deux listes, et qu'une seule égalité est possible, cela donne
Code
max({1,2,...,16,17}(XY=L2L3->A
If A
Then
0->L2(A
0->L3(A
End
On peut remplacer ma {1,2,...} par suite(A,A,1,17) mais ce serait plus lent.
Si on a deux listes, qu'on veut tester deux égalités, et qu'une seule paire d'égalités est possible, cela donne
Code
max({1,2,...,16,17}(max(X=L2,Y=L3->A
If A
Then
0->L2(A
0->L3(A
End
On peut remplacer ma {1,2,...} par suite(A,A,1,17) mais ce serait plus lent.
S'il peut y avoir plusieurs les égalités valides, il convient plutôt d'écrire :
Code
max({1,2,...,16,17}(XY=L2L3->A
While A
0->L2(A
0->L3(A
max({1,2,...,16,17}(XY=L2L3->A
End
Je n'ai pas testé grandeur nature mes propositions.