summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/proflycee/tex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-05-20 03:02:47 +0000
committerNorbert Preining <norbert@preining.info>2023-05-20 03:02:47 +0000
commit9cdcfcf8d9333b1d9b34b61ddc21910bbcc04491 (patch)
treef9143b5812837ab74ec819d0be97721594863346 /macros/latex/contrib/proflycee/tex
parentdd54bf2a9c9e985917ceb5ced412213cd44eaeae (diff)
CTAN sync 202305200302
Diffstat (limited to 'macros/latex/contrib/proflycee/tex')
-rw-r--r--macros/latex/contrib/proflycee/tex/ProfLycee.sty5
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex2
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex2
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex308
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-geom.tex488
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-probas.tex188
6 files changed, 815 insertions, 178 deletions
diff --git a/macros/latex/contrib/proflycee/tex/ProfLycee.sty b/macros/latex/contrib/proflycee/tex/ProfLycee.sty
index 322e4ad25d..89b82dd10c 100644
--- a/macros/latex/contrib/proflycee/tex/ProfLycee.sty
+++ b/macros/latex/contrib/proflycee/tex/ProfLycee.sty
@@ -3,8 +3,9 @@
% or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{ProfLycee}[2023/05/09 2.6.3 Aide pour l'utilisation de LaTeX en lycee]
-% 2.6.3 Ajout d'une commande pour l'équation affine d'une droite passant par deux points
+\ProvidesPackage{ProfLycee}[2023/05/19 2.6.4 Aide pour l'utilisation de LaTeX en lycee]
+% 2.6.4 Correction d'un dysfonctionnement avec les racines (oubli du \num) + Equation diophantienne ax+by=c + Eq cartésiennes (plan & droite) + Corrections de bugs mineurs
+% 2.6.3 Ajout d'une commande pour rédiger l'obtention de l'équation affine d'une droite passant par deux points
% 2.6.2 Correction de commandes pour la pseudo3d + nouvelle clé pour la trigo
% 2.6.1 Ajout de commandes pour du calcul intégral (valeur approchée + tikz)
% 2.6.0 Ajout d'une clé [Brut] pour les mesures principales + commande calcul ligne trigo
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex
index 943a28d0fb..c1d167f058 100644
--- a/macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex
@@ -25,7 +25,7 @@
\setKV[kvensemble]{#1}%
\ifboolKV[kvensemble]{Mathpunct}%
{\left\lbrace \PLensopt{} \mathpunct{} \StrSubstitute{#2}{/}{\mathpunct{}{\PLenssep}\mathpunct{}} \mathpunct{} \right\rbrace}%
- {\left\lbrace \PLensopt{} \StrSubstitute{#2}{/}{{\PLenssep}} \right\rbrace}
+ {\left\lbrace \PLensopt{} \StrSubstitute{#2}{/}{{\PLenssep}} \right\rbrace}%
}
%%------TRINOMEALEA
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex
index 0e8906ee96..4057fe37dd 100644
--- a/macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex
@@ -334,7 +334,7 @@
\ensuremath{\frac{%
\xintifboolexpr{\RacNumSimpl == 1 && \RacRacSimpl == 1}%
{1}%
- { \xintifboolexpr{\RacNumSimpl == 1}{}{\RacNumSimpl} \xintifboolexpr{\RacRacSimpl == 1}{}{\sqrt{\RacRacSimpl}} }%
+ { \xintifboolexpr{\RacNumSimpl == 1}{}{\RacNumSimpl} \xintifboolexpr{\RacRacSimpl == 1}{}{\sqrt{\num{\RacRacSimpl}}} }%
}%
{ \RacDenomSimpl }}%
}%
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex
index 5b83b2a4d0..42e9264e5d 100644
--- a/macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex
@@ -16,12 +16,12 @@
\NewDocumentCommand\ConversionDecBin{ s O{} m }{%
\useKVdefault[CONVDECBIN]
\setKV[CONVDECBIN]{#2}% on paramètres les nouvelles clés et on les simplifie
- \def\resbrut{\xintDecToBin{#3}}
- \StrLen{\resbrut}[\nbchiffres]
- \def\nbgrp{\fpeval{4*ceil(\nbchiffres/4,0)}}
- \IfBooleanTF{#1}
- {\num{#3}\ifboolKV[CONVDECBIN]{AffBase}{_{10}}{}=\num[digit-group-size=4]{\resbrut}\ifboolKV[CONVDECBIN]{AffBase}{_{2}}{}}
- {\num{#3}\ifboolKV[CONVDECBIN]{AffBase}{_{10}}{}=\num[digit-group-size=4,minimum-integer-digits=\nbgrp]{\resbrut}\ifboolKV[CONVDECBIN]{AffBase}{_{2}}{}}
+ \def\resbrut{\xintDecToBin{#3}}%
+ \StrLen{\resbrut}[\nbchiffres]%
+ \def\nbgrp{\fpeval{4*ceil(\nbchiffres/4,0)}}%
+ \IfBooleanTF{#1}%
+ {\num{#3}\ifboolKV[CONVDECBIN]{AffBase}{_{10}}{}=\num[digit-group-size=4]{\resbrut}\ifboolKV[CONVDECBIN]{AffBase}{_{2}}{}}%
+ {\num{#3}\ifboolKV[CONVDECBIN]{AffBase}{_{10}}{}=\num[digit-group-size=4,minimum-integer-digits=\nbgrp]{\resbrut}\ifboolKV[CONVDECBIN]{AffBase}{_{2}}{}}%
}
\setKVdefault[CONVBINHEX]{%
@@ -43,35 +43,35 @@
%la conversion complète
\newcommand\ConversionBinHex[2][]{%
- \useKVdefault[CONVBINHEX]
+ \useKVdefault[CONVBINHEX]%
\setKV[CONVBINHEX]{#1}% on paramètres les nouvelles clés et on les simplifie
- \def\chbrut{#2}
+ \def\chbrut{#2}%
\StrLen{\chbrut}[\nbchiffres] %nb de chiffres du binaire
\xdef\nbgrp{\fpeval{4*ceil(\nbchiffres/4,0)}} %nb de chiffres avec blocs de 4
\xdef\nbblocs{\fpeval{\nbgrp/4}} %nb de blocs
%on rajoute des zeros si besoin := OK
- \xdef\resinter{\chbrut}
- \num[digit-group-size=4]{\chbrut}\ifboolKV[CONVBINHEX]{AffBase}{_{2}}{}=
+ \xdef\resinter{\chbrut}%
+ \num[digit-group-size=4]{\chbrut}\ifboolKV[CONVBINHEX]{AffBase}{_{2}}{}=%
\ifboolKV[CONVBINHEX]{Details}{%
- \ifnum\nbchiffres<\nbgrp
- \xdef\nbz{\inteval{\nbgrp-\nbchiffres}}
- \xdef\resinter{\PLstrzeros{\nbz}\chbrut}
- \num[digit-group-size=4,minimum-integer-digits=\nbgrp]{\resinter}=
- \fi
+ \ifnum\nbchiffres<\nbgrp%
+ \xdef\nbz{\inteval{\nbgrp-\nbchiffres}}%
+ \xdef\resinter{\PLstrzeros{\nbz}\chbrut}%
+ \num[digit-group-size=4,minimum-integer-digits=\nbgrp]{\resinter}=%
+ \fi%
%découpage par blocs et conversion en hexa := OK
- \newcount\cpt
- \cpt0
- \loop\ifnum \cpt<\nbblocs
+ \newcount\cpt%
+ \cpt0%
+ \loop\ifnum \cpt<\nbblocs%
\def\iinit{\fpeval{4*\cpt+1}}%
\def\ifinal{\fpeval{4*(\cpt+1)}}%
\StrMid{\resinter}{\iinit}{\ifinal}[\blocinter]%
- {\underbracket{\blocinter}_{\xintBinToHex{\blocinter}}\,}
- \advance\cpt by 1
- \repeat
- \!=
+ {\underbracket{\blocinter}_{\xintBinToHex{\blocinter}}\,}%
+ \advance\cpt by 1%
+ \repeat%
+ \!=%
}%
- {}
- \xintBinToHex{\chbrut}\ifboolKV[CONVBINHEX]{AffBase}{_{16}}{}
+ {}%
+ \xintBinToHex{\chbrut}\ifboolKV[CONVBINHEX]{AffBase}{_{16}}{}%
}
%hexa/bin->dec avec écriture polynomiale
@@ -94,62 +94,62 @@
\newcommand\ConversionVersDec[2][]{%
\useKVdefault[CONVTODEC]
\setKV[CONVTODEC]{#1}% on paramètres les nouvelles clés et on les simplifie
- \def\nbdepart{#2}
- \StrLen{\nbdepart}[\nbchiffres]
- \StrChar{\nbdepart}{1}[\chiffre]
+ \def\nbdepart{#2}%
+ \StrLen{\nbdepart}[\nbchiffres]%
+ \StrChar{\nbdepart}{1}[\chiffre]%
%si on est en base 16
\xintifboolexpr{\basedepart == 16}%
{%
- \nbdepart\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} =
+ \nbdepart\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} =%
\ifboolKV[CONVTODEC]{Details}{%
\xintHexToDec{\chiffre}\times\basedepart^{\inteval{\nbchiffres-1}}%
- \newcount\cpt
- \cpt2
- \loop\ifnum \cpt<\inteval{\nbchiffres+1}
- \def\puiss{\inteval{\nbchiffres-\cpt}}
- \StrChar{\nbdepart}{\cpt}[\chiffre]
+ \newcount\cpt%
+ \cpt2%
+ \loop\ifnum \cpt<\inteval{\nbchiffres+1}%
+ \def\puiss{\inteval{\nbchiffres-\cpt}}%
+ \StrChar{\nbdepart}{\cpt}[\chiffre]%
\ifboolKV[CONVTODEC]{Zeros}%
{%
+\xintHexToDec{\chiffre}\times\basedepart^{\puiss}%
- }
- {
- \ifnum\xintHexToDec{\chiffre} > 0
+ }%
+ {%
+ \ifnum\xintHexToDec{\chiffre} > 0%
+\xintHexToDec{\chiffre}\times\basedepart^{\puiss}%
- \fi
- }
- \advance\cpt by 1
- \repeat
- =
- }
- {}
- \num{\xintHexToDec{\nbdepart}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}
+ \fi%
+ }%
+ \advance\cpt by 1%
+ \repeat%
+ =%
+ }%
+ {}%
+ \num{\xintHexToDec{\nbdepart}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}%
}%
- {}
+ {}%
\xintifboolexpr{\basedepart == 2}%
{%
- \num[digit-group-size=4]{\nbdepart}\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} =
+ \num[digit-group-size=4]{\nbdepart}\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} =%
\ifboolKV[CONVTODEC]{Details}{%
\chiffre\times\basedepart^{\inteval{\nbchiffres-1}}%
- \newcount\cpt
- \cpt2
- \loop\ifnum \cpt<\inteval{\nbchiffres+1}
- \def\puiss{\inteval{\nbchiffres-\cpt}}
- \StrChar{\nbdepart}{\cpt}[\chiffre]
+ \newcount\cpt%
+ \cpt2%
+ \loop\ifnum \cpt<\inteval{\nbchiffres+1}%
+ \def\puiss{\inteval{\nbchiffres-\cpt}}%
+ \StrChar{\nbdepart}{\cpt}[\chiffre]%
\ifboolKV[CONVTODEC]{Zeros}%
{%
+\chiffre\times\basedepart^{\puiss}%
}
{
- \ifnum\chiffre > 0
+ \ifnum\chiffre > 0%
+\chiffre\times\basedepart^{\puiss}%
- \fi
- }
- \advance\cpt by 1
- \repeat
- =
- }
- {}
- \num{\xintBinToDec{\nbdepart}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}
+ \fi%
+ }%
+ \advance\cpt by 1%
+ \repeat%
+ =%
+ }%
+ {}%
+ \num{\xintBinToDec{\nbdepart}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}%
}%
{}%
}
@@ -157,30 +157,30 @@
\newcommand\ConversionBaseDix[3][]{%1=options,%2=nb,%3=basedep ??
\useKVdefault[CONVTODEC]
\setKV[CONVTODEC]{#1}% on paramètres les nouvelles clés et on les simplifie
- \def\NBdepart{#2}
- \def\basedepart{#3}
- \StrLen{\NBdepart}[\nbchiffres]
- \StrChar{\NBdepart}{1}[\chiffre]
- \NBdepart\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} =
+ \def\NBdepart{#2}%
+ \def\basedepart{#3}%
+ \StrLen{\NBdepart}[\nbchiffres]%
+ \StrChar{\NBdepart}{1}[\chiffre]%
+ \NBdepart\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} =%
\ifboolKV[CONVTODEC]{Details}{%
\xintHexToDec{\chiffre}\times\basedepart^{\inteval{\nbchiffres-1}}%
- \newcount\cpt
- \cpt2
- \loop\ifnum \cpt<\inteval{\nbchiffres+1}
- \def\puiss{\inteval{\nbchiffres-\cpt}}
- \StrChar{\NBdepart}{\cpt}[\chiffre]
+ \newcount\cpt%
+ \cpt2%
+ \loop\ifnum \cpt<\inteval{\nbchiffres+1}%
+ \def\puiss{\inteval{\nbchiffres-\cpt}}%
+ \StrChar{\NBdepart}{\cpt}[\chiffre]%
\ifboolKV[CONVTODEC]{Zeros}%
{%
+\xintHexToDec{\chiffre}\times\basedepart^{\puiss}%
- }
- {
- \ifnum\xintHexToDec{\chiffre} > 0
+ }%
+ {%
+ \ifnum\xintHexToDec{\chiffre} > 0%
+\xintHexToDec{\chiffre}\times\basedepart^{\puiss}%
- \fi
- }
- \advance\cpt by 1
- \repeat
- =
+ \fi%
+ }%
+ \advance\cpt by 1%
+ \repeat%
+ =%
}%
{}%
\num{\convertbasetobasedix{#2}{#3}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}%
@@ -231,7 +231,7 @@
}
%dernière
\xdef\ValQ{\fpeval{trunc(\ValTMP/#3,0)}}\xdef\ValR{\fpeval{\ValTMP-#3*\ValQ}}%
- \\ \num{\ValTMP}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}\PLnoeud{\PLConvNoeud2}{\num{\ValR}}
+ \\ \num{\ValTMP}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}\PLnoeud{\PLConvNoeud2}{\num{\ValR}}%
\end{array} \right| \Rightarrow \num{#2}_{10}=\ifboolKV[convfromten]{CouleurRes}{\mathcolor{\PLConvCouleur}{\convertbasedixtobase{#2}{#3}_{#3}}}{\convertbasedixtobase{#2}{#3}_{#3}}}%
\ifboolKV[convfromten]{Rect}%
{%
@@ -263,6 +263,8 @@
AfficheDelimiteurs=true
}
+\RequirePackage{xintgcd}
+
\newcommand\PresentationPGCD[3][]{%
\useKVdefault[prespgcd]%
\setKV[prespgcd]{#1}%
@@ -274,7 +276,7 @@
{}%
\begin{array}{@{\,}r@{\;=\;}l@{\;+\;}r}
%1ère division
- \xdef\ValQ{\fpeval{trunc(\ValA/\ValB,0)}}\xdef\ValR{\fpeval{\ValA-\ValB*\ValQ}}
+ \xdef\ValQ{\fpeval{trunc(\ValA/\ValB,0)}}\xdef\ValR{\fpeval{\ValA-\ValB*\ValQ}}%
\num{\ValA}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}%
\xintifboolexpr{\ValR == \respgcd}%
{\PLnoeud{\PLPGCDNoeud1}{\num{\ValR}}}%noeud si c'est le pgcd
@@ -308,4 +310,150 @@
}{}%
}
+%%===égalité de Bezout
+\NewDocumentCommand\AffCoeffBezout{ m }{%
+ \xintifboolexpr{#1 < 0}%
+ {\left( \num{#1} \right)}%
+ {\num{#1}}%
+}
+\NewDocumentCommand\EgaliteBezout{ O{black} m m }{%
+ \xintAssign{\xintBezout{#2}{#3}}\to\TmpU\TmpV\TmpD%
+ \ensuremath{\num{#2} \times \mathcolor{#1}{\AffCoeffBezout{\TmpU}} + \AffCoeffBezout{#3} \times \mathcolor{#1}{\AffCoeffBezout{\TmpV}} = \num{\TmpD}}%
+}
+
+%%===Équations diophantiennes
+\RequirePackage{cancel}
+\NewDocumentCommand\AffCoeffDioph{ m }{%
+ \xintifboolexpr{#1 < 0}%
+ {\left( \num{#1} \right)}%
+ {\num{#1}}%
+}
+\NewDocumentCommand\AffCoeffDiophSign{ m }{%
+ \xintifboolexpr{#1 < 0}%
+ {\num{#1}}%
+ {+\num{#1}}%
+}
+
+\defKV[eqdioph]{%
+ Lettre=\def\LettreSolEDioph{#1},%
+ Couleur=\def\CouleurSolEDioph{#1},%
+ Inconnues=\def\InconnuesSolEDioph{#1},%
+ Entier=\def\KKK{#1}
+}
+
+\setKVdefault[eqdioph]{%
+ Lettre=E,%
+ Couleur=black,%
+ Inconnues=x/y,%
+ Entier=k,%
+ Cadres=false,%
+ PresPGCD=true
+}
+
+\NewDocumentCommand\EquationDiophantienne{ O{} m }{%v2 avec équation en "dur"
+ \useKVdefault[eqdioph]%
+ \setKV[eqdioph]{#1}%
+ \setlength{\parindent}{0pt}%
+ %extractions des paramètres
+ \StrBefore[1]{\InconnuesSolEDioph}{/}[\XXX]%
+ \StrBehind[1]{\InconnuesSolEDioph}{/}[\YYY]%
+ \StrBefore{#2}{\XXX}[\AA]%
+ \StrBetween{#2}{\XXX}{\YYY}[\BB]%
+ \StrBehind{#2}{=}[\CC]%
+ \IfStrEq{\AA}{}%
+ {\def\AA{1}}{}%
+ \IfStrEq{\AA}{-}%
+ {\def\AA{-1}}{}%
+ \StrLen{\BB}[\lgtB]%
+ \xintifboolexpr{ \lgtB > 1 }%+b ou -b
+ {%
+ \StrDel{\BB}{+}[\BB]%
+ }%
+ {%
+ \IfStrEq{\BB}{-}%
+ {\def\BB{-1}}{}%
+ \IfStrEq{\BB}{+}%
+ {\def\BB{1}}{}%
+ }%
+ %Calcul du PGCD
+ \xdef\PGCDD{\xinteval{gcd(\AA,\BB)}}%
+ On cherche à résoudre l'équation diophantienne :\[ \num{\AA}\XXX + \AffCoeffDioph{\BB}\YYY=\num{\CC} \xintifboolexpr{ \PGCDD == 1 'or' \xintiiRem{\CC}{\PGCDD} != 0 }{\qquad (\LettreSolEDioph)}{} \]%
+ \ifboolKV[eqdioph]{PresPGCD}%
+ {D'après l'algorithme d'Euclide : \PresentationPGCD[Rectangle=false]{\xinteval{abs(\AA)}}{\xinteval{abs(\BB)}}.}%
+ {Le PGCD de \num{\AA} et de \num{\BB} vaut \num{\PGCDD}.}%
+ \par\smallskip
+ \xintifboolexpr{ \xintiiRem{\CC}{\PGCDD} == 0 }%solutions obligatoires
+ {%
+ \xintifboolexpr{ \PGCDD == 1}%
+ {%
+ Les entiers \num{\xinteval{abs(\AA)}} et \num{\xinteval{abs(\BB)}} sont premiers entre eux, donc l'équation $(\LettreSolEDioph)$ admet une infinité de solutions.\par
+ \xdef\AAA{\AA}\xdef\BBB{\BB}\xdef\CCC{\CC}%
+ }%
+ {%
+ Le PGCD de \num{\AA} et \num{\BB} divise \num{\CC}, donc on peut simplifier l'équation diophantienne par \num{\PGCDD}.%
+ \xdef\AAA{\xintiieval{\AA/\PGCDD}}\xdef\BBB{\xintiieval{\BB/\PGCDD}}\xdef\CCC{\xintiieval{\CC/\PGCDD}}%
+ %
+ \[ \num{\AA}\XXX+\AffCoeffDioph{\BB}\YYY=\num{\CC} \underset{\div\num{\PGCDD}}{\Longleftrightarrow} \num{\AAA}\XXX+\AffCoeffDioph{\BBB}\YYY=\num{\CCC} \qquad (\LettreSolEDioph) \]%
+ Les entiers \num{\AAA} et \num{\BBB} sont premiers entre eux, donc l'équation $(\LettreSolEDioph)$ admet une infinité de solutions.\par
+ }%
+ \xintAssign{\xintBezout{\AAA}{\BBB}}\to\TmpU\TmpV\TmpD
+ %
+ On détermine une solution particulière de $(E)$ : \[ \num{\AAA} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffBezout{\TmpU}} + \AffCoeffBezout{\BBB} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffBezout{\TmpV}} = \num{\TmpD}
+ \xintifboolexpr{ \CCC != 1}%
+ {%
+ \underset{\times\AffCoeffDioph{\CCC}}{\implies}
+ \num{\AAA} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\TmpU*\CCC}}} + \AffCoeffBezout{\BBB} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\TmpV*\CCC}}} = \num{\CCC}
+ }%
+ {}%
+ \qquad ({\LettreSolEDioph}_0)
+ \]%
+ %
+ Par soustraction :
+ %
+ \[%
+ {\renewcommand\arraystretch{1.25}%
+ \begin{array}{ @{\,} c @{\,} c @{\;\times\;} c @{\;+\;} c @{\;\times\;} c @{\;=\;} c }
+ & \num{\AAA} & \XXX & \AffCoeffDioph{\BBB} & \YYY & \num{\CCC} \\
+ -~~~~~ & \num{\AAA} & \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\TmpU*\CCC}}} & \AffCoeffDioph{\BBB} & \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\TmpV*\CCC}}} & \num{\CCC} \\ \hline
+ & \num{\AAA} & \left( \XXX \mathcolor{\CouleurSolEDioph}{\AffCoeffDiophSign{\xinteval{-\TmpU*\CCC}}} \right)& \AffCoeffDioph{\BBB} & \left( \YYY \mathcolor{\CouleurSolEDioph}{\AffCoeffDiophSign{\xinteval{-\TmpV*\CCC}}} \right) & 0\\
+ \end{array}}
+ \]%
+ \xdef\TmpPartieA{\XXX \mathcolor{\CouleurSolEDioph}{\AffCoeffDiophSign{\xinteval{-\TmpU*\CCC}}}}%
+ \xdef\TmpPartieB{\YYY \mathcolor{\CouleurSolEDioph}{\AffCoeffDiophSign{\xinteval{-\TmpV*\CCC}}}}%
+ %
+ On en déduit que $\num{\AAA} \times \underbrace{\left( \TmpPartieA \right)}_{\text{entier}} = \num{\xinteval{-\BBB}} \times \left( \TmpPartieB \right)$, et donc que $\num{\AAA} \mid \num{\xinteval{-\BBB}} \times \left( \TmpPartieB \right)$.\par\smallskip
+ Or \num{\xinteval{abs(\AAA)}} et \num{\xinteval{abs(\BBB)}} sont premiers entre eux, donc d'après le théorème de Gauss, on a $\num{\AAA} \mid \TmpPartieB$.\par
+ Il existe donc un entier $\KKK$ tel que $\TmpPartieB = \num{\AAA} \times \KKK$, ce qui donne
+ $\ifboolKV[eqdioph]{Cadres}
+ {\boxed{\YYY = \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK}}
+ {\YYY = \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK}
+ $.\par
+ En remplaçant, on obtient :
+ %
+ \begin{align*}
+ \num{\AAA} \times \left( \TmpPartieA \right) = \num{\xinteval{-\BBB}} \times \left( \TmpPartieB \right) & \implies \num{\AAA} \times \left( \TmpPartieA \right) = \num{\xinteval{-\BBB}} \times \big( \underbrace{\mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK}_{\mathclap{\YYY}} \mathcolor{\CouleurSolEDioph}{\AffCoeffDiophSign{\xinteval{-\CCC*\TmpV}}} \big) \\
+ & \implies \num{\AAA} \times \left( \TmpPartieA \right) = \num{\xinteval{-\BBB}} \times \left( \num{\AAA}\KKK \right) \\
+ & \implies \TmpPartieA = \num{\xinteval{-\BBB}}\KKK \\
+ & \implies \ifboolKV[eqdioph]{Cadres}
+ {\boxed{\XXX = \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK}}
+ {\XXX = \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK}
+ \end{align*}
+ %
+ Ainsi, si $\XXX$ et $\YYY$ sont solutions de $(\LettreSolEDioph)$, alors il existe un entier $\KKK$ tel que ${\XXX=\mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK}$ et ${\YYY=\mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK}$.\par\medskip
+ Réciproquement, soit $\KKK$ un entier quelconque :
+ %
+ \begin{align*}
+ \num{\AAA} \times \left( \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK \right) + \AffCoeffDioph{\BBB} \times \left( \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK \right) & = \num{\AAA} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\CCC*\TmpU}}} + \cancel{\AffCoeffDioph{\AAA} \times \AffCoeffDioph{\xinteval{-\BBB}} \KKK} + \AffCoeffDioph{\BBB} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\CCC*\TmpV}}} + \cancel{\AffCoeffDioph{\BBB} \times \AffCoeffDioph{\AAA} \KKK} \\
+ & = \underbrace{\num{\AAA} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\CCC*\TmpU}}} + \AffCoeffDioph{\BBB} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\CCC*\TmpV}}}}_{=\,\num{\CCC} \text{ d'après } ({\LettreSolEDioph}_0)} \\
+ & = \num{\CCC}
+ \end{align*}
+ %
+ On en déduit que $\left(\mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK \mathpunct{}; \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK \right)$ est solution de $(\LettreSolEDioph)$.\par\medskip
+ En conclusion, les solutions de $(E)$ sont donc les couples $\left(\mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK \mathpunct{}; \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK \right)$, avec $\KKK$ un entier relatif.
+ }%
+ {%
+ Le PGCD de \num{\AA} et \num{\BB} ne divise pas \num{\CC}, donc l'équation $(\LettreSolEDioph)$ n'admet aucune solution.
+ }%
+}
+
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-geom.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-geom.tex
index 93e0e09191..1758c015fd 100644
--- a/macros/latex/contrib/proflycee/tex/proflycee-tools-geom.tex
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-geom.tex
@@ -135,5 +135,493 @@
mainlevee/.default={5mm et 0.6pt}
}
+%%Equations Cartésiennes + Affichages coordonnées
+\RequirePackage{nicematrix}
+\NewDocumentCommand\AffCoeffSgn{ s O{} m m D<>{} }{%
+ \IfStrEq{#5}{}%si argument vide, on convertit en fraction
+ {%
+ \xintifboolexpr{\xinteval{#3} == 0}%
+ {}%on n'affiche rien si le coeff est nul
+ {%sinon on teste >0 puis else
+ \xintifboolexpr{\xinteval{#3} > 0}%
+ {%
+ \IfBooleanTF{#1}{}{+}%
+ \xintifboolexpr{\xinteval{#3} == 1}%
+ {#4}%
+ {\ConversionFraction[#2]{#3}#4}%
+ }%
+ {%
+ \xintifboolexpr{\xinteval{#3} == -1}%
+ {-#4\relax}%
+ {\ConversionFraction[#2]{#3}#4}%
+ }%
+ }%
+ }%
+ %sinon on met en brut
+ {%
+ #3#4
+ }%
+}
+
+\NewDocumentCommand\AffCoeffSgnSimpl{ s O{} m D<>{} }{%
+ \IfStrEq{#4}{}%si argument vide, on convertit en fraction
+ {%
+ \xintifboolexpr{\xinteval{#3} == 0}%
+ {}%on n'affiche rien si le coeff est nul
+ {%sinon on teste >0 puis else
+ \xintifboolexpr{\xinteval{#3} > 0}%
+ {%
+ \IfBooleanTF{#1}{}{+}%
+ \xintifboolexpr{\xinteval{#3} == 1}%
+ {#3}%
+ {+\ConversionFraction[#2]{#3}}%
+ }%
+ {%
+ \xintifboolexpr{\xinteval{#3} == -1}%
+ {#3\relax}%
+ {\ConversionFraction[#2]{#3}}%
+ } %
+ }%
+ }%
+ %sinon on met en brut
+ {%
+ #3
+ }%
+}
+
+\defKV[eqcartplan]{%
+ OptionCoeffs=\def\eqcartplformat{#1},%
+ Facteur=\def\eqcartplfact{#1}
+}
+
+\setKVdefault[eqcartplan]{%
+ OptionCoeffs={d},%
+ SimplifCoeffs=false,%
+ Facteur=1
+}
+
+\NewDocumentCommand\TrouveEqCartPlan{ O{} r() r() d() }{%test commande générique avec VP ou PPP ou PVV
+ \restoreKV[eqcartplan]% revenir au valeurs par défaut
+ \setKV[eqcartplan]{#1}% lit les arguments optionnels
+ \IfNoValueTF{#4}%c'est Vect+Point
+ {%
+ \setsepchar{;}\readlist*\CoordVecNorm{#2}%
+ \setsepchar{,}\readlist*\CoordPt{#3}%
+ \itemtomacro\CoordVecNorm[1]\vecnx%
+ \itemtomacro\CoordVecNorm[2]\vecny%
+ \itemtomacro\CoordVecNorm[3]\vecnz%
+ \itemtomacro\CoordPt[1]\xpta%
+ \itemtomacro\CoordPt[2]\ypta%
+ \itemtomacro\CoordPt[3]\zpta%
+ %calculs
+ \xdef\coeffd{-((\xpta)*(\vecnx)+(\ypta)*(\vecny)+(\zpta)*(\vecnz))}%
+ \xdef\PPCMDenom{\xinteval{lcm([\xintDenominator{\xintIrr{\xinteval{\vecnx}}},\xintDenominator{\xintIrr{\xinteval{\vecny}}},\xintDenominator{\xintIrr{\xinteval{\vecnz}}},\xintDenominator{\xintIrr{\xinteval{\coeffd}}}])}}%
+ \xdef\PGCDsiEntiers{1}%
+ \xintifboolexpr{\xinteval{isint(\vecnx)}*\xinteval{isint(\vecny)}*\xinteval{isint(\vecnz)}*\xinteval{isint(\coeffd)} == 1}%tous les coeffs sont entiers
+ {%
+ \xdef\PGCDsiEntiers{\xinteval{gcd([\xinteval{\vecnx},\xinteval{\vecny},\xinteval{\vecnz},\xinteval{\coeffd}])}}%
+ }%
+ {}%
+ %affichages
+ \ifboolKV[eqcartplan]{SimplifCoeffs}%
+ {%
+ \AffCoeffSgn*[\eqcartplformat]{(\vecnx)*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartplformat]{(\vecny)*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgn[\eqcartplformat]{(\vecnz)*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd*\PPCMDenom/\PGCDsiEntiers} = 0%
+ }%
+ {%
+ \AffCoeffSgn*[\eqcartplformat]{\vecnx}{x} \AffCoeffSgn[\eqcartplformat]{\vecny}{y} \AffCoeffSgn[\eqcartplformat]{\vecnz}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd} = 0%
+ }%
+ }%sinon c'est Point+Point+Point ou vectdir+vectdir+point
+ {%
+ \IfSubStr{#2}{,}%c'est point+point+point
+ {%
+ \setsepchar{,}\readlist*\CoordPtA{#2}%
+ \setsepchar{,}\readlist*\CoordPtB{#3}%
+ \setsepchar{,}\readlist*\CoordPtC{#4}%
+ \itemtomacro\CoordPtA[1]\ptxa%
+ \itemtomacro\CoordPtA[2]\ptya%
+ \itemtomacro\CoordPtA[3]\ptza%
+ \itemtomacro\CoordPtB[1]\ptxb%
+ \itemtomacro\CoordPtB[2]\ptyb%
+ \itemtomacro\CoordPtB[3]\ptzb%
+ \itemtomacro\CoordPtC[1]\ptxc%
+ \itemtomacro\CoordPtC[2]\ptyc%
+ \itemtomacro\CoordPtC[3]\ptzc%
+ %calculs
+ \xdef\vecxab{(\ptxb-\ptxa)}%
+ \xdef\vecyab{(\ptyb-\ptya)}%
+ \xdef\veczab{(\ptzb-\ptza)}%
+ \xdef\vecxac{(\ptxc-\ptxa)}%
+ \xdef\vecyac{(\ptyc-\ptya)}%
+ \xdef\veczac{(\ptzc-\ptza)}%
+ %coeffs a/b/c
+ \xdef\coeffa{(\vecyab*\veczac-\veczab*\vecyac)}%
+ \xdef\coeffb{(\vecxac*\veczab-\vecxab*\veczac)}%
+ \xdef\coeffc{(\vecxab*\vecyac-\vecxac*\vecyab)}%
+ %coeffd
+ \xdef\coeffd{(-(\ptxa)*\vecyab*\veczac-(\ptza)*\vecxab*\vecyac-(\ptya)*\vecxac*\veczab+(\ptza)*\vecyab*\vecxac+(\ptxa)*\veczab*\vecyac+(\ptya)*\vecxab*\veczac)}%
+ %pour simplifier
+ \xdef\PPCMDenom{\xinteval{lcm([\xintDenominator{\xintIrr{\xinteval{\coeffa}}},\xintDenominator{\xintIrr{\xinteval{\coeffb}}},\xintDenominator{\xintIrr{\xinteval{\coeffc}}},\xintDenominator{\xintIrr{\xinteval{\coeffd}}}])}}%
+ \xdef\PGCDsiEntiers{1}%
+ \xintifboolexpr{\xinteval{isint(\coeffa)}*\xinteval{isint(\coeffb)}*\xinteval{isint(\coeffc)}*\xinteval{isint(\coeffd)} == 1}%tous les coeffs sont entiers
+ {%
+ \xdef\PGCDsiEntiers{\xinteval{gcd([\xinteval{\coeffa},\xinteval{\coeffb},\xinteval{\coeffc},\xinteval{\coeffd}])}}%
+ }%
+ {}%
+ %affichages
+ \ifboolKV[eqcartplan]{SimplifCoeffs}%
+ {%
+ \AffCoeffSgn*[\eqcartplformat]{\coeffa*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartplformat]{\coeffb*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgn[\eqcartplformat]{\coeffc*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers} = 0%
+ }%
+ {%
+ \AffCoeffSgn*[\eqcartplformat]{\coeffa}{x} \AffCoeffSgn[\eqcartplformat]{\coeffb}{y} \AffCoeffSgn[\eqcartplformat]{\coeffc}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd} = 0%
+ }%
+ }%
+ {%
+ \setsepchar{;}\readlist*\CoordVecA{#2}%
+ \setsepchar{;}\readlist*\CoordVecB{#3}%
+ \setsepchar{,}\readlist*\CoordPtC{#4}%
+ \itemtomacro\CoordVecA[1]\vecxab%
+ \itemtomacro\CoordVecA[2]\vecyab%
+ \itemtomacro\CoordVecA[3]\veczab%
+ \itemtomacro\CoordVecB[1]\vecxac%
+ \itemtomacro\CoordVecB[2]\vecyac%
+ \itemtomacro\CoordVecB[3]\veczac%
+ \itemtomacro\CoordPtC[1]\ptxc%
+ \itemtomacro\CoordPtC[2]\ptyc%
+ \itemtomacro\CoordPtC[3]\ptzc%
+ %coeff a/b/c
+ \xdef\coeffa{((\vecyab)*(\veczac)-(\vecyac)*(\veczab))}%
+ \xdef\coeffb{((\veczab)*(\vecxac)-(\veczac)*(\vecxab))}%
+ \xdef\coeffc{((\vecxab)*(\vecyac)-(\vecxac)*(\vecyab))}%
+ %coeffd
+ \xdef\coeffd{-((\ptxc)*\coeffa+(\ptyc)*\coeffb+(\ptzc)*\coeffc)}%
+ %pour simplifier
+ \xdef\PPCMDenom{\xinteval{lcm([\xintDenominator{\xintIrr{\xinteval{\coeffa}}},\xintDenominator{\xintIrr{\xinteval{\coeffb}}},\xintDenominator{\xintIrr{\xinteval{\coeffc}}},\xintDenominator{\xintIrr{\xinteval{\coeffd}}}])}}%
+ \xdef\PGCDsiEntiers{1}%
+ \xintifboolexpr{\xinteval{isint(\coeffa)}*\xinteval{isint(\coeffb)}*\xinteval{isint(\coeffc)}*\xinteval{isint(\coeffd)} == 1}%tous les coeffs sont entiers
+ {%
+ \xdef\PGCDsiEntiers{\xinteval{gcd([\xinteval{\coeffa},\xinteval{\coeffb},\xinteval{\coeffc},\xinteval{\coeffd}])}}%
+ }%
+ {}%
+ %affichages
+ \ifboolKV[eqcartplan]{SimplifCoeffs}%
+ {%
+ \AffCoeffSgn*[\eqcartplformat]{\coeffa*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartplformat]{\coeffb*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgn[\eqcartplformat]{\coeffc*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers} = 0%
+ }%
+ {%
+ \AffCoeffSgn*[\eqcartplformat]{\coeffa}{x} \AffCoeffSgn[\eqcartplformat]{\coeffb}{y} \AffCoeffSgn[\eqcartplformat]{\coeffc}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd} = 0%
+ }%
+ }%
+ }%
+}
+
+\defKV[eqcartdroite]{%
+ OptionCoeffs=\def\eqcartdteformat{#1},%
+ Facteur=\def\eqcartdtefact{#1}
+}
+
+\setKVdefault[eqcartdroite]{%
+ OptionCoeffs={d},%
+ SimplifCoeffs=false,%
+ VectDirecteur=false,%
+ Facteur=1
+}
+
+\NewDocumentCommand\TrouveEqCartDroite{ O{} r() r() }{%vect/point ou point/point
+ \restoreKV[eqcartdroite]% revenir au valeurs par défaut
+ \setKV[eqcartdroite]{#1}% lit les arguments optionnels
+ %on teste si c'est point/point
+ \IfSubStr{#2}{;}%c'est vecteur+point, sinon c'est point+point
+ {%
+ \setsepchar{;}\readlist*\CoordVec{#2}%
+ \setsepchar{,}\readlist*\CoordPt{#3}%
+ \itemtomacro\CoordVec[1]\vecnx%
+ \itemtomacro\CoordVec[2]\vecny%
+ \itemtomacro\CoordPt[1]\xpta%
+ \itemtomacro\CoordPt[2]\ypta%
+ %calculs
+ \ifboolKV[eqcartdroite]{VectDirecteur}%
+ {%
+ \xdef\coeffd{((\xpta)*(\vecny)-(\ypta)*(\vecnx))}%
+ }%
+ {%
+ \xdef\coeffd{-((\xpta)*(\vecnx)+(\ypta)*(\vecny))}%
+ }%
+ \xdef\PPCMDenom{\xinteval{lcm([\xintDenominator{\xintIrr{\xinteval{\vecnx}}},\xintDenominator{\xintIrr{\xinteval{\vecny}}},\xintDenominator{\xintIrr{\xinteval{\coeffd}}}])}}%
+ \xdef\PGCDsiEntiers{1}%
+ \xintifboolexpr{\xinteval{isint(\vecnx)}*\xinteval{isint(\vecny)}*\xinteval{isint(\coeffd)} == 1}%tous les coeffs sont entiers
+ {%
+ \xdef\PGCDsiEntiers{\xinteval{gcd([\xinteval{\vecnx},\xinteval{\vecny},\xinteval{\coeffd}])}}%
+ }%
+ {}%
+ %affichages
+ \ifboolKV[eqcartdroite]{SimplifCoeffs}%
+ {%
+ \ifboolKV[eqcartdroite]{VectDirecteur}%
+ {%
+ \AffCoeffSgn*[\eqcartdteformat]{-(\vecny)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartdteformat]{(\vecnx)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers} = 0%
+ }%
+ {%
+ \AffCoeffSgn*[\eqcartdteformat]{(\vecnx)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartdteformat]{(\vecny)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers} = 0%
+ }%
+ }%
+ {%
+ \ifboolKV[eqcartdroite]{VectDirecteur}%
+ {%
+ \AffCoeffSgn*[\eqcartdteformat]{-(\vecny)}{x} \AffCoeffSgn[\eqcartdteformat]{\vecnx}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd} = 0%
+ }%
+ {%
+ \AffCoeffSgn*[\eqcartdteformat]{\vecnx}{x} \AffCoeffSgn[\eqcartdteformat]{\vecny}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd} = 0%
+ }%
+ }%
+ }%
+ {%
+ \setsepchar{,}\readlist*\CoordPtA{#2}%
+ \setsepchar{,}\readlist*\CoordPtB{#3}%
+ \itemtomacro\CoordPtA[1]\xpta%
+ \itemtomacro\CoordPtA[2]\ypta%
+ \itemtomacro\CoordPtB[1]\xptb%
+ \itemtomacro\CoordPtB[2]\yptb%
+ \xdef\vecnx{((\xptb)-(\xpta))}%
+ \xdef\vecny{((\yptb)-(\ypta))}%
+ %calculs
+ \xdef\coeffd{((\xpta)*(\vecny)-(\ypta)*(\vecnx))}%
+ \xdef\PPCMDenom{\xinteval{lcm([\xintDenominator{\xintIrr{\xinteval{\vecnx}}},\xintDenominator{\xintIrr{\xinteval{\vecny}}},\xintDenominator{\xintIrr{\xinteval{\coeffd}}}])}}%
+ \xdef\PGCDsiEntiers{1}%
+ \xintifboolexpr{\xinteval{isint(\vecnx)}*\xinteval{isint(\vecny)}*\xinteval{isint(\coeffd)} == 1}%tous les coeffs sont entiers
+ {%
+ \xdef\PGCDsiEntiers{\xinteval{gcd([\xinteval{\vecnx},\xinteval{\vecny},\xinteval{\coeffd}])}}%
+ }%
+ {}%
+ %affichages
+ \ifboolKV[eqcartdroite]{SimplifCoeffs}%
+ {%
+ \AffCoeffSgn*[\eqcartdteformat]{-(\vecny)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartdteformat]{(\vecnx)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers} = 0%
+ }%
+ {%
+ \AffCoeffSgn*[\eqcartdteformat]{-(\vecny)}{x} \AffCoeffSgn[\eqcartdteformat]{(\vecnx)}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd} = 0%
+ }%
+ }%
+}
+
+\NewDocumentCommand\AffVecteur{ O{d} D<>{} r() }{%
+ \setsepchar{;}\readlist*\CoordVec{#3}%
+ \xintifboolexpr{\CoordVeclen == 2}%
+ {%
+ \IfSubStr{#1}{;}%si l'option est globale...
+ {%
+ \setsepchar{;}\readlist*\OptVec{#1}%
+ \itemtomacro\OptVec[1]\optvecx%
+ \itemtomacro\OptVec[2]\optvecy%
+ }%
+ {%
+ \xdef\optvecx{#1}\xdef\optvecy{#1}%
+ }%
+ \itemtomacro\CoordVec[1]\vecx%
+ \itemtomacro\CoordVec[2]\vecy%
+ \begin{pNiceMatrix}[#2] \ConversionFraction[\optvecx]{\vecx} \\ \ConversionFraction[\optvecy]{\vecy} \end{pNiceMatrix}%
+ }%
+ {}%
+ \xintifboolexpr{\CoordVeclen == 3}%
+ {%
+ \IfSubStr{#1}{;}%si l'option est globale...
+ {%
+ \setsepchar{;}\readlist*\OptVec{#1}%
+ \itemtomacro\OptVec[1]\optvecx%
+ \itemtomacro\OptVec[2]\optvecy%
+ \itemtomacro\OptVec[3]\optvecz%
+ }%
+ {%
+ \xdef\optvecx{#1}\xdef\optvecy{#1}\xdef\optvecz{#1}%
+ }%
+ \itemtomacro\CoordVec[1]\vecx%
+ \itemtomacro\CoordVec[2]\vecy%
+ \itemtomacro\CoordVec[3]\vecz%
+ \begin{pNiceMatrix}[#2] \ConversionFraction[\optvecx]{\vecx} \\ \ConversionFraction[\optvecy]{\vecy} \\ \ConversionFraction[\optvecz]{\vecz} \end{pNiceMatrix}%
+ }%
+ {}%
+}
+
+\NewDocumentCommand\AffPoint{ O{d} r() }{%
+ \setsepchar{,}
+ \readlist*\CoordPt{#2}%
+ \xintifboolexpr{\CoordPtlen == 2}%
+ {%
+ \IfSubStr{#1}{,}%si l'option est globale...
+ {%
+ \setsepchar{,}\readlist*\OptPt{#1}%
+ \itemtomacro\OptPt[1]\optptx%
+ \itemtomacro\OptPt[2]\optpty%
+ }%
+ {%
+ \xdef\optptx{#1}\xdef\optpty{#1}%
+ }%
+ \itemtomacro\CoordPt[1]\ptx%
+ \itemtomacro\CoordPt[2]\pty%
+ \left( \ConversionFraction[\optptx]{\ptx} ; \ConversionFraction[\optpty]{\pty} \right)%
+ }%
+ {}%
+ \xintifboolexpr{\CoordPtlen == 3}%
+ {%
+ \IfSubStr{#1}{,}%si l'option est globale...
+ {%
+ \setsepchar{,}\readlist*\OptPt{#1}%
+ \itemtomacro\OptPt[1]\optptx%
+ \itemtomacro\OptPt[2]\optpty%
+ \itemtomacro\OptPt[3]\optptz%
+ }%
+ {%
+ \xdef\optptx{#1}\xdef\optpty{#1}\xdef\optptz{#1}%
+ }%
+ \itemtomacro\CoordPt[1]\ptx%
+ \itemtomacro\CoordPt[2]\pty%
+ \itemtomacro\CoordPt[3]\ptz%
+ \left( \ConversionFraction[\optptx]{\ptx} ; \ConversionFraction[\optpty]{\pty} ; \ConversionFraction[\optptz]{\ptz} \right)%
+ }%
+ {}%
+}
+
+%%Équation paramétrique de droite
+\defKV[eqparamdroite]{%
+ OptionCoeffs=\def\eqparamdteformat{#1},%
+ Reel=\def\eqparamdtereel{#1}
+}
+
+\setKVdefault[eqparamdroite]{%
+ OptionCoeffs={d},%
+ Reel=k,%
+ Aligne=false,%
+ Oppose=false,%
+ Rgras=false
+}
+
+\NewDocumentCommand\AffVarDteParam{ m m }{%
+ \xdef\restmp{\ConversionFraction[\eqparamdteformat]{#1} \AffCoeffSgn[\eqcartdteformat]{#2}{\eqparamdtereel}}%
+ \xintifboolexpr{\xinteval{#1} == 0 'and' \xinteval{#2} == 0}{\xdef\restmp{0}}{}%
+ \xintifboolexpr{\xinteval{#1} == 0 'and' \xinteval{#2} != 0}{\xdef\restmp{\AffCoeffSgn*[\eqcartdteformat]{#2}{\eqparamdtereel}}}{}%
+ \restmp%
+}
+
+\NewDocumentCommand\AffVarDteParamAlign{ m m }{%
+ \xdef\restmp{\ConversionFraction[\eqparamdteformat]{#1} & \AffCoeffSgn[\eqcartdteformat]{#2}{\eqparamdtereel}}%
+ \xintifboolexpr{\xinteval{#1} == 0 'and' \xinteval{#2} == 0}{\xdef\restmp{0 & }}{}%
+ \xintifboolexpr{\xinteval{#1} == 0 'and' \xinteval{#2} != 0}{\xdef\restmp{ & \AffCoeffSgn*[\eqcartdteformat]{#2}{\eqparamdtereel}}}{}%
+ \restmp%
+}
+
+\NewDocumentCommand\TrouveEqParamDroite{ O{} r() r() }{%vect/point ou point/point
+ \restoreKV[eqparamdroite]% revenir au valeurs par défaut
+ \setKV[eqparamdroite]{#1}% lit les arguments optionnels
+ %on teste si c'est point/point
+ \IfSubStr{#2}{;}%c'est vecteur+point, sinon c'est point+point
+ {%
+ \setsepchar{;}\readlist*\CoordVec{#2}%
+ \setsepchar{,}\readlist*\CoordPt{#3}%
+ \itemtomacro\CoordVec[1]\vecdirx%
+ \itemtomacro\CoordVec[2]\vecdiry%
+ \itemtomacro\CoordVec[3]\vecdirz%
+ \itemtomacro\CoordPt[1]\xpta%
+ \itemtomacro\CoordPt[2]\ypta%
+ \itemtomacro\CoordPt[3]\zpta%
+ }%
+ {%
+ \setsepchar{,}\readlist*\CoordPtA{#2}%
+ \setsepchar{,}\readlist*\CoordPtB{#3}%
+ \itemtomacro\CoordPtA[1]\xpta%
+ \itemtomacro\CoordPtA[2]\ypta%
+ \itemtomacro\CoordPtA[2]\zpta%
+ \itemtomacro\CoordPtB[1]\xptb%
+ \itemtomacro\CoordPtB[2]\yptb%
+ \itemtomacro\CoordPtB[2]\zptb%
+ \ifboolKV[eqparamdroite]{Oppose}%
+ {%
+ \xdef\vecdirx{((\xpta)-(\xptb))}%
+ \xdef\vecdiry{((\ypta)-(\yptb))}%
+ \xdef\vecdirz{((\zpta)-(\zptb))}%
+ }%
+ {%
+ \xdef\vecdirx{((\xptb)-(\xpta))}%
+ \xdef\vecdiry{((\yptb)-(\ypta))}%
+ \xdef\vecdirz{((\zptb)-(\zpta))}%
+ }%
+ }%
+ \ifboolKV[eqparamdroite]{Aligne}%
+ {%
+ \left\lbrace\begin{array}{@{\,}l@{\;=\;}l@{\;}r}
+ x & \AffVarDteParamAlign{\xpta}{\vecdirx} \\
+ y & \AffVarDteParamAlign{\ypta}{\vecdiry} \\
+ z & \AffVarDteParamAlign{\zpta}{\vecdirz} \\
+ \end{array}\right.
+ \text{, } \eqparamdtereel \in \ifboolKV[eqparamdroite]{Rgras}{\textbf{R}}{\mathbb{R}}%
+ }%
+ {%
+ \begin{dcases}
+ x = \AffVarDteParam{\xpta}{\vecdirx} \\
+ y = \AffVarDteParam{\ypta}{\vecdiry} \\
+ z = \AffVarDteParam{\zpta}{\vecdirz} \\
+ \end{dcases}
+ \text{, } \eqparamdtereel \in \ifboolKV[eqparamdroite]{Rgras}{\textbf{R}}{\mathbb{R}}%
+ }%
+}
+
+\NewDocumentCommand\TrouveDistancePtPlan{ r() r() d() }{%pt+vect+pt
+ \IfNoValueTF{#3}%c'est Point + Equation // sinon c'est point + vectnorm + point
+ {%
+ \StrDel{#2}{=0}[\tmpeq]%
+ %%\tmpeq \text{ et }%
+ \setsepchar{,}\readlist*\CoordPtA{#1}%
+ \itemtomacro\CoordPtA[1]\xa%
+ \itemtomacro\CoordPtA[2]\ya%
+ \itemtomacro\CoordPtA[3]\za%.
+ %calcul de d
+ \StrSubstitute{\tmpeq}{x}{(0)}[\tmpcoeffd]%
+ \StrSubstitute{\tmpcoeffd}{y}{(0)}[\tmpcoeffd]%
+ \StrSubstitute{\tmpcoeffd}{z}{(0)}[\tmpcoeffd]%
+ \xdef\coeffd{\tmpcoeffd}%
+ %%d=\xinteval{\coeffd} \text{ et }%
+ %calcul de a
+ \StrSubstitute{\tmpeq}{x}{(1)}[\tmpcoeffa]%
+ \StrSubstitute{\tmpcoeffa}{y}{(0)}[\tmpcoeffa]%
+ \StrSubstitute{\tmpcoeffa}{z}{(0)}[\tmpcoeffa]%
+ \xdef\vectx{(\tmpcoeffa)-(\coeffd)}%
+ %%a=\xinteval{\vectx} \text{ et }%
+ %calcul de b
+ \StrSubstitute{\tmpeq}{x}{(0)}[\tmpcoeffb]%
+ \StrSubstitute{\tmpcoeffb}{y}{(1)}[\tmpcoeffb]%
+ \StrSubstitute{\tmpcoeffb}{z}{(0)}[\tmpcoeffb]%
+ \xdef\vecty{(\tmpcoeffb)-(\coeffd)}%
+ %%b=\xinteval{\vecty} \text{ et }%
+ %calcul de c
+ \StrSubstitute{\tmpeq}{x}{(0)}[\tmpcoeffc]%
+ \StrSubstitute{\tmpcoeffc}{y}{(0)}[\tmpcoeffc]%
+ \StrSubstitute{\tmpcoeffc}{z}{(1)}[\tmpcoeffc]%
+ \xdef\vectz{(\tmpcoeffc)-(\coeffd)}%
+ %c=\xinteval{\vectz} \text{ et }%
+ %calcul du numérateur
+ \StrSubstitute{\tmpeq}{x}{(\xa)}[\resnum]%
+ \StrSubstitute{\resnum}{y}{(\ya)}[\resnum]%
+ \StrSubstitute{\resnum}{z}{(\za)}[\resnum]%
+ %%\text{num}=\xinteval{\resnum} \text{ et }
+ %le carré
+ \xdef\restmp{(\resnum)**2/((\vectx)**2+(\vecty)**2+(\vectz)**2)}%
+ %%\text{resultatcarré}=\xinteval{\restmp} \text{ et }%
+ }%
+ {%
+ \setsepchar{,}\readlist*\CoordPtA{#1}%
+ \setsepchar{;}\readlist*\CoordVec{#2}%
+ \setsepchar{,}\readlist*\CoordPtB{#3}%
+ \itemtomacro\CoordPtA[1]\xa%
+ \itemtomacro\CoordPtA[2]\ya%
+ \itemtomacro\CoordPtA[3]\za%
+ \itemtomacro\CoordVec[1]\vectx%
+ \itemtomacro\CoordVec[2]\vecty%
+ \itemtomacro\CoordVec[3]\vectz%
+ \itemtomacro\CoordPtB[1]\xb%
+ \itemtomacro\CoordPtB[2]\yb%
+ \itemtomacro\CoordPtB[3]\zb%
+ \def\restmp{((\vectx)*((\xb)-(\xa))+(\vecty)*((\yb)-(\ya))+(\vectz)*((\zb)-(\za)))**2/((\vectx)**2+(\vecty)**2+(\vectz)**2)}%
+ }%
+ \SimplificationRacine{\restmp}%
+}
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-probas.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-probas.tex
index 270e99e3cc..2d7e0716e6 100644
--- a/macros/latex/contrib/proflycee/tex/proflycee-tools-probas.tex
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-probas.tex
@@ -14,53 +14,53 @@
\xintFloatToDecimal{\xintfloateval{binomial(#1,#3)*#2^#3*(1-#2)^(#1-#3)}}
}
\newcommand\CalcBinomC[4]{%npab
- \def\BorneInf{#3}\def\BorneSup{#4}
+ \def\BorneInf{#3}\def\BorneSup{#4}%
\ifthenelse{\equal{#3}{*}}%
- {\def\BorneInf{0}}
- {}
+ {\def\BorneInf{0}}%
+ {}%
\ifthenelse{\equal{#4}{*}}%
- {\def\BorneSup{#1}}
- {}
- \xintFloatToDecimal{\xintfloateval{add(binomial(#1,i)*#2^i*(1-#2)^(#1-i), i=\BorneInf..\BorneSup)}}
+ {\def\BorneSup{#1}}%
+ {}%
+ \xintFloatToDecimal{\xintfloateval{add(binomial(#1,i)*#2^i*(1-#2)^(#1-i), i=\BorneInf..\BorneSup)}}%
}
\newcommand\CalcGeomP[2]{%pk
- \xintFloatToDecimal{\xintfloateval{(1-#1)^(#2-1)*(#1)}}
+ \xintFloatToDecimal{\xintfloateval{(1-#1)^(#2-1)*(#1)}}%
}
\newcommand\CalcGeomC[3]{%pab
- \def\BorneInf{#2}\def\BorneSup{#3}
+ \def\BorneInf{#2}\def\BorneSup{#3}%
\ifthenelse{\equal{#2}{*}}%
- {\def\BorneInf{1}}
- {}
+ {\def\BorneInf{1}}%
+ {}%
\ifthenelse{\equal{#3}{*}}%
- {\def\BorneSup{\fpeval{trunc(1/#1*10,0)}}}
- {}
- \xintFloatToDecimal{\xintfloateval{add((1-#1)^(i-1)*(#1), i=\BorneInf..\BorneSup)}}
+ {\def\BorneSup{\fpeval{trunc(1/#1*10,0)}}}%
+ {}%
+ \xintFloatToDecimal{\xintfloateval{add((1-#1)^(i-1)*(#1), i=\BorneInf..\BorneSup)}}%
}
\newcommand\CalcHypergeomP[4]{%Nnmk
- \xintFloatToDecimal{\xintfloateval{binomial(#3,#4)*binomial(#1-#3,#2-#4)/binomial(#1,#2)}}
+ \xintFloatToDecimal{\xintfloateval{binomial(#3,#4)*binomial(#1-#3,#2-#4)/binomial(#1,#2)}}%
}
\newcommand\CalcHypergeomC[5]{%Nnmab
- \def\BorneInf{#4}\def\BorneSup{#5}
+ \def\BorneInf{#4}\def\BorneSup{#5}%
\ifthenelse{\equal{#4}{*}}%
- {\def\BorneInf{0}}
- {}
+ {\def\BorneInf{0}}%
+ {}%
\ifthenelse{\equal{#5}{*}}%
- {\def\BorneSup{#1}}
- {}
- \xintFloatToDecimal{\xintfloateval{add(binomial(#3,i)*binomial(#1-#3,#2-i)/binomial(#1,#2), i=\BorneInf..\BorneSup)}}
+ {\def\BorneSup{#1}}%
+ {}%
+ \xintFloatToDecimal{\xintfloateval{add(binomial(#3,i)*binomial(#1-#3,#2-i)/binomial(#1,#2), i=\BorneInf..\BorneSup)}}%
}
\newcommand\CalcPoissP[2]{%lk
- \xintFloatToDecimal{\xintfloateval{exp(-#1)*#1^#2/factorial(#2)}}
+ \xintFloatToDecimal{\xintfloateval{exp(-#1)*#1^#2/factorial(#2)}}%
}
\newcommand\CalcPoissC[3]{%lab
- \def\BorneInf{#2}\def\BorneSup{#3}
+ \def\BorneInf{#2}\def\BorneSup{#3}%
\ifthenelse{\equal{#2}{*}}%
- {\def\BorneInf{0}}
- {}
+ {\def\BorneInf{0}}%
+ {}%
\ifthenelse{\equal{#3}{*}}%
- {\def\BorneSup{10*#1}}
- {}
- \xintFloatToDecimal{\xintfloateval{add(exp(-#1)*#1^i/factorial(i), i=\BorneInf..\BorneSup)}}
+ {\def\BorneSup{10*#1}}%
+ {}%
+ \xintFloatToDecimal{\xintfloateval{add(exp(-#1)*#1^i/factorial(i), i=\BorneInf..\BorneSup)}}%
}
%utiles idée de https://tex.stackexchange.com/questions/355574/im-searching-for-a-table-with-cdf-of-standard-normal-distribution
\xintdeffloatvar a_1,a_2,a_3,a_4,a_5,a_6 :=
@@ -72,170 +72,170 @@
\newcommand\CalcNormC[4]{%msab
%def des bornes de l'intervalle suivant l'absence de a ou de b...
- \def\BorneInf{#3}\def\BorneSup{#4}
+ \def\BorneInf{#3}\def\BorneSup{#4}%
\ifthenelse{\equal{#3}{*}}%
- {\def\BorneInf{#4-10*#2}}
- {}
+ {\def\BorneInf{#4-10*#2}}%
+ {}%
\ifthenelse{\equal{#4}{*}}%
- {\def\BorneSup{#3+10*#2}}
- {}
- \xintFloatToDecimal{\xintfloateval{Phi((\BorneSup-#1)/#2)-Phi((\BorneInf-#1)/#2)}}
+ {\def\BorneSup{#3+10*#2}}%
+ {}%
+ \xintFloatToDecimal{\xintfloateval{Phi((\BorneSup-#1)/#2)-Phi((\BorneInf-#1)/#2)}}%
}
%calculs "simples" fiabilite
\newcommand\CalcExpoC[3]{%lab
\def\BorneInf{#2}\def\BorneSup{#3}
\ifthenelse{\equal{#2}{*}}%
- {\def\BorneInf{0}}
- {}
+ {\def\BorneInf{0}}%
+ {}%
\ifthenelse{\equal{#3}{*}}%
- {\def\BorneSup{100/#1}}
- {}
- \xintFloatToDecimal{\xintfloateval{exp(-#1*\BorneInf)-exp(-#1*\BorneSup)}}
+ {\def\BorneSup{100/#1}}%
+ {}%
+ \xintFloatToDecimal{\xintfloateval{exp(-#1*\BorneInf)-exp(-#1*\BorneSup)}}%
}
%calculs formatés
\NewDocumentCommand{\BinomP}{ s O{3} m m m }{%*=sci,2=prec,3=n,4=p,5=k
\IfBooleanTF{#1}%
{%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}}
+ \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}}%
}%
{%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}}
- }
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}}%
+ }%
}
\NewDocumentCommand{\BinomC}{ s O{3} m m m m }{%*=sci,2=prec,3=n,4=p,5=a,6=b
- \def\BorneInf{#5}\def\BorneSup{#6}
+ \def\BorneInf{#5}\def\BorneSup{#6}%
\ifthenelse{\equal{#5}{*}}%
- {\def\BorneInf{0}}
- {}
+ {\def\BorneInf{0}}%
+ {}%
\ifthenelse{\equal{#6}{*}}%
- {\def\BorneSup{#3}}
- {}
+ {\def\BorneSup{#3}}%
+ {}%
\IfBooleanTF{#1}%
{%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}}
+ \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}}%
}%
{%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}}
- }
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}}%
+ }%
}
\NewDocumentCommand{\GeomP}{ s O{3} m m }{%*=sci,2=prec,3=p,4=k
\IfBooleanTF{#1}%
{%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}}
+ \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}}%
}%
{%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}}
- }
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}}%
+ }%
}
\NewDocumentCommand{\GeomC}{ s O{3} m m m }{%*=sci,2=prec,3=p,4=a,5=b
- \def\BorneInf{#4}\def\BorneSup{#5}
+ \def\BorneInf{#4}\def\BorneSup{#5}%
\ifthenelse{\equal{#4}{*}}%
- {\def\BorneInf{1}}
- {}
+ {\def\BorneInf{1}}%
+ {}%
\ifthenelse{\equal{#5}{*}}%
- {\def\BorneSup{\fpeval{trunc(1/#3*10,0)}}}
- {}
+ {\def\BorneSup{\fpeval{trunc(1/#3*10,0)}}}%
+ {}%
\IfBooleanTF{#1}%
{%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}}
+ \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}}%
}%
{%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}}
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}}%
}
}
\NewDocumentCommand{\HypergeomP}{ s O{3} m m m m }{%*=sci,2=prec,3=N,4=n,5=m,6=k
\IfBooleanTF{#1}%
{%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}}
+ \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}}%
}%
{%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}}
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}}%
}
}
\NewDocumentCommand{\HypergeomC}{ s O{3} m m m m m }{%*=sci,2=prec,3=N,4=n,5=m,6=a,7=b
- \def\BorneInf{#6}\def\BorneSup{#7}
+ \def\BorneInf{#6}\def\BorneSup{#7}%
\ifthenelse{\equal{#6}{*}}%
- {\def\BorneInf{0}}
- {}
+ {\def\BorneInf{0}}%
+ {}%
\ifthenelse{\equal{#7}{*}}%
- {\def\BorneSup{#3}}
- {}
+ {\def\BorneSup{#3}}%
+ {}%
\IfBooleanTF{#1}%
{%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#5,i)*binomial(#3-#5,#4-i)/binomial(#3,#4), i=\BorneInf..\BorneSup),#2)}}}
+ \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#5,i)*binomial(#3-#5,#4-i)/binomial(#3,#4), i=\BorneInf..\BorneSup),#2)}}}%
}%
{%
\num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#5,i)*binomial(#3-#5,#4-i)/binomial(#3,#4), i=\BorneInf..\BorneSup),#2)}}}
- }
+ }%
}
\NewDocumentCommand{\PoissonP}{ s O{3} m m }{%*=sci,2=prec,3=lbda,4=k
\IfBooleanTF{#1}%
{%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}}
+ \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}}%
}%
{%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}}
- }
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}}%
+ }%
}
\NewDocumentCommand{\PoissonC}{ s O{3} m m m }{%*=ing,2=prec,3=lbda,4=a,5=b
- \def\BorneInf{#4}\def\BorneSup{#5}
+ \def\BorneInf{#4}\def\BorneSup{#5}%
\ifthenelse{\equal{#4}{*}}%
- {\def\BorneInf{0}}
- {}
+ {\def\BorneInf{0}}%
+ {}%
\ifthenelse{\equal{#5}{*}}%
- {\def\BorneSup{10*#3}}
- {}
+ {\def\BorneSup{10*#3}}%
+ {}%
\IfBooleanTF{#1}%
{%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}}
+ \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}}%
}%
{%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}}
- }
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}}%
+ }%
}
\NewDocumentCommand{\NormaleC}{ s O{3} m m m m }{%
%*=ing,2=prec,3=mu,4=sigma,5=a,6=b
%def des bornes de l'intervalle suivant l'absence de a ou de b...
- \def\BorneInf{#5}\def\BorneSup{#6}
+ \def\BorneInf{#5}\def\BorneSup{#6}%
\ifthenelse{\equal{#5}{*}}%
- {\def\BorneInf{#6-10*#4}}
- {}
+ {\def\BorneInf{#6-10*#4}}%
+ {}%
\ifthenelse{\equal{#6}{*}}%
- {\def\BorneSup{#5+10*#4}}
- {}
+ {\def\BorneSup{#5+10*#4}}%
+ {}%
\IfBooleanTF{#1}%
{%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}}
+ \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}}%
}%
{%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}}
- }
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}}%
+ }%
}
\NewDocumentCommand{\ExpoC}{ s O{3} m m m }{%*=ing,2=prec,3=lbda,4=a,5=b
- \def\BorneInf{#4}\def\BorneSup{#5}
+ \def\BorneInf{#4}\def\BorneSup{#5}%
\ifthenelse{\equal{#4}{*}}%
- {\def\BorneInf{0}}
- {}
+ {\def\BorneInf{0}}%
+ {}%
\ifthenelse{\equal{#5}{*}}%
- {\def\BorneSup{100/#3}}
- {}
+ {\def\BorneSup{100/#3}}%
+ {}%
\IfBooleanTF{#1}%
{%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3*\BorneInf)-exp(-#3*\BorneSup),#2)}}}
+ \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3*\BorneInf)-exp(-#3*\BorneSup),#2)}}}%
}%
{%
\num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintFloatToDecimal{\xintfloateval{round(exp(-#3*\BorneInf)-exp(-#3*\BorneSup),#2)}}}}
- }
+ }%
}
%%------ARBRESPROBAS