Page 1 sur 1
[R] Qui aime les maths ?
Posté : lun. 20 déc. 2010 18:17
par cutprod
Bonjour a tous.
Je cherche a faire un srcipt qui a pour but d'identifier des variables en fonctions de la valeur d'une autre (une seule!)
La valeur de la variable de mesure ($var) varie en fonction de 6 autre variable de valeures fixe=
A = 10
B = 50
C = 100
D = 200
E = 500
F = 1000
Je voudrais savoir si je dois me lister a la main chaque combinaisons possible ou si il existe une equation plus rapide ou une fonction...
Pour l'instant et pour vous aider a comprendre ça donne cela =
► Afficher le texte
A = 10
B = 50
C = 100
D = 200
E = 500
F = 1000
------------------------------------------------------------
If $var = 10 then $zone = A
If $var = 50 then $zone = B
If $var = 100 then $zone = C
If $var = 200 then $zone = D
If $var = 500 then $zone = E
If $var = 1000 then $zone = F
-------------------------------------------------------------
If $var = 60 then $zone = A + B
If $var = 110 then $zone = A + C
If $var = 210 then $zone = A + D
If $var = 510 then $zone = A + E
If $var = 1010 then $zone = A + F
If $var = 150 then $zone = B + C
If $var = 250 then $zone = B + D
If $var = 550 then $zone = B + E
If $var = 1050 then $zone = B + F
If $var = 300 then $zone = C + D
If $var = 600 then $zone = C + E
If $var = 1100 then $zone = C + F
If $var = 700 then $zone = D + E
If $var = 1200 then $zone = D + F
If $var = 1500 then $zone = E + F
-----------------------------------------------------------------
If $var = 160 then $zone = A + B + C
If $var = 260 then $zone = A + B + C + D
If $var = 760 then $zone = A + B + C + D + E
If $var = 1760 then $zone = A + B + C + D + E + F
Voila!!
Moi j'aime pas, non disons que j'ame mais je suis pas fort en math

Re: [..] Qui aime les maths ?
Posté : lun. 20 déc. 2010 18:36
par sylvanie
il faut passer par un tableau à double entrée de type lettre;valeur et surtout le classer par ordre décroissant pour pouvoir décomposer la valeur facilement
ici, un exple retournant en plus le code @error à 1 si la valeur passée n'est pas entièrement décomposable :
Code : Tout sélectionner
Dim $tab_zone[6][2]=[["F",1000],["E",500],["D",200],["C",100],["B",50],["A",10]]
$zoneret=indentify_zone(1250)
$err=@error
MsgBox(0,"découpage de zone de 1250 : ",$zoneret&" erreur="&$err)
$zoneret=indentify_zone(1255)
$err=@error
MsgBox(0,"découpage de zone de 1255 : ",$zoneret&" erreur="&$err)
Func indentify_zone($val)
Local $zone=""
Local $first_ind=0
While ($val >= 10)
For $ind=$first_ind to 6
If ($tab_zone[$ind][1]<=$val) Then
$val-=$tab_zone[$ind][1]
$first_ind=$ind
$zone&=$tab_zone[$ind][0]&"+"
ExitLoop
EndIf
Next
WEnd
;on supprime le dernier "+" en fin de chaîne
$zone=StringRegExpReplace($zone,"\+\Z","")
If ($val<> 0) Then
SetError(1)
Return $zone
EndIf
SetError(0)
Return $zone
EndFunc
NB : le $firstind est une petite optimisation pour ne pas reparcourir le tableau depuis le début. En théorie on devrai mettre +1, mais si vous avez par exple comme valeur 20, alors on va faire 10, puis l'indice passe à 6, et là erreur d'index. Ceci permet de traîter les cas où une zone est déclarée 2 fois
Re: [..] Qui aime les maths ?
Posté : lun. 20 déc. 2010 19:08
par Iste
moi j'aurai plutot parlé de BitAND() mais je suis pas bien sur d'avoir saisie le probleme
Re: [..] Qui aime les maths ?
Posté : lun. 20 déc. 2010 19:12
par bloodwolff
Voilà , tu peux changer les lettres de remplacement et les chiffres voulu
Tu peux même modifier la grosseur des tableaux en autant qu'il soit de la même taille
Code : Tout sélectionner
#include <Array.au3>
dim $chiffre[4] = [60,360,810,1100]
Dim $aArray[6] = [10, 50, 100, 200, 500, 1000]
Dim $bArray[6] = ["A","B","C","D","E","F"]
$Array = Combinaison_plus($aArray, $bArray)
_ArrayDisplay($Array)
For $i=0 to 3
MsgBox(0,"", $chiffre[$i] & " = " & $Array[_ArraySearch($Array,$chiffre[$i],1)][1])
Next
Func Combinaison_plus($aArray, $bArray)
If UBound($aArray) <> UBound($bArray) Then Return SetError(1)
Dim $Array_final[1][2]
For $i = 1 To UBound($aArray)
$aArrayCombo = _ArrayCombinations($aArray, $i, "+")
For $ii = 1 to $aArrayCombo[0]
$Array_final[0][0] += 1
ReDim $Array_final[$Array_final[0][0]+1][2]
$Array_final[$Array_final[0][0]][1] = $aArrayCombo[$ii]
Next
Next
For $i=1 To $Array_final[0][0]
$Array_final[$i][0] = Execute($Array_final[$i][1])
For $ii=0 To UBound($aArray)-1
$Array_final[$i][1] = StringRegExpReplace($Array_final[$i][1], "\A(" & $aArray[$ii] & ")\z", $bArray[$ii])
$Array_final[$i][1] = StringRegExpReplace($Array_final[$i][1], "\+(" & $aArray[$ii] & ")\+", "+" & $bArray[$ii] & "+")
$Array_final[$i][1] = StringRegExpReplace($Array_final[$i][1], "\+(" & $aArray[$ii] & ")\z", "+" & $bArray[$ii])
$Array_final[$i][1] = StringRegExpReplace($Array_final[$i][1], "\A(" & $aArray[$ii] & ")\+", $bArray[$ii] & "+")
Next
Next
_ArraySort($Array_final,0,1)
Return $Array_final
EndFunc
Re: [..] Qui aime les maths ?
Posté : lun. 20 déc. 2010 19:17
par sylvanie
le soucis ici concernant le Bitand, c'est qu'on n'a pas de puissance de deux disctinctes pour dicerner les différents cas.
Par contre si on avait eu 1 2 4 8 16 ... pour A B C ... c'est clair que Bitand est la meilleure solution
Re: [..] Qui aime les maths ?
Posté : lun. 20 déc. 2010 19:36
par cutprod
Merci pour vos réponses, je regarde tout ca et je vous répond tout a l'heure.
Re: [..] Qui aime les maths ?
Posté : lun. 20 déc. 2010 19:50
par zeshrek
Ouh la la !!!! que de complications !
En fait c'est le même principe qu'une extraction de facteurs premiers sauf que la il faut juste extraire les valeurs qu'il cherche.
Allez hop, en moins de 20 lignes :
► Afficher le texte
Code : Tout sélectionner
dim $var = 1210 ; valeur donnée au pif
Global $formule = ""
_formule($var,$formule)
MsgBox(0, "Formule", $formule)
Func _formule($var,ByRef $formule)
Local $valeurs[6] = [10, 50, 100, 200, 500, 1000]
Local $lettres[6] = ["A", "B", "C", "D", "E", "F"]
For $i = 5 To 0 Step -1
If $var - $valeurs[$i] >= 0 Then
$var = $var - $valeurs[$i]
$formule = $lettres[$i] & " + " & $formule
EndIf
Next
$formule = StringTrimRight($formule, 3)
EndFunc
Re: [..] Qui aime les maths ?
Posté : lun. 20 déc. 2010 20:54
par cutprod
Alors la chapeau!!
Merci a tous mais c'est pépé shrek qui remporte la "palme", simple, efficace, beau propre, ca sent bon même!!
Dis tu sais que quand je t' appel pépé c'est plus affectueux et taquin qu'autre chose! Et aussi (j'en suis pas sur, Tlem pourrait le confirmer) tu es le doyen du forum...
Re: [..] Qui aime les maths ?
Posté : lun. 20 déc. 2010 20:57
par Jerome
cutprod a écrit : efficace, beau propre, ca sent bon même
Tout le contraire d'un ogre

