summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/profcollege/latex/PfCCalculsFractions.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCCalculsFractions.tex')
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCCalculsFractions.tex177
1 files changed, 177 insertions, 0 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCCalculsFractions.tex b/macros/latex/contrib/profcollege/latex/PfCCalculsFractions.tex
new file mode 100644
index 0000000000..94e3a8d120
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/PfCCalculsFractions.tex
@@ -0,0 +1,177 @@
+\setKVdefault[CalculsFractions]{Couleur=Crimson}
+
+\NewDocumentCommand\tofrac{m}{%
+ \IfDecimal{#1}{#1}{%
+ \StrBefore{#1}{/}[\PfCnum]%
+ \StrBehind{#1}{/}[\PfCden]%
+ \frac{\PfCnum}{\PfCden}%
+ }%
+}%
+
+\NewDocumentCommand\AddFraction{soommo}{%
+ \useKVdefault[CalculsFractions]%
+ \setKV[CalculsFractions]{#2}%
+ \IfBooleanTF{#1}{%
+ \xdef\PfCFractionOp{-}%
+ }{%
+ \xdef\PfCFractionOp{+}%
+ }%
+ \IfDecimal{#4}{%
+ \xdef\PfCNumA{#4}%
+ \xdef\PfCNumB{1}%
+ }{%
+ \StrCut{#4}{/}\PfCNumA\PfCNumB%
+ }%
+ \IfDecimal{#5}{%
+ \xdef\PfCNumC{#5}%
+ \xdef\PfCNumD{1}%
+ }{%
+ \StrCut{#5}{/}\PfCNumC\PfCNumD%
+ }
+ \xdef\PfCAddFoo{\PfCNumA/\PfCNumB,\PfCNumC/\PfCNumD}%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListeFractions{\PfCAddFoo}%
+ \reademptyitems
+ \setsepchar{,}%
+ % Partie calculs
+ \PGCD{\ListeFractions[1,2]}{\ListeFractions[2,2]}%
+ \xdef\PfCPremierMul{\fpeval{\ListeFractions[2,2]/\the\pgcd}}%
+ \xdef\PfCDeuxiemeMul{\fpeval{\ListeFractions[1,2]/\the\pgcd}}%
+ \xdef\PfCAddNumFin{\fpeval{(\ListeFractions[1,1])*(\PfCPremierMul)\PfCFractionOp(\ListeFractions[2,1])*(\PfCDeuxiemeMul)}}%
+ \xdef\PfCAddDenoFin{\fpeval{(\ListeFractions[1,2])*(\PfCPremierMul)}}%
+ \PGCD{\fpeval{abs(\PfCAddNumFin)}}{\fpeval{abs(\PfCAddDenoFin)}}\xdef\PfCAddPgcd{\the\pgcd}%
+ \xdef\PfCAddNumSimp{\fpeval{\PfCAddNumFin/\PfCAddPgcd}}%
+ \xdef\PfCAddDenoSimp{\fpeval{\PfCAddDenoFin/\PfCAddPgcd}}%
+ \xdef\PfCAddSumSimp{\PfCAddNumSimp/\PfCAddDenoSimp}%
+ \IfValueT{#6}{\xdef#6{\PfCAddSumSimp}}%
+ % Partie affichage
+ \ensuremath{%
+ \IfValueTF{#3}{%
+ \ifnum#3=4\relax%
+ \tofrac{\PfCAddSumSimp}%
+ \else%
+ \ifnum#3=3\relax%
+ \SSimpliTest{\fpeval{abs(\PfCAddNumFin)}}{\fpeval{abs(\PfCAddDenoFin)}}\ifthenelse{\boolean{Simplification}}{\tofrac{\PfCAddNumFin/\PfCAddDenoFin}}{\tofrac{\PfCAddSumSimp}}%
+ \else%
+ \ifnum#3=1\relax%
+ \ifnum\PfCPremierMul>1\relax%
+ \frac{\ListeFractions[1,1]_{\times\num{\PfCPremierMul}}}{\ListeFractions[1,2]_{\times\num{\PfCPremierMul}}}
+ \else%
+ \tofrac{#4}%
+ \fi%
+ \PfCFractionOp%
+ \ifnum\PfCDeuxiemeMul>1\relax%
+ \frac{\ListeFractions[2,1]_{\times\num{\PfCDeuxiemeMul}}}{\ListeFractions[2,2]_{\times\num{\PfCDeuxiemeMul}}}%
+ \else%
+ \tofrac{#5}%
+ \fi%
+ \else%
+ \ifnum#3=2\relax%
+ \frac{\num{\fpeval{\ListeFractions[1,1]*\PfCPremierMul}}}{\num{\fpeval{\ListeFractions[1,2]*\PfCPremierMul}}}\PfCFractionOp\frac{\num{\fpeval{\ListeFractions[2,1]*\PfCDeuxiemeMul}}}{\num{\fpeval{\ListeFractions[2,2]*\PfCDeuxiemeMul}}}%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ }{\tofrac{#4}\PfCFractionOp\tofrac{#5}
+ }%
+ }%
+}%
+
+\NewDocumentCommand\SousFraction{oomm}{%
+ \AddFraction*[#1][#2]{#3}{#4}%
+}%
+
+\NewDocumentCommand\MulFraction{oommo}{%
+ \useKVdefault[CalculsFractions]%
+ \setKV[CalculsFractions]{#1}%
+ \IfDecimal{#3}{%
+ \xdef\PfCNumA{#3}%
+ \xdef\PfCNumB{1}%
+ }{%
+ \StrCut{#3}{/}{\PfCNumA}{\PfCNumB}%
+ }%
+ \IfDecimal{#4}{%
+ \xdef\PfCNumC{#4}%
+ \xdef\PfCNumD{1}%
+ }{%
+ \StrCut{#4}{/}{\PfCNumC}{\PfCNumD}%
+ }%
+ \xdef\PfCMulFoo{\PfCNumA/\PfCNumB,\PfCNumC/\PfCNumD}%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListeFractions{\PfCMulFoo}%
+ \reademptyitems
+ \setsepchar{,}%
+ % Calculs
+ \xdef\PfCMulNumFin{\fpeval{(\ListeFractions[1,1])*(\ListeFractions[2,1])}}
+ \xdef\PfCMulDenoFin{\fpeval{\ListeFractions[1,2]*\ListeFractions[2,2]}}
+ \PGCD{\fpeval{abs(\PfCMulNumFin)}}{\fpeval{abs(\PfCMulDenoFin)}}\xdef\PfCMulPgcd{\pgcd}%
+ \xdef\PfCMulNumSimp{\fpeval{\PfCMulNumFin/\PfCMulPgcd}}%
+ \xdef\PfCMulDenoSimp{\fpeval{\PfCMulDenoFin/\PfCMulPgcd}}%
+ \xdef\PfCMulPdtSimp{\PfCMulNumSimp/\PfCMulDenoSimp}%
+ \IfValueT{#5}{\xdef#5{\PfCMulPdtSimp}}%
+ \ensuremath{%
+ \IfValueTF{#2}{%
+ \ifnum#2=3\relax
+ \tofrac{\PfCMulPdtSimp}%
+ \else
+ \ifnum#2=2\relax%
+ \SSimpliTest{\PfCMulNumFin}{\PfCMulDenoFin}\ifthenelse{\boolean{Simplification}}{\frac{\ifnum\PfCMulNumFin<0\relax-\fi\Decomposition[Longue]{\fpeval{abs(\PfCMulNumFin)}}}{\ifnum\PfCMulDenoFin<0\relax-\fi\Decomposition[Longue]{\fpeval{abs(\PfCMulDenoFin)}}}}{\tofrac{\PfCMulPdtSimp}}%
+ \else%
+ \ifnum#2=1\relax%
+ \frac{\ListeFractions[1,1]\times\ifnum\ListeFractions[2,1]<0\relax(\fi\ListeFractions[2,1]\ifnum\ListeFractions[2,1]<0\relax)\fi}{\ListeFractions[1,2]\times\ifnum\ListeFractions[2,2]<0\relax(\fi\ListeFractions[2,2]\ifnum\ListeFractions[2,2]<0\relax)\fi}
+ \fi
+ \fi
+ \fi
+ }{\tofrac{#3}\times\tofrac{#4}
+ }
+ }%
+}%
+
+\NewDocumentCommand\DivFraction{oommo}{%
+ \useKVdefault[CalculsFractions]%
+ \setKV[CalculsFractions]{#1}%
+ \IfDecimal{#3}{%
+ \xdef\PfCNumA{#3}%
+ \xdef\PfCNumB{1}%
+ }{%
+ \StrCut{#3}{/}{\PfCNumA}{\PfCNumB}%
+ }%
+ \IfDecimal{#4}{%
+ \xdef\PfCNumC{#4}%
+ \xdef\PfCNumD{1}%
+ }{%
+ \StrCut{#4}{/}{\PfCNumC}{\PfCNumD}%
+ }%
+ \xdef\PfCDivFoo{\PfCNumA/\PfCNumB,\PfCNumC/\PfCNumD}%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListeFractions{\PfCDivFoo}%
+ \reademptyitems%
+ \setsepchar{,}%
+ % Calculs
+ \xdef\PfCDivNumFin{\fpeval{(\ListeFractions[1,1])*(\ListeFractions[2,2])}}%
+ \xdef\PfCDivDenoFin{\fpeval{\ListeFractions[1,2]*\ListeFractions[2,1]}}%
+ \PGCD{\fpeval{abs(\PfCDivNumFin)}}{\fpeval{abs(\PfCDivDenoFin)}}\xdef\PfCDivPgcd{\pgcd}%
+ \xdef\PfCDivNumSimp{\fpeval{\PfCDivNumFin/\PfCDivPgcd}}%
+ \xdef\PfCDivDenoSimp{\fpeval{\PfCDivDenoFin/\PfCDivPgcd}}%
+ \xdef\PfCDivPdtSimp{\PfCDivNumSimp/\PfCDivDenoSimp}%
+ \IfValueT{#5}{\xdef#5{\PfCDivPdtSimp}}%
+ \ensuremath{%
+ \IfValueTF{#2}{%
+ \ifnum#2=4\relax
+ \tofrac{\PfCDivPdtSimp}%
+ \else\ifnum#2=3\relax
+ \MulFraction[][\fpeval{#2-1}]{\ListeFractions[1,1]/\ListeFractions[1,2]}{\ListeFractions[2,2]/\ListeFractions[2,1]}%
+ \else
+ \ifnum#2=2\relax%
+ \MulFraction[][\fpeval{#2-1}]{\ListeFractions[1,1]/\ListeFractions[1,2]}{\ListeFractions[2,2]/\ListeFractions[2,1]}%
+ \else%
+ \ifnum#2=1\relax%
+ \tofrac{\ListeFractions[1,1]/\ListeFractions[1,2]}\times\tofrac{\ListeFractions[2,2]/\ListeFractions[2,1]}
+ \fi
+ \fi
+ \fi
+ \fi
+ }{\tofrac{#3}\div\tofrac{#4}
+ }
+ }%
+}% \ No newline at end of file