Rev 16120 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
20 | reyssat | 1 | !set methtit2=Multiplier une inégalité par une expression à signe constant |
2 | !set methtit=Multiplier une inégalité par une expression |
||
3 | !set methenv=ZZ QQ RR |
||
4 | !set methparmtype=function,parm inequality >,choice,parm inequality > |
||
5 | !set methparmrelax=4 |
||
6 | !set methhelp=Cette méthode transforme une inégalité du style \(A > B) en\ |
||
16209 | bpr | 7 | une inégalité \(A*f > B*f) (ou \(A*f < B*f)),\ |
8 | où \(f) est une expression algébrique\ |
||
9 | de signe constant. La méthode permet à \(f) de s'annuler. De ce fait, il\ |
||
10 | n'y a pas forcément équivalence entre l'inégalité de départ et celle\ |
||
11 | transformée ; elle s'applique donc uniquement sur les hypothèses. |
||
20 | reyssat | 12 | |
13 | !if $wims_read_parm iswordof form check |
||
16117 | bpr | 14 | !goto $wims_read_parm |
20 | reyssat | 15 | !endif |
16 | |||
17 | !exit |
||
18 | :form |
||
16117 | bpr | 19 | Multiplier l'inégalité |
20 | !read deduc/methparm.phtml 2 |
||
16120 | bpr | 21 | $ par l'expression |
16117 | bpr | 22 | !read deduc/methparm.phtml 1,10 |
23 | qui est |
||
24 | !formselect methparm3 list 0,-1,1 prompt \ |
||
20 | reyssat | 25 | $ch_choose, négative ou nulle, positive ou nulle |
16117 | bpr | 26 | parce que |
27 | !set ch_optional=c'est un nombre |
||
28 | !read deduc/methparm.phtml 4 |
||
20 | reyssat | 29 | !exit |
30 | :check |
||
16117 | bpr | 31 | !bound methparm3 within -1,0,1 default 0 |
32 | !if $methparm3=0 |
||
20 | reyssat | 33 | error=empty_data |
34 | !exit |
||
16117 | bpr | 35 | !endif |
36 | !distribute items $methparmobj2 into data,left,sign,right |
||
37 | !read deduc/sub/checkineq ($methparm1),=,0 |
||
38 | ztest=$out |
||
39 | !if $ztest=true |
||
20 | reyssat | 40 | zr=zero |
41 | sign2=>= |
||
42 | !goto OK |
||
16117 | bpr | 43 | !endif |
44 | !if $ztest=bad |
||
20 | reyssat | 45 | !if $methparm4<1 |
16117 | bpr | 46 | :bad |
47 | sens=!item ($methparm3+3)/2 of négatif, positif |
||
48 | error=Je ne vois pas pourquoi \($methparm1) est $sens. |
||
49 | !exit |
||
20 | reyssat | 50 | !endif |
51 | !distribute items $methparmobj4 into data,left2,sign2,right2 |
||
52 | gt=> |
||
53 | lt=< |
||
54 | eq=$(empty)= |
||
55 | !if ($methparm3>0 and $lt isin $sign2) or \ |
||
16117 | bpr | 56 | ($methparm3<0 and $gt isin $sign2) |
57 | !exchange left2,right2 |
||
20 | reyssat | 58 | !endif |
59 | sens=!item ($methparm3+3)/2 of <,> |
||
60 | !read deduc/sub/checkineq ($methparm1) - ($left2) + ($right2),$sens=,0\ |
||
61 | ($methparm1) - ($left2) + ($right2),=,0 |
||
62 | !distribute line $out into sn,zr |
||
63 | !if $sn!=true |
||
16117 | bpr | 64 | !goto bad |
20 | reyssat | 65 | !endif |
16117 | bpr | 66 | !else |
20 | reyssat | 67 | !if ($methparm1)*$methparm3<0 |
16117 | bpr | 68 | error=Erreur de signe ! |
69 | !exit |
||
20 | reyssat | 70 | !endif |
16117 | bpr | 71 | !endif |
72 | :OK |
||
16209 | bpr | 73 | methexp=Multiplier \($left $sign $right) par \($methparm1) |
20 | reyssat | 74 | |
16117 | bpr | 75 | !read deduc/sub/simplify ($left) * ($methparm1)\ |
20 | reyssat | 76 | ($right) * ($methparm1) |
16117 | bpr | 77 | !distribute lines $out into newleft,newright |
78 | !if $newleft=$empty or $newright=$empty |
||
20 | reyssat | 79 | error=bad_data |
80 | !exit |
||
16117 | bpr | 81 | !endif |
82 | !if $methparm3<0 |
||
20 | reyssat | 83 | newsign=!translate internal <> to >< in $sign |
16117 | bpr | 84 | !else |
20 | reyssat | 85 | newsign=$sign |
16117 | bpr | 86 | !endif |
87 | newobject2=$newleft $newsign $newright |
||
88 | !if $eq notin $sign and $zr=true and $eq isin $sign2 |
||
20 | reyssat | 89 | newsign=$newsign= |
90 | newobject0=$newobject2 |
||
91 | oldobject=0 |
||
16117 | bpr | 92 | !else |
20 | reyssat | 93 | oldobject=2 |
16117 | bpr | 94 | !endif |
20 | reyssat | 95 | |
16117 | bpr | 96 | badsign=!translate internal <> to >< in $newsign |
97 | resultlist=$newobject2,\ |
||
20 | reyssat | 98 | $newright $newsign $newleft,\ |
99 | $newleft $badsign $newright |
||
100 | !exit |