Re: [..] Qui aime les maths ?
Posté : lun. 20 déc. 2010 21:11
par cutprod
Houla!!excuse moi mais je me trompe c'est pas toi qui a 65 ans!! Depuis l'autre jour je t' appel pépé mais pas du tout!!Je confond avec un autre membre
Tu as vu comme je suis attentif et perspicace: j'ai regarder en bas de ton avatar, et j'ai découvert ton age
Merci as toi pour la solution du problème.

Re: [R] Qui aime les maths ?
Posté : lun. 20 déc. 2010 21:23
par cutprod
Mais alors c'est qui ce mec de 65 ans??
Quelqu'un connais un membre de cet age vénérable?
Si tu me lis, manifeste toi (parce que la je me fais peur

)
Re: [R] Qui aime les maths ?
Posté : mar. 21 déc. 2010 00:20
par Tlem
Hé bien, il s'agit de OldChapZ, qui soit dit en passant, a fêté ses 65 bougies très ressemant ...
http://www.autoitscript.fr/forum/viewto ... f=9&t=6490
Re: [R] Qui aime les maths ?
Posté : mar. 21 déc. 2010 00:27
par bloodwolff
OWII je corrige le big boss
Ce n'est pas "ressemant " mais "récemment"
Re: [R] Qui aime les maths ?
Posté : mar. 21 déc. 2010 00:50
par Tlem
Humpffff
Allez, je vais me coucher, je suis trop crevé pour réfléchir correctement.

Re: [R] Qui aime les maths ?
Posté : mar. 21 déc. 2010 03:01
par matwachich
Tu dis que Shrek est le doyen, et t'as même pas remarquer que Tlem est plus agé d'un an!!!
PS: Ils vont pas être content, pépé à 40 piges...
Re: [R] Qui aime les maths ?
Posté : mar. 21 déc. 2010 09:09
par zeshrek
C'qui vous faudrait a vous les p'tits jeunes c'est une bonne guerre ! Vous faire tuer, ca vous apprendrait a vivre ! Ah ca, d'mon temps on avait le respect des anciens nous ! Mais tout se perd ma bonne dame. Y a qu'a voir la météo, y a plus d'saison !
Bon, maintenant que pépé a fini de radoter, il voudrait juste faire remarquer qu'il lui reste quand même assez de neurones pour faire de bons p'tits scripts...
Re: [R] Qui aime les maths ?
Posté : mar. 21 déc. 2010 12:07
par Tlem
Dit moi zeshrek, puisque nous sommes considéré comme des ptits vieux, je me permet de montrer une petite photo de nous deux afin de ce présenter au forum.

Re: [R] Qui aime les maths ?
Posté : mar. 21 déc. 2010 12:18
par zeshrek
"Oh bravo !"
(Dr Beckett / Scott Bakula - Code Quantum)
Re: [R] Qui aime les maths ?
Posté : mar. 21 déc. 2010 12:25
par cutprod
Mais non! a 65 ok pour "pépé" mais pas a la quarantaine!! Il y a eu confusion!
Vous etes dans la "fleur" de l'age et je suis pas loin derriere vous:)