summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/profcollege/latex/ProfCollege.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/ProfCollege.sty')
-rw-r--r--macros/latex/contrib/profcollege/latex/ProfCollege.sty2002
1 files changed, 1422 insertions, 580 deletions
diff --git a/macros/latex/contrib/profcollege/latex/ProfCollege.sty b/macros/latex/contrib/profcollege/latex/ProfCollege.sty
index eb53ab6098..563ce3af32 100644
--- a/macros/latex/contrib/profcollege/latex/ProfCollege.sty
+++ b/macros/latex/contrib/profcollege/latex/ProfCollege.sty
@@ -3,7 +3,7 @@
% or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{ProfCollege}[2021/04/09 v0.99-a Aide pour l'utilisation de LaTeX au collège]
+\ProvidesPackage{ProfCollege}[2021/05/15 v0.99-b Aide pour l'utilisation de LaTeX au collège]
\RequirePackage{verbatim}
@@ -740,7 +740,7 @@
\end{mplibcode}
\else
\begin{mpost}[mpsettings={input PfCCalculatrice;}]
- LCD(#1)(#2);
+ LCD(#1)(#2)(#3);
\end{mpost}
\fi
}
@@ -1399,7 +1399,7 @@
%%%
\setKVdefault[ClesFraction]{Rayon=2cm,Disque,Regulier=false,Segment=false,Rectangle=false,Longueur=5cm,Largeur=2cm,Cotes=5,Triangle=false,Parts=3,Couleur=green,Reponse=false,Multiple=1,Hachures=false,Epaisseur=1}
-\def\MPFractionTriangle#1#2#3#4#5{
+\def\MPFractionTriangle#1#2#3#4#5{%
% #1 longueur du c\^ot\'e
% #2 partage sur le c\^ot\'e
% #3 num
@@ -1437,20 +1437,32 @@
for k=nbparts downto 1:
Ligne(k);
endfor;
+
+ m:=#3 div #4;
- for k=1 upto #3:
- fill M[k] withcolor #5;
+ drawoptions(shifted(m*(#1+1cm,0)));
+ for l=1 upto (#3 mod #4):
+ fill M[l] withcolor #5;
+ for k=1 upto nbparts:
+ trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]);
+ trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]);
+ trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]);
+ endfor;
endfor;
+ for l=0 upto (m-1):
+ drawoptions(shifted(l*(#1+1cm,0)));
+ remplis polygone(A,B,C) withcolor #5;
for k=1 upto nbparts:
trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]);
trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]);
trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]);
endfor;
+ endfor;
\end{mplibcode}
\else
\begin{mpost}
- nbtriangle=0;
+ nbtriangle=0;
vardef Ligne(expr longueur)=
for k=0 upto 2*(longueur-1):
@@ -1479,16 +1491,28 @@
for k=nbparts downto 1:
Ligne(k);
endfor;
+
+ m:=#3 div #4;
- for k=1 upto #3:
- fill M[k] withcolor #5;
+ drawoptions(shifted(m*(#1+1cm,0)));
+ for l=1 upto (#3 mod #4):
+ fill M[l] withcolor #5;
+ for k=1 upto nbparts:
+ trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]);
+ trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]);
+ trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]);
+ endfor;
endfor;
+ for l=0 upto (m-1):
+ drawoptions(shifted(l*(#1+1cm,0)));
+ remplis polygone(A,B,C) withcolor #5;
for k=1 upto nbparts:
trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]);
trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]);
trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]);
endfor;
+ endfor;
\end{mpost}
\fi
}
@@ -1503,7 +1527,7 @@
\ifluatex
\mplibforcehmode
\begin{mplibcode}
- nbtriangle=0;
+ nbtriangle=0;
vardef Ligne(expr longueur)=
for k=0 upto 2*(longueur-1):
@@ -1532,19 +1556,30 @@
for k=nbparts downto 1:
Ligne(k);
endfor;
-
- diversite=floor(uniformdeviate(#2**2-#3-1));
- for k=(1+diversite) upto (#3+diversite):
+ m:=#3 div #4;
+
+ for l=1 upto (#3 mod #4):
drawoptions(withpen pencircle scaled #6);
- trace hachurage(M[k],90,0.2,0) withcolor #5;
- endfor;
+ trace hachurage(M[l] shifted(m*(#1+1cm,0)),90,0.2,0) withcolor #5;%M[l] withcolor #5;
+ for k=1 upto nbparts:
drawoptions(withpen pencircle scaled #6);
+ trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]) shifted(m*(#1+1cm,0));
+ trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]) shifted(m*(#1+1cm,0));
+ trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]) shifted(m*(#1+1cm,0));
+ endfor;
+ endfor;
+
+ for l=0 upto (m-1):
+ drawoptions(shifted(l*(#1+1cm,0)) withpen pencircle scaled #6);
+ trace hachurage(polygone(A,B,C),90,0.2,0) withcolor #5;%polygone(A,B,C) withcolor #5;
+ drawoptions(shifted(l*(#1+1cm,0)) withpen pencircle scaled #6);
for k=1 upto nbparts:
trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]);
trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]);
trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]);
endfor;
+ endfor;
\end{mplibcode}
\else
\begin{mpost}
@@ -1594,7 +1629,6 @@
\end{mpost}
\fi
}
-
\def\MPFractionRegulier#1#2#3#4#5{%
% #1 rayon, #2 nb c\^ot\'es, #3 num, #4 deno, #5 couleur
@@ -1612,19 +1646,40 @@
for k=0 upto #4-1:
B[k]=point(k*(#2/#4)) of cd;
endfor;
- remplis O--arccercle(B[0],B[#3],O)--cycle withcolor #5;
- %fi;
+ picture fondcolore;
+ fondcolore=image(
+ remplis O--arccercle(B[0],B[#3 mod #4],O)--cycle withcolor #5;
clip currentpicture to cd;
- draw polygone(A0 for k=1 upto #2:,A[k] endfor);
- if #4>1:
for k=0 upto #4-1:
draw segment(O,B[k]) cutafter cd;
endfor;
+ trace cd;
+ );
+ currentpicture:=nullpicture;
+ m=#3 div #4;
+ if (#3 mod #4)=0:m:=m-1; fi;
+ if m>0:
+ for l=0 upto (m-1):
+ fill cd shifted(l*(#1*2+0.5cm,0)) withcolor #5;
+ trace cd shifted(l*(#1*2+0.5cm,0));
+ if #4>1:
+ for k=0 upto #4-1:
+ draw (segment(O,B[k]) cutafter cd) shifted(l*(#1*2+0.5cm,0));
+ endfor;
+ fi;
+ endfor;
+ fi;
+ draw fondcolore shifted(m*(#1*2+0.5cm,0));
+ draw cd shifted(m*(#1*2+0.5cm,0));
+ if #4>1:
+ for k=0 upto #4-1:
+ draw (segment(O,B[k]) cutafter cd) shifted(m*(#1*2+0.5cm,0));
+ endfor;
fi;
\end{mplibcode}
\else
-\begin{mpost}
- pair O,A[],B[];
+ \begin{mpost}
+ pair O,A[],B[];
O=u*(0,0);
path cc,cd;
cc=cercles(O,#1);
@@ -1635,21 +1690,42 @@
for k=0 upto #4-1:
B[k]=point(k*(#2/#4)) of cd;
endfor;
- remplis O--arccercle(B[0],B[#3],O)--cycle withcolor #5;
- %fi;
+ picture fondcolore;
+ fondcolore=image(
+ remplis O--arccercle(B[0],B[#3 mod #4],O)--cycle withcolor #5;
clip currentpicture to cd;
- draw polygone(A0 for k=1 upto #2:,A[k] endfor);
- if #4>1:
for k=0 upto #4-1:
draw segment(O,B[k]) cutafter cd;
endfor;
+ trace cd;
+ );
+ currentpicture:=nullpicture;
+ m=#3 div #4;
+ if (#3 mod #4)=0:m:=m-1; fi;
+ if m>0:
+ for l=0 upto (m-1):
+ fill cd shifted(l*(#1*2+0.5cm,0)) withcolor #5;
+ trace cd shifted(l*(#1*2+0.5cm,0));
+ if #4>1:
+ for k=0 upto #4-1:
+ draw (segment(O,B[k]) cutafter cd) shifted(l*(#1*2+0.5cm,0));
+ endfor;
+ fi;
+ endfor;
+ fi;
+ draw fondcolore shifted(m*(#1*2+0.5cm,0));
+ draw cd shifted(m*(#1*2+0.5cm,0));
+ if #4>1:
+ for k=0 upto #4-1:
+ draw (segment(O,B[k]) cutafter cd) shifted(m*(#1*2+0.5cm,0));
+ endfor;
fi;
\end{mpost}
\fi
}
\def\MPFractionRegulierH#1#2#3#4#5#6{%
- % #1 rayon, #2 nb c\^ot\'es, #3 num, #4 deno, #5 couleur
+ % #1 rayon, #2 nb c\^ot\'es, #3 num, #4 deno, #5 couleur, #6 épaisseur
\ifluatex
\mplibforcehmode
\begin{mplibcode}
@@ -1664,16 +1740,42 @@
for k=0 upto #4-1:
B[k]=point(k*(#2/#4)) of cd;
endfor;
- drawoptions(withpen pencircle scaled#6);
- draw hachurage(O--arccercle(B[0],B[#3],O)--cycle,1.5*360/#2,0.25,0) withcolor #5;
+ picture fondcolore;
+ fondcolore=image(%
+ drawoptions(withpen pencircle scaled #6);
+ trace hachurage(O--arccercle(B[0],B[#3 mod #4],O)--cycle,1.5*360/#2,0.25,0) withcolor #5;
clip currentpicture to cd;
- drawoptions(withpen pencircle scaled#6);
- draw polygone(A0 for k=1 upto #2:,A[k] endfor);
- if #4>1:
+ drawoptions(withpen pencircle scaled #6);
for k=0 upto #4-1:
draw segment(O,B[k]) cutafter cd;
endfor;
- drawoptions();
+ trace cd;
+ );
+ currentpicture:=nullpicture;
+ m=#3 div #4;
+ if (#3 mod #4)=0:m:=m-1; fi;
+ if m>0:
+ for l=0 upto (m-1):
+ drawoptions(withpen pencircle scaled #6);
+ trace hachurage(cd shifted(l*(#1*2+0.5cm,0)),1.5*360/#2,0.25,0) withcolor #5;
+ drawoptions(withpen pencircle scaled #6);
+ trace cd shifted(l*(#1*2+0.5cm,0));
+ if #4>1:
+ for k=0 upto #4-1:
+ drawoptions(withpen pencircle scaled #6);
+ draw (segment(O,B[k]) cutafter cd) shifted(l*(#1*2+0.5cm,0));
+ endfor;
+ fi;
+ endfor;
+ fi;
+ draw fondcolore shifted(m*(#1*2+0.5cm,0));
+ drawoptions(withpen pencircle scaled #6);
+ draw cd shifted(m*(#1*2+0.5cm,0));
+ if #4>1:
+ drawoptions(withpen pencircle scaled #6);
+ for k=0 upto #4-1:
+ draw (segment(O,B[k]) cutafter cd) shifted(m*(#1*2+0.5cm,0));
+ endfor;
fi;
\end{mplibcode}
\else
@@ -1689,16 +1791,42 @@
for k=0 upto #4-1:
B[k]=point(k*(#2/#4)) of cd;
endfor;
- drawoptions(withpen pencircle scaled#6);
- draw hachurage(O--arccercle(B[0],B[#3],O)--cycle,1.5*360/#2,0.25,0) withcolor #5;
+ picture fondcolore;
+ fondcolore=image(%
+ drawoptions(withpen pencircle scaled #6);
+ trace hachurage(O--arccercle(B[0],B[#3 mod #4],O)--cycle,1.5*360/#2,0.25,0) withcolor #5;
clip currentpicture to cd;
- drawoptions(withpen pencircle scaled#6);
- draw polygone(A0 for k=1 upto #2:,A[k] endfor);
- if #4>1:
+ drawoptions(withpen pencircle scaled #6);
for k=0 upto #4-1:
draw segment(O,B[k]) cutafter cd;
endfor;
- drawoptions();
+ trace cd;
+ );
+ currentpicture:=nullpicture;
+ m=#3 div #4;
+ if (#3 mod #4)=0:m:=m-1; fi;
+ if m>0:
+ for l=0 upto (m-1):
+ drawoptions(withpen pencircle scaled #6);
+ trace hachurage(cd shifted(l*(#1*2+0.5cm,0)),1.5*360/#2,0.25,0) withcolor #5;
+ drawoptions(withpen pencircle scaled #6);
+ trace cd shifted(l*(#1*2+0.5cm,0));
+ if #4>1:
+ for k=0 upto #4-1:
+ drawoptions(withpen pencircle scaled #6);
+ draw (segment(O,B[k]) cutafter cd) shifted(l*(#1*2+0.5cm,0));
+ endfor;
+ fi;
+ endfor;
+ fi;
+ draw fondcolore shifted(m*(#1*2+0.5cm,0));
+ drawoptions(withpen pencircle scaled #6);
+ draw cd shifted(m*(#1*2+0.5cm,0));
+ if #4>1:
+ drawoptions(withpen pencircle scaled #6);
+ for k=0 upto #4-1:
+ draw (segment(O,B[k]) cutafter cd) shifted(m*(#1*2+0.5cm,0));
+ endfor;
fi;
\end{mpost}
\fi
@@ -1726,15 +1854,8 @@
S[k]=(k/#6)[B,C];
endfor;
fi;
- if #6=1:
- remplis polygone(A,M[#3],N[#3],D) withcolor #5;
- else:
- DDiv=#3 div parts;
- MMod=#3 mod parts;
- remplis polygone(A,B,S[DDiv],R[DDiv]) withcolor #5;
- remplis
- polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]) withcolor #5;
- fi;
+ picture FondRectangle;
+ FondRectangle=image(%
draw polygone(A,B,C,D);
for k=1 upto (parts-1):
draw segment(M[k],N[k]);
@@ -1744,10 +1865,36 @@
draw segment(R[k],S[k]);
endfor;
fi;
+ );
+ picture FondRectangleColorie;
+ FondRectangleColorie=image(%
+ if #6=1:
+ remplis polygone(A,M[#3 mod #4],N[#3 mod #4],D) withcolor #5;
+ else:
+ DDiv=(#3 mod #4) div parts;
+ MMod=(#3 mod #4) mod parts;
+ remplis polygone(A,B,S[DDiv],R[DDiv]) withcolor #5;
+ remplis polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]) withcolor #5;
+ fi;
+ );
+ m=#3 div #4;
+ if (#3 mod #4)=0:m:=m-1; fi;
+ if m>0:
+ for l=0 upto m-1:
+ remplis (polygone(A,B,C,D) shifted(l*(#1+1cm,0))) withcolor #5;
+ trace FondRectangle shifted(l*(#1+1cm,0));
+ endfor;
+ fi;
+ if (#3 mod #4)<>0:
+ trace FondRectangleColorie shifted(m*(#1+1cm,0));
+ else:
+ remplis (polygone(A,B,C,D) shifted(m*(#1+1cm,0))) withcolor #5;
+ fi;
+ trace FondRectangle shifted(m*(#1+1cm,0));
\end{mplibcode}
\else
\begin{mpost}
- pair A,B,C,D,M[],N[],R[],S[];
+ pair A,B,C,D,M[],N[],R[],S[];
A=(1,1);
B-A=(#1,0);
C-B=(0,#2);
@@ -1764,15 +1911,8 @@
S[k]=(k/#6)[B,C];
endfor;
fi;
- if #6=1:
- remplis polygone(A,M[#3],N[#3],D) withcolor #5;
- else:
- DDiv=#3 div parts;
- MMod=#3 mod parts;
- remplis polygone(A,B,S[DDiv],R[DDiv]) withcolor #5;
- remplis
- polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]) withcolor #5;
- fi;
+ picture FondRectangle;
+ FondRectangle=image(%
draw polygone(A,B,C,D);
for k=1 upto (parts-1):
draw segment(M[k],N[k]);
@@ -1782,6 +1922,32 @@
draw segment(R[k],S[k]);
endfor;
fi;
+ );
+ picture FondRectangleColorie;
+ FondRectangleColorie=image(%
+ if #6=1:
+ remplis polygone(A,M[#3 mod #4],N[#3 mod #4],D) withcolor #5;
+ else:
+ DDiv=(#3 mod #4) div parts;
+ MMod=(#3 mod #4) mod parts;
+ remplis polygone(A,B,S[DDiv],R[DDiv]) withcolor #5;
+ remplis polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]) withcolor #5;
+ fi;
+ );
+ m=#3 div #4;
+ if (#3 mod #4)=0:m:=m-1; fi;
+ if m>0:
+ for l=0 upto m-1:
+ remplis (polygone(A,B,C,D) shifted(l*(#1+1cm,0))) withcolor #5;
+ trace FondRectangle shifted(l*(#1+1cm,0));
+ endfor;
+ fi;
+ if (#3 mod #4)<>0:
+ trace FondRectangleColorie shifted(m*(#1+1cm,0));
+ else:
+ remplis (polygone(A,B,C,D) shifted(m*(#1+1cm,0))) withcolor #5;
+ fi;
+ trace FondRectangle shifted(m*(#1+1cm,0));
\end{mpost}
\fi
}
@@ -1808,18 +1974,8 @@
S[k]=(k/#6)[B,C];
endfor;
fi;
- if #6=1:
- drawoptions(withpen pencircle scaled#7);
- draw hachurage(polygone(A,M[#3],N[#3],D),45,0.25,0) withcolor #5;
- else:
- DDiv=#3 div parts;
- MMod=#3 mod parts;
- drawoptions(withpen pencircle scaled#7);
- draw hachurage(polygone(A,B,S[DDiv],R[DDiv]),45,0.25,0) withcolor #5;
- drawoptions(withpen pencircle scaled#7);
- draw hachurage(polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]),45,0.25,0) withcolor #5;
- fi;
- drawoptions(withpen pencircle scaled#7);
+ picture FondRectangle;
+ FondRectangle=image(%
draw polygone(A,B,C,D);
for k=1 upto (parts-1):
draw segment(M[k],N[k]);
@@ -1828,8 +1984,41 @@
for k=1 upto (#6-1):
draw segment(R[k],S[k]);
endfor;
- drawoptions();
fi;
+ );
+ picture FondRectangleColorie;
+ FondRectangleColorie=image(%
+ if #6=1:
+ drawoptions(withpen pencircle scaled#7);
+ trace hachurage(polygone(A,M[#3 mod #4],N[#3 mod #4],D),45,0.25,0) withcolor #5;
+ else:
+ DDiv=(#3 mod #4) div parts;
+ MMod=(#3 mod #4) mod parts;
+ drawoptions(withpen pencircle scaled#7);
+ trace hachurage(polygone(A,B,S[DDiv],R[DDiv]),45,0.25,0) withcolor #5;
+ drawoptions(withpen pencircle scaled#7);
+ trace hachurage(polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]),45,0.25,0) withcolor #5;
+ fi;
+ );
+ m=#3 div #4;
+ if (#3 mod #4)=0:m:=m-1; fi;
+ if m>0:
+ for l=0 upto m-1:
+ drawoptions(withpen pencircle scaled#7);
+ trace hachurage(polygone(A,B,C,D) shifted(l*(#1+1cm,0)),45,0.25,0) withcolor #5;
+ drawoptions(withpen pencircle scaled#7);
+ trace FondRectangle shifted(l*(#1+1cm,0));
+ endfor;
+ fi;
+ if (#3 mod #4)<>0:
+ drawoptions(withpen pencircle scaled#7);
+ trace FondRectangleColorie shifted(m*(#1+1cm,0));
+ else:
+ drawoptions(withpen pencircle scaled#7);
+ trace hachurage(polygone(A,B,C,D) shifted(m*(#1+1cm,0)),45,0.25,0) withcolor #5;
+ fi;
+ drawoptions(withpen pencircle scaled#7);
+ trace FondRectangle shifted(m*(#1+1cm,0));
\end{mplibcode}
\else
\begin{mpost}
@@ -1884,13 +2073,22 @@
A=(0,0);
path cc;
cc=cercles(A,#1);
- for k=0 upto (#3-1):
+ for k=0 upto #3:
B[k]=pointarc(cc,(360/#3)*k);
endfor;
- fill (A--B0--arccercle(B[0],B[#2],A)--cycle) withcolor #4;
- draw cc;
+ m=(#2 div #3);
+ if (#2 mod #3)=0:m:=m-1; fi;
+ if m>0:
+ for l=0 upto (m-1):
+ fill cc shifted(l*(2*#1+1cm,0)) withcolor #4;
+ endfor;
+ fi;
+ fill ((A--B0--arccercle(B[0],B[#2 mod #3],A)--cycle) shifted (m*(2*#1+1cm,0))) withcolor #4;
+ for l=0 upto m:
+ draw cc shifted(l*(2*#1+1cm,0));
for k=0 upto (#3-1):
- draw segment(A,B[k]);
+ draw segment(A,B[k]) shifted(l*(2*#1+1cm,0));
+ endfor;
endfor;
\end{mplibcode}
\else
@@ -1899,13 +2097,22 @@
A=(0,0);
path cc;
cc=cercles(A,#1);
- for k=0 upto (#3-1):
+ for k=0 upto #3:
B[k]=pointarc(cc,(360/#3)*k);
endfor;
- fill (A--B0--arccercle(B[0],B[#2],A)--cycle) withcolor #4;
- draw cc;
+ m=#2 div #3;
+ if (#2 mod #3)=0:m:=m-1; fi;
+ if m>0:
+ for l=0 upto (m-1):
+ fill cc shifted(l*(2*#1+1cm,0)) withcolor #4;
+ endfor;
+ fi;
+ fill ((A--B0--arccercle(B[0],B[#2 mod #3],A)--cycle) shifted (m*(2*#1+1cm,0))) withcolor #4;
+ for l=0 upto m:
+ draw cc shifted(l*(2*#1+1cm,0));
for k=0 upto (#3-1):
- draw segment(A,B[k]);
+ draw segment(A,B[k]) shifted(l*(2*#1+1cm,0));
+ endfor;
endfor;
\end{mpost}
\fi
@@ -1919,17 +2126,26 @@
A=(0,0);
path cc;
cc=cercles(A,#1);
- for k=0 upto (#3-1):
+ for k=0 upto #3:
B[k]=pointarc(cc,(360/#3)*k);
endfor;
+ m=#2 div #3;
+ if (#2 mod #3)=0:m:=m-1; fi;
+ if m>0:
+ for l=0 upto (m-1):
drawoptions(withpen pencircle scaled#5);
- draw hachurage(A--B0--arccercle(B[0],B[#2],A)--cycle,1.5*360/#3,0.25,0) withcolor #4;
+ draw hachurage(cc shifted(l*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4;
+ endfor;
+ fi;
drawoptions(withpen pencircle scaled#5);
- draw cc;
+ draw hachurage((A--B0--arccercle(B[0],B[#2 mod #3],A)--cycle) shifted(m*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4;
+ drawoptions(withpen pencircle scaled#5);
+ for l=0 upto m:
+ draw cc shifted(l*(2*#1+1cm,0));
for k=0 upto (#3-1):
- draw segment(A,B[k]);
+ draw segment(A,B[k]) shifted(l*(2*#1+1cm,0));
+ endfor;
endfor;
- drawoptions();
\end{mplibcode}
\else
\begin{mpost}
@@ -1937,17 +2153,26 @@
A=(0,0);
path cc;
cc=cercles(A,#1);
- for k=0 upto (#3-1):
+ for k=0 upto #3:
B[k]=pointarc(cc,(360/#3)*k);
endfor;
+ m=#2 div #3;
+ if (#2 mod #3)=0:m:=m-1; fi;
+ if m>0:
+ for l=0 upto (m-1):
+ drawoptions(withpen pencircle scaled#5);
+ draw hachurage(cc shifted(l*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4;
+ endfor;
+ fi;
drawoptions(withpen pencircle scaled#5);
- draw hachurage(A--B0--arccercle(B[0],B[#2],A)--cycle,1.5*360/#3,0.25,0) withcolor #4;
+ draw hachurage((A--B0--arccercle(B[0],B[#2 mod #3],A)--cycle) shifted(m*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4;
drawoptions(withpen pencircle scaled#5);
- draw cc;
+ for l=0 upto m:
+ draw cc shifted(l*(2*#1+1cm,0));
for k=0 upto (#3-1):
- draw segment(A,B[k]);
+ draw segment(A,B[k]) shifted(l*(2*#1+1cm,0));
+ endfor;
endfor;
- drawoptions();
\end{mpost}
\fi
}
@@ -1962,32 +2187,62 @@
for k=0 upto #3:
B[k]=(k/#3)[A,C];
endfor;
- draw segment(B[0],B[#2]) withpen pencircle scaled 2 withcolor #4;
- draw segment(A,C);
+ m=#2 div #3;
+ if m>0:
+ for l=0 upto (m-1):
+ draw (segment(B[0],B[#3]) shifted(l*(#1+1cm,0))) withpen pencircle scaled 2 withcolor #4;
+ endfor;
+ fi;
+ if (#2 mod #3)<>0:
+ draw (segment(B[0],B[#2 mod #3]) shifted(m*(#1+1cm,0))) withpen pencircle scaled 2 withcolor #4;
+ draw segment(A,C) shifted(m*(#1+1cm,0));
+ fi;
marque_p:="tiretv";
+ for l=0 upto m-1:
for k=0 upto #3:
- pointe(B[k]);
+ pointe(B[k] shifted(l*(#1+1cm,0)));
+ endfor;
endfor;
+ if (#2 mod #3)<>0:
+ for k=0 upto #3:
+ pointe(B[k] shifted(m*(#1+1cm,0)));
+ endfor;
+ fi;
\end{mplibcode}
\else
\begin{mpost}
- pair A,C,B[];
+ pair A,C,B[];
A=(0,0);
C-A=(#1,0);
for k=0 upto #3:
B[k]=(k/#3)[A,C];
endfor;
- draw segment(B[0],B[#2]) withpen pencircle scaled 2 withcolor #4;
- draw segment(A,C);
+ m=#2 div #3;
+ if m>0:
+ for l=0 upto (m-1):
+ draw (segment(B[0],B[#3]) shifted(l*(#1+1cm,0))) withpen pencircle scaled 2 withcolor #4;
+ endfor;
+ fi;
+ if (#2 mod #3)<>0:
+ draw (segment(B[0],B[#2 mod #3]) shifted(m*(#1+1cm,0))) withpen pencircle scaled 2 withcolor #4;
+ draw segment(A,C) shifted(m*(#1+1cm,0));
+ fi;
marque_p:="tiretv";
+ for l=0 upto m-1:
for k=0 upto #3:
- pointe(B[k]);
+ pointe(B[k] shifted(l*(#1+1cm,0)));
endfor;
+ endfor;
+ if (#2 mod #3)<>0:
+ for k=0 upto #3:
+ pointe(B[k] shifted(m*(#1+1cm,0)));
+ endfor;
+ fi;
\end{mpost}
\fi
}
-\def\MPFractionSegmentH#1#2#3#4#5{
+\def\MPFractionSegmentH#1#2#3#4#5{%
\ifluatex
\mplibforcehmode
\begin{mplibcode}
@@ -1997,33 +2252,67 @@
for k=0 upto #3:
B[k]=(k/#3)[A,C];
endfor;
+ m=#2 div #3;
+ if m>0:
+ for l=0 upto (m-1):
drawoptions(withpen pencircle scaled#5);
- draw hachurage(polygone(B[0]+u*(0,-0.15),B[#2]+u*(0,-0.15),B[#2]+u*(0,0.15),B[0]+u*(0,0.15)),120,0.2,0)
- withcolor #4;
+ draw hachurage(polygone(B[0]+u*(0,-0.15),B[#3]+u*(0,-0.15),B[#3]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(l*(#1+1cm,0)),120,0.2,0) withcolor #4;
drawoptions(withpen pencircle scaled#5);
- draw segment(A,C);
+ draw segment(A,C) shifted(l*(#1+1cm,0));
+ endfor;
+ fi;
+ if (#2 mod #3)<>0:
+ drawoptions(withpen pencircle scaled#5);
+ draw hachurage(polygone(B[0]+u*(0,-0.15),B[#2 mod #3]+u*(0,-0.15),B[#2 mod #3]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(m*(#1+1cm,0)),120,0.2,0) withcolor #4;
+ drawoptions(withpen pencircle scaled#5);
+ draw segment(A,C) shifted(m*(#1+1cm,0));
+ fi;
marque_p:="tiretv";
+ for l=0 upto m-1:
+ for k=0 upto #3:
+ pointe(B[k] shifted(l*(#1+1cm,0)));
+ endfor;
+ endfor;
+ if (#2 mod #3)<>0:
for k=0 upto #3:
- pointe(B[k]);
+ pointe(B[k] shifted(m*(#1+1cm,0)));
endfor;
+ fi;
\end{mplibcode}
\else
\begin{mpost}
- pair A,C,B[];
+ pair A,C,B[];
A=(0,0);
C-A=(#1,0);
for k=0 upto #3:
B[k]=(k/#3)[A,C];
endfor;
+ m=#2 div #3;
+ if m>0:
+ for l=0 upto (m-1):
drawoptions(withpen pencircle scaled#5);
- draw hachurage(polygone(B[0]+u*(0,-0.15),B[#2]+u*(0,-0.15),B[#2]+u*(0,0.15),B[0]+u*(0,0.15)),120,0.2,0)
- withcolor #4;
+ draw hachurage(polygone(B[0]+u*(0,-0.15),B[#3]+u*(0,-0.15),B[#3]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(l*(#1+1cm,0)),120,0.2,0) withcolor #4;
drawoptions(withpen pencircle scaled#5);
- draw segment(A,C);
+ draw segment(A,C) shifted(l*(#1+1cm,0));
+ endfor;
+ fi;
+ if (#2 mod #3)<>0:
+ drawoptions(withpen pencircle scaled#5);
+ draw hachurage(polygone(B[0]+u*(0,-0.15),B[#2 mod #3]+u*(0,-0.15),B[#2 mod #3]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(m*(#1+1cm,0)),120,0.2,0) withcolor #4;
+ drawoptions(withpen pencircle scaled#5);
+ draw segment(A,C) shifted(m*(#1+1cm,0));
+ fi;
marque_p:="tiretv";
+ for l=0 upto m-1:
+ for k=0 upto #3:
+ pointe(B[k] shifted(l*(#1+1cm,0)));
+ endfor;
+ endfor;
+ if (#2 mod #3)<>0:
for k=0 upto #3:
- pointe(B[k]);
+ pointe(B[k] shifted(m*(#1+1cm,0)));
endfor;
+ fi;
\end{mpost}
\fi
}
@@ -2209,10 +2498,75 @@
}%
}
+\newcommand\QCMVar[2][]{%
+ \useKVdefault[ClesQCM]%
+ \setKV[ClesQCM]{#1}%
+ \setcounter{QuestionQCM}{\fpeval{\useKV[ClesQCM]{Depart}-1}}%
+ \setcounter{TitreQCM}{0}
+ \setsepchar[*]{§*&}\ignoreemptyitems%
+ \readlist*\ListeQCM{#2}%
+ \ifboolKV[ClesQCM]{Multiple}{%
+ \renewcommand{\arraystretch}{\useKV[ClesQCM]{Stretch}}%
+ \setlength{\LargeurQCM}{\fpeval{(\linewidth-\useKV[ClesQCM]{Reponses}*(3*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
+ \xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
+ \xdef\ListeNom{\useKV[ClesQCM]{Noms}}%
+ \setsepchar[*]{/}%
+ \readlist*\ListeNomsMul{\ListeNom}%
+ \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
+ \cline{2-\NBcases}%
+ \multicolumn{1}{c|}{}\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+ &\ListeNomsMul[##2]}%
+ \\
+ \hline%
+ \xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
+ \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+ &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{\ListeQCM[##1,\fpeval{##2+1}]=1}{$\boxtimes$}{$\square$}}{$\square$}%
+ }\\
+ }%
+ \hline%
+ \end{tabular}%
+ }{%
+ \ifboolKV[ClesQCM]{VF}{%
+ \setKV[ClesQCM]{Reponses=2}
+ \renewcommand{\arraystretch}{\useKV[ClesQCM]{Stretch}}%
+ \setlength{\LargeurQCM}{\fpeval{(\linewidth-\useKV[ClesQCM]{Reponses}*(3*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
+ \xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
+ \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
+ \cline{2-\NBcases}%
+ \multicolumn{1}{c|}{}&\useKV[ClesQCM]{NomV}&\useKV[ClesQCM]{NomF}\\
+ \hline%
+ \xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
+ \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+ &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{##2=\ListeQCM[##1,2]}{$\boxtimes$}{$\square$}}{$\square$}%
+ }\\
+ }%
+ \hline%
+ \end{tabular}
+ }{%
+ \renewcommand{\arraystretch}{\useKV[ClesQCM]{Stretch}}%
+ \setlength{\LargeurQCM}{\fpeval{(\linewidth-\useKV[ClesQCM]{Reponses}*(3*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
+ \xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
+ \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
+ \ifboolKV[ClesQCM]{Titre}{\cline{2-\NBcases}%
+ \multicolumn{1}{c|}{}\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+ &\stepcounter{TitreQCM}\useKV[ClesQCM]{Nom} \ifboolKV[ClesQCM]{AlphT}{\Alph{TitreQCM}}{##2}}%
+ \\
+ }{}
+ \hline%
+ \xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
+ \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+ &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xdef\NumeroReponse{\fpeval{\useKV[ClesQCM]{Reponses}+2}}\xintifboolexpr{##2=\ListeQCM[##1,\NumeroReponse]}{\cellcolor{\useKV[ClesQCM]{Couleur}}}{}}{}\ListeQCM[##1,##2+1]%
+ }\\
+ }%
+ \hline%
+ \end{tabular}%
+ }%
+ }%
+}
+
%%%
% Somme des angles
%%%
-
\setKVdefault[ClesSommeAngle]{Detail=true,Isocele=false,Figure=false,FigureSeule=false,Angle=0,Perso=false}%
\def\MPFigureSommeAngle#1#2#3#4#5#6#7{
@@ -2868,7 +3222,326 @@
% y a dans un "seul calcul".
\setcounter{NbCalculDistri}{0}
-\setKVdefault[ClesDistributivite]{Etape=1,Lettre=x,Fleches=false,AideMul=false,Reduction=false,AideAdda=false,AideAddb=false,CouleurAide=red,CouleurReduction=black,CouleurFH=blue,CouleurFB=red,Somme=false,Difference=false,RAZ=false,Oppose=false,All=false,NomExpression=A,Fin=4,Numerique=false,Remarquable=false,Echange=0}%,AideAdd=false:inutile ?
+\setKVdefault[ClesDistributivite]{Etape=1,Lettre=x,Fleches=false,AideMul=false,Reduction=false,AideAdda=false,AideAddb=false,CouleurAide=red,CouleurReduction=black,CouleurFH=blue,CouleurFB=red,Somme=false,Difference=false,RAZ=false,Oppose=false,All=false,NomExpression=A,Fin=4,Numerique=false,Remarquable=false,Echange=0,Tuile=false,Vide=false}%,AideAdd=false:inutile ?
+
+\newcommand\Tuile[4]{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ boolean Vide;
+ Vide=\useKV[ClesDistributivite]{Vide};
+ pair _CoinTuilev;
+ _CoinTuilev=(0,0);
+ numeric largeur,longueur,ecart;
+ largeur=0.75;
+ longueur=sqrt(3);
+ ecart=0.6;
+ pair _CoinTuileh;
+ _CoinTuileh=u*(largeur+ecart,ecart);
+ vardef tuilev(expr LL,ll,nb,col)(text t)=
+ save $; picture $;
+ save TT; picture TT;
+ TT=image(
+ path cc;
+ cc=polygone((0,0),u*(LL,0),u*(LL,-ll),u*(0,-ll));
+ fill cc withcolor col;
+ trace cc;
+ label(TEX(t),iso((0,0),u*(LL,0),u*(LL,-ll),u*(0,-ll)));
+ );
+ $=image(
+ for k=0 upto nb-1:
+ trace TT shifted(_CoinTuilev+k*u*(0,-ll));
+ endfor;
+ _CoinTuilev:=_CoinTuilev shifted(nb*u*(0,-ll));
+ );
+ $
+ enddef;
+ vardef tuileh(expr LL,ll,nb,col)(text t)=
+ save $; picture $;
+ picture TT;
+ TT=image(
+ path cc;
+ cc=polygone((0,0),u*(LL,0),u*(LL,ll),u*(0,ll));
+ fill cc withcolor col;
+ trace cc;
+ label(TEX(t),iso((0,0),u*(LL,0),u*(LL,ll),u*(0,ll)));
+ );
+ $=image(
+ for k=0 upto nb-1:
+ trace TT shifted(_CoinTuileh+k*u*(LL,0));
+ endfor;
+ _CoinTuileh:=_CoinTuileh shifted(nb*u*(LL,0));
+ );
+ $
+ enddef;
+ color ColorLetter,ColorLetterPos,ColorLetterNeg,ColorNum,ColorNumPos,ColorNumNeg,ColorCarrePos,ColorCarreNeg;
+ ColorLetter=LightGreen;
+ ColorLetterPos=ColorLetter;
+ ColorLetterNeg=Tomato;
+ ColorNum=Orange;
+ ColorNumPos=ColorNum;
+ ColorNumNeg=Tomato;
+ ColorCarrePos:=LightBlue;
+ ColorCarreNeg:=Tomato;
+ if #1<0:
+ ColorLetter:=Tomato;
+ trace tuilev(largeur,longueur,abs(#1),ColorLetter)("$-x$");
+ else:
+ ColorLetter:=LightGreen;
+ trace tuilev(largeur,longueur,abs(#1),ColorLetter)("$x$");
+ fi;
+ if #2<0:
+ ColorNum:=Tomato;
+ trace tuilev(largeur,largeur,abs(#2),ColorNum)("$-1$");
+ else:
+ ColorNum:=Orange;
+ trace tuilev(largeur,largeur,abs(#2),ColorNum)("$1$");
+ fi;
+ if #3<0:
+ ColorLetter:=Tomato;
+ trace tuileh(longueur,largeur,abs(#3),ColorLetter)("$-x$");
+ else:
+ ColorLetter:=LightGreen;
+ trace tuileh(longueur,largeur,abs(#3),ColorLetter)("$x$");
+ fi;
+ if #4<0:
+ ColorNum:=Tomato;
+ trace tuileh(largeur,largeur,abs(#4),ColorNum)("$-1$");
+ else:
+ ColorNum:=Orange;
+ trace tuileh(largeur,largeur,abs(#4),ColorNum)("$1$");
+ fi;
+ trace u*(largeur+ecart/2,largeur+ecart)--((largeur+ecart/2)*u,ypart(_CoinTuilev)) withpen pencircle scaled2;
+ trace u*(0,ecart/2)--(xpart(_CoinTuileh),u*(ecart/2)) withpen pencircle scaled2;
+ drawarrow u*(largeur/2,ecart/2){dir90}..{dir0}u*(largeur+ecart/2,largeur/2+ecart) withpen pencircle scaled2;
+ labeloffset:=labeloffset*2;
+ label.ulft(TEX("$\times$"),iso(u*(largeur/2,ecart/2),u*(largeur+ecart/2,largeur/2+ecart)));
+ labeloffset:=labeloffset/2;
+ if Vide=false:
+ %% tuile a*c
+ if #1*#3<>0:
+ for k=0 upto (abs(#3)-1):
+ for l=0 upto (abs(#1)-1):
+ path titi;
+ titi=polygone((0,0),u*(longueur,0),u*(longueur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart,0)+(u*(k*longueur,-l*longueur)));
+ fill titi withcolor if #1*#3>0:ColorCarrePos else: ColorCarreNeg fi;
+ trace titi;
+ if #1*#3>0:
+ label(TEX("$x^2$"),iso((0,0),u*(longueur,0),u*(longueur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart,0)+(u*(k*longueur,-l*longueur))));
+ else:
+ label(TEX("$-x^2$"),iso((0,0),u*(longueur,0),u*(longueur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart,0)+(u*(k*longueur,-l*longueur))));
+ fi;
+ endfor;
+ endfor;
+ fi;
+ %tuile a*d
+ if #1*#4<>0:
+ for k=0 upto (abs(#4)-1):
+ for l=0 upto (abs(#1)-1):
+ path titi;
+ titi=polygone((0,0),u*(largeur,0),u*(largeur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart+abs(#3)*longueur,0)+(u*(k*largeur,-l*longueur)));
+ fill titi withcolor if #1*#4>0:ColorLetterPos else: ColorLetterNeg fi;
+ trace titi;
+ if #1*#4>0:
+ label(TEX("$x$"),iso((0,0),u*(largeur,0),u*(largeur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart+abs(#3)*longueur,0)+(u*(k*largeur,-l*longueur))));
+ else:
+ label(TEX("$-x$"),iso((0,0),u*(largeur,0),u*(largeur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart+abs(#3)*longueur,0)+(u*(k*largeur,-l*longueur))));
+ fi;
+ endfor;
+ endfor;
+ fi;
+ %tuile b*c
+ if #2*#3<>0:
+ for k=0 upto (abs(#3)-1):
+ for l=0 upto (abs(#2)-1):
+ path titi;
+ titi=polygone((0,0),u*(longueur,0),u*(longueur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart,-abs(#1)*longueur)+(u*(k*longueur,-l*largeur)));
+ fill titi withcolor if #2*#3>0:ColorLetterPos else: ColorLetterNeg fi;
+ trace titi;
+ if #2*#3>0:
+ label(TEX("$x$"),iso((0,0),u*(longueur,0),u*(longueur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart,-abs(#1)*longueur)+(u*(k*longueur,-l*largeur))));
+ else:
+ label(TEX("$-x$"),iso((0,0),u*(longueur,0),u*(longueur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart,-abs(#1)*longueur)+(u*(k*longueur,-l*largeur))));
+ fi;
+ endfor;
+ endfor;
+ fi;
+ %tuile b*d
+ if #2*#4<>0:
+ for k=0 upto (abs(#4)-1):
+ for l=0 upto (abs(#2)-1):
+ path titi;
+ titi=polygone((0,0),u*(largeur,0),u*(largeur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart+abs(#3)*longueur,-abs(#1)*longueur)+(u*(k*largeur,-l*largeur)));
+ fill titi withcolor if #2*#4>0:ColorNumPos else: ColorNumNeg fi;
+ trace titi;
+ if #2*#4>0:
+ label(TEX("$1$"),iso((0,0),u*(largeur,0),u*(largeur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart+abs(#3)*longueur,-abs(#1)*longueur)+(u*(k*largeur,-l*largeur))));
+ else:
+ label(TEX("$-1$"),iso((0,0),u*(largeur,0),u*(largeur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart+abs(#3)*longueur,-abs(#1)*longueur)+(u*(k*largeur,-l*largeur))));
+ fi;
+ endfor;
+ endfor;
+ fi;
+ fi;
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={boolean Vide; Vide=\useKV[ClesDistributivite]{Vide};}]
+ pair _CoinTuilev;
+ _CoinTuilev=(0,0);
+ numeric largeur,longueur,ecart;
+ largeur=0.75;
+ longueur=sqrt(3);
+ ecart=0.6;
+ pair _CoinTuileh;
+ _CoinTuileh=u*(largeur+ecart,ecart);
+ vardef tuilev(expr LL,ll,nb,col)(text t)=
+ save $; picture $;
+ save TT; picture TT;
+ TT=image(
+ path cc;
+ cc=polygone((0,0),u*(LL,0),u*(LL,-ll),u*(0,-ll));
+ fill cc withcolor col;
+ trace cc;
+ label(LATEX(t),iso((0,0),u*(LL,0),u*(LL,-ll),u*(0,-ll)));
+ );
+ $=image(
+ for k=0 upto nb-1:
+ trace TT shifted(_CoinTuilev+k*u*(0,-ll));
+ endfor;
+ _CoinTuilev:=_CoinTuilev shifted(nb*u*(0,-ll));
+ );
+ $
+ enddef;
+ vardef tuileh(expr LL,ll,nb,col)(text t)=
+ save $; picture $;
+ picture TT;
+ TT=image(
+ path cc;
+ cc=polygone((0,0),u*(LL,0),u*(LL,ll),u*(0,ll));
+ fill cc withcolor col;
+ trace cc;
+ label(LATEX(t),iso((0,0),u*(LL,0),u*(LL,ll),u*(0,ll)));
+ );
+ $=image(
+ for k=0 upto nb-1:
+ trace TT shifted(_CoinTuileh+k*u*(LL,0));
+ endfor;
+ _CoinTuileh:=_CoinTuileh shifted(nb*u*(LL,0));
+ );
+ $
+ enddef;
+ color ColorLetter,ColorLetterPos,ColorLetterNeg,ColorNum,ColorNumPos,ColorNumNeg,ColorCarrePos,ColorCarreNeg;
+ ColorLetter=LightGreen;
+ ColorLetterPos=ColorLetter;
+ ColorLetterNeg=Tomato;
+ ColorNum=Orange;
+ ColorNumPos=ColorNum;
+ ColorNumNeg=Tomato;
+ ColorCarrePos:=LightBlue;
+ ColorCarreNeg:=Tomato;
+ if #1<0:
+ ColorLetter:=Tomato;
+ trace tuilev(largeur,longueur,abs(#1),ColorLetter)("$-x$");
+ else:
+ ColorLetter:=LightGreen;
+ trace tuilev(largeur,longueur,abs(#1),ColorLetter)("$x$");
+ fi;
+ if #2<0:
+ ColorNum:=Tomato;
+ trace tuilev(largeur,largeur,abs(#2),ColorNum)("$-1$");
+ else:
+ ColorNum:=Orange;
+ trace tuilev(largeur,largeur,abs(#2),ColorNum)("$1$");
+ fi;
+ if #3<0:
+ ColorLetter:=Tomato;
+ trace tuileh(longueur,largeur,abs(#3),ColorLetter)("$-x$");
+ else:
+ ColorLetter:=LightGreen;
+ trace tuileh(longueur,largeur,abs(#3),ColorLetter)("$x$");
+ fi;
+ if #4<0:
+ ColorNum:=Tomato;
+ trace tuileh(largeur,largeur,abs(#4),ColorNum)("$-1$");
+ else:
+ ColorNum:=Orange;
+ trace tuileh(largeur,largeur,abs(#4),ColorNum)("$1$");
+ fi;
+ trace u*(largeur+ecart/2,largeur+ecart)--((largeur+ecart/2)*u,ypart(_CoinTuilev)) withpen pencircle scaled2;
+ trace u*(0,ecart/2)--(xpart(_CoinTuileh),u*(ecart/2)) withpen pencircle scaled2;
+ drawarrow u*(largeur/2,ecart/2){dir90}..{dir0}u*(largeur+ecart/2,largeur/2+ecart) withpen pencircle scaled2;
+ labeloffset:=labeloffset*2;
+ label.ulft(LATEX("$\times$"),iso(u*(largeur/2,ecart/2),u*(largeur+ecart/2,largeur/2+ecart)));
+ labeloffset:=labeloffset/2;
+ if Vide=false:
+ %% tuile a*c
+ if #1*#3<>0:
+ for k=0 upto (abs(#3)-1):
+ for l=0 upto (abs(#1)-1):
+ path titi;
+ titi=polygone((0,0),u*(longueur,0),u*(longueur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart,0)+(u*(k*longueur,-l*longueur)));
+ fill titi withcolor if #1*#3>0:ColorCarrePos else: ColorCarreNeg fi;
+ trace titi;
+ if #1*#3>0:
+ label(LATEX("$x^2$"),iso((0,0),u*(longueur,0),u*(longueur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart,0)+(u*(k*longueur,-l*longueur))));
+ else:
+ label(LATEX("$-x^2$"),iso((0,0),u*(longueur,0),u*(longueur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart,0)+(u*(k*longueur,-l*longueur))));
+ fi;
+ endfor;
+ endfor;
+ fi;
+ %tuile a*d
+ if #1*#4<>0:
+ for k=0 upto (abs(#4)-1):
+ for l=0 upto (abs(#1)-1):
+ path titi;
+ titi=polygone((0,0),u*(largeur,0),u*(largeur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart+abs(#3)*longueur,0)+(u*(k*largeur,-l*longueur)));
+ fill titi withcolor if #1*#4>0:ColorLetterPos else: ColorLetterNeg fi;
+ trace titi;
+ if #1*#4>0:
+ label(LATEX("$x$"),iso((0,0),u*(largeur,0),u*(largeur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart+abs(#3)*longueur,0)+(u*(k*largeur,-l*longueur))));
+ else:
+ label(LATEX("$-x$"),iso((0,0),u*(largeur,0),u*(largeur,-longueur),u*(0,-longueur)) shifted (u*(largeur+ecart+abs(#3)*longueur,0)+(u*(k*largeur,-l*longueur))));
+ fi;
+ endfor;
+ endfor;
+ fi;
+ %tuile b*c
+ if #2*#3<>0:
+ for k=0 upto (abs(#3)-1):
+ for l=0 upto (abs(#2)-1):
+ path titi;
+ titi=polygone((0,0),u*(longueur,0),u*(longueur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart,-abs(#1)*longueur)+(u*(k*longueur,-l*largeur)));
+ fill titi withcolor if #2*#3>0:ColorLetterPos else: ColorLetterNeg fi;
+ trace titi;
+ if #2*#3>0:
+ label(LATEX("$x$"),iso((0,0),u*(longueur,0),u*(longueur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart,-abs(#1)*longueur)+(u*(k*longueur,-l*largeur))));
+ else:
+ label(LATEX("$-x$"),iso((0,0),u*(longueur,0),u*(longueur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart,-abs(#1)*longueur)+(u*(k*longueur,-l*largeur))));
+ fi;
+ endfor;
+ endfor;
+ fi;
+ %tuile b*d
+ if #2*#4<>0:
+ for k=0 upto (abs(#4)-1):
+ for l=0 upto (abs(#2)-1):
+ path titi;
+ titi=polygone((0,0),u*(largeur,0),u*(largeur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart+abs(#3)*longueur,-abs(#1)*longueur)+(u*(k*largeur,-l*largeur)));
+ fill titi withcolor if #2*#4>0:ColorNumPos else: ColorNumNeg fi;
+ trace titi;
+ if #2*#4>0:
+ label(LATEX("$1$"),iso((0,0),u*(largeur,0),u*(largeur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart+abs(#3)*longueur,-abs(#1)*longueur)+(u*(k*largeur,-l*largeur))));
+ else:
+ label(LATEX("$-1$"),iso((0,0),u*(largeur,0),u*(largeur,-largeur),u*(0,-largeur)) shifted (u*(largeur+ecart+abs(#3)*longueur,-abs(#1)*longueur)+(u*(k*largeur,-l*largeur))));
+ fi;
+ endfor;
+ endfor;
+ fi;
+ fi;
+ \end{mpost}
+ \fi
+}
\newcommand\Affichage[4][]{%
\setKV[ClesDistributivite]{#1}%On lit les arguments optionnels
@@ -2892,191 +3565,195 @@
\xdef\SommeC{0}%
\newcommand{\Distri}[5][]{%
- \ensuremath{%
- \useKVdefault[ClesDistributivite]%obligatoire car la macro n'est pas dans un groupe.
- \setKV[ClesDistributivite]{#1}%On lit les arguments optionnels
- \ifboolKV[ClesDistributivite]{RAZ}{\xdef\SommeA{0}\xdef\SommeB{0}\xdef\SommeC{0}%
- \setcounter{NbCalculDistri}{0}%
- }{}%
- \colorlet{DCAide}{\useKV[ClesDistributivite]{CouleurAide}}%
- \colorlet{DCReduction}{\useKV[ClesDistributivite]{CouleurReduction}}%
- \colorlet{DCFlechesh}{\useKV[ClesDistributivite]{CouleurFH}}%
- \colorlet{DCFlechesb}{\useKV[ClesDistributivite]{CouleurFB}}%
- \xintifboolexpr{\useKV[ClesDistributivite]{Echange}>0}{%
- \DistriEchange[#1]{#2}{#3}{#4}{#5}%
- }{%
- \ifboolKV[ClesDistributivite]{Remarquable}{%
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{%
- \ifx\bla#4\bla(\Affichage{0}{#2}{#3})^2\else(\Affichage{0}{#2}{#3})(\Affichage{0}{#4}{#5})\fi%
- }{}
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{\ifx\bla#4\bla\xintifboolexpr{#3>0}{\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2+2\times\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesDistributivite]{Lettre}\times\num{#3}+\num{#3}^2}{\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2-2\times\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesDistributivite]{Lettre}\times\num{\fpeval{0-#3}}+\num{\fpeval{0-#3}}^2}\else\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2-\num{#3}^2\fi}{}
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
- \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
- \stepcounter{NbCalculDistri}%
- \ifx\bla#4\bla%
- \xdef\Multi{\fpeval{#2*#2}}%
- \xdef\Multij{\fpeval{#2*#3}}%
- \xdef\Multik{\fpeval{#3*#2}}%
- \xdef\Multil{\fpeval{#3*#3}}%
- %% ils sont red\'efinis pour pouvoir envisager la somme de deux
- %% expressions \`a d\'evelopper
- \xdef\Multim{\fpeval{#2*#3+#3*#2}}%
- \ifboolKV[ClesDistributivite]{Oppose}{%
- \xdef\Multi{\fpeval{-\Multi}}%
- \xdef\Multim{\fpeval{-\Multim}}%
- \xdef\Multil{\fpeval{-\Multil}}%
- \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
- \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
- \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
- }{%
- \Affichage{\Multi}{\Multim}{\Multil}%
- }
- \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#2*#2}}\xdef\SommeB{\fpeval{\SommeB+#2*#3+#3*#2}}\xdef\SommeC{\fpeval{\SommeC+#3*#3}}}{}%
- \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#2*#2}}\xdef\SommeB{\fpeval{\SommeB-#2*#3-#3*#2}}\xdef\SommeC{\fpeval{\SommeC-#3*#3}}}{}%
- \else%
- \xdef\Multi{\fpeval{#2*#4}}%
- \xdef\Multij{\fpeval{#2*#5}}%
- \xdef\Multik{\fpeval{#3*#4}}%
- \xdef\Multil{\fpeval{#3*#5}}%
- %% ils sont red\'efinis pour pouvoir envisager la somme de deux
- %% expressions \`a d\'evelopper
- \xdef\Multim{\fpeval{#2*#5+#3*#4}}%
- \ifboolKV[ClesDistributivite]{Oppose}{%
- \xdef\Multi{\fpeval{-\Multi}}%
- \xdef\Multim{\fpeval{-\Multim}}%
- \xdef\Multil{\fpeval{-\Multil}}%
- \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
- \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
- \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
- }{%
- \Affichage{\Multi}{\Multim}{\Multil}%
- }
- \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#2*#4}}\xdef\SommeB{\fpeval{\SommeB+#2*#5+#3*#4}}\xdef\SommeC{\fpeval{\SommeC+#3*#5}}}{}%
- \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#2*#4}}\xdef\SommeB{\fpeval{\SommeB-#2*#5-#3*#4}}\xdef\SommeC{\fpeval{\SommeC-#3*#5}}}{}%
- \fi%
- }{}%
+ \useKVdefault[ClesDistributivite]%obligatoire car la macro n'est pas dans un groupe.
+ \setKV[ClesDistributivite]{#1}%On lit les arguments optionnels
+ \ifboolKV[ClesDistributivite]{RAZ}{\xdef\SommeA{0}\xdef\SommeB{0}\xdef\SommeC{0}%
+ \setcounter{NbCalculDistri}{0}%
+ }{}%
+ \colorlet{DCAide}{\useKV[ClesDistributivite]{CouleurAide}}%
+ \colorlet{DCReduction}{\useKV[ClesDistributivite]{CouleurReduction}}%
+ \colorlet{DCFlechesh}{\useKV[ClesDistributivite]{CouleurFH}}%
+ \colorlet{DCFlechesb}{\useKV[ClesDistributivite]{CouleurFB}}%
+ \ifboolKV[ClesDistributivite]{Tuile}{%
+ \Tuile{#2}{#3}{#4}{#5}%
+ }{%
+ \ensuremath{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}>0}{%
+ \DistriEchange[#1]{#2}{#3}{#4}{#5}%
}{%
- \ifboolKV[ClesDistributivite]{Numerique}{%
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=0}{%
- \num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}\multido{\i=2+1}{4}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}%
- }{%
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=-1}{%
- \Distri[Numerique,Etape=3]{#2}{#3}{#4}{#5}\multido{\i=2+-1}{2}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}=\num{\fpeval{(#2+#3)*(#4+#5)}}%
+ \ifboolKV[ClesDistributivite]{Remarquable}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{%
+ \ifx\bla#4\bla(\Affichage{0}{#2}{#3})^2\else(\Affichage{0}{#2}{#3})(\Affichage{0}{#4}{#5})\fi%
+ }{}
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{\ifx\bla#4\bla\xintifboolexpr{#3>0}{\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2+2\times\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesDistributivite]{Lettre}\times\num{#3}+\num{#3}^2}{\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2-2\times\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesDistributivite]{Lettre}\times\num{\fpeval{0-#3}}+\num{\fpeval{0-#3}}^2}\else\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2-\num{#3}^2\fi}{}
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
+ \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
+ \stepcounter{NbCalculDistri}%
+ \ifx\bla#4\bla%
+ \xdef\Multi{\fpeval{#2*#2}}%
+ \xdef\Multij{\fpeval{#2*#3}}%
+ \xdef\Multik{\fpeval{#3*#2}}%
+ \xdef\Multil{\fpeval{#3*#3}}%
+ %% ils sont red\'efinis pour pouvoir envisager la somme de deux
+ %% expressions \`a d\'evelopper
+ \xdef\Multim{\fpeval{#2*#3+#3*#2}}%
+ \ifboolKV[ClesDistributivite]{Oppose}{%
+ \xdef\Multi{\fpeval{-\Multi}}%
+ \xdef\Multim{\fpeval{-\Multim}}%
+ \xdef\Multil{\fpeval{-\Multil}}%
+ \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+ \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+ \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
}{%
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{\num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}}{}%
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{\num{\fpeval{#2+#3}}\times(\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#5)}})}{}%
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{\num{#3}\times\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{#3}\times\num{\fpeval{abs(#5)}}}{}%
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=4}{\num{\fpeval{#3*#4}}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#3*#5)}}}{}%
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=5}{\num{\fpeval{#3*#4+#3*#5}}}{}%
- }%
- }%
+ \Affichage{\Multi}{\Multim}{\Multil}%
+ }
+ \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#2*#2}}\xdef\SommeB{\fpeval{\SommeB+#2*#3+#3*#2}}\xdef\SommeC{\fpeval{\SommeC+#3*#3}}}{}%
+ \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#2*#2}}\xdef\SommeB{\fpeval{\SommeB-#2*#3-#3*#2}}\xdef\SommeC{\fpeval{\SommeC-#3*#3}}}{}%
+ \else%
+ \xdef\Multi{\fpeval{#2*#4}}%
+ \xdef\Multij{\fpeval{#2*#5}}%
+ \xdef\Multik{\fpeval{#3*#4}}%
+ \xdef\Multil{\fpeval{#3*#5}}%
+ %% ils sont red\'efinis pour pouvoir envisager la somme de deux
+ %% expressions \`a d\'evelopper
+ \xdef\Multim{\fpeval{#2*#5+#3*#4}}%
+ \ifboolKV[ClesDistributivite]{Oppose}{%
+ \xdef\Multi{\fpeval{-\Multi}}%
+ \xdef\Multim{\fpeval{-\Multim}}%
+ \xdef\Multil{\fpeval{-\Multil}}%
+ \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+ \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+ \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
+ }{%
+ \Affichage{\Multi}{\Multim}{\Multil}%
+ }
+ \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#2*#4}}\xdef\SommeB{\fpeval{\SommeB+#2*#5+#3*#4}}\xdef\SommeC{\fpeval{\SommeC+#3*#5}}}{}%
+ \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#2*#4}}\xdef\SommeB{\fpeval{\SommeB-#2*#5-#3*#4}}\xdef\SommeC{\fpeval{\SommeC-#3*#5}}}{}%
+ \fi%
+ }{}%
}{%
- \ifboolKV[ClesDistributivite]{All}{%
- \xdef\NomLettre{\useKV[ClesDistributivite]{NomExpression}}%
- \xdef\NomFin{\useKV[ClesDistributivite]{Fin}}%
- \xintFor* ##1 in {\xintSeq {1}{\useKV[ClesDistributivite]{Fin}-1}}\do
- {\NomLettre&=\Distri[Etape=##1]{#2}{#3}{#4}{#5}\\}%
- \NomLettre&=\Distri[Etape=\NomFin]{#2}{#3}{#4}{#5}%
+ \ifboolKV[ClesDistributivite]{Numerique}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=0}{%
+ \num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}\multido{\i=2+1}{4}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}%
+ }{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=-1}{%
+ \Distri[Numerique,Etape=3]{#2}{#3}{#4}{#5}\multido{\i=2+-1}{2}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}=\num{\fpeval{(#2+#3)*(#4+#5)}}%
+ }{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{\num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}}{}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{\num{\fpeval{#2+#3}}\times(\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#5)}})}{}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{\num{#3}\times\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{#3}\times\num{\fpeval{abs(#5)}}}{}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=4}{\num{\fpeval{#3*#4}}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#3*#5)}}}{}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=5}{\num{\fpeval{#3*#4+#3*#5}}}{}%
+ }%
+ }%
}{%
- % Etape 1
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{%
- \xintifboolexpr{#2=0}{%
- }{\xintifboolexpr{#3=0}{}{(}}\Tikzmark{\Affichage[#1]{0}{#2}{0}}%
- \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{+(}}{}%
- \xintifboolexpr{#3>0}{\xintifboolexpr{#2=0}{}{+}}{\xintifboolexpr{#3<0}{-}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#3)}}}%
- \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{)}}{}%
- \xintifboolexpr{#2=0}{}{\xintifboolexpr{#3=0}{}{)}}%
- %
- \ifboolKV[ClesDistributivite]{AideMul}{\times}{}%on aide dans le cas double
- \xdef\Multi{\fpeval{#4*#5}}%affichage auto si (a+b)xk
- %
- \xintifboolexpr{\Multi=0}{\times%
- \xintifboolexpr{#4<0}{(}{\xintifboolexpr{#5<0}{(}{}}}{(}%
- \Tikzmark{\Affichage[#1]{0}{#4}{0}}%
- \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{+(}}{}%
- \xintifboolexpr{#5>0}{\xintifboolexpr{#4=0}{}{+}}{\xintifboolexpr{#5<0}{\xintifboolexpr{#4=0}{{-}}{-}}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#5)}}}%
- \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{)}}{}%
- \xintifboolexpr{\Multi=0}{%
- \xintifboolexpr{#4<0}{)}{\xintifboolexpr{#5<0}{)}{}}}{)}%
- \ifboolKV[ClesDistributivite]{Fleches}{%
- \xdef\Multi{\fpeval{#2*#3*#4*#5}}%
+ \ifboolKV[ClesDistributivite]{All}{%
+ \xdef\NomLettre{\useKV[ClesDistributivite]{NomExpression}}%
+ \xdef\NomFin{\useKV[ClesDistributivite]{Fin}}%
+ \xintFor* ##1 in {\xintSeq {1}{\useKV[ClesDistributivite]{Fin}-1}}\do
+ {\NomLettre&=\Distri[Etape=##1]{#2}{#3}{#4}{#5}\\}%
+ \NomLettre&=\Distri[Etape=\NomFin]{#2}{#3}{#4}{#5}%
+ }{%
+ % Etape 1
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{%
+ \xintifboolexpr{#2=0}{%
+ }{\xintifboolexpr{#3=0}{}{(}}\Tikzmark{\Affichage[#1]{0}{#2}{0}}%
+ \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{+(}}{}%
+ \xintifboolexpr{#3>0}{\xintifboolexpr{#2=0}{}{+}}{\xintifboolexpr{#3<0}{-}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#3)}}}%
+ \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{)}}{}%
+ \xintifboolexpr{#2=0}{}{\xintifboolexpr{#3=0}{}{)}}%
+ %
+ \ifboolKV[ClesDistributivite]{AideMul}{\times}{}%on aide dans le cas double
+ \xdef\Multi{\fpeval{#4*#5}}%affichage auto si (a+b)xk
+ %
+ \xintifboolexpr{\Multi=0}{\times%
+ \xintifboolexpr{#4<0}{(}{\xintifboolexpr{#5<0}{(}{}}}{(}%
+ \Tikzmark{\Affichage[#1]{0}{#4}{0}}%
+ \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{+(}}{}%
+ \xintifboolexpr{#5>0}{\xintifboolexpr{#4=0}{}{+}}{\xintifboolexpr{#5<0}{\xintifboolexpr{#4=0}{{-}}{-}}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#5)}}}%
+ \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{)}}{}%
\xintifboolexpr{\Multi=0}{%
- \xdef\Multij{\fpeval{#2*#3}}%\relax
- \xintifboolexpr{\Multij=0}{\xintifboolexpr{#2=0}{\DrawArrowSimple{1}}{\DrawArrowSimple{0}}}{\xintifboolexpr{#4=0}{\DrawArrowSimpleRenverse{3}}{\DrawArrowSimpleRenverse{2}}}%
- }{%
- \DrawArrow%
+ \xintifboolexpr{#4<0}{)}{\xintifboolexpr{#5<0}{)}{}}}{)}%
+ \ifboolKV[ClesDistributivite]{Fleches}{%
+ \xdef\Multi{\fpeval{#2*#3*#4*#5}}%
+ \xintifboolexpr{\Multi=0}{%
+ \xdef\Multij{\fpeval{#2*#3}}%\relax
+ \xintifboolexpr{\Multij=0}{\xintifboolexpr{#2=0}{\DrawArrowSimple{1}}{\DrawArrowSimple{0}}}{\xintifboolexpr{#4=0}{\DrawArrowSimpleRenverse{3}}{\DrawArrowSimpleRenverse{2}}}%
+ }{%
+ \DrawArrow%
+ }%
+ }{}\setcounter{NbDistri}{0}%
+ }{}
+ % Etape 2
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{%
+ \xdef\Multi{\fpeval{#2*#4}}%
+ \xintifboolexpr{\Multi=0}{}{%
+ \xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\Affichage[#1]{0}{#4}{0}\xintifboolexpr{#4<0}{)}{}%
+ }
+ \xdef\Multij{\fpeval{#2*#5}}%
+ \xintifboolexpr{\Multij=0}{}{%
+ \xintifboolexpr{\Multi=0}{}{+}%
+ \xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
}%
- }{}\setcounter{NbDistri}{0}%
- }{}
- % Etape 2
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{%
- \xdef\Multi{\fpeval{#2*#4}}%
- \xintifboolexpr{\Multi=0}{}{%
- \xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\Affichage[#1]{0}{#4}{0}\xintifboolexpr{#4<0}{)}{}%
- }
- \xdef\Multij{\fpeval{#2*#5}}%
- \xintifboolexpr{\Multij=0}{}{%
- \xintifboolexpr{\Multi=0}{}{+}%
- \xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
- }%
- \xdef\Multik{\fpeval{#3*#4}}%
- \xintifboolexpr{\Multik=0}{}{%
- \xintifboolexpr{\Multi=0}{}{+}%
- \xintifboolexpr{#3<0}{(}{}\Affichage[#1]{0}{0}{#3}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\Affichage[#1]{0}{#4}{0}\xintifboolexpr{#4<0}{)}{}%
- }%
- \xdef\Multil{\fpeval{#3*#5}}%
- \xintifboolexpr{\Multil=0}{}{+%
- \xintifboolexpr{#3<0}{(}{}\Affichage[#1]{0}{0}{#3}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
- }%
- }{}%
- % Etape 3
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
- \stepcounter{NbCalculDistri}%
- \xdef\Multi{\fpeval{#2*#4}}%
- \xdef\Multij{\fpeval{#2*#5}}%
- \xdef\Multik{\fpeval{#3*#4}}%
- \xdef\Multil{\fpeval{#3*#5}}%
- %% ils sont red\'efinis pour pouvoir envisager la somme de deux
- %% expressions \`a d\'evelopper
- \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\Affichage{\Multi}{0}{0})}{\Affichage{\Multi}{0}{0}}}{\Affichage{\Multi}{0}{0}}%
- \ifboolKV[ClesDistributivite]{Reduction}{\mathunderline{DCReduction}{%
- \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{{}+}\xintifboolexpr{\Multij<0}{(}{}\Affichage{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
- \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\Affichage{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
+ \xdef\Multik{\fpeval{#3*#4}}%
+ \xintifboolexpr{\Multik=0}{}{%
+ \xintifboolexpr{\Multi=0}{}{+}%
+ \xintifboolexpr{#3<0}{(}{}\Affichage[#1]{0}{0}{#3}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\Affichage[#1]{0}{#4}{0}\xintifboolexpr{#4<0}{)}{}%
}%
- }{%
- \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\Affichage{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
- \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{\xintifboolexpr{#2=0}{}{+}}\xintifboolexpr{\Multik<0}{(}{}\Affichage{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
- }%
- \xintifboolexpr{\Multil=0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}%
- }{}%
- % Etape 4
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=4}{%
- \xdef\Multi{\fpeval{#2*#4}}%
- \xdef\Multij{\fpeval{#2*#5}}%
- \xdef\Multik{\fpeval{#3*#4}}%
- \xdef\Multil{\fpeval{#3*#5}}%
- %% ils sont red\'efinis pour pouvoir envisager la somme de deux
- %% expressions \`a d\'evelopper
- \xdef\Multim{\fpeval{#2*#5+#3*#4}}%
- \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
- \stepcounter{NbCalculDistri}%
- \ifboolKV[ClesDistributivite]{Oppose}{%
- \xdef\Multi{\fpeval{-\Multi}}%
- \xdef\Multim{\fpeval{-\Multim}}%
- \xdef\Multil{\fpeval{-\Multil}}%
- \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
- \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
- \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
- }{%
+ \xdef\Multil{\fpeval{#3*#5}}%
+ \xintifboolexpr{\Multil=0}{}{+%
+ \xintifboolexpr{#3<0}{(}{}\Affichage[#1]{0}{0}{#3}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
+ }%
+ }{}%
+ % Etape 3
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
+ \stepcounter{NbCalculDistri}%
+ \xdef\Multi{\fpeval{#2*#4}}%
+ \xdef\Multij{\fpeval{#2*#5}}%
+ \xdef\Multik{\fpeval{#3*#4}}%
+ \xdef\Multil{\fpeval{#3*#5}}%
+ %% ils sont red\'efinis pour pouvoir envisager la somme de deux
+ %% expressions \`a d\'evelopper
\xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\Affichage{\Multi}{0}{0})}{\Affichage{\Multi}{0}{0}}}{\Affichage{\Multi}{0}{0}}%
- \xintifboolexpr{\Multim=0}{}{%
- \xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
+ \ifboolKV[ClesDistributivite]{Reduction}{\mathunderline{DCReduction}{%
+ \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{{}+}\xintifboolexpr{\Multij<0}{(}{}\Affichage{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
+ \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\Affichage{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
+ }%
+ }{%
+ \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\Affichage{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
+ \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{\xintifboolexpr{#2=0}{}{+}}\xintifboolexpr{\Multik<0}{(}{}\Affichage{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
}%
- \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil<0}{-\Affichage{0}{0}{\fpeval{-\Multil}}}{+\Affichage{0}{0}{\Multil}}}%
- }
- \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#2*#4}}\xdef\SommeB{\fpeval{\SommeB+#2*#5+#3*#4}}\xdef\SommeC{\fpeval{\SommeC+#3*#5}}}{}%
- \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#2*#4}}\xdef\SommeB{\fpeval{\SommeB-#2*#5-#3*#4}}\xdef\SommeC{\fpeval{\SommeC-#3*#5}}}{}%
- }{}%
+ \xintifboolexpr{\Multil=0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}%
+ }{}%
+ % Etape 4
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=4}{%
+ \xdef\Multi{\fpeval{#2*#4}}%
+ \xdef\Multij{\fpeval{#2*#5}}%
+ \xdef\Multik{\fpeval{#3*#4}}%
+ \xdef\Multil{\fpeval{#3*#5}}%
+ %% ils sont red\'efinis pour pouvoir envisager la somme de deux
+ %% expressions \`a d\'evelopper
+ \xdef\Multim{\fpeval{#2*#5+#3*#4}}%
+ \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
+ \stepcounter{NbCalculDistri}%
+ \ifboolKV[ClesDistributivite]{Oppose}{%
+ \xdef\Multi{\fpeval{-\Multi}}%
+ \xdef\Multim{\fpeval{-\Multim}}%
+ \xdef\Multil{\fpeval{-\Multil}}%
+ \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+ \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+ \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
+ }{%
+ \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\Affichage{\Multi}{0}{0})}{\Affichage{\Multi}{0}{0}}}{\Affichage{\Multi}{0}{0}}%
+ \xintifboolexpr{\Multim=0}{}{%
+ \xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
+ }%
+ \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil<0}{-\Affichage{0}{0}{\fpeval{-\Multil}}}{+\Affichage{0}{0}{\Multil}}}%
+ }
+ \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#2*#4}}\xdef\SommeB{\fpeval{\SommeB+#2*#5+#3*#4}}\xdef\SommeC{\fpeval{\SommeC+#3*#5}}}{}%
+ \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#2*#4}}\xdef\SommeB{\fpeval{\SommeB-#2*#5-#3*#4}}\xdef\SommeC{\fpeval{\SommeC-#3*#5}}}{}%
+ }{}%
+ }%
}%
}%
}%
@@ -5948,53 +6625,55 @@ vardef Positions(expr Step)=
}%
\ifboolKV[ClesTrigo]{Cosinus}{%
\ifx\bla#3\bla%on calcule le c\^ot\'e adjacent
- \xdef\ResultatTrigo{\fpeval{round(\fpeval{#4*cosd(#5)},\useKV[ClesTrigo]{Precision})}}%
+ \xdef\ResultatTrigo{\fpeval{round(#4*cosd(#5),\useKV[ClesTrigo]{Precision})}}%
\ifboolKV[ClesTrigo]{Propor}{%
\begin{align*}
\NomA\NomC\times\cos(\widehat{\NomB\NomA\NomC})&=\NomA\NomB\\
\num{#4}\times\cos(\ang{#5})&=\NomA\NomB\\
- \num{\fpeval{round(\fpeval{#4*cosd(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*cosd(#5)},2)}}{=}{\approx}\NomA\NomB%
+ \num{\fpeval{round(#4*cosd(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(#4*cosd(#5),9)}}{=}{\approx}\NomA\NomB%
\end{align*}%
}{%
\begin{align*}
\cos(\widehat{\NomB\NomA\NomC})&=\frac{\NomA\NomB}{\NomA\NomC}\\
\cos(\ang{#5})&=\frac{\NomA\NomB}{\num{#4}}\\
\num{#4}\times\cos(\ang{#5})&=\NomA\NomB\\
- \num{\fpeval{round(\fpeval{#4*cosd(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*cosd(#5)},2)}}{=}{\approx}\NomA\NomB
+ \num{\fpeval{round(#4*cosd(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(#4*cosd(#5),9)}}{=}{\approx}\NomA\NomB
\end{align*}
}%
\else%
\ifx\bla#4\bla%on calcule l'hypoth\'enuse
- \xdef\ResultatTrigo{\fpeval{round(\fpeval{#3/cosd(#5)},\useKV[ClesTrigo]{Precision})}}%
+ \xdef\ResultatTrigo{\fpeval{round(#3/cosd(#5),\useKV[ClesTrigo]{Precision})}}%
\ifboolKV[ClesTrigo]{Propor}{%
\begin{align*}
\NomA\NomC\times\cos(\widehat{\NomB\NomA\NomC})&=\NomA\NomB\\
\NomA\NomC\times\cos(\ang{#5})&=\num{#3}\\
\NomA\NomC&=\frac{\num{#3}}{\cos(\ang{#5})}\\
- \NomA\NomC&\IfInteger{\fpeval{round(\fpeval{#3/cosd(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/cosd(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+ \NomA\NomC&\IfInteger{\fpeval{round(#3/cosd(#5),9)}}{=}{\approx}\num{\fpeval{round(#3/cosd(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
\end{align*}
}{%
\begin{align*}
\cos(\widehat{\NomB\NomA\NomC})&=\frac{\NomA\NomB}{\NomA\NomC}\\
\cos(\ang{#5})&=\frac{\num{#3}}{\NomA\NomC}\\
\NomA\NomC&=\frac{\num{#3}}{\cos(\ang{#5})}\\
- \NomA\NomC&\IfInteger{\fpeval{round(\fpeval{#3/cosd(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/cosd(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+ \NomA\NomC&\IfInteger{\fpeval{round(#3/cosd(#5),9)}}{=}{\approx}\num{\fpeval{round(#3/cosd(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
\end{align*}%
}%
\else%on calcule l'angle
- \xdef\ResultatTrigo{\fpeval{round(\fpeval{acosd(#3/#4)})}}%
+ \xdef\ResultatTrigo{\fpeval{round(acosd(#3/#4),\useKV[ClesTrigo]{Precision})}}%
+ \setKV[ClesTrigo]{Precision=0}%
+ \setKV[ClesTrigo]{#1}%
\ifboolKV[ClesTrigo]{Propor}{%
\begin{align*}
\NomA\NomC\times\cos(\widehat{\NomB\NomA\NomC})&=\NomA\NomB\\
\num{#4}\times\cos(\widehat{\NomB\NomA\NomC})&=\num{#3}\\
\cos(\widehat{\NomB\NomA\NomC})&=\frac{\num{#3}}{\num{#4}}\\
- \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{acosd(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{acosd(#3/#4)})}}%
+ \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(acosd(#3/#4),9)}}{=}{\approx}\ang{\fpeval{round(acosd(#3/#4),\useKV[ClesTrigo]{Precision})}}%
\end{align*}%
}{%
\begin{align*}
\cos(\widehat{\NomB\NomA\NomC})&=\frac{\NomA\NomB}{\NomA\NomC}\\
\cos(\widehat{\NomB\NomA\NomC})&=\frac{\num{#3}}{\num{#4}}\\
- \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{acosd(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{acosd(#3/#4)})}}%
+ \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(acosd(#3/#4),9)}}{=}{\approx}\ang{\fpeval{round(acosd(#3/#4),\useKV[ClesTrigo]{Precision})}}%
\end{align*}%
}%
\fi%
@@ -6002,53 +6681,55 @@ vardef Positions(expr Step)=
}{}%
\ifboolKV[ClesTrigo]{Sinus}{%
\ifx\bla#3\bla%on calcule le c\^ot\'e oppos\'e
- \xdef\ResultatTrigo{\fpeval{round(\fpeval{#4*sind(#5)},\useKV[ClesTrigo]{Precision})}}%
+ \xdef\ResultatTrigo{\fpeval{round(#4*sind(#5),\useKV[ClesTrigo]{Precision})}}%
\ifboolKV[ClesTrigo]{Propor}{%
\begin{align*}
\NomA\NomC\times\sin(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
\num{#4}\times\sin(\ang{#5})&=\NomB\NomC\\
- \num{\fpeval{round(\fpeval{#4*sind(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*sind(#5)},2)}}{=}{\approx}\NomB\NomC%
+ \num{\fpeval{round(#4*sind(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(#4*sind(#5),9)}}{=}{\approx}\NomB\NomC%
\end{align*}%
}{%
\begin{align*}
\sin(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomC}\\
\sin(\ang{#5})&=\frac{\NomB\NomC}{\num{#4}}\\
\num{#4}\times\sin(\ang{#5})&=\NomB\NomC\\
- \num{\fpeval{round(\fpeval{#4*sind(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*sind(#5)},2)}}{=}{\approx}\NomB\NomC%
+ \num{\fpeval{round(#4*sind(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(#4*sind(#5),9)}}{=}{\approx}\NomB\NomC%
\end{align*}%
}%
\else
\ifx\bla#4\bla%on calcule l'hypoth\'enuse
- \xdef\ResultatTrigo{\fpeval{round(\fpeval{#3/sind(#5)},\useKV[ClesTrigo]{Precision})}}%
+ \xdef\ResultatTrigo{\fpeval{round(#3/sind(#5),\useKV[ClesTrigo]{Precision})}}%
\ifboolKV[ClesTrigo]{Propor}{%
\begin{align*}
\NomA\NomC\times\sin(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
\NomA\NomC\times\sin(\ang{#5})&=\num{#3}\\
\NomA\NomC&=\frac{\num{#3}}{\sin(\ang{#5})}\\
- \NomA\NomC&\IfInteger{\fpeval{round(\fpeval{#3/sind(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/sind(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+ \NomA\NomC&\IfInteger{\fpeval{round(#3/sind(#5),9)}}{=}{\approx}\num{\fpeval{round(#3/sind(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
\end{align*}%
}{%
\begin{align*}
\sin(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomC}\\
\sin(\ang{#5})&=\frac{\num{#3}}{\NomA\NomC}\\
\NomA\NomC&=\frac{\num{#3}}{\sin(\ang{#5})}\\
- \NomA\NomC&\IfInteger{\fpeval{round(\fpeval{#3/sind(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/sind(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+ \NomA\NomC&\IfInteger{\fpeval{round(#3/sind(#5),9)}}{=}{\approx}\num{\fpeval{round(#3/sind(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
\end{align*}%
}%
\else%on calcule l'angle
- \xdef\ResultatTrigo{\fpeval{round(\fpeval{asind(#3/#4)})}}%
+ \xdef\ResultatTrigo{\fpeval{round(asind(#3/#4),\useKV[ClesTrigo]{Precision})}}%
+ \setKV[ClesTrigo]{Precision=0}%
+ \setKV[ClesTrigo]{#1}%
\ifboolKV[ClesTrigo]{Propor}{%
\begin{align*}
\NomA\NomC\times\sin(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
\num{#4}\times\sin(\widehat{\NomB\NomA\NomC})&=\num{#3}\\
\sin(\widehat{\NomB\NomA\NomC})&=\frac{\num{#3}}{\num{#4}}\\
- \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{asind(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{asind(#3/#4)})}}%
+ \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(asind(#3/#4),9)}}{=}{\approx}\ang{\fpeval{round(asind(#3/#4),\useKV[ClesTrigo]{Precision})}}%
\end{align*}%
}{%
\begin{align*}
\sin(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomC}\\
\sin(\widehat{\NomB\NomA\NomC})&=\frac{\num{#3}}{\num{#4}}\\
- \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{asind(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{asind(#3/#4)})}}%
+ \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(asind(#3/#4),9)}}{=}{\approx}\ang{\fpeval{round(asind(#3/#4),\useKV[ClesTrigo]{Precision})}}%
\end{align*}%
}%
\fi%
@@ -6056,53 +6737,55 @@ vardef Positions(expr Step)=
}{}%
\ifboolKV[ClesTrigo]{Tangente}{%
\ifx\bla#3\bla%on calcule le c\^ot\'e oppos\'e
- \xdef\ResultatTrigo{\fpeval{round(\fpeval{#4*tand(#5)},\useKV[ClesTrigo]{Precision})}}%
+ \xdef\ResultatTrigo{\fpeval{round(#4*tand(#5),\useKV[ClesTrigo]{Precision})}}%
\ifboolKV[ClesTrigo]{Propor}{%
\begin{align*}
\NomA\NomB\times\tan(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\%
\num{#4}\times\tan(\ang{#5})&=\NomB\NomC\\%
- \num{\fpeval{round(\fpeval{#4*tand(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*tand(#5)},2)}}{=}{\approx}\NomB\NomC%
+ \num{\fpeval{round(#4*tand(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(#4*tand(#5),9)}}{=}{\approx}\NomB\NomC%
\end{align*}%
}{%
\begin{align*}
\tan(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomB}\\
\tan(\ang{#5})&=\frac{\NomB\NomC}{\num{#4}}\\
\num{#4}\times\tan(\ang{#5})&=\NomB\NomC\\
- \num{\fpeval{round(\fpeval{#4*tand(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*tand(#5)},2)}}{=}{\approx}\NomB\NomC%
+ \num{\fpeval{round(#4*tand(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(#4*tand(#5),9)}}{=}{\approx}\NomB\NomC%
\end{align*}%
}%
\else
\ifx\bla#4\bla%on calcule l'adjacent
- \xdef\ResultatTrigo{\fpeval{round(\fpeval{#3/tand(#5)},\useKV[ClesTrigo]{Precision})}}%
+ \xdef\ResultatTrigo{\fpeval{round(#3/tand(#5),\useKV[ClesTrigo]{Precision})}}%
\ifboolKV[ClesTrigo]{Propor}{%
\begin{align*}
\NomA\NomB\times\tan(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
\NomA\NomB\times\tan(\ang{#5})&=\num{#3}\\
\NomA\NomB&=\frac{\num{#3}}{\tan(\ang{#5})}\\
- \NomA\NomB&\IfInteger{\fpeval{round(\fpeval{#3/tand(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/tand(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+ \NomA\NomB&\IfInteger{\fpeval{round(#3/tand(#5),9)}}{=}{\approx}\num{\fpeval{round(#3/tand(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
\end{align*}%
}{%
\begin{align*}
\tan(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomB}\\
\tan(\ang{#5})&=\frac{\num{#3}}{\NomA\NomB}\\
\NomA\NomB&=\frac{\num{#3}}{\tan(\ang{#5})}\\
- \NomA\NomB&\IfInteger{\fpeval{round(\fpeval{#3/tand(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/tand(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+ \NomA\NomB&\IfInteger{\fpeval{round(#3/tand(#5),9)}}{=}{\approx}\num{\fpeval{round(#3/tand(#5),\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
\end{align*}%
}%
\else%on calcule l'angle
- \xdef\ResultatTrigo{\fpeval{round(\fpeval{atand(#3/#4)})}}%
+ \setKV[ClesTrigo]{Precision=0}%
+ \setKV[ClesTrigo]{#1}%
+ \xdef\ResultatTrigo{\fpeval{round(atand(#3/#4),\useKV[ClesTrigo]{Precision})}}%
\ifboolKV[ClesTrigo]{Propor}{%
\begin{align*}
\NomA\NomB\times\tan(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
\num{#4}\times\tan(\widehat{\NomB\NomA\NomC})&=\num{#3}\\
\tan(\widehat{\NomB\NomA\NomC})&=\frac{\num{#3}}{\num{#4}}\\
- \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{atand(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{atand(#3/#4)})}}%
+ \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(atand(#3/#4),9)}}{=}{\approx}\ang{\fpeval{round(atand(#3/#4),\useKV[ClesTrigo]{Precision})}}%
\end{align*}%
}{%
\begin{align*}
\tan(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomB}\\
\tan(\widehat{\NomB\NomA\NomC})&=\frac{\num{#3}}{\num{#4}}\\
- \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{atand(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{atand(#3/#4)})}}%
+ \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(atand(#3/#4),9)}}{=}{\approx}\ang{\fpeval{round(atand(#3/#4),\useKV[ClesTrigo]{Precision})}}%
\end{align*}%
}%
\fi%
@@ -6883,7 +7566,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\DTLgnewdb{mtdbEE}%
\DTLgnewdb{mtdbEEqual}%
-%
+%
\newcommand\Stat[2][]{%
\useKVdefault[ClesStat]%
\setKV[ClesStat]{#1}%
@@ -6897,89 +7580,89 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
}%
\readlist*\ListeComplete{\foo}%
\setKV[ClesStat]{Qualitatif}%
- }{
- \ifboolKV[ClesStat]{Sondage}{%
- \setsepchar{,}\ignoreemptyitems%
- \readlist*\Liste{#2}%
- % "liste vide"
- \newtoks\tabtoksEEa%
- \tabtoksEEa{}%
- %
- % "liste vide"
- \newtoks\tabtoksEEb%
- \tabtoksEEb{}%
- %
- \readlist*\ListeSansDoublonsEE{999}% %% Pour ne pas avoir une liste vide
- %
- \newcount\cmptEE%
- \newcount\PasNumEE% %% Permettra de savoir si ce sondage est qualitatif ou quantitatif
- \PasNumEE=0\relax%
- \DTLcleardb{mtdbEE}%
- % on range les resultats du sondage par ordre croissant.
- \foreachitem\x\in\Liste{%
- \DTLnewrow{mtdbEE}%
- \DTLnewdbentry{mtdbEE}{Numeric}{\x}%
- }%
- \dtlsort{Numeric}{mtdbEE}{\dtlicompare}%
- \DTLforeach{mtdbEE}{\nba=Numeric}{%
- \IfDecimal{\nba}{}{\PasNumEE=\numexpr\PasNumEE+1\relax}%
- \cmptEE=0\relax%
- \foreachitem\nbb\in\ListeSansDoublonsEE{%
- \ifthenelse{\equal{\nba}{\nbb}}{\cmptEE=\numexpr\cmptEE+1\relax}{}%
- }%
- \ifthenelse{\equal{\the\cmptEE}{0}}{%
- \expandafter\AjoutListEEb\nba\nil%
- \xdef\listEEa{\the\tabtoksEEb}%
- \ignoreemptyitems%
- \setsepchar{,}%
- \readlist*\ListeSansDoublonsEE\listEEa% %%% Enl\`eve tous les \'elements
- %%% identiques de Liste
- }{}%
- }%
- \foreachitem\nba\in\ListeSansDoublonsEE{%
- \cmptEE=0\relax%
- \DTLforeach{mtdbEE}{\nbb=Numeric}{%
- \ifthenelse{\equal{\nba}{\nbb}}{\cmptEE=\numexpr\cmptEE+1\relax}{}%
- }%
- \expandafter\AjoutListEEab\nba\nil%
- \expandafter\AjoutListEEaa\the\cmptEE\nil% %%% Compte tous les \'elements
- %%% identiques de Liste
- }%
- \xdef\listEEb{\the\tabtoksEEa}
- \ignoreemptyitems%
- \setsepchar[*]{,*/}
- \readlist*\ListeComplete\listEEb%
- %
- \ifthenelse{\equal{\the\PasNumEE}{0}}{\setKV[ClesStat]{Quantitatif}}{\setKV[ClesStat]{Qualitatif}}%
}{%
- \ifboolKV[ClesStat]{Qualitatif}{%
- % % on lit la liste \'ecrite sous la forme valeur/effectif
- \setsepchar[*]{,*/}\ignoreemptyitems%
- \readlist*\ListeComplete{#2}%
- }{% Dans le qualitatif, on trie d'abord les valeurs.
- \setsepchar[*]{,*/}\ignoreemptyitems%
- \readlist*\ListeInitiale{#2}%
-% "liste vide"
+ \ifboolKV[ClesStat]{Sondage}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\Liste{#2}%
+ % "liste vide"
+ \newtoks\tabtoksEEa%
+ \tabtoksEEa{}%
+ %
+ % "liste vide"
+ \newtoks\tabtoksEEb%
+ \tabtoksEEb{}%
+ %
+ \readlist*\ListeSansDoublonsEE{999}% %% Pour ne pas avoir une liste vide
+ %
+ \newcount\cmptEE%
+ \newcount\PasNumEE% %% Permettra de savoir si ce sondage est qualitatif ou quantitatif
+ \PasNumEE=0\relax%
+ \DTLcleardb{mtdbEE}%
+ % on range les resultats du sondage par ordre croissant.
+ \foreachitem\x\in\Liste{%
+ \DTLnewrow{mtdbEE}%
+ \DTLnewdbentry{mtdbEE}{Numeric}{\x}%
+ }%
+ \dtlsort{Numeric}{mtdbEE}{\dtlicompare}%
+ \DTLforeach{mtdbEE}{\nba=Numeric}{%
+ \IfDecimal{\nba}{}{\PasNumEE=\numexpr\PasNumEE+1\relax}%
+ \cmptEE=0\relax%
+ \foreachitem\nbb\in\ListeSansDoublonsEE{%
+ \ifthenelse{\equal{\nba}{\nbb}}{\cmptEE=\numexpr\cmptEE+1\relax}{}%
+ }%
+ \ifthenelse{\equal{\the\cmptEE}{0}}{%
+ \expandafter\AjoutListEEb\nba\nil%
+ \xdef\listEEa{\the\tabtoksEEb}%
+ \ignoreemptyitems%
+ \setsepchar{,}%
+ \readlist*\ListeSansDoublonsEE\listEEa% %%% Enl\`eve tous les \'elements
+ %%% identiques de Liste
+ }{}%
+ }%
+ \foreachitem\nba\in\ListeSansDoublonsEE{%
+ \cmptEE=0\relax%
+ \DTLforeach{mtdbEE}{\nbb=Numeric}{%
+ \ifthenelse{\equal{\nba}{\nbb}}{\cmptEE=\numexpr\cmptEE+1\relax}{}%
+ }%
+ \expandafter\AjoutListEEab\nba\nil%
+ \expandafter\AjoutListEEaa\the\cmptEE\nil% %%% Compte tous les \'elements
+ %%% identiques de Liste
+ }%
+ \xdef\listEEb{\the\tabtoksEEa}
+ \ignoreemptyitems%
+ \setsepchar[*]{,*/}%
+ \readlist*\ListeComplete\listEEb%
+ %
+ \ifthenelse{\equal{\the\PasNumEE}{0}}{\setKV[ClesStat]{Quantitatif}}{\setKV[ClesStat]{Qualitatif}}%
+ }{%
+ \ifboolKV[ClesStat]{Qualitatif}{%
+ % % on lit la liste \'ecrite sous la forme valeur/effectif
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListeComplete{#2}%
+ }{% Dans le qualitatif, on trie d'abord les valeurs.
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListeInitiale{#2}%
+ % "liste vide"
\newtoks\tabtoksEE%
\tabtoksEE{}%
\DTLcleardb{mtdbEEqual}%
\foreachitem\x\in\ListeInitiale{%
- \DTLnewrow{mtdbEEqual}%
- \itemtomacro\ListeInitiale[\xcnt,1]\x%
- \DTLnewdbentry{mtdbEEqual}{Val}{\x}%
- \itemtomacro\ListeInitiale[\xcnt,2]\y%
- \DTLnewdbentry{mtdbEEqual}{Eff}{\y}%
+ \DTLnewrow{mtdbEEqual}%
+ \itemtomacro\ListeInitiale[\xcnt,1]\x%
+ \DTLnewdbentry{mtdbEEqual}{Val}{\x}%
+ \itemtomacro\ListeInitiale[\xcnt,2]\y%
+ \DTLnewdbentry{mtdbEEqual}{Eff}{\y}%
}%
\dtlsort{Val}{mtdbEEqual}{\dtlicompare}%
\DTLforeach{mtdbEEqual}{\Val=Val,\Eff=Eff}{%
- \expandafter\AjoutListEEy\Val\nil%
- \expandafter\AjoutListEEx\Eff\nil%
- }
+ \expandafter\AjoutListEEy\Val\nil%
+ \expandafter\AjoutListEEx\Eff\nil%
+ }%
\xdef\listEE{\the\tabtoksEE}
\ignoreemptyitems%
- \setsepchar[*]{,*/}
+ \setsepchar[*]{,*/}%
\readlist*\ListeComplete\listEE%
- }}}
+ }}}%
% on cr\'ee la base de donn\'ees des valeurs dans le cas qualitatif
\DTLcleardb{mtdb}%
% on les trie pour la m\'ediane dans le cas qualitatif % Touhami / Texnique.fr
@@ -6991,7 +7674,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\dtlsort{Numeric}{mtdb}{\dtlicompare}%
% % on r\'einitialise les valeurs des crit\`eres de position et de
% dispersion
- \renewcommand\NbDonnees{}
+ \renewcommand\NbDonnees{}%
\renewcommand\SommeDonnees{}%
\renewcommand\EffectifTotal{}%
\renewcommand\Moyenne{}%
@@ -7007,7 +7690,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
% %% celui de l'effectif total
\ifboolKV[ClesStat]{EffectifTotal}{%
\ifboolKV[ClesStat]{Liste}{L'effectif total de la s\'erie est
- \num{\ListeCompletelen}.\par}{
+ \num{\ListeCompletelen}.\par}{%
\foreachitem\don\in\ListeComplete{\xdef\EffectifTotal{\fpeval{\EffectifTotal+\ListeComplete[\doncnt,2]}}}%
L'effectif total de la s\'erie est : \[\ListeComplete[1,2]\xintFor* ##1 in
{\xintSeq {2}{\ListeCompletelen}}\do{%
@@ -7017,30 +7700,30 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
% %% celui de la moyenne
\xdef\Moyenne{\fpeval{\SommeDonnees/\ListeCompletelen}}%
\ifboolKV[ClesStat]{Moyenne}{%
- \ifboolKV[ClesStat]{Liste}{%
- La somme des donn\'ees de la s\'erie est :%
- \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
- \[
- \num{\ListeComplete[1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{%
- +\num{\ListeComplete[##1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
- }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}%
- \]}{%
- \[
- \num{\ListeComplete[1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{3}}\do{%
- +\num{\ListeComplete[##1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}}+\dots\xintFor* ##1 in {\xintSeq {\ListeCompletelen-1}{\ListeCompletelen}}\do{%
- +\num{\ListeComplete[##1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
- }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}%
- \]%
- }%
- \ifboolKV[ClesStat]{SET}{}{Le nombre de donn\'ees de la s\'erie est \num{\ListeCompletelen}.\\}%
- Donc la moyenne de la s\'erie est \'egale \`a :%
- \[\frac{\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}}{\num{\ListeCompletelen}}%\IfInteger{\fpeval{round(\fpeval{\SommeDonnees/\ListeCompletelen},\useKV[ClesStat]{Precision})}}{=}{\approx}
- \opdiv*{\SommeDonnees}{\ListeCompletelen}{resultatmoy}{restemoy}%
- \opround{resultatmoy}{\useKV[ClesStat]{Precision}}{resultatmoy1}%
- \opcmp{resultatmoy}{resultatmoy1}\ifopeq=\else\approx\fi%
- \num{\fpeval{round(\fpeval{\SommeDonnees/\ListeCompletelen},\useKV[ClesStat]{Precision})}}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}.}{.}%
- \]%
- }{Pas de moyenne possible pour une s\'erie de donn\'ees \`a caract\`ere qualitatif.}}{}%
+ \ifboolKV[ClesStat]{Liste}{%
+ La somme des donn\'ees de la s\'erie est :%
+ \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
+ \[
+ \num{\ListeComplete[1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{%
+ +\num{\ListeComplete[##1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
+ }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}%
+ \]}{%
+ \[
+ \num{\ListeComplete[1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{3}}\do{%
+ +\num{\ListeComplete[##1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}}+\dots\xintFor* ##1 in {\xintSeq {\ListeCompletelen-1}{\ListeCompletelen}}\do{%
+ +\num{\ListeComplete[##1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
+ }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}%
+ \]%
+ }%
+ \ifboolKV[ClesStat]{SET}{}{Le nombre de donn\'ees de la s\'erie est \num{\ListeCompletelen}.\\}%
+ Donc la moyenne de la s\'erie est \'egale \`a :%
+ \[\frac{\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}}{\num{\ListeCompletelen}}%\IfInteger{\fpeval{round(\fpeval{\SommeDonnees/\ListeCompletelen},\useKV[ClesStat]{Precision})}}{=}{\approx}
+ \opdiv*{\SommeDonnees}{\ListeCompletelen}{resultatmoy}{restemoy}%
+ \opround{resultatmoy}{\useKV[ClesStat]{Precision}}{resultatmoy1}%
+ \opcmp{resultatmoy}{resultatmoy1}\ifopeq=\else\approx\fi%
+ \num{\fpeval{round(\SommeDonnees/\ListeCompletelen,\useKV[ClesStat]{Precision})}}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}.}{.}%
+ \]%
+ }{Pas de moyenne possible pour une s\'erie de donn\'ees \`a caract\`ere qualitatif.}}{}%
% % %% celui de l'\'etendue
\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
\xintifboolexpr{\ListeComplete[##1,2]>\DonneeMax}{%
@@ -7053,160 +7736,159 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\xdef\EffectifMax{\DonneeMax}%
\xdef\Etendue{\fpeval{\DonneeMax-\DonneeMin}}%
\ifboolKV[ClesStat]{Etendue}{%
- \ifboolKV[ClesStat]{Liste}{%
- L'\'etendue de la s\'erie est \'egale \`a $\num{\DonneeMax}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}-\num{\DonneeMin}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}=\num{\Etendue}$\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
- }{Pas d'\'etendue possible pour une s\'erie de donn\'ees \`a caract\`ere qualitatif.}}{}%
+ \ifboolKV[ClesStat]{Liste}{%
+ L'\'etendue de la s\'erie est \'egale \`a $\num{\DonneeMax}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}-\num{\DonneeMin}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}=\num{\Etendue}$\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
+ }{Pas d'\'etendue possible pour une s\'erie de donn\'ees \`a caract\`ere qualitatif.}}{}%
\ifboolKV[ClesStat]{Mediane}{%
- \ifboolKV[ClesStat]{Liste}{%
- On range les donn\'ees par ordre croissant :%
- \nbdonnees=0%
- \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
- \[\DTLforeach{mtdb}{\numeroDonnee=Numeric}{\num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\DTLiflastrow{.}{;}}\]%
- }{%
- \medskip%
- \begin{center}
- \begin{minipage}{0.9\linewidth}
- \DTLforeach*{mtdb}{\numeroDonnee=Numeric}{\num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\DTLiflastrow{.}{;
- }\nbdonnees=\fpeval{\nbdonnees+1}\modulo{\nbdonnees}{\useKV[ClesStat]{Coupure}}\xintifboolexpr{\remainder=0}{\\}{}}
- \end{minipage}
- \end{center}%
- \medskip%
- }%
- \newcount\med%
- \newcount\meda%
- \ifodd\number\ListeCompletelen%odd impair
- \med=\fpeval{(\ListeCompletelen+1)/2}\relax%
- L'effectif total de la s\'erie est \num{\ListeCompletelen}. Or, $\num{\ListeCompletelen}=\num{\fpeval{\med-1}}+1+\num{\fpeval{\med-1}}$.\\
- \else% pair
- \med=\fpeval{\ListeCompletelen/2}\relax
- \meda=\numexpr\med+1\relax
- L'effectif total de la s\'erie est \num{\ListeCompletelen}. Or, $\num{\ListeCompletelen}=\num{\the\med}+\num{\the\med}$.\\
- \fi%
- \newcount\k%
- \k=0%
- \DTLforeach{mtdb}{\numeroDonnee=Numeric}{\k=\numexpr\k+1\relax%
- \ifnum\k=\med %La m\'ediane vaut \numeroDonnee\fi
- \ifodd\number\ListeCompletelen%
- La m\'ediane de la s\'erie est la \the\med\ieme{} donn\'ee.\\Donc la m\'ediane de la s\'erie est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
- \else%
- La \the\med\ieme{} donn\'ee est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}\xdef\Mediane{\numeroDonnee} %
- \fi
- \fi
- \ifnum\k=\meda
- La \the\meda\ieme{} donn\'ee est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.} Donc la m\'ediane de la s\'erie est \xdef\Mediane{\fpeval{(\Mediane+\numeroDonnee)/2}}\num{\Mediane}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}
- \fi
- }
- %%%%%%%%%%%%%%%%%%%%%%%%
- }{Pas de m\'ediane possible pour une s\'erie de donn\'ees \`a caract\`ere qualitatif.}}{}
- % Construction du tableau
- \ifboolKV[ClesStat]{Tableau}{%
- \ifboolKV[ClesStat]{Liste}{Pas de tableau possible avec la cl\'e Liste.\\Utilisez plut\^ot la cl\'e Sondage si vous voulez un tableau avec cette liste.}{%
- \ifboolKV[ClesStat]{Total}{\buildtabt}{\buildtab}}}%
- {}%
- % Construction du graphique
- \ifboolKV[ClesStat]{Graphique}{%
- \ifboolKV[ClesStat]{Liste}{Pas de graphique possible avec la cl\'e Liste.\\Utilisez plut\^ot la cl\'e Sondage si vous voulez un graphique avec cette liste.}{%
- \ifboolKV[ClesStat]{Angle}{\buildgraphcq{360}}{\ifboolKV[ClesStat]{SemiAngle}{\buildgraphcq{180}}{\buildgraphq[#1]}}%
- }}{}
- }{%%%%%%%%%%%%%%%%%%%%%D\'ebut quantitatif
- % % on effectue les calculs
- % %% celui de la somme des donn\'ees
- \foreachitem\don\in\ListeComplete{\xdef\SommeDonnees{\fpeval{\SommeDonnees+\ListeComplete[\doncnt,1]*\ListeComplete[\doncnt,2]}}}%
- % %% celui de l'effectif total
- \foreachitem\don\in\ListeComplete{\xdef\EffectifTotal{\fpeval{\EffectifTotal+\ListeComplete[\doncnt,2]}}}%
- % %% celui de l'\'etendue
- \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
- \xintifboolexpr{\ListeComplete[##1,1]>\DonneeMax}{%
- \xdef\DonneeMax{\ListeComplete[##1,1]}%
- }{}%
- \xintifboolexpr{\ListeComplete[##1,1]<\DonneeMin}{%
- \xdef\DonneeMin{\ListeComplete[##1,1]}%
- }{}%
- }%
-% \xdef\EffectifMax{\DonneeMax}%
- \xdef\Etendue{\fpeval{\DonneeMax-\DonneeMin}}%%
- % %% celui de la moyenne
- \xdef\Moyenne{\fpeval{\SommeDonnees/\EffectifTotal}}%
- \ifboolKV[ClesStat]{EffectifTotal}{%
- L'effectif total de la s\'erie est : \[\ListeComplete[1,2]\xintFor* ##1 in
- {\xintSeq {2}{\ListeCompletelen}}\do{%
- +\ListeComplete[##1,2]}=\num{\EffectifTotal}\]
- }{}%
- \ifboolKV[ClesStat]{Moyenne}{%
- La somme des donn\'ees de la s\'erie est :%
- \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
- \[
- \ifnum\ListeComplete[1,2]=1\else\num{\ListeComplete[1,2]}\times\fi\num{\ListeComplete[1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{%
- +\ifnum\ListeComplete[##1,2]=1\else\num{\ListeComplete[##1,2]}\times\fi\num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
- }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
- \]
- }{%
- \[
- \ifnum\ListeComplete[1,2]=1\else\num{\ListeComplete[1,2]}\times\fi\num{\ListeComplete[1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{2}}\do{%
- +\ifnum\ListeComplete[##1,2]=1\else\num{\ListeComplete[##1,2]}\times\fi\num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
- }+\dots\xintFor* ##1 in {\xintSeq {\ListeCompletelen-1}{\ListeCompletelen}}\do{%
- +\ifnum\ListeComplete[##1,2]=1\else\num{\ListeComplete[##1,2]}\times\fi\num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
- }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
- \]
- }
- \ifboolKV[ClesStat]{SET}{}{L'effectif total de la s\'erie est :%
- \ifboolKV[ClesStat]{Liste}{ \num{\EffectifTotal}\\}{%
- \[\num{\ListeComplete[1,2]}\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{%
- +\num{\ListeComplete[##1,2]}
- }=\num{\EffectifTotal}
- \]%
+ \ifboolKV[ClesStat]{Liste}{%
+ On range les donn\'ees par ordre croissant :%
+ \nbdonnees=0%
+ \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
+ \[\DTLforeach{mtdb}{\numeroDonnee=Numeric}{\num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\DTLiflastrow{.}{;}}\]%
+ }{%
+ \medskip%
+ \begin{center}
+ \begin{minipage}{0.9\linewidth}
+ \DTLforeach*{mtdb}{\numeroDonnee=Numeric}{\num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\DTLiflastrow{.}{;
+ }\nbdonnees=\fpeval{\nbdonnees+1}\modulo{\nbdonnees}{\useKV[ClesStat]{Coupure}}\xintifboolexpr{\remainder=0}{\\}{}}
+ \end{minipage}
+ \end{center}%
+ \medskip%
}%
- }
- Donc la moyenne de la s\'erie est \'egale \`a :%
- \[\frac{\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}}{\num{\EffectifTotal}}%
- \opdiv*{\SommeDonnees}{\EffectifTotal}{resultatmoy}{restemoy}%
- \opround{resultatmoy}{\useKV[ClesStat]{Precision}}{resultatmoy1}%
- % Moy=\opprint{resultatmoy}--Moy1=\opprint{resultatmoy1}
- \opcmp{resultatmoy}{resultatmoy1}\ifopeq=\else\approx\fi%
- \num{\fpeval{round(\SommeDonnees/\EffectifTotal,\useKV[ClesStat]{Precision})}}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}.}{.}
- \]%
- }{}%
- % % Affichage des r\'eponses.
- % %% pour l'\'etendue
- \ifboolKV[ClesStat]{Etendue}{L'\'etendue de la s\'erie est \'egale \`a $\num{\ListeComplete[\ListeCompletelen,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}-\num{\ListeComplete[1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}=\num{\Etendue}$\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}}{}%
- % %% pour la m\'ediane
- \ifboolKV[ClesStat]{Mediane}{%
-
- \newcount\med%
- \newcount\meda%
- \ifodd\number\EffectifTotal%odd impair
- \med=\fpeval{(\EffectifTotal+1)/2}\relax%
- L'effectif total de la s\'erie est \num{\EffectifTotal}. Or, $\num{\EffectifTotal}=\num{\fpeval{\med-1}}+1+\num{\fpeval{\med-1}}$. %
- \else% pair
- \med=\fpeval{\EffectifTotal/2}\relax%
- \meda=\numexpr\med+1\relax%
- L'effectif total de la s\'erie est \num{\EffectifTotal}. Or, $\num{\EffectifTotal}=\num{\fpeval{\med}}+\num{\fpeval{\med}}$. %
- \fi%
- \newcount\k%
- \k=0%
- \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
- \xintFor* ##2 in {\xintSeq {1}{\ListeComplete[##1,2]}}\do{%
- \k=\numexpr\k+1\relax%
- \ifnum\k=\med%
- \ifodd\number\EffectifTotal%
- La m\'ediane de la s\'erie est la \the\med\ieme{} donn\'ee. Donc la m\'ediane de la s\'erie est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
+ \newcount\med%
+ \newcount\meda%
+ \ifodd\number\ListeCompletelen%odd impair
+ \med=\fpeval{(\ListeCompletelen+1)/2}\relax%
+ L'effectif total de la s\'erie est \num{\ListeCompletelen}. Or, $\num{\ListeCompletelen}=\num{\fpeval{\med-1}}+1+\num{\fpeval{\med-1}}$.\\
+ \else% pair
+ \med=\fpeval{\ListeCompletelen/2}\relax%
+ \meda=\numexpr\med+1\relax%
+ L'effectif total de la s\'erie est \num{\ListeCompletelen}. Or, $\num{\ListeCompletelen}=\num{\the\med}+\num{\the\med}$.\\
+ \fi%
+ \newcount\k%
+ \k=0%
+ \DTLforeach{mtdb}{\numeroDonnee=Numeric}{\k=\numexpr\k+1\relax%
+ \ifnum\k=\med %La m\'ediane vaut \numeroDonnee\fi
+ \ifodd\number\ListeCompletelen%
+ La m\'ediane de la s\'erie est la \the\med\ieme{} donn\'ee.\\Donc la m\'ediane de la s\'erie est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
\else%
- La \the\med\ieme{} donn\'ee est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}. }{. }\xdef\Mediane{\ListeComplete[##1,1]}%
- \fi%
+ La \the\med\ieme{} donn\'ee est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}\xdef\Mediane{\numeroDonnee}%
\fi%
- \ifnum\k=\meda%
- La \the\meda\ieme{} valeur est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}\\Donc la m\'ediane de la s\'erie est \xdef\Mediane{\fpeval{(\Mediane+\ListeComplete[##1,1])/2}}\num{\Mediane}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
\fi%
- }%
+ \ifnum\k=\meda
+ La \the\meda\ieme{} donn\'ee est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.} Donc la m\'ediane de la s\'erie est \xdef\Mediane{\fpeval{(\Mediane+\numeroDonnee)/2}}\num{\Mediane}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
+ \fi%
}%
+ %%%%%%%%%%%%%%%%%%%%%%%%
+ }{Pas de m\'ediane possible pour une s\'erie de donn\'ees \`a caract\`ere qualitatif.}}{}%
+ % Construction du tableau
+ \ifboolKV[ClesStat]{Tableau}{%
+ \ifboolKV[ClesStat]{Liste}{Pas de tableau possible avec la cl\'e Liste.\\Utilisez plut\^ot la cl\'e Sondage si vous voulez un tableau avec cette liste.}{%
+ \ifboolKV[ClesStat]{Total}{\buildtabt}{\buildtab}}}%
+ {}%
+ % Construction du graphique
+ \ifboolKV[ClesStat]{Graphique}{%
+ \ifboolKV[ClesStat]{Liste}{Pas de graphique possible avec la cl\'e Liste.\\Utilisez plut\^ot la cl\'e Sondage si vous voulez un graphique avec cette liste.}{%
+ \ifboolKV[ClesStat]{Angle}{\buildgraphcq{360}}{\ifboolKV[ClesStat]{SemiAngle}{\buildgraphcq{180}}{\buildgraphq[#1]}}%
+ }}{}%
+}{%%%%%%%%%%%%%%%%%%%%%D\'ebut quantitatif
+ % % on effectue les calculs
+ % %% celui de la somme des donn\'ees
+ \foreachitem\don\in\ListeComplete{\xdef\SommeDonnees{\fpeval{\SommeDonnees+\ListeComplete[\doncnt,1]*\ListeComplete[\doncnt,2]}}}%
+ % %% celui de l'effectif total
+ \foreachitem\don\in\ListeComplete{\xdef\EffectifTotal{\fpeval{\EffectifTotal+\ListeComplete[\doncnt,2]}}}%
+ % %% celui de l'\'etendue
+ \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
+ \xintifboolexpr{\ListeComplete[##1,1]>\DonneeMax}{%
+ \xdef\DonneeMax{\ListeComplete[##1,1]}%
}{}%
- % Construction de tableau
- \ifboolKV[ClesStat]{Tableau}{\ifboolKV[ClesStat]{Total}{\buildtabt}{\buildtab}}{}%
- % Construction du graphique ??
- \ifboolKV[ClesStat]{Graphique}{%
- \ifboolKV[ClesStat]{Angle}{\buildgraphcq{360}}{\ifboolKV[ClesStat]{SemiAngle}{\buildgraphcq{180}}{\buildgraph[#1]}}
+ \xintifboolexpr{\ListeComplete[##1,1]<\DonneeMin}{%
+ \xdef\DonneeMin{\ListeComplete[##1,1]}%
}{}%
}%
+ % \xdef\EffectifMax{\DonneeMax}%
+ \xdef\Etendue{\fpeval{\DonneeMax-\DonneeMin}}%%
+ % %% celui de la moyenne
+ \xdef\Moyenne{\fpeval{\SommeDonnees/\EffectifTotal}}%
+ \ifboolKV[ClesStat]{EffectifTotal}{%
+ L'effectif total de la s\'erie est : \[\ListeComplete[1,2]\xintFor* ##1 in
+ {\xintSeq {2}{\ListeCompletelen}}\do{%
+ +\ListeComplete[##1,2]}=\num{\EffectifTotal}\]
+ }{}%
+ \ifboolKV[ClesStat]{Moyenne}{%
+ La somme des donn\'ees de la s\'erie est :%
+ \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
+ \[
+ \ifnum\ListeComplete[1,2]=1\else\num{\ListeComplete[1,2]}\times\fi\num{\ListeComplete[1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{%
+ +\ifnum\ListeComplete[##1,2]=1\else\num{\ListeComplete[##1,2]}\times\fi\num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
+ }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
+ \]
+ }{%
+ \[
+ \ifnum\ListeComplete[1,2]=1\else\num{\ListeComplete[1,2]}\times\fi\num{\ListeComplete[1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{2}}\do{%
+ +\ifnum\ListeComplete[##1,2]=1\else\num{\ListeComplete[##1,2]}\times\fi\num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
+ }+\dots\xintFor* ##1 in {\xintSeq {\ListeCompletelen-1}{\ListeCompletelen}}\do{%
+ +\ifnum\ListeComplete[##1,2]=1\else\num{\ListeComplete[##1,2]}\times\fi\num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
+ }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
+ \]
+ }
+ \ifboolKV[ClesStat]{SET}{}{L'effectif total de la s\'erie est :%
+ \ifboolKV[ClesStat]{Liste}{ \num{\EffectifTotal}\\}{%
+ \[\num{\ListeComplete[1,2]}\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{%
+ +\num{\ListeComplete[##1,2]}
+ }=\num{\EffectifTotal}
+ \]%
+ }%
+ }%
+ Donc la moyenne de la s\'erie est \'egale \`a :%
+ \[\frac{\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}}{\num{\EffectifTotal}}%
+ \opdiv*{\SommeDonnees}{\EffectifTotal}{resultatmoy}{restemoy}%
+ \opround{resultatmoy}{\useKV[ClesStat]{Precision}}{resultatmoy1}%
+ \opcmp{resultatmoy}{resultatmoy1}\ifopeq=\else\approx\fi%
+ \num{\fpeval{round(\SommeDonnees/\EffectifTotal,\useKV[ClesStat]{Precision})}}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}.}{.}%
+ \]%
+ }{}%
+ % % Affichage des r\'eponses.
+ % %% pour l'\'etendue
+ \ifboolKV[ClesStat]{Etendue}{L'\'etendue de la s\'erie est \'egale \`a $\num{\ListeComplete[\ListeCompletelen,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}-\num{\ListeComplete[1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}=\num{\Etendue}$\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}}{}%
+ % %% pour la m\'ediane
+ \ifboolKV[ClesStat]{Mediane}{%
+
+ \newcount\med%
+ \newcount\meda%
+ \ifodd\number\EffectifTotal%odd impair
+ \med=\fpeval{(\EffectifTotal+1)/2}\relax%
+ L'effectif total de la s\'erie est \num{\EffectifTotal}. Or, $\num{\EffectifTotal}=\num{\fpeval{\med-1}}+1+\num{\fpeval{\med-1}}$. %
+ \else% pair
+ \med=\fpeval{\EffectifTotal/2}\relax%
+ \meda=\numexpr\med+1\relax%
+ L'effectif total de la s\'erie est \num{\EffectifTotal}. Or, $\num{\EffectifTotal}=\num{\fpeval{\med}}+\num{\fpeval{\med}}$. %
+ \fi%
+ \newcount\k%
+ \k=0%
+ \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
+ \xintFor* ##2 in {\xintSeq {1}{\ListeComplete[##1,2]}}\do{%
+ \k=\numexpr\k+1\relax%
+ \ifnum\k=\med%
+ \ifodd\number\EffectifTotal%
+ La m\'ediane de la s\'erie est la \the\med\ieme{} donn\'ee. Donc la m\'ediane de la s\'erie est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
+ \else%
+ La \the\med\ieme{} donn\'ee est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}. }{. }\xdef\Mediane{\ListeComplete[##1,1]}%
+ \fi%
+ \fi%
+ \ifnum\k=\meda%
+ La \the\meda\ieme{} valeur est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}\\Donc la m\'ediane de la s\'erie est \xdef\Mediane{\fpeval{(\Mediane+\ListeComplete[##1,1])/2}}\num{\Mediane}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
+ \fi%
+ }%
+ }%
+ }{}%
+ % Construction de tableau
+ \ifboolKV[ClesStat]{Tableau}{\ifboolKV[ClesStat]{Total}{\buildtabt}{\buildtab}}{}%
+ % Construction du graphique ??
+ \ifboolKV[ClesStat]{Graphique}{%
+ \ifboolKV[ClesStat]{Angle}{\buildgraphcq{360}}{\ifboolKV[ClesStat]{SemiAngle}{\buildgraphcq{180}}{\buildgraph[#1]}}
+ }{}%
+}%
}%
%%%
@@ -7850,7 +8532,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
%%%
% Application : pourcentage
%%%
-\setKVdefault[ClesPourcentage]{Appliquer,Calculer=false,Augmenter=false,Reduire=false,Fractionnaire=false,Decimal,Formule=false,Unite=g,Concret=false,GrandeurA=Grandeur A,GrandeurB=Total,MotReduction=diminution,AideTableau=false,ColorFill=white,CouleurTab=gray!15}
+\setKVdefault[ClesPourcentage]{Appliquer,Calculer=false,Augmenter=false,Reduire=false,Fractionnaire=false,Decimal,Formule=false,Unite=g,Concret=false,GrandeurA=Grandeur A,GrandeurB=Total,Largeur=1cm,MotReduction=diminution,AideTableau=false,ColorFill=white,CouleurTab=gray!15}
\newcommand\Pourcentage[3][]{%
\useKVdefault[ClesPourcentage]%
@@ -7865,8 +8547,9 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\xdef\NomA{\useKV[ClesPourcentage]{GrandeurA}}%
\xdef\NomB{\useKV[ClesPourcentage]{GrandeurB}}%
\xdef\NomCouleurTab{\useKV[ClesPourcentage]{CouleurTab}}%
+ \xdef\NomLargeurTab{\useKV[ClesPourcentage]{Largeur}}%
\begin{center}
- \Propor[GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab]{/#3,#2/100}
+ \Propor[GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab,Largeur=\NomLargeurTab]{/#3,#2/100}
\end{center}
\FlecheCoefInv{\tiny$\times\num{\fpeval{#2/100}}$}%
On obtient une \useKV[ClesPourcentage]{MotReduction} de $\num{\fpeval{#2/100}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*#2/100}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}. Donc un total de $\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}-\num{\fpeval{#3*#2/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*(1-#2/100)}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.%
@@ -7885,8 +8568,9 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\xdef\NomA{\useKV[ClesPourcentage]{GrandeurA}}%
\xdef\NomB{\useKV[ClesPourcentage]{GrandeurB}}%
\xdef\NomCouleurTab{\useKV[ClesPourcentage]{CouleurTab}}%
+ \xdef\NomLargeurTab{\useKV[ClesPourcentage]{Largeur}}%
\begin{center}%
- \Propor[GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab]{/#3,#2/100}%
+ \Propor[GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab,Largeur=\NomLargeurTab]{/#3,#2/100}%
\end{center}%
\FlecheCoefInv{\tiny$\times\num{\fpeval{#2/100}}$}%
On obtient une augmentation de $\num{\fpeval{#2/100}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*#2/100}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.\\Donc un total de $\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}+\num{\fpeval{#3*#2/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*(1+#2/100)}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.%
@@ -7899,7 +8583,8 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\xdef\NomA{\useKV[ClesPourcentage]{GrandeurA}}%
\xdef\NomB{\useKV[ClesPourcentage]{GrandeurB}}%
\xdef\NomCouleurTab{\useKV[ClesPourcentage]{CouleurTab}}%
- \Propor[GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab]{#2/#3,/100}%
+ \xdef\NomLargeurTab{\useKV[ClesPourcentage]{Largeur}}%
+ \Propor[GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab,Largeur=\NomLargeurTab]{#2/#3,/100}%
\xdef\colorfill{\useKV[ClesPourcentage]{ColorFill}}%
\FlechesPB{2}{1}{\scriptsize$\times\num{\fpeval{#3/100}}$}%
\FlechesPH{1}{2}{\scriptsize$\div\num{\fpeval{#3/100}}$}%
@@ -7915,14 +8600,14 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
%%%
% Lien : ratio
%%%
-\setKVdefault[ClesRatio]{Figure=false,Longueur=5cm,TexteTotal=quantit\'e,TextePart=part,Tableau=false,GrandeurA=Grandeur A,GrandeurB=Part(s),Largeur=1cm,Stretch=1,Nom=false,CouleurUn=gris,CouleurDeux=0.5gris+0.5blanc,CouleurTrois=white,CouleurTab=gray!15}
+\setKVdefault[ClesRatio]{FigureCours=false,Figure=false,Longueur=5cm,TexteTotal=quantit\'e,TextePart=part,Tableau=false,GrandeurA=Grandeur A,GrandeurB=Part(s),Largeur=1cm,Stretch=1,Nom=false,CouleurUn=gris,CouleurDeux=0.5gris+0.5blanc,CouleurTrois=white,CouleurTab=gray!15}
\newcommand\MPTest[9][]{%
% #2 : Longueur de la barre unit\'e
% #3 : premier nombre
% #4 : deuxi\`eme nombre
% #5 : troisi\`eme nombre
- % #6 : Valeurs du ratio
+ % #6 : ne sert à rien. Laissé en attente.
% #7 \`a #9: Couleurs de remplissage
\ifluatex
\mplibforcehmode
@@ -7942,7 +8627,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
% on fait la somme totale "du ratio"
somme=0;
somme:=somme for k=1 upto n:+N[k] endfor;
- Figure(0,0,long+2u,3u);
+ %Figure(0,0,long+2u,3u);
remplis polygone(A,(N[1]/somme)[A,B],(N[1]/somme)[D,C],D)
withcolor #7;
remplis polygone(B,(N[1]/somme)[A,B],(N[1]/somme)[D,C],C)
@@ -7975,7 +8660,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
to"&decimal(abs(((N[1]+N[2])/somme)[A,B]-B))&"pt{}}$"),iso(B,((N[1]+N[2])/somme)[A,B]));
fi;
enddef;
- RatioTrois(#2)(#6);
+ RatioTrois(#2)(#3,#4,#5);
%etiquettage
labeloffset:=labeloffset*3;
label.top(btex \useKV[ClesRatio]{TexteTotal} etex,iso(D,C));
@@ -8051,7 +8736,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
to"&decimal(abs(((N[1]+N[2])/somme)[A,B]-B))&"pt{}}$"),iso(B,((N[1]+N[2])/somme)[A,B]));
fi;
enddef;
- RatioTrois(#2)(#6);
+ RatioTrois(#2)(#3,#4,#5);
%etiquettage
labeloffset:=labeloffset*3;
label.top(\btex \useKV[ClesRatio]{TexteTotal} etex,iso(D,C));
@@ -8078,6 +8763,127 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\fi
}
+\newcommand\MPTestCours[9][]{%
+ % #2 : Longueur de la barre unit\'e
+ % #3 : premier nombre
+ % #4 : deuxi\`eme nombre
+ % #5 : troisi\`eme nombre
+ % #6 : Valeurs du ratio
+ % #7 \`a #9: Couleurs de remplissage
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ vardef RatioTrois(expr long)(text t)=%longueur de la barre / quantit\'e \`a partager / textepart :) / t le ratio
+ pair A,B,C,D;
+ A=u*(1,1);
+ B-A=(long,0);
+ C-B=u*(0,0.5);
+ D-C=A-B;
+ n:=0;%n pour savoir si le ratio est a:b ou a:b:c
+ numeric N[];%Pour sauvegarder les \'el\'ements du ratio
+ for p_=t:
+ n:=n+1;
+ N[n]=p_;
+ endfor;
+ % on fait la somme totale "du ratio"
+ somme=0;
+ somme:=somme for k=1 upto n:+N[k] endfor;
+ %%Figure(0,0,long+2u,3u);
+ remplis polygone(A,(N[1]/somme)[A,B],(N[1]/somme)[D,C],D)
+ withcolor #7;
+ remplis polygone(B,(N[1]/somme)[A,B],(N[1]/somme)[D,C],C)
+ withcolor #8;
+ if n>2:
+ remplis
+ polygone((N[1]/somme)[A,B],((N[1]+N[2])/somme)[A,B],((N[1]+N[2])/somme)[D,C],(N[1]/somme)[D,C])
+ withcolor #8;
+ remplis
+ polygone(B,((N[1]+N[2])/somme)[A,B],((N[1]+N[2])/somme)[D,C],C)
+ withcolor #9;
+ fi;
+ drawoptions(withpen pencircle scaled1.5bp);
+ draw polygone(A,B,C,D);
+ for k=1 upto somme-1:
+ draw segment((k/somme)[A,B],(k/somme)[D,C]);
+ endfor;
+ drawoptions();
+ % accolades
+ label.bot(TEX("\footnotesize$\underbrace{\hbox
+ to"&decimal(abs((N[1]/somme)[A,B]-A))&"pt{}}$"),iso(A,(N[1]/somme)[A,B]));
+ label.bot(TEX("\footnotesize$\underbrace{\hbox
+ to"&decimal(abs((N[1]/somme)[A,B]-((N[1]+N[2])/somme)[A,B]))&"pt{}}$"),iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B]));
+ if n>2:
+ label.bot(TEX("\footnotesize$\underbrace{\hbox
+ to"&decimal(abs(((N[1]+N[2])/somme)[A,B]-B))&"pt{}}$"),iso(B,((N[1]+N[2])/somme)[A,B]));
+ fi;
+ enddef;
+ RatioTrois(#2)(#3,#4,#5);
+ %etiquettage
+ labeloffset:=labeloffset*3;
+ label.bot(btex $a$ etex,iso(A,(N[1]/somme)[A,B]));
+ label.bot(btex $b$ etex,iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B]));
+ if n>2:
+ label.bot(btex $c$ etex,iso(B,((N[1]+N[2])/somme)[A,B]));
+ fi;
+ \end{mplibcode}
+ \else
+ \begin{mpost}
+ vardef RatioTrois(expr long)(text t)=%longueur de la barre / quantit\'e \`a partager / textepart :) / t le ratio
+ pair A,B,C,D;
+ A=u*(1,1);
+ B-A=(long,0);
+ C-B=u*(0,0.5);
+ D-C=A-B;
+ n:=0;%n pour savoir si le ratio est a:b ou a:b:c
+ numeric N[];%Pour sauvegarder les \'el\'ements du ratio
+ for p_=t:
+ n:=n+1;
+ N[n]=p_;
+ endfor;
+ % on fait la somme totale "du ratio"
+ somme=0;
+ somme:=somme for k=1 upto n:+N[k] endfor;
+ %Figure(0,0,long+2u,3u);
+ remplis polygone(A,(N[1]/somme)[A,B],(N[1]/somme)[D,C],D)
+ withcolor #7;
+ remplis polygone(B,(N[1]/somme)[A,B],(N[1]/somme)[D,C],C)
+ withcolor #8;
+ if n>2:
+ remplis
+ polygone((N[1]/somme)[A,B],((N[1]+N[2])/somme)[A,B],((N[1]+N[2])/somme)[D,C],(N[1]/somme)[D,C])
+ withcolor #8;
+ remplis
+ polygone(B,((N[1]+N[2])/somme)[A,B],((N[1]+N[2])/somme)[D,C],C)
+ withcolor #9;
+ fi;
+ drawoptions(withpen pencircle scaled1.5bp);
+ draw polygone(A,B,C,D);
+ for k=1 upto somme-1:
+ draw segment((k/somme)[A,B],(k/somme)[D,C]);
+ endfor;
+ drawoptions();
+ % accolades
+ label.bot(LATEX("\noexpand\footnotesize$\noexpand\underbrace{\noexpand\hbox
+ to"&decimal(abs((N[1]/somme)[A,B]-A))&"pt{}}$"),iso(A,(N[1]/somme)[A,B]));
+ label.bot(LATEX("\noexpand\footnotesize$\noexpand\underbrace{\noexpand\hbox
+ to"&decimal(abs((N[1]/somme)[A,B]-((N[1]+N[2])/somme)[A,B]))&"pt{}}$"),iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B]));
+ if n>2:
+ label.bot(LATEX("\noexpand\footnotesize$\noexpand\underbrace{\noexpand\hbox
+ to"&decimal(abs(((N[1]+N[2])/somme)[A,B]-B))&"pt{}}$"),iso(B,((N[1]+N[2])/somme)[A,B]));
+ fi;
+ enddef;
+ RatioTrois(#2)(#3,#4,#5);
+ %etiquettage
+ labeloffset:=labeloffset*3;
+ label.bot(btex $a$ etex,iso(A,(N[1]/somme)[A,B]));
+ label.bot(btex $b$ etex,iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B]));
+ if n>2:
+ label.bot(btex $c$ etex,iso(B,((N[1]+N[2])/somme)[A,B]));
+ fi;
+ \end{mpost}
+ \fi
+}
+
\newtoks\toklisteratio
\def\UpdateRatio#1\nil{\addtotok\toklisteratio{#1,}}
@@ -8139,25 +8945,35 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\useKVdefault[ClesRatio]%
\setKV[ClesRatio]{#1}%
\xdef\EcartLargeur{\useKV[ClesRatio]{Largeur}}%
- \ifboolKV[ClesRatio]{Figure}{%
+ \ifboolKV[ClesRatio]{FigureCours}{%
\ignoreemptyitems%
\readlist*\ListeRatio{#2}%
\toklisteratio{}%
\foreachitem\compteur\in\ListeRatio{\expandafter\UpdateRatio\compteur\nil}%
- \itemtomacro\ListeRatio[1]\NbUn
- \itemtomacro\ListeRatio[2]\NbDeux
- \xintifboolexpr{\ListeRatiolen>2}{\itemtomacro\ListeRatio[3]\NbTrois}{\xdef\NbTrois{}}
- \MPTest[#1]{\useKV[ClesRatio]{Longueur}}{\NbUn}{\NbDeux}{\NbTrois}{\the\toklisteratio}{\useKV[ClesRatio]{CouleurUn}}{\useKV[ClesRatio]{CouleurDeux}}{\useKV[ClesRatio]{CouleurTrois}}%
+ \itemtomacro\ListeRatio[1]\NbUn%
+ \itemtomacro\ListeRatio[2]\NbDeux%
+ \xintifboolexpr{\ListeRatiolen>2}{\itemtomacro\ListeRatio[3]\NbTrois}{\xdef\NbTrois{}}%
+ \MPTestCours[#1]{\useKV[ClesRatio]{Longueur}}{\NbUn}{\NbDeux}{\NbTrois}{\the\toklisteratio}{\useKV[ClesRatio]{CouleurUn}}{\useKV[ClesRatio]{CouleurDeux}}{\useKV[ClesRatio]{CouleurTrois}}%
}{%
- \ifboolKV[ClesRatio]{Tableau}{%
- \setsepchar[*]{,*/}\ignoreemptyitems%
+ \ifboolKV[ClesRatio]{Figure}{%
+ \ignoreemptyitems%
\readlist*\ListeRatio{#2}%
- \buildtabratio%
- }{}%
+ \toklisteratio{}%
+ \foreachitem\compteur\in\ListeRatio{\expandafter\UpdateRatio\compteur\nil}%
+ \itemtomacro\ListeRatio[1]\NbUn%
+ \itemtomacro\ListeRatio[2]\NbDeux%
+ \xintifboolexpr{\ListeRatiolen>2}{\itemtomacro\ListeRatio[3]\NbTrois}{\xdef\NbTrois{}}%
+ \MPTest[#1]{\useKV[ClesRatio]{Longueur}}{\NbUn}{\NbDeux}{\NbTrois}{\the\toklisteratio}{\useKV[ClesRatio]{CouleurUn}}{\useKV[ClesRatio]{CouleurDeux}}{\useKV[ClesRatio]{CouleurTrois}}%
+ }{%
+ \ifboolKV[ClesRatio]{Tableau}{%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListeRatio{#2}%
+ \buildtabratio%
+ }{}%
+ }%
}%
}%
-
-%%%
+%%%
% Cartes Mentales
%%%
\setKVdefault[ClesMentales]{Nom={Bulle}, Largeur=5cm, Ancre={0,0},Pointilles=false,CTrace=black,CFond=white,Epaisseur=1pt,Rayon=1}%
@@ -11802,7 +12618,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
% #4 : on affiche le nom des points ou pas
% #5 : quelle est la valeur de la longueur unit\'e ?
% #6 : la valeur de l'unit\'e
- % #7 : on affiche les abscisses ou pas : 0 non, 1 oui, 2 fraction
+ % #7 : on affiche les abscisses ou pas : 0 non, 1 oui, 2 fraction, 3 Fleche dots
% #8 : on affiche tous les multiples de la graduation "principale"
\ifluatex
\mplibforcehmode
@@ -11833,7 +12649,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
fi;
enddef;
toto(#3);
- Figure((minx-1)*unitp,-u,(maxx+1)*unitp,u);
+ Figure((minx-1)*unitp,-2u,(maxx+1)*unitp,u);
pair A,B,C;
A=(0,0);
B=unitp*(maxx,0);
@@ -11888,7 +12704,20 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
fi;
endfor;
fi;
- if #7=2:
+ if #7=3:
+ for p_=t:
+ if numeric p_:
+ k:=p_;
+ fi;
+ if string p_:
+ if p_<>"":
+ drawarrow (unitp*(k,-1))--(unitp*(k,-0.3));
+ label.bot(btex \hbox to2em{\dotfill} etex,(unitp*(k,-1)));
+ pointe(unitp*(k-#6,0));
+ fi;
+ fi;
+ endfor;
+ elseif #7=2:
for p_=t:
if numeric p_:
k:=p_;
@@ -11948,7 +12777,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
fi;
enddef;
toto(#3);
- Figure((minx-1)*unitp,-u,(maxx+1)*unitp,u);
+ Figure((minx-1)*unitp,-2u,(maxx+1)*unitp,u);
pair A,B,C;
A=(0,0);
B=unitp*(maxx,0);
@@ -12003,7 +12832,20 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
fi;
endfor;
fi;
- if #7=2:
+ if #7=3:
+ for p_=t:
+ if numeric p_:
+ k:=p_;
+ fi;
+ if string p_:
+ if p_<>"":
+ drawarrow (unitp*(k,-1))--(unitp*(k,-0.3));
+ label.bot(\btex \hbox to2em{\dotfill} etex,(unitp*(k,-1)));
+ pointe(unitp*(k-#6,0));
+ fi;
+ fi;
+ endfor;
+ elseif #7=2:
for p_=t:
if numeric p_:
k:=p_;
@@ -13320,7 +14162,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\ifnum\cntcol<\useKV[Tableur]{Colonnes}
\advance\cntcol\@ne
\addtot@b{&}%
- \edftot@b{{\noexpand\@Alph\the\cntcol}}%
+ \edftot@b{{\noexpand\@Alph{\the\cntcol}}}%
\repeat
\addtot@b{\\&}%
\collectcp@body}{\the\t@b}