From 37d6b907148407d2248056757853ae27fd3a67e1 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 15 May 2021 20:46:18 +0000 Subject: profcollege (15may21) git-svn-id: svn://tug.org/texlive/trunk@59217 c570f23f-e606-0410-a88d-b1316a301751 --- .../doc/latex/profcollege/ProfCollege-doc.pdf | Bin 2772127 -> 2781147 bytes .../doc/latex/profcollege/ProfCollege-doc.zip | Bin 1681849 -> 1682253 bytes .../metapost/profcollege/PfCGeometrie.mp | 18 +- .../tex/latex/profcollege/ProfCollege.sty | 2006 ++++++++++++++------ Master/tlpkg/libexec/ctan2tds | 1 - 5 files changed, 1437 insertions(+), 588 deletions(-) diff --git a/Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.pdf b/Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.pdf index 842e63c3ca8..ee0a252f025 100644 Binary files a/Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.pdf and b/Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.pdf differ diff --git a/Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.zip b/Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.zip index d37c104a262..4660c7255de 100644 Binary files a/Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.zip and b/Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.zip differ diff --git a/Master/texmf-dist/metapost/profcollege/PfCGeometrie.mp b/Master/texmf-dist/metapost/profcollege/PfCGeometrie.mp index 222df574193..2e3cc54dd26 100644 --- a/Master/texmf-dist/metapost/profcollege/PfCGeometrie.mp +++ b/Master/texmf-dist/metapost/profcollege/PfCGeometrie.mp @@ -607,11 +607,19 @@ vardef polygone(text t)= aaa[j+1]:=aaa[1]; save $; path $; - $=aaa1-- - for k=2 upto j: - aaa[k]-- - endfor - cycle; + if typetrace="mainlevee": + $=segment(aaa[1],aaa[2])-- + for k=2 upto (j-1): + segment(aaa[k],aaa[k+1])-- + endfor + segment(aaa[j],aaa[1])--cycle; + else: + $=aaa1-- + for k=2 upto j: + aaa[k]-- + endfor + cycle; + fi; $ enddef; diff --git a/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty b/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty index eb53ab6098a..563ce3af328 100644 --- a/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty +++ b/Master/texmf-dist/tex/latex/profcollege/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 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{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(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 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]); + 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; + 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]); + 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 } @@ -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}% - }{% - % 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}}% - \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}{)}{}% - }% - \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}{)}{}}% - }% + \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{\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{\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}}}{}% }% - \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}{)}{}}% - }{% + }% + }{% + \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}{% + \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}{)}{}% + }% + \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}}% - \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} diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds index cb866c57b9a..167f9724bc9 100755 --- a/Master/tlpkg/libexec/ctan2tds +++ b/Master/tlpkg/libexec/ctan2tds @@ -939,7 +939,6 @@ chomp (my $ctan_root = `tlpkginfo --ctan-root`); 'noindentafter', "&MAKEflatten", 'norasi-c90', "&MAKEnorasi_c90", 'notes', "&MAKEnotes", - 'notestex', 'notocjksc', "die 'skipping, 300mb is just too big'", 'notomath', "&MAKEflatten", 'ntabbing', "die 'skipping, noinfo license, author email bad'", -- cgit v1.2.3