% Author : Christophe Poulain % Licence : Released under the LaTeX Project Public License v1.3c % or later, see http://www.latex-project.org/lppl.txtf \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{ProfCollege}[2021/08/22 v0.99-f Aide pour l'utilisation de LaTeX au collège] \RequirePackage{verbatim} \RequirePackage{mathtools}%Amélioration des rendus \RequirePackage{amssymb} % mathématiques \RequirePackage{siunitx}%unités SI \sisetup{% locale=FR, detect-all,% output-decimal-marker={,},% group-minimum-digits=4% } \DeclareSIUnit{\kmh}{\km\per\hour} \newcommand\speed[1]{\SI{#1}{\kmh}} \newcommand\Speed[1]{\SI[per-mode=symbol]{#1}{\kmh}} \DeclareSIUnit{\are}{a} \DeclareSIUnit{\annee}{an} \DeclareSIUnit{\mois}{mois} \DeclareSIUnit{\jour}{j} \DeclareSIUnit{\quintal}{q} \DeclareSIUnit{\octet}{o} \DeclareSIUnit{\fahrenheit}{\text{\textdegree}F} \DeclareSIUnit{\EuRo}{€} \RequirePackage[table,svgnames]{xcolor}%Gestion des couleurs \RequirePackage{xstring}%Gestion de chaines de caractères \RequirePackage{simplekv}%Gestion de paramètres sous forme de clés \RequirePackage{ifthen} \RequirePackage{modulus}%Pour certains calculs arithmétiques. \RequirePackage{xinttools}%Pour la création dynamique d'un tableau \newif\if@shellescape \@shellescapetrue \DeclareOption{nonshellescape}{\@shellescapefalse} \ProcessOptions\relax \RequirePackage{iftex} \ifluatex \RequirePackage{luamplib} \everymplib{input PfCSvgnames; input PfCConstantes; input PfCGeometrie; input PfCAfficheur; beginfig(1);} \everyendmplib{endfig;} \else \if@shellescape \RequirePackage[shellescape,latex]{gmp}%inclusion de figures metapost "à la volée"% \gmpoptions{everymp={prologues:=3; input PfCLaTeX; input PfCSvgnames; input PfCConstantes; input PfCGeometrie; input PfCAfficheur;}} \usempxclass{article} \usempxpackage{ProfCollege} \usempxpackage[utf8]{inputenc} \usempxpackage[T1]{fontenc} \usempxpackage{fourier} \usempxpackage[french]{babel} \usempxpackage{pifont} \else \RequirePackage[latex]{gmp}%inclusion de figures metapost "à la volée"% \gmpoptions{everymp={prologues:=3; input PfCLaTeX; input PfCSvgnames; input PfCConstantes; input PfCGeometrie; input PfCAfficheur;}} \usempxclass{article} \usempxpackage{ProfCollege} \usempxpackage[utf8]{inputenc} \usempxpackage[T1]{fontenc} \usempxpackage{fourier} \usempxpackage[french]{babel} \usempxpackage{pifont} \fi \fi \RequirePackage{xintexpr} \RequirePackage{listofitems}%pour définir simplement la liste des données. \RequirePackage{datatool} \RequirePackage{multido} \RequirePackage{xlop}%Pour effectuer les calculs nécessaires. %\opset{decimalsepsymbol={,}}% \RequirePackage{xfp}%Pour les calculs trigonométriques \RequirePackage[most]{tcolorbox} \RequirePackage{tikz} % https://tex.stackexchange.com/questions/349259/curved-arrow-describing-a-step-in-a-equation-derivation %https://tex.stackexchange.com/questions/58656/best-way-to-draw-a-chevron-diagram-using-tikz \usetikzlibrary{calc,shapes,arrows,tikzmark,chains,positioning,shapes.symbols,babel} \RequirePackage{suffix}%pour la commande étoilée \RequirePackage{multicol} \RequirePackage{hhline}% Pour la cohabitation de cline avec les couleurs \RequirePackage{stackengine} \RequirePackage[thicklines]{cancel} \RequirePackage{nicematrix}%pour le tableur \let\myoldmulticolumn\multicolumn \AtBeginEnvironment{tabular}{\let\multicolumn\myoldmulticolumn} \RequirePackage{fmtcount} \FCloadlang{french} % https://stackoverflow.com/questions/3391103/how-to-make-the-grayed-round-box-using-tiks \RequirePackage{environ} % %%%%% Quelques besoins particuliers \def\bla{}%JCC :) Pour les tests sur arguments vides %% Colorer en mode mathématique. \color ne gère pas les espaces propres au mode mathématique. Donc besoin de changer % https://tex.stackexchange.com/questions/21598/how-to-color-math-symbols \makeatletter \def\mathcolor#1#{\@mathcolor{#1}} \def\@mathcolor#1#2#3{% \protect\leavevmode \begingroup \color#1{#2}#3% \endgroup } \makeatother % Colorer uniquement la barre de soulignement % https://tex.stackexchange.com/questions/9466/color-underline-a-formula/153884 \def\mathunderline#1#2{\color{#1}\underline{{\color{black}#2}}\color{black}} % Ecrire des lignes d'équations \catcode`\@=11 \def\Eqalign#1{\null\,\vcenter{\openup\jot\m@th\ialign{ \strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil &&\quad\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$ \hfil\crcr #1\crcr}}\,} \catcode`\@=12 %%% %% Commandes "utiles" %%% %encadrer avec des "sommets arrondis" \newsavebox{\logobox} \newcommand\Logo[2]{% \setbox1=\hbox{\includegraphics[scale=#2]{#1}} \begin{tikzpicture}% \clip[rounded corners=5mm] (0,0) rectangle (\wd1,\ht1); \node[xshift=0.5\wd1, yshift=0.5\ht1, inner xsep=0pt, inner ysep=0pt] (box) {% \includegraphics[scale=#2]{#1}% };% \end{tikzpicture}% } \makeatletter \def\Dotfill{% \leavevmode \cleaders \hb@xt@ .44em{\hss\xleaders\hrule width0.33em\hss}\hfill \kern\z@} \makeatother \newcommand\pointilles[1][]{% \ifx\bla#1\bla% \Dotfill% \else% \hbox to#1{\Dotfill}% \fi } \newcommand\Lignespointilles[1]{% \xintFor* ##1 in {\xintSeq {1}{#1}}\do{% \pointilles\par% } } \newcommand\MultiCol[2]{% \setsepchar[*]{/}% \readlist*\ListeNombreCol{#1}% \setsepchar[*]{§}% \readlist*\ListeContenuCol{#2}% \xintFor* ##1 in {\xintSeq {1}{\ListeNombreCollen}}\do{% \begin{minipage}{\ListeNombreCol[##1]\linewidth} \ListeContenuCol[##1] \end{minipage}% \xintifboolexpr{##1<\ListeNombreCollen}{\hfill}{}% }% }% \newcount\rappeljour \newcommand\Demain{% \rappeljour=\day\relax% \advance\day by 1\relax% \ifnum\month=1\relax% \ifnum\day>31\relax% \day=\numexpr1\relax% \advance\month by 1\relax% \today\relax% \advance\month by -1\relax% \else% \today\relax% \fi% \fi% \ifnum\month=2\relax% \ifnum\day>28\relax% \day=\numexpr1\relax% \advance\month by 1\relax% \today\relax% \advance\month by -1\relax% \else% \today\relax% \fi% \fi% \ifnum\month=3\relax% \ifnum\day>31\relax% \day=\numexpr1\relax% \advance\month by 1\relax% \today\relax% \advance\month by -1\relax% \else% \today\relax% \fi% \fi% \ifnum\month=4\relax% \ifnum\day>30\relax% \day=\numexpr1\relax% \advance\month by 1\relax% \today\relax% \advance\month by -1\relax% \else% \today\relax% \fi% \fi% \ifnum\month=5\relax% \ifnum\day>31\relax% \day=\numexpr1\relax% \advance\month by 1\relax% \today\relax% \advance\month by -1\relax% \else% \today\relax% \fi% \fi% \ifnum\month=6\relax% \ifnum\day>30\relax% \day=\numexpr1\relax% \advance\month by 1\relax% \today\relax% \advance\month by -1\relax% \else% \today\relax% \fi% \fi% \ifnum\month=7\relax% \ifnum\day>31\relax% \day=\numexpr1\relax% \advance\month by 1\relax% \today\relax% \advance\month by -1\relax% \else% \today\relax% \fi% \fi% \ifnum\month=8\relax% \ifnum\day>31\relax% \day=\numexpr1\relax% \advance\month by 1\relax% \today\relax% \advance\month by -1\relax% \else% \today\relax% \fi% \fi% \ifnum\month=9\relax% \ifnum\day>30\relax% \day=\numexpr1\relax% \advance\month by 1\relax% \today\relax% \advance\month by -1\relax% \else% \today\relax% \fi% \fi% \ifnum\month=10\relax% \ifnum\day>31\relax% \day=\numexpr1\relax% \advance\month by 1\relax% \today\relax% \advance\month by -1\relax% \else% \today\relax% \fi% \fi% \ifnum\month=11\relax% \ifnum\day>30\relax% \day=\numexpr1\relax% \advance\month by 1\relax% \today\relax% \advance\month by -1\relax% \else% \today\relax% \fi% \fi% \ifnum\month=12\relax% \ifnum\day>31\relax% \day=\numexpr1\relax% \advance\month by 1\relax% \today\relax% \advance\month by -1\relax% \else% \today\relax% \fi% \fi% \day=\the\rappeljour\relax% } %%% % Smiley %%% %%https://tex.stackexchange.com/questions/3695/smileys-in-latex/227226 \tikzset{face/.style={shape=circle,minimum size=4ex,shading=radial,outer sep=0pt, inner color=white!50!yellow,outer color= yellow!70!orange}} \newcommand{\emoticon}[2][]{% \scalebox{.5}{\begin{tikzpicture} \node[face,#1,draw,thick] (emoticon) {}; %% The eyes are fixed. \draw[fill=white] (-1ex,0ex) ..controls (-0.5ex,0.2ex)and(0.5ex,0.2ex)..(1ex,0.0ex) ..controls ( 1.5ex,1.5ex)and( 0.2ex,1.7ex)..(0ex,0.4ex) ..controls (-0.2ex,1.7ex)and(-1.5ex,1.5ex)..(-1ex,0ex)--cycle; #2% \end{tikzpicture}}% } \newcommand{\pupils}{ %% standard pupils \fill[shift={(0.5ex,0.5ex)},rotate=80] (0,0) ellipse (0.3ex and 0.15ex); \fill[shift={(-0.5ex,0.5ex)},rotate=100] (0,0) ellipse (0.3ex and 0.15ex);} \def\RKsmallsmile{% \emoticon{% \pupils %% mouth \draw[thick] (-0.5ex,-1ex)..controls (-0.25ex,-1.25ex)and(0.25ex,-1.25ex)..(0.5ex,-1ex); }%\emoticon } \def\RKsmile{% \emoticon{% \pupils \draw[thick] (-1ex,-1ex)..controls (-0.5ex,-1.5ex)and(0.5ex,-1.5ex)..(1ex,-1ex); }%\emoticon } \def\RKbigsmile{% \emoticon{% \pupils %% mouth \draw[thick] (-1.5ex,-0.5ex)..controls (-0.7ex,-1.7ex)and(0.7ex,-1.7ex)..(1.5ex,-0.5ex); }%\emoticon } \def\RKsad{% \emoticon{% %% pupils \fill[shift={( 0.5ex,0.5ex)},rotate=90] (0,0) ellipse (0.3ex and 0.15ex); \fill[shift={(-0.5ex,0.5ex)},rotate=90] (0,0) ellipse (0.3ex and 0.15ex); %% mouth \draw[thick] (-1ex,-1ex)..controls(-0.5ex,-0.5ex)and(0.5ex,-0.5ex)..(1ex,-1ex); }%\emoticon } \def\RKneutral{% \emoticon{% %% pupils \fill[shift={( 0.5ex,0.5ex)},rotate=90] (0,0) ellipse (0.3ex and 0.15ex); \fill[shift={(-0.5ex,0.5ex)},rotate=90] (0,0) ellipse (0.3ex and 0.15ex); %% mouth \draw[thick] (-0.5ex,-1ex)--(0.5ex,-1ex); }%\emoticon } \def\RKconfused{% \emoticon{% \pupils %% mouth \draw[thick] (-1ex,-0.75ex)--(1ex,-1.25ex); }%\emoticon } \def\RKsexy{% \emoticon{% \pupils %% mouth \draw[very thick,red,line cap=round] (-1ex,-1ex)..controls (-0.5ex,-1.5ex)and(0.5ex,-1.5ex)..(1ex,-1ex); %% eyelashes \draw (0.60ex,1.20ex)--(0.60ex,1.60ex) (0.85ex,1.25ex)--(0.95ex,1.45ex) (1.00ex,1.00ex)--(1.20ex,1.10ex) (0.35ex,1.15ex)--(0.25ex,1.35ex) (-0.60ex,1.20ex)--(-0.60ex,1.60ex) (-0.85ex,1.25ex)--(-0.95ex,1.45ex) (-1.00ex,1.00ex)--(-1.20ex,1.10ex) (-0.35ex,1.15ex)--(-0.25ex,1.35ex); }%\emoticon } \def\RKangry{% \emoticon{% %% pupils \fill[shift={( 0.5ex,0.5ex)},rotate=90] (0,0) ellipse (0.3ex and 0.15ex); \fill[shift={(-0.5ex,0.5ex)},rotate=90] (0,0) ellipse (0.3ex and 0.15ex); %% mouth \draw[thick] (-1ex,-1ex)..controls(-0.5ex,-0.5ex)and(0.5ex,-0.5ex)..(1ex,-1ex); %% eyebrows \draw[thick] (0.2ex,1.15ex)--(0.5ex,1.6ex)(-0.2ex,1.15ex)--(-0.5ex,1.6ex); }%\emoticon } \def\RKlookup{% \emoticon{% %% pupils \fill[shift={( 0.5ex,1.05ex)},rotate= 80] (0,0) ellipse (0.2ex and 0.2ex); \fill[shift={(-0.5ex,1.05ex)},rotate=100] (0,0) ellipse (0.2ex and 0.2ex); %% mouth \draw[thick] (-1ex,-1ex)..controls(-0.5ex,-1.5ex)and(0.5ex,-1.5ex)..(1ex,-1ex); }%\emoticon } \def\RKlookdown{% \emoticon{% %% pupils \fill[shift={( 0.5ex,0.3ex)},rotate= 80] (0,0) ellipse (0.2ex and 0.2ex); \fill[shift={(-0.5ex,0.3ex)},rotate=100] (0,0) ellipse (0.2ex and 0.2ex); %% mouth \draw[thick] (-1ex,-1ex)..controls(-0.5ex,-1.5ex)and(0.5ex,-1.5ex)..(1ex,-1ex); }%\emoticon } \def\RKlookleft{% \emoticon{% %% pupils \fill[shift={( 0.25ex,0.5ex)},rotate=100] (0,0) ellipse (0.3ex and 0.15ex); \fill[shift={(-0.95ex,0.5ex)},rotate=100] (0,0) ellipse (0.3ex and 0.15ex); %% mouth \draw[thick] (-1ex,-1ex)..controls(-0.5ex,-1.5ex)and(0.5ex,-1.5ex)..(1ex,-1ex); }%\emoticon } \def\RKlookright{% \emoticon{% %% pupils \fill[shift={( 0.95ex,0.5ex)},rotate=80] (0,0) ellipse (0.3ex and 0.15ex); \fill[shift={(-0.25ex,0.5ex)},rotate=80] (0,0) ellipse (0.3ex and 0.15ex); %% mouth \draw[thick] (-1.0ex,-1ex)..controls(-0.5ex,-1.5ex)and(0.5ex,-1.5ex)..(1ex,-1ex); }%\emoticon } \def\RKblush{% \emoticon{% \pupils %% mouth \draw[thick] (-0.5ex,-1ex)..controls (-0.25ex,-1.25ex)and(0.25ex,-1.25ex)..(0.5ex,-1ex); %% blush \shade[shading=radial,inner color=white!50!red,outer color= yellow!80!orange] ( 1ex,-0.5ex) circle (0.4ex); \shade[shading=radial,inner color=white!50!red,outer color= yellow!80!orange] (-1ex,-0.5ex) circle (0.4ex); }%\emoticon } \def\RKalmostcrying{% \emoticon{% %% pupils \fill[shift={( 0.5ex,0.5ex)},rotate=105] (0,0) ellipse (0.3ex and 0.15ex); \fill[shift={(-0.5ex,0.5ex)},rotate= 75] (0,0) ellipse (0.3ex and 0.15ex); %% mouth \draw[thick] (-1ex,-1ex)..controls (-0.5ex,-0.8ex)and(0.5ex,-0.8ex)..(1ex,-1ex); }%\emoticon } \def\RKmartian{% \emoticon[inner color=white!50!green,outer color=green!70!red]{% \pupils %% mouth \draw[thick] (-1ex,-1ex)..controls (-0.5ex,-1.5ex)and(0.5ex,-1.5ex)..(1ex,-1ex); }%\emoticon } \def\RKdevilish{% \raisebox{-0.6ex}[0ex][0ex]{% \emoticon[inner color=white!50!red,outer color= red!70!red!90!black]{% \pupils %% mouth \draw[thick,line cap=round] (-1ex,-1ex)..controls (-0.5ex,-1.5ex)and(0.5ex,-1.5ex)..(1ex,-1ex); %% tail \draw[line width=0.45ex,-stealth,black] (emoticon.330)--++(330:0.01ex)..controls (3ex,-3ex)and(3.5ex,1ex)..(4.25ex,-3ex); \draw[line width=0.27ex,-stealth,red!90!black] (emoticon.330)--++(330:0.01ex)..controls (3ex,-3ex)and(3.5ex,1ex)..(4.22ex,-2.8ex); %% horns \draw[fill] (emoticon.80)..controls ( 0.6ex,2.4ex)..( 1ex,2.5ex)..controls ( 0.8ex,2.3ex)..(emoticon.70); \draw[fill] (emoticon.100)..controls (-0.6ex,2.4ex)..(-1ex,2.5ex)..controls (-0.8ex,2.3ex)..(emoticon.110); \draw[thick] (0,0) circle (2ex); }%\emoticon }%\raisebox } %%% % Bon de sortie %%% \newtcolorbox{Sortie}{% %Titre colbacktitle=white, fonttitle=\color{black}\Large\bfseries, toptitle=2mm, bottomtitle=2mm, title={Nom : \hfill Date : \hspace*{3cm}}, %%Cadre principal enhanced, nobeforeafter, width=13.15cm, height=8.8cm, colback=white, valign=top, %Cadre bas sidebyside, righthand width=0.05\linewidth, } \setKVdefault[ClesSortie]{MemeEnonce=false}% \newcommand\BonSortieSmiley{% \Huge \begin{center} \RKangry \vspace{1em} \RKsad \vspace{1em} \RKsmallsmile \vspace{1em} \RKbigsmile \end{center} } \newcommand\BonSortie[5][]{% \clearpage% \useKVdefault[ClesSortie]% \setKV[ClesSortie]{#1}% \begin{tikzpicture}[remember picture, overlay] \draw[dashed] (current page.north) to (current page.south); \draw[dashed] (current page.west) to (current page.east); \coordinate[xshift=7.425cm,yshift=-5.25cm] (A) at (current page.north west); \coordinate[xshift=-7.425cm,yshift=-5.25cm] (B) at (current page.north east); \coordinate[xshift=7.425cm,yshift=5.25cm] (C) at (current page.south west); \coordinate[xshift=-7.425cm,yshift=5.25cm] (D) at (current page.south east); \ifboolKV[ClesSortie]{MemeEnonce}{% \foreach\i\in in {A,B,C,D}{% \node (\i1) at (\i) {\begin{Sortie} #2 \tcblower \BonSortieSmiley \end{Sortie} }; } }{% \node (A1) at (A) {\begin{Sortie} #2 \tcblower \BonSortieSmiley \end{Sortie} }; \node (B1) at (B) {\begin{Sortie} #3 \tcblower \BonSortieSmiley \end{Sortie} }; \node (C1) at (C) {\begin{Sortie} #4 \tcblower \BonSortieSmiley \end{Sortie} }; \node (D1) at (D) {\begin{Sortie} #5 \tcblower \BonSortieSmiley \end{Sortie} }; } \end{tikzpicture} } %%% % Ecriture des nombres en lettres %%% \setKVdefault[ClesEcriture]{Math=false,Majuscule=false,E=false,Tradition=false,Zero=false} \newcommand\EcriturePluriel[1]{% \xintifboolexpr{#1 > 1}{s}{}% } \newcommand\EcritureDecimale{% \StrLen{\ListeEcriture[2]}[\LongueurDecimale]% \xintifboolexpr{\LongueurDecimale == 6}{% ~millionième\EcriturePluriel{\ListeEcriture[2]}% }{\xintifboolexpr{\LongueurDecimale == 5}{% ~cent-millième\EcriturePluriel{\ListeEcriture[2]} }{\xintifboolexpr{\LongueurDecimale == 4}{% ~dix-millième\EcriturePluriel{\ListeEcriture[2]} }{\xintifboolexpr{\LongueurDecimale == 3}{% ~millième\EcriturePluriel{\ListeEcriture[2]} }{\xintifboolexpr{\LongueurDecimale == 2}{% ~centième\EcriturePluriel{\ListeEcriture[2]} }{\xintifboolexpr{\LongueurDecimale == 1}{% ~dixième\EcriturePluriel{\ListeEcriture[2]} }{}% }% }% }% }% }% }% \newcommand\Ecriture[2][]{% \useKVdefault[ClesEcriture]% \setKV[ClesEcriture]{#1}% \ifboolKV[ClesEcriture]{Tradition}{% \fmtcountsetoptions{french={dash or space=traditional}}% }{% \fmtcountsetoptions{french={dash or space=always}}% }% \setsepchar{.}% \readlist*\ListeEcriture{#2}% \xintifboolexpr{\ListeEcriturelen == 2}{% \ifboolKV[ClesEcriture]{Majuscule}{% \ifboolKV[ClesEcriture]{Zero}{}{\Numberstringnum{\ListeEcriture[1]}}\ifboolKV[ClesEcriture]{Math}{\ifboolKV[ClesEcriture]{Zero}{}{\ifboolKV[ClesEcriture]{E}{e}{}~unité\EcriturePluriel{\ListeEcriture[1]} et }}{\ifboolKV[ClesEcriture]{Tradition}{ virgule }{-virgule-}}\numberstringnum{\ListeEcriture[2]}\ifboolKV[ClesEcriture]{Math}{\EcritureDecimale}{}% }{% \ifboolKV[ClesEcriture]{Zero}{}{\numberstringnum{\ListeEcriture[1]}}\ifboolKV[ClesEcriture]{Math}{\ifboolKV[ClesEcriture]{Zero}{}{\ifboolKV[ClesEcriture]{E}{e}{}~unité\EcriturePluriel{\ListeEcriture[1]} et }}{\ifboolKV[ClesEcriture]{Tradition}{ virgule }{-virgule-}}\numberstringnum{\ListeEcriture[2]}\ifboolKV[ClesEcriture]{Math}{\EcritureDecimale}{}% }}{% \ifboolKV[ClesEcriture]{Majuscule}{% \Numberstringnum{\ListeEcriture[1]}\ifboolKV[ClesEcriture]{Math}{\ifboolKV[ClesEcriture]{E}{e}{}~unité\EcriturePluriel{\ListeEcriture[1]}}{}% }{% \numberstringnum{\ListeEcriture[1]}\ifboolKV[ClesEcriture]{Math}{\ifboolKV[ClesEcriture]{E}{e}{}~unité\EcriturePluriel{\ListeEcriture[1]}}{}% } }% }% %%% % D\'ecomposition de fractions d\'ecimales %%% \setKVdefault[ClesFracDeci]{Complete=false,SansZero=false,Remediation=false} \newcommand\FractionDecimale[2][]{% \useKVdefault[ClesFracDeci]% \setKV[ClesFracDeci]{#1}% \setsepchar[*]{/}% \readlist*\ListeFractionDecimale{#2}% \xdef\FractionDeciNum{\ListeFractionDecimale[1]}% \xdef\FractionDeciDeno{\ListeFractionDecimale[2]}% \xdef\PartieEntiereFractionDeci{\fpeval{floor(\FractionDeciNum/\FractionDeciDeno)}}% \xdef\PartieDecimaleFractionDeci{\fpeval{\FractionDeciNum-floor(\FractionDeciNum/\FractionDeciDeno)*\FractionDeciDeno}}% \StrLen{\PartieDecimaleFractionDeci}[\LongueurPartieDecimale]% \StrLen{\fpeval{\FractionDeciDeno}}[\LongueurFracDeciDeno]% \StrLen{\fpeval{\FractionDeciNum}}[\LongueurFracDeciNum]% \xintifboolexpr{\PartieEntiereFractionDeci == 0}{\xdef\LongueurPartieEntiere{0}}{\StrLen{\PartieEntiereFractionDeci}[\LongueurPartieEntiere]}% \xintifboolexpr{\PartieEntiereFractionDeci == \fpeval{\FractionDeciNum/\FractionDeciDeno}}{% \ensuremath{\ifboolKV[ClesFracDeci]{Remediation}{\dots}{\num{\PartieEntiereFractionDeci}}}% }{% \ifboolKV[ClesFracDeci]{SansZero}{% \ensuremath{% \xintifboolexpr{\PartieEntiereFractionDeci == 0}{}{\ifboolKV[ClesFracDeci]{Remediation}{\dots}{\num{\PartieEntiereFractionDeci}}+}% \xintFor* ##1 in {\xintSeq{1}{\LongueurPartieDecimale}}\do{% \StrMid{\PartieDecimaleFractionDeci}{##1}{##1}[\ChiffrePartieDecimale]% \xintifForFirst{}{\xintifboolexpr{\ChiffrePartieDecimale == 0}{}{+}}\xintifboolexpr{\ChiffrePartieDecimale == 0}{}{\frac{\ifboolKV[ClesFracDeci]{Remediation}{\dots}{\num{\ChiffrePartieDecimale}}}{\num{\fpeval{10**(\LongueurFracDeciDeno-1-\LongueurPartieDecimale+##1)}}}}% }% }% }{% \ifboolKV[ClesFracDeci]{Complete}{% \xintifboolexpr{\FractionDeciNum>\FractionDeciDeno}{% \ensuremath{% % on affiche la partie entière. \xintifboolexpr{\PartieEntiereFractionDeci == 0}{}{\ifboolKV[ClesFracDeci]{Remediation}{\dots}{\num{\PartieEntiereFractionDeci}}+}% \StrGobbleLeft{\FractionDeciNum}{\fpeval{\LongueurPartieEntiere}}[\DecompositionFracDeciComplete]% % on affiche la partie décimale. \xintFor* ##1 in {\xintSeq{1}{\fpeval{\LongueurFracDeciNum-\LongueurPartieEntiere}}}\do{% \xintifForFirst{}{+}\StrMid{\DecompositionFracDeciComplete}{##1}{##1}[\ChiffrePartieDecimale]\frac{\ifboolKV[ClesFracDeci]{Remediation}{\dots}{\num{\ChiffrePartieDecimale}}}{\num{\fpeval{10**##1}}}% }% }% }{% \ensuremath{% \xintFor* ##1 in {\xintSeq{1}{\LongueurPartieDecimale}}\do{% \StrMid{\PartieDecimaleFractionDeci}{##1}{##1}[\ChiffrePartieDecimale]% \xintifForFirst{}{+}\frac{\ifboolKV[ClesFracDeci]{Remediation}{\dots}{\num{\ChiffrePartieDecimale}}}{\num{\fpeval{10**(\LongueurFracDeciDeno-1-\LongueurPartieDecimale+##1)}}}% }% }% }% }{% \ensuremath{% \xintifboolexpr{\PartieEntiereFractionDeci == 0}{}{\ifboolKV[ClesFracDeci]{Remediation}{\dots}{\num{\PartieEntiereFractionDeci}}+}\frac{\ifboolKV[ClesFracDeci]{Remediation}{\dots}{\num{\PartieDecimaleFractionDeci}}}{\num{\FractionDeciDeno}}% }% }% }% }% }% %%% % Pyramide de calculs %%% \newcommand\DessinePyramideNombre[1]{% \ifluatex \mplibforcehmode \begin{mplibcode} pair A[][],B[]; nbetages:=\useKV[ClesPyramide]{Etages}; largeur:=\useKV[ClesPyramide]{Largeur}; hauteur:=\useKV[ClesPyramide]{Hauteur}; Nbeb:=0;%Pour associer les textes avec les points. Plus facile :) if \useKV[ClesPyramide]{Double}: for k=nbetages downto 1: for l=0 upto (k-1): Nbeb:=Nbeb+1; A[k][l]=(0,0)+(nbetages-k)*(largeur/2,0)+(l*largeur,(nbetages-k)*hauteur); B[Nbeb]=A[k][l]; trace ((unitsquare xscaled largeur) yscaled hauteur) shifted (A[k][l]-0.5*(largeur,hauteur)); endfor; endfor; for k=nbetages-1 downto 1: for l=0 upto (k-1): Nbeb:=Nbeb+1; A[-k][l]=(0,0)+(nbetages-k)*(largeur/2,0)+(l*largeur,-(nbetages-k)*hauteur); B[Nbeb]=A[-k][l]; trace ((unitsquare xscaled largeur) yscaled hauteur) shifted (A[-k][l]-0.5*(largeur,hauteur)); endfor; endfor; else: if \useKV[ClesPyramide]{Inverse}: change:=-1; else: change=1; fi; for k=nbetages downto 1: for l=0 upto (k-1): Nbeb:=Nbeb+1; A[k][l]=(0,0)+(nbetages-k)*(largeur/2,0)+(l*largeur,change*(nbetages-k)*hauteur); B[Nbeb]=A[k][l]; trace ((unitsquare xscaled largeur) yscaled hauteur) shifted (A[k][l]-0.5*(largeur,hauteur)); endfor; endfor; fi; if \useKV[ClesPyramide]{Vide}: else: Nbeb:=0; for p_=#1: Nbeb:=Nbeb+1; label(TEX(""&p_&""),B[Nbeb]); endfor; fi; \end{mplibcode} \else \begin{mpost}[mpsettings={nbetages:=\useKV[ClesPyramide]{Etages};largeur:=\useKV[ClesPyramide]{Largeur};hauteur:=\useKV[ClesPyramide]{Hauteur};boolean Vide;Vide=\useKV[ClesPyramide]{Vide};boolean Inverse;Inverse=\useKV[ClesPyramide]{Inverse};}] pair A[][],B[]; Nbeb:=0; if Inverse: change:=-1; else: change=1; fi; for k=nbetages downto 1: for l=0 upto (k-1): Nbeb:=Nbeb+1; A[k][l]=(0,0)+(nbetages-k)*(largeur/2,0)+(l*largeur,change*(nbetages-k)*hauteur); B[Nbeb]=A[k][l]; trace ((unitsquare xscaled largeur) yscaled hauteur) shifted (A[k][l]-0.5(largeur,hauteur)); endfor; endfor; Nbeb:=0; if Vide: else: for p_=#1: Nbeb:=Nbeb+1; label(LATEX(""&p_&""),B[Nbeb]); endfor; fi; \end{mpost} \fi } \setKVdefault[ClesPyramide]{Etages=5,Largeur=2cm,Hauteur=1cm,Vide=false,Inverse=false,Double=false}% \newtoks\toklistecaseP% \def\UpdatetoksPyramide#1\nil{\addtotok\toklistecaseP{"#1",}}% \newcommand\PyramideNombre[2][]{% \useKVdefault[ClesPyramide]% \setKV[ClesPyramide]{#1}% \ifx\bla#2\bla% \setKV[ClesPyramide]{Vide=true}% \DessinePyramideNombre{\the\toklistecaseP}% \else% \setsepchar{,}% \readlist*\ListePyramide{#2}% \ifboolKV[ClesPyramide]{Double}{% \def\CalculNombreComposants{\fpeval{\useKV[ClesPyramide]{Etages}*\useKV[ClesPyramide]{Etages}}}% }{% \def\CalculNombreComposants{\fpeval{\useKV[ClesPyramide]{Etages}*(\useKV[ClesPyramide]{Etages}+1)/2}}% }% \xintifboolexpr{\ListePyramidelen==\CalculNombreComposants}{% \toklistecaseP{}% \foreachitem\compteur\in\ListePyramide{\expandafter\UpdatetoksPyramide\compteur\nil}% \DessinePyramideNombre{\the\toklistecaseP}% }{Le nombre d'éléments dans la liste des propositions n'est pas compatible avec le nombre d'étages choisi.}% \fi% }% %%% % Tables Addition-Multiplication %%% \setKVdefault[Tables]{Addition=false,Multiplication=true,Seul=false,Debut=0,Fin=10,Couleur=white} % pour m\'emoire \newcommand\TableMultiplicationComplete{% \xdef\NbColTabMul{\fpeval{\useKV[Tables]{Fin}+1-\useKV[Tables]{Debut}}}% \begin{tabular}{|>{\columncolor{gray!15}\centering\arraybackslash}p{1.5em}|*{\NbColTabMul}{>{\centering\arraybackslash}p{1.5em}|}}% \hline $\times$\xintFor* ##1 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{% &\cellcolor{gray!15}\fpeval{##1} } \\ \hline \xintFor* ##1 in {\xintSeq {0}{10}}\do{% ##1\xintFor* ##2 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{% &\fpeval{##2*##1} } \\ \hline } \end{tabular}% } %%%% \newcommand\TableMultiplicationCompleteColore{% \xdef\NbColTabMul{\fpeval{\useKV[Tables]{Fin}+1-\useKV[Tables]{Debut}}}% \begin{tabular}{|>{\columncolor{gray!15}\centering\arraybackslash}p{1.5em}|*{\NbColTabMul}{>{\centering\arraybackslash}p{1.5em}|}}% \hline $\times$\xintFor* ##1 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{% &\cellcolor{gray!15}\fpeval{##1} } \\ \hline \xintFor* ##1 in {\xintSeq {0}{10}}\do{% ##1\xintFor* ##2 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{% &\xintifboolexpr{##2<##1}{\cellcolor{\useKV[Tables]{Couleur}!\fpeval{##1*10}}}{\xintifboolexpr{##2>##1}{\cellcolor{\useKV[Tables]{Couleur}!\fpeval{##2*10}}}{}}\fpeval{##2*##1} } \\ \hline } \end{tabular}% } \newcommand\TableAdditionComplete{% \xdef\NbColTabMul{\fpeval{\useKV[Tables]{Fin}+1-\useKV[Tables]{Debut}}}% \begin{tabular}{|>{\columncolor{gray!15}\centering\arraybackslash}p{1.5em}|*{\NbColTabMul}{>{\centering\arraybackslash}p{1.5em}|}}% \hline $+$\xintFor* ##1 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{% &\cellcolor{gray!15}\fpeval{##1} } \\ \hline \xintFor* ##1 in {\xintSeq {0}{10}}\do{% ##1\xintFor* ##2 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{% &\fpeval{##2+##1} } \\ \hline } \end{tabular}% } \newcommand\TableMultiplicationSeule[1]{% \ensuremath{% \begin{array}{ccccc}% \xintFor* ##1 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{ ##1&\times&=&\fpeval{##1*#1}\\ } \end{array} }% }% \newcommand\TableAdditionSeule[1]{% \ensuremath{% \begin{array}{ccccc} \xintFor* ##1 in {\xintSeq {\useKV[Tables]{Debut}}{\useKV[Tables]{Fin}}}\do{ ##1&+&=&\fpeval{##1+#1}\\ } \end{array} }% }% \newcommand\Tables[2][]{% \useKVdefault[Tables]% \setKV[Tables]{#1}% \ifboolKV[Tables]{Seul}{% \ifboolKV[Tables]{Addition}{% \TableAdditionSeule{#2}% }{% \TableMultiplicationSeule{#2}% }% }{ \ifboolKV[Tables]{Addition}{% \TableAdditionComplete% }{% \TableMultiplicationCompleteColore% }% }% }% %%% % Rangement des nombres %%% \setKVdefault[ClesRgt]{Croissant,Decroissant=false,Strict,Fraction=false,Details=false} \dtlexpandnewvalue% \DTLgnewdb{mtnumedb}% \newcommand\Rangement[2][]{% \useKVdefault[ClesRgt]% \setKV[ClesRgt]{#1}% \ifboolKV[ClesRgt]{Fraction}{% \setsepchar[*]{,*/}\ignoreemptyitems% \readlist*\ListeRgt{#2}% % on cherche le d\'enominateur commun \ppcm=1\relax \foreachitem\x\in\ListeRgt{% \PPCM{\fpeval{\ListeRgt[\xcnt,2]}}{\fpeval{\the\ppcm}}% }%ok % On cr\'ee la liste des rangements. \DTLcleardb{mtnumedb}% % on les trie pour les ranger par ordre croissant \foreachitem\x\in\ListeRgt{% \DTLnewrow{mtnumedb}% \xdef\toto{\fpeval{\ListeRgt[\xcnt,1]*\the\ppcm/\ListeRgt[\xcnt,2]}}% \DTLnewdbentry{mtnumedb}{numeric}{\toto}% }% % On trie \ifboolKV[ClesRgt]{Decroissant}{% % On trie la liste \dtlsort{numeric=descending}{mtnumedb}{\dtlicompare}% \ifboolKV[ClesRgt]{Details}{\ensuremath{\DTLforeach{mtnumedb}{\numeroDonnee=numeric}{\frac{\num{\numeroDonnee}}{\num{\the\ppcm}}\DTLiflastrow{}{\ifboolKV[ClesRgt]{Strict}{>}{\geqslant}}}}}{% \ensuremath{\DTLforeach{mtnumedb}{\numeroDonnee=numeric}{\Simplification{\numeroDonnee}{\ppcm}\DTLiflastrow{}{\ifboolKV[ClesRgt]{Strict}{>}{\geqslant}}}}% } }{% % On trie la liste \dtlsort{numeric}{mtnumedb}{\dtlicompare}% \ifboolKV[ClesRgt]{Details}{% \ensuremath{\DTLforeach{mtnumedb}{\numeroDonnee=numeric}{\frac{\num{\numeroDonnee}}{\num{\the\ppcm}}\DTLiflastrow{}{\ifboolKV[ClesRgt]{Strict}{<}{\leqslant}}}}% }{% \ensuremath{\DTLforeach{mtnumedb}{\numeroDonnee=numeric}{\Simplification{\numeroDonnee}{\ppcm}\DTLiflastrow{}{\ifboolKV[ClesRgt]{Strict}{<}{\leqslant}}}}% } }% }{% \setsepchar{,}\ignoreemptyitems% \readlist*\ListeRgt{#2}% % on cr\'ee la base de donn\'ees des valeurs \DTLcleardb{mtdb}% % on les trie pour les ranger par ordre croissant \foreachitem\x\in\ListeRgt{% \DTLnewrow{mtdb}% \itemtomacro\ListeRgt[\xcnt]\y% \DTLnewdbentry{mtdb}{numeric}{\y}% }% % \ifboolKV[ClesRgt]{Decroissant}{% % On trie la liste \dtlsort{numeric=descending}{mtdb}{\dtlicompare}% \ensuremath{\DTLforeach{mtdb}{\numeroDonnee=numeric}{\num{\numeroDonnee}\DTLiflastrow{}{\ifboolKV[ClesRgt]{Strict}{>}{\geqslant}}}}% }{% % On trie la liste \dtlsort{numeric}{mtdb}{\dtlicompare}% \ensuremath{\DTLforeach{mtdb}{\numeroDonnee=numeric}{\num{\numeroDonnee}\DTLiflastrow{}{\ifboolKV[ClesRgt]{Strict}{<}{\leqslant}}}}% }% }% }% %%% % Mots Cod\'es %%% \setKVdefault[MotsCodes]{LargeurT=1cm,Colonnes=5,Largeur=3cm,Solution=false,Math=false}% \newcommand\MotsCodes[2][]{% \useKVdefault[MotsCodes]% \setKV[MotsCodes]{#1}% \setsepchar[*]{§*/}% \readlist*\ListeMotsCodes{#2}% \xdef\ListeMotsCodesPas{\fpeval{\ListeMotsCodeslen/\useKV[MotsCodes]{Colonnes}}} \begin{NiceTabular}{*{\fpeval{\useKV[MotsCodes]{Colonnes}}}{>{\centering\arraybackslash}m{\useKV[MotsCodes]{Largeur}}}} \xintFor* ##1 in {\xintSeq {1}{\ListeMotsCodesPas}}\do{% \xintFor* ##2 in {\xintSeq {1}{\fpeval{\useKV[MotsCodes]{Colonnes}}}}\do{% \xintifForFirst{}{&}\Block[draw=black]{4-1}{}% }\\ \xintFor* ##2 in {\xintSeq {1}{\fpeval{\useKV[MotsCodes]{Colonnes}}}}\do{% \xintifForFirst{}{&}\ListeMotsCodes[\fpeval{(##1-1)*\useKV[MotsCodes]{Colonnes}+##2},1] }\\ \xintFor* ##2 in {\xintSeq {1}{\fpeval{\useKV[MotsCodes]{Colonnes}}}}\do{% \xintifForFirst{}{&}% }\\ \xintFor* ##2 in {\xintSeq {1}{\fpeval{\useKV[MotsCodes]{Colonnes}}}}\do{% \xintifForFirst{}{&}\textbf{\Large\ListeMotsCodes[\fpeval{(##1-1)*\useKV[MotsCodes]{Colonnes}+##2},2]} }\\ }% \end{NiceTabular}% }% \newcommand\MotsCodesTableau[3][]{% \useKVdefault[MotsCodes]% \setKV[MotsCodes]{#1}% \setsepchar[*]{,*/} \readlist*\ListeMotsCodesTableau{#2}% \xdef\ListeMotsCodesMax{0}% \setsepchar{,}% \readlist*\ListeMotsCodesPhrase{#3}% \foreachitem\compteur\in\ListeMotsCodesTableau{% \xintifboolexpr{\ListeMotsCodesMax<\listlen\ListeMotsCodesTableau[\compteurcnt]}{\xdef\ListeMotsCodesMax{\fpeval{\listlen\ListeMotsCodesTableau[\compteurcnt]}}}{}% }% \begin{NiceTabular}{*{\fpeval{\ListeMotsCodesMax}}{>{\centering\arraybackslash}m{\useKV[MotsCodes]{LargeurT}}}} \xintFor* ##1 in {\xintSeq {1}{\fpeval{\ListeMotsCodesTableaulen}}}\do{% \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeMotsCodesTableau[##1]}}\do{% \xintifForFirst{}{&}\ifboolKV[MotsCodes]{Solution}{% \StrMid{\ListeMotsCodesPhrase[##1]}{##2}{##2}[\MotsCodesMaLettre]% \IfStrEq{\MotsCodesMaLettre}{*}{\Block[draw=black,fill=black]{3-1}{}}{\Block[draw=black]{3-1}{\StrMid{\ListeMotsCodesPhrase[##1]}{##2}{##2}}}% }{% \IfStrEq{\ListeMotsCodesTableau[##1,##2]}{*}{\Block[draw=black,fill=black]{3-1}{}}{\Block[draw=black]{3-1}{}}% }%% }\\ \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeMotsCodesTableau[##1]}}\do{% \xintifForFirst{}{&} }\\ \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeMotsCodesTableau[##1]}}\do{% \xintifForFirst{}{&}\IfStrEq{\ListeMotsCodesTableau[##1,##2]}{*}{}{\footnotesize\ifboolKV[MotsCodes]{Math}{\ListeMotsCodesTableau[##1,##2]}{\num{\ListeMotsCodesTableau[##1,##2]}}}% }\\ }% \end{NiceTabular}% }% %%% % Labyrinthe %%% \setKVdefault[Labyrinthe]{Lignes=6,Colonnes=3,Longueur=4,Hauteur=2,Passages=false,EcartH=1,EcartV=1,CouleurF=gray!50,Texte=\color{black},SensImpose=false,Slop} \tikzset{FDirect/.style={-stealth}} \tikzset{FIndirect/.style={stealth-}} \tikzset{FBidirect/.style={stealth-stealth}} \newcommand\Labyrinthe[3][]{% \useKVdefault[Labyrinthe]% \setKV[Labyrinthe]{#1}% \setsepchar[*]{,*/}% \readlist*\ListeLaby{#2}% \xdef\LabySlop{\ifboolKV[Labyrinthe]{Slop}{sloped}{}}% \ifboolKV[Labyrinthe]{Passages}{% \readlist*\ListeLabySol{#3}% }{}% \xdef\LabyLong{\useKV[Labyrinthe]{Longueur}}% \xdef\LabyHaut{\useKV[Labyrinthe]{Hauteur}}% \ifboolKV[Labyrinthe]{SensImpose}{% \xdef\TotalLaby{\fpeval{4*(\useKV[Labyrinthe]{Colonnes}-1)+1}}% }{% \xdef\TotalLaby{\fpeval{3*\useKV[Labyrinthe]{Colonnes}-2}}% }% \xdef\CouleurF{\useKV[Labyrinthe]{CouleurF}}% \xdef\MotifTexte{\noexpand\useKV[Labyrinthe]{Texte}}% \xintifboolexpr{\ListeLabylen==\fpeval{\useKV[Labyrinthe]{Lignes}*\useKV[Labyrinthe]{Colonnes}}}{% \begin{tikzpicture}[remember picture]% % % on dessine les cadres \foreach \compteurv in {1,...,\useKV[Labyrinthe]{Lignes}}{% \foreach \compteurh in {1,...,\useKV[Labyrinthe]{Colonnes}}{% \xdef\ColorFill{\ListeLaby[\fpeval{\useKV[Labyrinthe]{Colonnes}*(\compteurv-1)+\compteurh},2]}% \node[fill=\ColorFill,draw,minimum height=\LabyHaut*1cm,minimum width=\LabyLong*1cm,name=A-\compteurh-\compteurv] at (\fpeval{\LabyLong+\useKV[Labyrinthe]{EcartH}}*\compteurh,-\fpeval{\LabyHaut+\useKV[Labyrinthe]{EcartV}}*\compteurv) {\ListeLaby[\fpeval{\useKV[Labyrinthe]{Colonnes}*(\compteurv-1)+\compteurh},1]};% }% }% % fin des cadres % on dessine les fl\`eches \ifboolKV[Labyrinthe]{SensImpose}{% %verticales \foreach \compteurv in {1,...,\fpeval{\useKV[Labyrinthe]{Lignes}-1}}{% \foreach \compteurh in {1,...,\useKV[Labyrinthe]{Colonnes}}{% \ifboolKV[Labyrinthe]{Passages}{% \xdef\NomNode{\noexpand\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)},1]}% \xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)},2]>0}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)},2]==1}{\xdef\NomStyle{FDirect}}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)},2]==2}{\xdef\NomStyle{FIndirect}}{\xdef\NomStyle{FBidirect}}}% \draw[\CouleurF,line width=3pt,\NomStyle] (A-\compteurh-\compteurv) -- node[fill=white,midway,inner sep=2pt]{\MotifTexte\NomNode}(A-\compteurh-\fpeval{\compteurv+1});}{}% }{% \draw[\CouleurF,line width=3pt,FBidirect] (A-\compteurh-\compteurv) -- (A-\compteurh-\fpeval{\compteurv+1});% }% }% }% % % horizontales \foreach \compteurv in {1,...,\useKV[Labyrinthe]{Lignes}}{% \foreach \compteurh in {1,...,\fpeval{\useKV[Labyrinthe]{Colonnes}-1}}{% \ifboolKV[Labyrinthe]{Passages}{% \xdef\NomNode{\noexpand\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\compteurh},1]}% \xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\compteurh},2]>0}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\compteurh},2]==1}{\xdef\NomStyle{FDirect}}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\compteurh},2]==2}{\xdef\NomStyle{FIndirect}}{\xdef\NomStyle{FBidirect}}}% \draw[\CouleurF,line width=3pt,\NomStyle](A-\compteurh-\compteurv) -- node[fill=white,midway,\LabySlop,inner sep=2pt]{\MotifTexte\NomNode}(A-\fpeval{\compteurh+1}-\compteurv);}{} }{% \draw[\CouleurF,line width=3pt,FBidirect](A-\compteurh-\compteurv) -- (A-\fpeval{\compteurh+1}-\compteurv);% }% }% }% % % diagonales "inverses" \foreach \compteurv in {2,...,\fpeval{\useKV[Labyrinthe]{Lignes}}}{% \foreach \compteurh in {1,...,\fpeval{\useKV[Labyrinthe]{Colonnes}-1}}{% \ifboolKV[Labyrinthe]{Passages}{% \xdef\NomNode{\noexpand\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-2)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+2},1]}% \xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-2)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+2},2]>0}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-2)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+2},2]==1}{\xdef\NomStyle{FDirect}}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-2)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+2},2]==2}{\xdef\NomStyle{FIndirect}}{\xdef\NomStyle{FBidirect}}}% \draw[\CouleurF,line width=3pt,\NomStyle] (A-\compteurh-\compteurv) -- node[fill=white,near start,\LabySlop,inner sep=2pt]{\MotifTexte\NomNode}(A-\fpeval{\compteurh+1}-\fpeval{\compteurv-1}); }{} }{% \draw[\CouleurF,line width=3pt,FBidirect] (A-\compteurh-\compteurv) -- (A-\fpeval{\compteurh+1}-\fpeval{\compteurv-1}); }% }% }% %% % diagonales directes \foreach \compteurv in {1,...,\fpeval{\useKV[Labyrinthe]{Lignes}-1}}{% \foreach \compteurh in {1,...,\fpeval{\useKV[Labyrinthe]{Colonnes}-1}}{% \ifboolKV[Labyrinthe]{Passages}{% \xdef\NomNode{\noexpand\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+1},1]}% \xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+1},2]>0}{% \xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+1},2]==1}{\xdef\NomStyle{FDirect}}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+1},2]==2}{\xdef\NomStyle{FIndirect}}{\xdef\NomStyle{FBidirect}}} \draw[\CouleurF,line width=3pt,\NomStyle] (A-\compteurh-\compteurv) -- node[fill=white,near start,\LabySlop,inner sep=2pt]{\MotifTexte\NomNode}(A-\fpeval{\compteurh+1}-\fpeval{\compteurv+1}); }{}% }{% \draw[\CouleurF,line width=3pt,FBidirect] (A-\compteurh-\compteurv) -- node[fill=white,near start,\LabySlop]{\MotifTexte\NomNode}(A-\fpeval{\compteurh+1}-\fpeval{\compteurv+1}); }% }% }% }{% \foreach \compteurv in {1,...,\fpeval{\useKV[Labyrinthe]{Lignes}-1}}{% \foreach \compteurh in {1,...,\useKV[Labyrinthe]{Colonnes}}{% \ifboolKV[Labyrinthe]{Passages}{% \xdef\NomNode{\noexpand\ListeLabySol[1,\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+2*(\compteurh-1)}]}% \draw[\CouleurF,line width=3pt,stealth-stealth] (A-\compteurh-\compteurv) -- node[fill=white,midway]{\MotifTexte\NomNode}(A-\compteurh-\fpeval{\compteurv+1});% }{% \draw[\CouleurF,line width=3pt,stealth-stealth] (A-\compteurh-\compteurv) -- (A-\compteurh-\fpeval{\compteurv+1});% }% }% }% \foreach \compteurv in {1,...,\useKV[Labyrinthe]{Lignes}}{% \foreach \compteurh in {1,...,\fpeval{\useKV[Labyrinthe]{Colonnes}-1}}{% \ifboolKV[Labyrinthe]{Passages}{% \xdef\NomNode{\noexpand\ListeLabySol[1,\fpeval{\TotalLaby*(\compteurv-1)+\compteurh}]}% \draw[\CouleurF,line width=3pt,stealth-stealth] (A-\compteurh-\compteurv) -- node[fill=white,midway]{\MotifTexte\NomNode}(A-\fpeval{\compteurh+1}-\compteurv); }{% \draw[\CouleurF,line width=3pt,stealth-stealth] (A-\compteurh-\compteurv) -- (A-\fpeval{\compteurh+1}-\compteurv); }% } } \foreach \compteurv in {2,...,\fpeval{\useKV[Labyrinthe]{Lignes}}}{% \foreach \compteurh in {1,...,\fpeval{\useKV[Labyrinthe]{Colonnes}-1}}{% \draw[\CouleurF,line width=3pt,stealth-stealth] (A-\compteurh-\compteurv) -- (A-\fpeval{\compteurh+1}-\fpeval{\compteurv-1}); } } \foreach \compteurv in {1,...,\fpeval{\useKV[Labyrinthe]{Lignes}-1}}{% \foreach \compteurh in {1,...,\fpeval{\useKV[Labyrinthe]{Colonnes}-1}}{% \ifboolKV[Labyrinthe]{Passages}{% \xdef\NomNode{\noexpand\ListeLabySol[1,\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+2*(\compteurh-1)+1}]}% \draw[\CouleurF,line width=3pt,stealth-stealth] (A-\compteurh-\compteurv) -- node[fill=white,midway]{\MotifTexte\NomNode}(A-\fpeval{\compteurh+1}-\fpeval{\compteurv+1}); }{% \draw[\CouleurF,line width=3pt,stealth-stealth] (A-\compteurh-\compteurv) -- (A-\fpeval{\compteurh+1}-\fpeval{\compteurv+1}); }% }% }% % % fin des fl\`eches } \end{tikzpicture} }{ \textbf{! Le nombre d'informations n'est pas compatible avec les d\'efinitions de {\ttfamily Colonnes} et {\ttfamily Lignes} !}}% } %%% % Labyrinthe Nombre %%% \setKVdefault[ClesLabyNombre]{Multiple=5,XDepart=0,YDepart=0,Longueur=7,Largeur=4,XArrivee=6,YArrivee=3,Solution=false,Echelle=1,Angle=0,Couleur=red,Murs=false} \newcommand\LabyNombre[1][]{% \useKVdefault[ClesLabyNombre]% \setKV[ClesLabyNombre]{#1}% \ifboolKV[ClesLabyNombre]{Solution}{% \TraceSolution{\useKV[ClesLabyNombre]{Multiple}}{\useKV[ClesLabyNombre]{Longueur}}{\useKV[ClesLabyNombre]{Largeur}}{(\useKV[ClesLabyNombre]{YDepart},\useKV[ClesLabyNombre]{XDepart})}{(\useKV[ClesLabyNombre]{YArrivee},\useKV[ClesLabyNombre]{XArrivee})}{\useKV[ClesLabyNombre]{Solution}} }{% \TraceLabyNombre{\useKV[ClesLabyNombre]{Multiple}}{\useKV[ClesLabyNombre]{Longueur}}{\useKV[ClesLabyNombre]{Largeur}}{(\useKV[ClesLabyNombre]{YDepart},\useKV[ClesLabyNombre]{XDepart})}{(\useKV[ClesLabyNombre]{YArrivee},\useKV[ClesLabyNombre]{XArrivee})}{\useKV[ClesLabyNombre]{Solution}} }% } \newcommand\TraceLabyNombre[6]{% \mplibforcehmode% \mplibcodeinherit{enable}%\xintifboolexpr{#6==false}{\mplibcodeinherit{enable}}{} \begin{mplibcode} input PfCLabyNombre; boolean Murs; Murs=\useKV[ClesLabyNombre]{Murs}; numeric Multiple; Multiple=#1; % Initialisation du labyrinthe InitialisationLabyrinthe(#2,#3); % On initialise les paramètres du parcours numeric choixligneD,choixligneA,choixcolonneD,choixcolonneA; choixligneD=xpart(#4); choixcolonneD=ypart(#4); choixligneA=xpart(#5); choixcolonneA=ypart(#5);% pair Depart; Depart=N[choixligneD][choixcolonneD]; pair Arrivee; Arrivee=N[choixligneA][choixcolonneA]; pair Mobile; Mobile=Depart; RAZPileChemin; % Exploration du labyrinthe PushChemin((choixligneD,choixcolonneD)); CaseExploree[choixligneD][choixcolonneD]:=true; VoisinDispo(choixligneD,choixcolonneD); forever: exitif Mobile=Arrivee;%nb=0; nb:=ceiling(uniformdeviate(nbvoisin)); if nb>0: for k=1 upto nbvoisin: CaseExploree[xpart(PileVoisin[k])][ypart(PileVoisin[k])]:=true; endfor; PushChemin((xpart(PileVoisin[nb]),ypart(PileVoisin[nb]))); Mobile:=N[xpart(PileChemin[indiceChemin])][ypart(PileChemin[indiceChemin])]; VoisinDispo(xpart(PileChemin[indiceChemin]),ypart(PileChemin[indiceChemin])); else: PopChemin; fi; endfor; % Affichagefinal % on sauvegarde les nombres aléatoires numeric NbAffiche[]; numeric NbSol[]; % on écrit des nombres au hasard, mais sans être multiple du nombre choisi numeric nbaffiche; nbaffiche=0; for k=0 upto LargeurLaby-1: for l=0 upto LongueurLaby-1: nbaffiche:=nbaffiche+1; NbAffiche[nbaffiche]:=(50+ceiling(uniformdeviate(100)))*Multiple+ceiling(uniformdeviate(Multiple-1)); endfor; endfor; % On crée des multiples du nombre choisi for k=2 upto indiceChemin-1: NbSol[k]=(50+ceiling(uniformdeviate(100)))*Multiple; endfor; % On affiche picture Corps; Corps=image( nbaffiche:=0; for k=0 upto LargeurLaby-1: for l=0 upto LongueurLaby-1: nbaffiche:=nbaffiche+1; label(TEX("\num{"&decimal(NbAffiche[nbaffiche])&"}"),M[k][l]); endfor; endfor; remplis ((unitsquare scaled 10mm) shifted N[choixligneD][choixcolonneD]) withcolor \useKV[ClesLabyNombre]{Couleur}; remplis ((unitsquare scaled 10mm) shifted Arrivee) withcolor \useKV[ClesLabyNombre]{Couleur}; for k=2 upto indiceChemin-1: remplis ((unitsquare scaled 10mm) shifted N[xpart(PileChemin[k])][ypart(PileChemin[k])]) withcolor white; label(TEX("\num{"&decimal(NbSol[k])&"}"),M[xpart(PileChemin[k])][ypart(PileChemin[k])]); endfor; trace TraceLabyrinthe; ); Corps:=(Corps scaled \useKV[ClesLabyNombre]{Echelle}) rotated \useKV[ClesLabyNombre]{Angle}; trace Corps; \end{mplibcode} } \newcommand\TraceSolution[6]{% \mplibforcehmode% \begin{mplibcode} picture CorpsSolution; CorpsSolution=image( nbaffiche:=0; for k=0 upto #3-1: for l=0 upto #2-1: nbaffiche:=nbaffiche+1; label(TEX("\num{"&decimal(NbAffiche[nbaffiche])&"}"),M[k][l]); endfor; endfor; remplis ((unitsquare scaled 10mm) shifted N[choixligneD][choixcolonneD]) withcolor \useKV[ClesLabyNombre]{Couleur}; remplis ((unitsquare scaled 10mm) shifted Arrivee) withcolor \useKV[ClesLabyNombre]{Couleur}; for k=2 upto indiceChemin-1: remplis ((unitsquare scaled 10mm) shifted N[xpart(PileChemin[k])][ypart(PileChemin[k])]) withcolor 0.5white; label(TEX("\num{"&decimal(NbSol[k])&"}"),M[xpart(PileChemin[k])][ypart(PileChemin[k])]); endfor; trace TraceLabyrinthe; ); CorpsSolution:=(CorpsSolution scaled \useKV[ClesLabyNombre]{Echelle}) rotated \useKV[ClesLabyNombre]{Angle}; trace CorpsSolution; \end{mplibcode} \mplibcodeinherit{disable} }% %%% % Mots empilés %%% \setKVdefault[ClesMotEmpile]{Colonne=4,Solution=false,Couleur=black} \newcounter{CompteurMotEmpile} \newcommand\MotsEmpiles[2][]{% \useKVdefault[ClesMotEmpile]% \setKV[ClesMotEmpile]{#1}% \setcounter{CompteurMotEmpile}{0}% \setsepchar[*]{,*/}% \readlist*\ListeMotsEmpiles{#2} \xdef\ListeMotsEmpilesMax{0}% \colorlet{MotEmpileCouleur}{\useKV[ClesMotEmpile]{Couleur}}% \foreachitem\compteur\in\ListeMotsEmpiles{% \StrLen{\ListeMotsEmpiles[\compteurcnt,2]}[\LongueurMot]% \xintifboolexpr{\ListeMotsEmpilesMax<\fpeval{\ListeMotsEmpiles[\compteurcnt,1]+\LongueurMot}}{\xdef\ListeMotsEmpilesMax{\fpeval{\ListeMotsEmpiles[\compteurcnt,1]+\LongueurMot}}}{}% }% \begin{NiceTabular}{c|*{\fpeval{\ListeMotsEmpilesMax}}{m{0.5em}}} \Block{1-\fpeval{\useKV[ClesMotEmpile]{Colonne}+2}}{}\xintFor* ##1 in {\xintSeq {1}{\fpeval{\useKV[ClesMotEmpile]{Colonne}}}}\do{&}&$\downarrow$\xintFor* ##1 in {\xintSeq {1}{\fpeval{\ListeMotsEmpilesMax-\useKV[ClesMotEmpile]{Colonne}-1}}}\do{&}\\ \xintFor* ##1 in {\xintSeq {1}{\fpeval{\ListeMotsEmpileslen}}}\do{% \rule[-1.2ex]{0pt}{3.8ex}\stepcounter{CompteurMotEmpile}\Alph{CompteurMotEmpile}&\Block{1-\fpeval{\ListeMotsEmpiles[##1,1]}}{}\xintFor* ##2 in {\xintSeq {1}{\fpeval{\ListeMotsEmpiles[##1,1]}}}\do{% & }% \StrLen{\ListeMotsEmpiles[##1,2]}[\LongueurMot]% \xintFor* ##3 in {\xintSeq {1}{\fpeval{\LongueurMot}}}\do{% \xintifForFirst{}{&}\Block[draw=black]{1-1}{\ifboolKV[ClesMotEmpile]{Solution}{\centering\arraybackslash\StrMid{\ListeMotsEmpiles[##1,2]}{##3}{##3}}{}}%% } \\ }% \CodeAfter\tikz\draw[line width=1.5pt,MotEmpileCouleur](row-2-|col-\fpeval{\useKV[ClesMotEmpile]{Colonne}+2}) rectangle (row-\fpeval{\ListeMotsEmpileslen+2}-|col-\fpeval{\useKV[ClesMotEmpile]{Colonne}+3}); \end{NiceTabular} }% %%% % Colorilude %%% \setKVdefault[Colorilude]{Largeur=10,Lignes=10,Legende=false,Coef=0.6,Solution=false} \newcommand{\dispogpfc}[3][]{% \setbox1=\hbox{#2}% \setbox2=\hbox{#3}% \begin{minipage}{\wd2}% #3% \end{minipage}% \quad% \begin{minipage}{\wd1}% #2% \end{minipage}% }% \newcommand\TraceEchiquierColorilude{% \ifluatex \begin{mplibcode} pair A,B,C,D;%pour la grille A=(0,0); B-A=u*\useKV[Colorilude]{Coef}*(\useKV[Colorilude]{Largeur},0); C-B=u*\useKV[Colorilude]{Coef}*(0,-\useKV[Colorilude]{Lignes}); D-C=A-B; nblargeur=\useKV[Colorilude]{Largeur}; nblignes=\useKV[Colorilude]{Lignes}; for k=1 upto nblargeur-1: draw (k/nblargeur)[A,B]--(k/nblargeur)[D,C]; endfor; for k=1 upto nblignes-1: draw (k/nblignes)[A,D]--(k/nblignes)[B,C]; endfor; draw polygone(A,B,C,D) withpen pensquare scaled 1.5; if \useKV[Colorilude]{Legende}: label.lrt(btex \tiny d'après APMEP etex rotated 90,B); fi; \end{mplibcode} \else \begin{mpost}[mpsettings={boolean Legende; Legende=\useKV[Colorilude]{Legende}; nblargeur:=\useKV[Colorilude]{Largeur}; nblignes:=\useKV[Colorilude]{Lignes}; coef:=\useKV[Colorilude]{Coef};}] pair A,B,C,D;%pour la grille A=(0,0); B-A=u*coef*(nblargeur,0); C-B=u*coef*(0,-nblignes); D-C=A-B; for k=1 upto nblargeur-1: draw (k/nblargeur)[A,B]--(k/nblargeur)[D,C]; endfor; for k=1 upto nblignes-1: draw (k/nblignes)[A,D]--(k/nblignes)[B,C]; endfor; draw polygone(A,B,C,D) withpen pensquare scaled 1.5; if Legende: label.lrt(\btex \tiny d'après APMEP etex rotated 90,B); fi; \end{mpost} \fi }% \newcommand\TraceEchiquierColoreColorilude{% \ifluatex% \mplibforcehmode% \begin{mplibcode} pair A,B,C,D;%pour la grille A=(0,0); B-A=u*\useKV[Colorilude]{Coef}*(\useKV[Colorilude]{Largeur},0); C-B=u*\useKV[Colorilude]{Coef}*(0,-\useKV[Colorilude]{Lignes}); D-C=A-B; numeric nblargeur,nblignes; nblargeur:=\useKV[Colorilude]{Largeur}; nblignes:=\useKV[Colorilude]{Lignes}; % on récupère les données de coloriage numeric n; n:=0; numeric nbCases[]; color ColorSucc[]; for p_=\the\toklisteremplissage: n:=n+1; if (n mod 2)=0: nbCases[n div 2]:=p_; else: ColorSucc[n div 2]:=p_; fi; endfor; % on colorie :) numeric NBCASES; NBCASES:=0; for l=1 upto (n div 2): fill ((unitsquare xscaled (\useKV[Colorilude]{Coef}*u*nbCases[l]) yscaled (\useKV[Colorilude]{Coef}*u)) shifted(\useKV[Colorilude]{Coef}*u*(NBCASES mod nblargeur,-1-(NBCASES div nblargeur)))) withcolor ColorSucc[l-1]; NBCASES:=NBCASES+nbCases[l]; endfor; % on trace le quadrillage for k=1 upto nblargeur-1: draw (k/nblargeur)[A,B]--(k/nblargeur)[D,C]; endfor; for k=1 upto nblignes-1: draw (k/nblignes)[A,D]--(k/nblignes)[B,C]; endfor; draw polygone(A,B,C,D) withpen pensquare scaled 1.5; if \useKV[Colorilude]{Legende}: label.lrt(btex \tiny d'après APMEP etex rotated 90,B); fi; \end{mplibcode} \else \begin{mpost}[mpsettings={boolean Legende; Legende=\useKV[Colorilude]{Legende}; nblargeur:=\useKV[Colorilude]{Largeur}; nblignes:=\useKV[Colorilude]{Lignes}; coef:=\useKV[Colorilude]{Coef}; numeric n; n:=0; numeric nbCases[]; color ColorSucc[]; for p_=\the\toklisteremplissage: n:=n+1; if (n mod 2)=0: nbCases[n div 2]:=p_; else: ColorSucc[n div 2]:=p_; fi; endfor; }] pair A,B,C,D;%pour la grille A=(0,0); B-A=u*coef*(nblargeur,0); C-B=u*coef*(0,-nblignes); D-C=A-B; % on colorie :) numeric NBCASES; NBCASES:=0; for l=1 upto (n div 2): fill ((unitsquare xscaled (coef*u*nbCases[l]) yscaled (coef*u)) shifted(coef*u*(NBCASES mod nblargeur,-1-(NBCASES div nblargeur)))) withcolor ColorSucc[l-1]; NBCASES:=NBCASES+nbCases[l]; endfor; % on trace le quadrillage for k=1 upto nblargeur-1: draw (k/nblargeur)[A,B]--(k/nblargeur)[D,C]; endfor; for k=1 upto nblignes-1: draw (k/nblignes)[A,D]--(k/nblignes)[B,C]; endfor; draw polygone(A,B,C,D) withpen pensquare scaled 1.5; if Legende: label.lrt(\btex \tiny d'après APMEP etex rotated 90,B); fi; \end{mpost} \fi }% \newtoks\toklisteremplissage% \toklisteremplissage{}% \def\UpdateRemplissage#1\nil{\addtotok\toklisteremplissage{#1,}}% \newcommand\ColoriludeEnonce{% Pour chaque ligne de la grille, colorie de gauche à droite, de la couleur indiquée, le nombre de cases donné par le résultat du calcul. }% \newcommand\ColoriludeListeCouleur[1]{% \setsepchar{ }% \readlist\ListeColoriludeCouleurs{#1}% \foreachitem\compteur\in\ListeColoriludeCouleurs{% \ifodd\compteurcnt\fbox{\begin{minipage}{1em}\centering\text{\ttfamily\bfseries\compteur}\end{minipage}}~\else\compteur\quad\fi% }% }% \newcommand\Colorilude[2][]{% \useKVdefault[Colorilude]% \setKV[Colorilude]{#1}% \setsepchar{\\/ }% \readlist\ListeColorilude{#2}% \ifboolKV[Colorilude]{Solution}{% \toklisteremplissage{}% \foreachitem\compteur\in\ListeColorilude{% \foreachitem\couleur\in\ListeColorilude[\compteurcnt]{% \expandafter\UpdateRemplissage\couleur\nil}% }% \TraceEchiquierColoreColorilude% }{% \dispogpfc{% \TraceEchiquierColorilude% }{% % On cherche le nombre max de colonnes \xdef\ListeColoriludeMax{0}% \xintFor* ##1 in {\xintSeq {1}{\ListeColoriludelen}}\do{% \xintifboolexpr{\listlen\ListeColorilude[##1]>\ListeColoriludeMax}{% \xdef\ListeColoriludeMax{\listlen\ListeColorilude[##1]}% }{}% }% % % On affiche le tableau \setlength{\tabcolsep}{0.2\tabcolsep}% \begin{NiceTabular}{*{\fpeval{\ListeColoriludeMax/2}}{rl}}% \xintFor* ##1 in {\xintSeq {1}{\ListeColoriludelen}}\do{% \xintifboolexpr{\listlen\ListeColorilude[##1]==\ListeColoriludeMax}{% \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeColorilude[##1]}}\do{% \xintifForFirst{}{&~}\ifodd##2\fbox{\begin{minipage}{1em}\centering\text{\ttfamily\bfseries\ListeColorilude[##1,##2]}\end{minipage}}~\else$\ListeColorilude[##1,##2]$\fi% }% }{% \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeColorilude[##1]}}\do{% \xintifForFirst{}{&~}\ifodd##2\fbox{\begin{minipage}{1em}\centering\text{\ttfamily\bfseries\ListeColorilude[##1,##2]}\end{minipage}}~\else$\ListeColorilude[##1,##2]$\fi% }% &\hbox to1em{~}&\Cdots% }% \\[0.5em]% }% \end{NiceTabular}% }% }% }% %%% % Mosaique %%% \setKVdefault[ClesMosaique]{Largeur=2,Hauteur=2,Solution=false,Type=1,Label,Echelle=1cm} \newcommand\DessineMosaique[2][]{% \useKVdefault[ClesMosaique]% \setKV[ClesMosaique]{#1}% \ifluatex% \mplibforcehmode% \begin{mplibcode} u:=\useKV[ClesMosaique]{Echelle}; Type:=\useKV[ClesMosaique]{Type}; input PfCMosaique; trace if Type=1:MosaiqueUn[#2] elseif Type=2: MosaiqueDeux[#2] fi; \end{mplibcode}% \else% \begin{mpost}[mpsettings={u:=\useKV[ClesMosaique]{Echelle};Type:=\useKV[ClesMosaique]{Type};}]% input PfCMosaique; trace if Type=1:MosaiqueUn[#2] elseif Type=2: MosaiqueDeux[#2] fi; \end{mpost}% \fi% }% \newcommand\DessineMosaiqueComplet[1]{% \ifluatex \mplibforcehmode \begin{mplibcode} input PfCMosaique; Largeur=\useKV[ClesMosaique]{Largeur}; Hauteur=\useKV[ClesMosaique]{Hauteur}; Type=\useKV[ClesMosaique]{Type}; boolean Solution,Label; Solution=\useKV[ClesMosaique]{Solution}; Label=\useKV[ClesMosaique]{Label}; pair A,B,C,D; A=u*(0,1); B-A=u*(Largeur,0); C-B=u*(0,-Hauteur); D-C=A-B; picture mosaique; path case; case=unitsquare scaled 1cm; if Type=1: mosaique=image( trace case withcolor 0.5white; trace (point(0) of case)--(point(2) of case) withcolor 0.75white; trace (point(1) of case)--(point(3) of case) withcolor 0.75white; trace (point(0.5) of case)--(point(2.5) of case) withcolor 0.75white; trace (point(1.5) of case)--(point(3.5) of case) withcolor 0.75white; ); else: mosaique=image( trace case withcolor 0.5white; trace (point(0.5) of case)--(point(2.5) of case) withcolor 0.75white; trace (point(1.5) of case)--(point(3.5) of case) withcolor 0.75white; trace (point(0.5) of case)--(point(1.5) of case)--(point(2.5) of case)--(point(3.5) of case)--cycle withcolor 0.75white; ); fi; if Solution: nbmos:=0; for p_=#1: trace if Type=1:MosaiqueUn[xpart(p_)] else: MosaiqueDeux[xpart(p_)] fi shifted(u*(nbmos mod Largeur,-(nbmos div Largeur))); nbmos:=nbmos+1; endfor; else: nbmos:=0; for p_=#1: trace mosaique shifted(u*(nbmos mod Largeur,-(nbmos div Largeur))); if Label: label(TEX("\num{"&decimal(ypart(p_))&"}"),center (mosaique shifted(u*(nbmos mod Largeur,-(nbmos div Largeur))))); fi; nbmos:=nbmos+1; endfor; fi; trace polygone(A,B,C,D); \end{mplibcode} \else \begin{mpost}[mpsettings={Largeur=\useKV[ClesMosaique]{Largeur};Hauteur=\useKV[ClesMosaique]{Hauteur};Type=\useKV[ClesMosaique]{Type};boolean Solution,Label;Solution=\useKV[ClesMosaique]{Solution};}] Label=\useKV[ClesMosaique]{Label}; input PfCMosaique; pair A,B,C,D; A=u*(0,1); B-A=u*(Largeur,0); C-B=u*(0,-Hauteur); D-C=A-B; picture mosaique; path case; case=unitsquare scaled 1cm; if Type=1: mosaique=image( trace case withcolor 0.5white; trace (point(0) of case)--(point(2) of case) withcolor 0.75white; trace (point(1) of case)--(point(3) of case) withcolor 0.75white; trace (point(0.5) of case)--(point(2.5) of case) withcolor 0.75white; trace (point(1.5) of case)--(point(3.5) of case) withcolor 0.75white; ); else: mosaique=image( trace case withcolor 0.5white; trace (point(0.5) of case)--(point(2.5) of case) withcolor 0.75white; trace (point(1.5) of case)--(point(3.5) of case) withcolor 0.75white; trace (point(0.5) of case)--(point(1.5) of case)--(point(2.5) of case)--(point(3.5) of case)--cycle withcolor 0.75white; ); fi; if Solution: nbmos:=0; for p_=#1: trace if Type=1:MosaiqueUn[xpart(p_)] else: MosaiqueDeux[xpart(p_)] fi shifted(u*(nbmos mod Largeur,-(nbmos div Largeur))); nbmos:=nbmos+1; endfor; else: nbmos:=0; for p_=#1: trace mosaique shifted(u*(nbmos mod Largeur,-(nbmos div Largeur))); if Label: label(LATEX("\num{"&decimal(ypart(p_))&"}"),center (mosaique shifted(u*(nbmos mod Largeur,-(nbmos div Largeur))))); fi; nbmos:=nbmos+1; endfor; fi; trace polygone(A,B,C,D); \end{mpost} \fi }% \newtoks\toklistecaseM% \def\UpdatetoksMosaique#1/#2\nil{\addtotok\toklistecaseM{(#1,#2),}}% \newcommand\Mosaique[2][]{% \useKVdefault[ClesMosaique]% \setKV[ClesMosaique]{#1}% \setsepchar[*]{,*/}% \readlist*\ListeMosaique{#2}% \toklistecaseM{}% \foreachitem\compteur\in\ListeMosaique{\expandafter\UpdatetoksMosaique\compteur\nil}% \DessineMosaiqueComplet{\the\toklistecaseM}% }% %%% % Qui suis-je %%% \setKVdefault[Quisuisje]{Solution=false,Largeur=5mm,Colonnes=5,CodePerso=false}% \newcommand\QuisuisjeEnonce{% Chaque lettre du mot à découvrir porte un numéro qui correspond à un calcul à effectuer. Pour trouver les lettres de ce mot, tu dois donc effectuer les calculs proposés. Les résultats que tu auras trouvés te donneront, à l'aide du tableau de correspondance ci-dessous, les lettres du mot. }% \newcommand\QuisuisjeTableau[2][]{% \setKV[Quisuisje]{#1}% \setsepchar[*]{§*/}\ignoreemptyitems% \readlist*\ListeQuisuisje{#2}% \begin{NiceTabular}{|l|*{\ListeQuisuisjelen}{m{\useKV[Quisuisje]{Largeur}}|}}% \hline Lettre\xintFor* ##1 in {\xintSeq {1}{\ListeQuisuisjelen}}\do{% &\centering\arraybackslash\ListeQuisuisje[##1,1] }\\ \hline R\'esultat du calcul\xintFor* ##1 in {\xintSeq {1}{\ListeQuisuisjelen}}\do{% &\centering\arraybackslash\ListeQuisuisje[##1,2] }\\ \hline \end{NiceTabular}% }% \newcommand\QuisuisjeCodePerso[3][]{% \setKV[Quisuisje]{#1}% \setsepchar{ }% \readlist*\ListeQuisuisjeCode{#2}% \readlist*\ListeQuisuisjeLettres{#3}% \par\hfill% \begin{NiceTabular}{|*{\ListeQuisuisjeLettreslen}{m{7mm}|}} \hline \xintFor* ##1 in {\xintSeq {1}{\ListeQuisuisjeLettreslen}}\do{% \xintifForFirst{}{&}\ifboolKV[Quisuisje]{Solution}{\hfill\ListeQuisuisjeLettres[##1]}{\phantom{1}} }\\ \xintFor* ##1 in {\xintSeq {1}{\ListeQuisuisjeLettreslen}}\do{% \xintifForFirst{}{&}\tiny\ListeQuisuisjeCode[##1]% }\\ \hline \end{NiceTabular}% }% \newcommand\Quisuisje[3][]{% \useKVdefault[Quisuisje]% \setKV[Quisuisje]{#1}% \ifboolKV[Quisuisje]{CodePerso}{}{% \setsepchar{ }% \readlist\ListeLettres{#3}% }% \setsepchar{§}% \readlist\ListeCalculs{#2}% \ifboolKV[Quisuisje]{CodePerso}{}{% \par\hfill% \begin{NiceTabular}{|*{\ListeLettreslen}{m{7mm}|}} \hline \xintFor* ##1 in {\xintSeq {1}{\ListeLettreslen}}\do{% \xintifForFirst{}{&} \ifboolKV[Quisuisje]{Solution}{\hfill\ListeLettres[##1]}{\phantom{1}} }\\ \xintFor* ##1 in {\xintSeq {1}{\ListeLettreslen}}\do{% \xintifForFirst{}{&}\tiny\num{##1}% }\\ \hline \end{NiceTabular}% }% \par\bigskip\par \ifboolKV[Quisuisje]{Solution}{}{% \begin{multicols}{\useKV[Quisuisje]{Colonnes}}% \begin{enumerate} \xintFor* ##1 in {\xintSeq {1}{\ListeCalculslen}}\do{% \item\ListeCalculs[##1] } \end{enumerate}% \end{multicols}% }% }% %%% % Dessin Gradue %%% \setKVdefault[DessinGradue]{Lignes=10,Debut=-5,Fin=5,Pas=10,Solution=false,EcartVertical=1.5,LignesIdentiques,Longueur=10,Echelle=1} \def\TraceDessinGradue#1#2#3#4{% \ifluatex \mplibforcehmode \begin{mplibcode} pair La,Lb,Lab[]; La=(0,0); Lb-La=u*(\useKV[DessinGradue]{Longueur},0); for k=0 upto #4: Lab[k]=(k/#4)[La,Lb]; endfor; picture EnsembleLignes,Lignes; Lignes=image( trace segment(La,Lb); for k=0 upto #4: trace (Lab[k]+u*(0,-0.1))--(Lab[k]+u*(0,0.1)); endfor; labeloffset:=labeloffset*1.5; label.top(TEX("\num{"&decimal(#2)&"}"),La); label.top(TEX("\num{"&decimal(#3)&"}"),Lb); labeloffset:=labeloffset/1.5; ); EnsembleLignes=image( for k=0 upto #1-1: trace Lignes shifted(k*u*(0,-\useKV[DessinGradue]{EcartVertical})); label(TEX("(\num{"&decimal(k+1)&"})"),La+u*(-1.5,-k*\useKV[DessinGradue]{EcartVertical})); endfor; ); trace EnsembleLignes scaled \useKV[DessinGradue]{Echelle}; \end{mplibcode} \else \begin{mpost}[mpsettings={numeric LongueurLigne; LongueurLigne=\useKV[DessinGradue]{Longueur};numeric EcartVertical; EcartVertical=\useKV[DessinGradue]{EcartVertical}; numeric Echelle; Echelle=\useKV[DessinGradue]{Echelle};}] pair La,Lb,Lab[]; La=(0,0); Lb-La=u*(LongueurLigne,0); for k=0 upto #4: Lab[k]=(k/#4)[La,Lb]; endfor; picture EnsembleLignes,Lignes; Lignes=image( trace segment(La,Lb); for k=0 upto #4: trace (Lab[k]+u*(0,-0.1))--(Lab[k]+u*(0,0.1)); endfor; labeloffset:=labeloffset*1.5; label.top(LATEX("\num{"&decimal(#2)&"}"),La); label.top(LATEX("\num{"&decimal(#3)&"}"),Lb); labeloffset:=labeloffset/1.5; ); EnsembleLignes=image( for k=0 upto #1-1: trace Lignes shifted(k*u*(0,-EcartVertical)); label(LATEX("(\num{"&decimal(k+1)&"})"),La+u*(-1.5,-k*EcartVertical)); endfor; ); trace EnsembleLignes scaled Echelle; \end{mpost} \fi } \def\TraceDessinGradueSolution#1#2#3#4#5#6{% \ifluatex \mplibforcehmode \begin{mplibcode} pair La,Lb,Lab[]; pair A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A',B',C',D',E',F',G',H',I',J',K',L',M',N',O',P',Q',R',S',T',U',V',W',X',Y',Z',A'',B'',C'',D'',E'',F'',G'',H'',I'',J'',K'',L'',M'',N'',O'',P'',Q'',R'',S'',T'',U'',V'',W'',X'',Y'',Z''; La=(0,0); Lb-La=u*(\useKV[DessinGradue]{Longueur},0); for k=0 upto #4: Lab[k]=(k/#4)[La,Lb]; endfor; picture EnsembleLignes,Lignes; Lignes=image( trace segment(La,Lb); for k=0 upto #4: trace (Lab[k]+u*(0,-0.1))--(Lab[k]+u*(0,0.1)); endfor; labeloffset:=labeloffset*1.5; label.top(TEX("\num{"&decimal(#2)&"}"),La); label.top(TEX("\num{"&decimal(#3)&"}"),Lb); labeloffset:=labeloffset/1.5; ); EnsembleLignes=image(% drawoptions(withcolor 0.5white); for k=0 upto #1-1: trace Lignes shifted(k*u*(0,-\useKV[DessinGradue]{EcartVertical})); label(TEX("(\num{"&decimal(k+1)&"})"),La+u*(-1.5,k*(-\useKV[DessinGradue]{EcartVertical}))); endfor; drawoptions(); n:=0; numeric nblignes,nbpas; for p_=#5: n:=n+1; if (n mod 3)=1: nblignes:=p_; elseif (n mod 3)=2: nbpas:=p_; elseif (n mod 3)=0: p_=(nbpas/#4)[La,Lb] shifted(u*(0,(nblignes-1)*(-\useKV[DessinGradue]{EcartVertical}))); fi; endfor; for p_=#6: trace p_ withpen pencircle scaled 1.5; endfor; ); trace EnsembleLignes scaled \useKV[DessinGradue]{Echelle}; \end{mplibcode} \else \begin{mpost}[mpsettings={numeric LongueurLigne; LongueurLigne=\useKV[DessinGradue]{Longueur};numeric EcartVertical; EcartVertical=\useKV[DessinGradue]{EcartVertical}; numeric Echelle; Echelle=\useKV[DessinGradue]{Echelle};}] pair La,Lb,Lab[]; pair A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A',B',C',D',E',F',G',H',I',J',K',L',M',N',O',P',Q',R',S',T',U',V',W',X',Y',Z',A'',B'',C'',D'',E'',F'',G'',H'',I'',J'',K'',L'',M'',N'',O'',P'',Q'',R'',S'',T'',U'',V'',W'',X'',Y'',Z''; La=(0,0); Lb-La=u*(LongueurLigne,0); for k=0 upto #4: Lab[k]=(k/#4)[La,Lb]; endfor; picture EnsembleLignes,Lignes; Lignes=image( trace segment(La,Lb); for k=0 upto #4: trace (Lab[k]+u*(0,-0.1))--(Lab[k]+u*(0,0.1)); endfor; labeloffset:=labeloffset*1.5; label.top(LATEX("\num{"&decimal(#2)&"}"),La); label.top(LATEX("\num{"&decimal(#3)&"}"),Lb); labeloffset:=labeloffset/1.5; ); EnsembleLignes=image( drawoptions(withcolor 0.5white); for k=0 upto #1-1: trace Lignes shifted(k*u*(0,-EcartVertical)); label(LATEX("(\num{"&decimal(k+1)&"})"),La+u*(-1.5,k*(-EcartVertical))); endfor; drawoptions(); n:=0; numeric nblignes,nbpas; for p_=#5: n:=n+1; if (n mod 3)=1: nblignes:=p_; elseif (n mod 3)=2: nbpas:=p_; elseif (n mod 3)=0: p_=(nbpas/#4)[La,Lb] shifted(u*(0,(nblignes-1)*(-EcartVertical))); fi; endfor; for p_=#6: trace p_ withpen pencircle scaled 1.5; endfor; ); trace EnsembleLignes scaled Echelle; \end{mpost} \fi } \def\TraceDessinGradueMul#1{% \ifluatex \mplibforcehmode \begin{mplibcode} pair La,Lb,Lab[]; La=(0,0); Lb-La=u*(\useKV[DessinGradue]{Longueur},0); picture EnsembleLignes,Lignes; EnsembleLignes=image( n:=0; m:=0; for p_=#1: n:=n+1; trace segment(La,Lb) shifted((n-1)*u*(0,-\useKV[DessinGradue]{EcartVertical})); label(TEX("(\num{"&decimal(n)&"})"),La+u*(-1.5,-(n-1)*\useKV[DessinGradue]{EcartVertical})); for k=0 upto bluepart(p_): m:=bluepart(p_); Lab[k]:=(k/m)[La,Lb]; trace ((Lab[k]+u*(0,-0.1))--(Lab[k]+u*(0,0.1))) shifted((n-1)*u*(0,-\useKV[DessinGradue]{EcartVertical})); endfor; labeloffset:=labeloffset*1.5; label.top(TEX("\num{"&decimal(redpart(p_))&"}"),La shifted((n-1)*u*(0,-\useKV[DessinGradue]{EcartVertical}))); label.top(TEX("\num{"&decimal(greenpart(p_))&"}"),Lb shifted((n-1)*u*(0,-\useKV[DessinGradue]{EcartVertical}))); labeloffset:=labeloffset/1.5; endfor; ); trace EnsembleLignes scaled \useKV[DessinGradue]{Echelle}; \end{mplibcode} \else \begin{mpost}[mpsettings={numeric LongueurLigne; LongueurLigne=\useKV[DessinGradue]{Longueur};numeric EcartVertical; EcartVertical=\useKV[DessinGradue]{EcartVertical}; numeric Echelle; Echelle=\useKV[DessinGradue]{Echelle};}] pair La,Lb,Lab[]; La=(0,0); Lb-La=u*(LongueurLigne,0); picture EnsembleLignes,Lignes; EnsembleLignes=image( n:=0; m:=0; for p_=#1: n:=n+1; trace segment(La,Lb) shifted((n-1)*u*(0,-EcartVertical)); for k=0 upto bluepart(p_): m:=bluepart(p_); Lab[k]:=(k/m)[La,Lb]; trace ((Lab[k]+u*(0,-0.1))--(Lab[k]+u*(0,0.1))) shifted((n-1)*u*(0,-EcartVertical)); label(LATEX("(\num{"&decimal(n)&"})"),La+u*(-1.5,-(n-1)*\useKV[DessinGradue]{EcartVertical})); endfor; labeloffset:=labeloffset*1.5; label.top(LATEX("\num{"&decimal(redpart(p_))&"}"),La shifted((n-1)*u*(0,-EcartVertical))); label.top(LATEX("\num{"&decimal(greenpart(p_))&"}"),Lb shifted((n-1)*u*(0,-EcartVertical))); labeloffset:=labeloffset/1.5; endfor; ); trace EnsembleLignes scaled Echelle; \end{mpost} \fi } \def\TraceDessinGradueMulSolution#1#2#3{% \ifluatex \mplibforcehmode \begin{mplibcode} pair La,Lb,Lab[]; pair A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A',B',C',D',E',F',G',H',I',J',K',L',M',N',O',P',Q',R',S',T',U',V',W',X',Y',Z',A'',B'',C'',D'',E'',F'',G'',H'',I'',J'',K'',L'',M'',N'',O'',P'',Q'',R'',S'',T'',U'',V'',W'',X'',Y'',Z''; La=(0,0); Lb-La=u*(\useKV[DessinGradue]{Longueur},0); picture EnsembleLignes,Lignes; EnsembleLignes=image(% drawoptions(withcolor 0.5white); n:=0; m:=0; numeric retienspas[]; for p_=#1: n:=n+1; trace segment(La,Lb) shifted((n-1)*u*(0,-\useKV[DessinGradue]{EcartVertical})); label(TEX("(\num{"&decimal(n)&"})"),La+u*(-1.5,-(n-1)*\useKV[DessinGradue]{EcartVertical})); for k=0 upto bluepart(p_): m:=bluepart(p_); retienspas[n]:=bluepart(p_); Lab[k]:=(k/m)[La,Lb]; trace ((Lab[k]+u*(0,-0.1))--(Lab[k]+u*(0,0.1))) shifted((n-1)*u*(0,-\useKV[DessinGradue]{EcartVertical})); endfor; labeloffset:=labeloffset*1.5; label.top(TEX("\num{"&decimal(redpart(p_))&"}"),La shifted((n-1)*u*(0,-\useKV[DessinGradue]{EcartVertical}))); label.top(TEX("\num{"&decimal(greenpart(p_))&"}"),Lb shifted((n-1)*u*(0,-\useKV[DessinGradue]{EcartVertical}))); labeloffset:=labeloffset/1.5; endfor; drawoptions(); n:=0; numeric nblignes,nbpas; for p_=#2: n:=n+1; if (n mod 3)=1: nblignes:=p_; elseif (n mod 3)=2: nbpas:=p_; elseif (n mod 3)=0: p_=(nbpas/retienspas[nblignes])[La,Lb] shifted(u*(0,(nblignes-1)*(-\useKV[DessinGradue]{EcartVertical}))); fi; endfor; %Differents traces for p_=#3: trace p_ withpen pencircle scaled 1.5; endfor; ); trace EnsembleLignes scaled \useKV[DessinGradue]{Echelle}; \end{mplibcode} \else \begin{mpost}[mpsettings={numeric LongueurLigne; LongueurLigne=\useKV[DessinGradue]{Longueur};numeric EcartVertical; EcartVertical=\useKV[DessinGradue]{EcartVertical}; numeric Echelle; Echelle=\useKV[DessinGradue]{Echelle};}] pair La,Lb,Lab[]; pair A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A',B',C',D',E',F',G',H',I',J',K',L',M',N',O',P',Q',R',S',T',U',V',W',X',Y',Z',A'',B'',C'',D'',E'',F'',G'',H'',I'',J'',K'',L'',M'',N'',O'',P'',Q'',R'',S'',T'',U'',V'',W'',X'',Y'',Z''; La=(0,0); Lb-La=u*(LongueurLigne,0); picture EnsembleLignes,Lignes; EnsembleLignes=image( n:=0; m:=0; numeric retienspas[]; drawoptions(withcolor 0.5white); for p_=#1: n:=n+1; trace segment(La,Lb) shifted((n-1)*u*(0,-EcartVertical)); label(LATEX("(\num{"&decimal(n)&"})"),La+u*(-1.5,-(n-1)*\useKV[DessinGradue]{EcartVertical})); for k=0 upto bluepart(p_): m:=bluepart(p_); retienspas[n]:=bluepart(p_); Lab[k]:=(k/m)[La,Lb]; trace ((Lab[k]+u*(0,-0.1))--(Lab[k]+u*(0,0.1))) shifted((n-1)*u*(0,-EcartVertical)); endfor; labeloffset:=labeloffset*1.5; label.top(TEX("\num{"&decimal(redpart(p_))&"}"),La shifted((n-1)*u*(0,-EcartVertical))); label.top(TEX("\num{"&decimal(greenpart(p_))&"}"),Lb shifted((n-1)*u*(0,-EcartVertical))); labeloffset:=labeloffset/1.5; endfor; drawoptions(); n:=0; numeric nblignes,nbpas; for p_=#2: n:=n+1; if (n mod 3)=1: nblignes:=p_; elseif (n mod 3)=2: nbpas:=p_; elseif (n mod 3)=0: p_=(nbpas/retienspas[nblignes])[La,Lb] shifted(u*(0,(nblignes-1)*(-EcartVertical))); fi; endfor; %Differents traces for p_=#3: trace p_ withpen pencircle scaled 1.5; endfor; ); trace EnsembleLignes scaled Echelle; \end{mpost} \fi } \def\UpdateLignes#1/#2/#3\nil{\addtotok\toklisteptsgrad{#1,#3,#2,}} \def\UpdateTraces#1\nil{\addtotok\toklistetracesgrad{#1,}} \def\UpdateDefLignes#1/#2/#3\nil{\addtotok\toklistedefligne{(#1,#2,#3),}} \newcommand\DessinGradue[4][]{% \useKVdefault[DessinGradue]% \setKV[DessinGradue]{#1}% \ifboolKV[DessinGradue]{LignesIdentiques}{% \ifboolKV[DessinGradue]{Solution}{% \setsepchar[*]{,*/}% \readlist\ListePG{#3}% \setsepchar[*]{§*/}% \readlist\ListeTraces{#4}% \newtoks\toklisteptsgrad% \foreachitem\compteur\in\ListePG{\expandafter\UpdateLignes\compteur\nil}% \newtoks\toklistetracesgrad% \foreachitem\compteur\in\ListeTraces{\expandafter\UpdateTraces\compteur\nil}% \TraceDessinGradueSolution{\useKV[DessinGradue]{Lignes}}{\useKV[DessinGradue]{Debut}}{\useKV[DessinGradue]{Fin}}{\useKV[DessinGradue]{Pas}}{\the\toklisteptsgrad}{\the\toklistetracesgrad}% }{% \TraceDessinGradue{\useKV[DessinGradue]{Lignes}}{\useKV[DessinGradue]{Debut}}{\useKV[DessinGradue]{Fin}}{\useKV[DessinGradue]{Pas}}% } }{% \setsepchar[*]{,*/}% \readlist\ListeDefLigne{#2}% \newtoks\toklistedefligne% \foreachitem\compteur\in\ListeDefLigne{\expandafter\UpdateDefLignes\compteur\nil}% \ifboolKV[DessinGradue]{Solution}{% % \setsepchar[*]{,*/}% \readlist\ListePG{#3}% \setsepchar[*]{§*/}% \readlist\ListeTraces{#4}% \newtoks\toklisteptsgrad% \foreachitem\compteur\in\ListePG{\expandafter\UpdateLignes\compteur\nil}% \newtoks\toklistetracesgrad% \foreachitem\compteur\in\ListeTraces{\expandafter\UpdateTraces\compteur\nil}% \TraceDessinGradueMulSolution{\the\toklistedefligne}{\the\toklisteptsgrad}{\the\toklistetracesgrad}% }{% \TraceDessinGradueMul{\the\toklistedefligne}% }% }% }% %%% % Autonomie %%% \setKVdefault[Autonomie]{AfficheMarge=false,TitreEnigme=Enigme,TitreAtoi=\`A toi,Enigme=false,TexteCorrection=\bfseries Correction}% \newcommand\Autonomie[3][]{% \useKVdefault[Autonomie]% \setKV[Autonomie]{#1}% \setsepchar[*]{§*/} \readlist*\ListeAutoQ{#2}% % \setsepchar{§} % \readlist*\ListeAutoR{#3}% \setsepchar[*]{§*/} \readlist*\ListeAutoEn{#3}% \clearpage \begin{tikzpicture}[remember picture,overlay]% \ifboolKV[Autonomie]{AfficheMarge}{% \node[xshift=5mm,yshift=-5mm,circle] (A) at (current page.north west) {}; \node[xshift=-5mm,yshift=5mm] (B) at (current page.south east) {}; \draw[blue,dashed] (A) rectangle (B); }{}% \foreach \i in {1,...,3}{ \coordinate[xshift=\i*0.25*\paperwidth] (A\i) at (current page.north west);% \coordinate[xshift=\i*0.25*\paperwidth] (B\i) at (current page.south west);% } \foreach \i in{1,...,4}{% \coordinate[yshift=-\i*0.25*\paperheight] (C\i) at (current page.north west);% \coordinate[yshift=-\i*0.25*\paperheight] (F\i) at (current page.north east);% \coordinate[yshift=-\i*0.25*\paperheight] (D\i) at (A1);% \coordinate[yshift=-\i*0.25*\paperheight] (E\i) at (A3);% \draw (C\i) to (D\i); \draw (E\i) to (F\i); } \coordinate (Q1) at ($(F1)!0.5!(A3)$); \coordinate (Q2) at ($(F2)!0.5!(E1)$); \coordinate (Q3) at ($(F3)!0.5!(E2)$); \coordinate (Q4) at ($(F4)!0.5!(E3)$); \coordinate (Q5) at ($(C1)!0.5!(A1)$); \coordinate (Q6) at ($(C2)!0.5!(D1)$); \coordinate (Q7) at ($(C3)!0.5!(D2)$); \coordinate (Q8) at ($(C4)!0.5!(D3)$); \draw[dashed] (A1) to (B1);% \draw[dashed] (A3) to (B3);% \foreach \i in {1,...,4}{% \node[xshift=-5mm,align=justify,anchor=center,text width=0.8*0.25\textwidth] (Test\i) at (Q\i) {\ding{\fpeval{171+\i}}~\ListeAutoQ[\i,1]}; } \foreach \i in {5,...,8}{% \node[align=justify,anchor=center,text width=0.8*0.25\textwidth] (Test\i) at (Q\i) {\ding{\fpeval{171+\i}}~\ListeAutoQ[\i,1]}; } \end{tikzpicture} \clearpage \begin{tikzpicture}[remember picture,overlay]% \ifboolKV[Autonomie]{AfficheMarge}{% \node[xshift=5mm,yshift=-5mm,circle] (A) at (current page.north west) {}; \node[xshift=-5mm,yshift=5mm] (B) at (current page.south east) {}; \draw[blue,dashed] (A) rectangle (B); }{}% \foreach \i in {1,...,3}{% \coordinate[xshift=\i*0.25*\paperwidth] (A\i) at (current page.north west);% \coordinate[xshift=\i*0.25*\paperwidth] (B\i) at (current page.south west);% } \foreach \i in{1,...,4}{% \coordinate[yshift=-\i*0.25*\paperheight] (C\i) at (current page.north west);% \coordinate[yshift=-\i*0.25*\paperheight] (F\i) at (current page.north east);% \coordinate[yshift=-\i*0.25*\paperheight] (D\i) at (A1);% \coordinate[yshift=-\i*0.25*\paperheight] (G\i) at (A2);% \coordinate[yshift=-\i*0.25*\paperheight] (E\i) at (A3);% \draw (C\i) to (F\i); } \coordinate (T1) at ($(current page.north west)!0.5!(A1)$); \coordinate (T2) at ($(C1)!0.5!(D1)$); \coordinate (T3) at ($(C2)!0.5!(D2)$); \coordinate (T4) at ($(C3)!0.5!(D3)$); \coordinate (T5) at ($(current page.north east)!0.5!(A3)$); \coordinate (T6) at ($(E1)!0.5!(F1)$); \coordinate (T7) at ($(E2)!0.5!(F2)$); \coordinate (T8) at ($(E3)!0.5!(F3)$); \coordinate (U1) at ($(C1)!0.5!(D1)$); \coordinate (U2) at ($(C2)!0.5!(D2)$); \coordinate (U3) at ($(C3)!0.5!(D3)$); \coordinate (U4) at ($(current page.south west)!0.5!(B1)$); \coordinate (U5) at ($(E1)!0.5!(F1)$); \coordinate (U6) at ($(E2)!0.5!(F2)$); \coordinate (U7) at ($(E3)!0.5!(F3)$); \coordinate (U8) at ($(B3)!0.5!(current page.south east)$); \coordinate (R1) at ($(D1)!0.5!(A2)$); \coordinate (R2) at ($(D2)!0.5!(G1)$); \coordinate (R3) at ($(D3)!0.5!(G2)$); \coordinate (R4) at ($(D4)!0.5!(G3)$); \coordinate (R5) at ($(E1)!0.5!(A2)$); \coordinate (R6) at ($(E2)!0.5!(G1)$); \coordinate (R7) at ($(E3)!0.5!(G2)$); \coordinate (R8) at ($(E4)!0.5!(G3)$); \coordinate (S1) at ($(A1)!0.5!(D1)$); \coordinate (S2) at ($(D1)!0.5!(D2)$); \coordinate (S3) at ($(D2)!0.5!(D3)$); \coordinate (S4) at ($(D3)!0.5!(B1)$); \coordinate (S5) at ($(R1)!0.5!(R5)$); \coordinate (S6) at ($(R2)!0.5!(R6)$); \coordinate (S7) at ($(R3)!0.5!(R7)$); \coordinate (S8) at ($(R4)!0.5!(R8)$); \draw[dashed] (A1) to (B1);% \draw[dashed] (A2) to (B2); \draw[dashed] (A3) to (B3);% \foreach \i in {1,...,8}{% \node[rotate=90,anchor=north] (Cor\i) at (S\i) {\useKV[Autonomie]{TexteCorrection}}; \node[anchor=west,xshift=2em,text width=0.8*0.25\paperwidth] (Test\i) at (S\i) {\ListeAutoQ[\i,2]}; \node[anchor=north,yshift=-1em,text width=0.85*0.25\paperwidth] (TestEn\i) at (T\i) {\textbf{\useKV[Autonomie]{TitreAtoi} :} \ListeAutoEn[\i,1]}; \ifboolKV[Autonomie]{Enigme}{% \node[anchor=south,yshift=1em,text width=0.85*0.25\paperwidth] (TestREn\i) at (U\i) {% \ListeAutoEn[\i,2] : \pointilles\\ Lettre \ding{\fpeval{171+\i}} : \pointilles };% }{% \node[anchor=south,yshift=1em,text width=0.85*0.25\paperwidth] (TestREn\i) at (U\i) {% \ListeAutoEn[\i,2]% };% }% } \end{tikzpicture} } %%% % Calculatrice %%% %https://tex.stackexchange.com/questions/290321/mimicking-a-calculator-inputs-and-screen \definecolor{lightorange}{rgb}{0.9,0.4,0}% \definecolor{lightestorange}{rgb}{1,0.8,0.5}% \definecolor{darkorange}{rgb}{0.2,0.1,0}% \colorlet{blackened}{black!90!white}% \colorlet{blackish}{black!70!white}% \colorlet{greyish}{black!60!white}% \colorlet{whiteish}{white}% \colorlet{orangeish}{yellow!90!red}% \colorlet{greenish}{green!16!gray}% \colorlet{redish}{red!80!black}% \tcbset{calbackground/.style={ enhanced, leftright skip=0.25cm,beforeafter skip=0pt, toptitle=0mm,bottomtitle=0mm, right=2mm,left=2mm, top=1pt, bottom=0.25cm, boxsep=0pt, boxrule=0mm, sharp corners, sidebyside, sidebyside gap=2mm, lefthand ratio=0.6, bicolor, colback=black!10!white, colbacklower=greenish, colframe=white, autoparskip, }}% \newtcbox{\KY}[1][]{ enhanced, on line, arc=2pt,outer arc=2pt, boxrule=0pt,bottomrule=0.25mm,rightrule=0.2mm, boxsep=0pt,left=0pt,right=0pt,top=1pt,bottom=1pt, interior style={top color=blackish,bottom color=blackened}, colframe=greyish, width=2.5em, tcbox width=forced center, equal height group=K, valign=center, fontupper=\footnotesize\sffamily, coltext=orangeish, before upper=\vrule width 0pt height 2ex depth 1ex\relax, }% \newtcbox{\KYm}[1][]{ enhanced, on line, arc=2pt,outer arc=2pt, boxrule=0pt,bottomrule=0.25mm,rightrule=0.2mm, boxsep=0pt,left=0pt,right=0pt,top=1pt,bottom=1pt, interior style={top color=blackish,bottom color=blackened}, colframe=greyish, width=2.5em, tcbox width=forced center, equal height group=K, valign=center, fontupper=\footnotesize\sffamily, coltext=orangeish, before upper=\vrule width 0pt height 2ex depth 1ex\relax$, after upper=$, }% \newtcbox{\KN}{ enhanced, on line, arc=2pt,outer arc=2pt, boxrule=0pt,bottomrule=0.25mm,rightrule=0.2mm, boxsep=0pt,left=0pt,right=0pt,top=1pt,bottom=1pt, interior style={top color=blackish,bottom color=blackened}, colframe=greyish, width=1.5em, tcbox width=forced center, equal height group=K, valign=center, fontupper=\footnotesize\sffamily, coltext=whiteish, before upper=\vrule width 0pt height 2ex depth 1ex\relax, }% \newtcolorbox{calc}[1][]{% enhanced,bicolor, boxsep=0pt, boxrule=0pt, top=6pt,bottom=0pt,left=6pt,right=0pt, sharp corners, frame empty, colback=black!10, colbacklower=greenish, sidebyside, sidebyside align=top seam, sidebyside gap=0pt, righthand width=50.7mm, before lower=\begin{tabular}{@{}l@{}}, after lower=\end{tabular}, overlay={\node[inner sep=0pt, outer sep=0pt, text height=5pt, text depth=1pt, text width=50.7mm, fill=greenish, anchor=north east, font=\sffamily\tiny\bfseries, align=flush right] at (frame.north east) {#1};} } \def\MPCalculatrice#1#2#3{ % #1 Calcul %2 r\'eponse \ifluatex \mplibforcehmode% \begin{mplibcode}% input PfCCalculatrice; LCD(#1)(#2)(#3); \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCCalculatrice;}] LCD(#1)(#2)(#3); \end{mpost} \fi } \setKVdefault[ClesCalculatrice]{Ecran=false,NbLignes=0,BL=0.775} \newcommand\Calculatrice[2][]{% \setstackgap{L}{\useKV[ClesCalculatrice]{BL}\baselineskip}% \useKVdefault[ClesCalculatrice]% \setKV[ClesCalculatrice]{#1}% \ifboolKV[ClesCalculatrice]{Ecran}{% \setsepchar[*]{,*/}% \readlist\ListeCalc{#2}% \MPCalculatrice{\ListeCalc[1,1]}{\ListeCalc[1,2]}{\useKV[ClesCalculatrice]{NbLignes}}% }{% \setsepchar[*]{,*/}% \readlist\ListeCalc{#2}% \foreachitem\compteur\in\ListeCalc{\xintifboolexpr{\listlen\ListeCalc[\compteurcnt]==2}{\Longstack{{\tiny\ListeCalc[\compteurcnt,1]} \KN{\ListeCalc[\compteurcnt,2]}}}{\Longstack{{\tiny\ListeCalc[\compteurcnt,2]} \KY{\ListeCalc[\compteurcnt,3]}}}% }% }% \setstackgap{L}{\baselineskip}% }% %%% % Questions Flash %%% \tcbset{Expression/.style={colback=white,valign=center,left=0mm,right=0mm,top=1mm,bottom=1mm,colframe=white}}% \tcbset{ExpressionSerie1/.style={colback=\useKV[ClesFlash]{Couleur1},left=0mm,right=0mm,top=1mm,bottom=1mm}}% \tcbset{ExpressionSerie2/.style={colback=\useKV[ClesFlash]{Couleur2},left=0mm,right=0mm,top=1mm,bottom=1mm}}% \tcbset{ExpressionSerie3/.style={colback=\useKV[ClesFlash]{Couleur3},left=0mm,right=0mm,top=1mm,bottom=1mm}} \tcbset{ExpressionSerie4/.style={colback=\useKV[ClesFlash]{Couleur4},left=0mm,right=0mm,top=1mm,bottom=1mm}} \tcbset{BoiteExpression/.style={enhanced,nobeforeafter,tcbox raise base,colback=white,right=3.5mm,left=3.5mm,halign=center,colframe=black}} \newtcolorbox{CadreNombre}[1][]{% Expression,#1} \setKVdefault[ClesFlash]{Hauteur=0.2\textheight,Simple=false,Intrus=false,Kahout=false,Daily=false,Expression=false,Mental=false,Mesure=false,Heure=false,Decimal=false,Operation=Multiplie,Numeration=false,Evaluation=false,Pause=false,Couleur1=blue!10,Couleur2=orange!10,Couleur3=green!10,Couleur4=yellow!10,Numerique=false,Seul=false} \newlength{\HauteurFlash} \def\MPAfficheur#1#2#3{% \ifluatex \mplibforcehmode \begin{mplibcode} u:=0.5u; draw Afficheur(#1 div10,0); draw Afficheur(#1 mod10,0) shifted(u*(1,0)); draw Afficheur(10,0) shifted(u*(2,0)); draw Afficheur(#2 div10,0) shifted(u*(3,0)); draw Afficheur(#2 mod10,0) shifted(u*(4,0)); draw Afficheur(10,0) shifted(u*(5,0)); draw Afficheur(#3 div10,0) shifted(u*(6,0)); draw Afficheur(#3 mod10,0) shifted(u*(7,0)); \end{mplibcode} \else \begin{mpost} u:=0.5u; draw Afficheur(#1 div10,0); draw Afficheur(#1 mod10,0) shifted(u*(1,0)); draw Afficheur(10,0) shifted(u*(2,0)); draw Afficheur(#2 div10,0) shifted(u*(3,0)); draw Afficheur(#2 mod10,0) shifted(u*(4,0)); draw Afficheur(10,0) shifted(u*(5,0)); draw Afficheur(#3 div10,0) shifted(u*(6,0)); draw Afficheur(#3 mod10,0) shifted(u*(7,0)); \end{mpost} \fi } \def\MPHorloge#1#2#3{ \ifluatex \mplibforcehmode \begin{mplibcode} marque_horloge=1; save Hor; picture Hor; path gdeaig,pteaig,trot; pair centrehorloge; centrehorloge=(0,0); path tourhorloge; tourhorloge=cercles(centrehorloge,marque_horloge*cm); Hor=image( %% dessin de l'horloge draw tourhorloge; for i=0 upto 59: if (i mod 5)=0: if (i mod 15)=0: draw pointarc(tourhorloge,6*i)--(pointarc(tourhorloge,6*i) shifted (7*unitvector(centrehorloge-pointarc(tourhorloge,6*i)))) withpen pencircle scaled 2bp; else: draw pointarc(tourhorloge,6*i)--(pointarc(tourhorloge,6*i) shifted (5*unitvector(centrehorloge-pointarc(tourhorloge,6*i)))) withpen pencircle scaled 1.5bp; fi; else: draw pointarc(tourhorloge,6*i)--(pointarc(tourhorloge,6*i) shifted (3*unitvector(centrehorloge-pointarc(tourhorloge,6*i)))); fi; endfor; path graduhorloge; graduhorloge=cercles(centrehorloge,marque_horloge*cm+5*abs(unitvector(centrehorloge-pointarc(tourhorloge,0)))); % marque_p:="plein"; pointe(centrehorloge); marque_p:="rien"; %% placement des aiguilles gdeaig=centrehorloge--(pointarc(tourhorloge,0) shifted (7*unitvector(centrehorloge-pointarc(tourhorloge,0)))); pteaig=centrehorloge--(pointarc(tourhorloge,0) shifted (18*unitvector(centrehorloge-pointarc(tourhorloge,0)))); trot=centrehorloge--(pointarc(tourhorloge,0) shifted (10*unitvector(centrehorloge-pointarc(tourhorloge,0)))); draw rotation(trot,centrehorloge,90-6*#3) withpen pencircle scaled0.4; draw rotation(gdeaig,centrehorloge,90-6*#2) withpen pencircle scaled1.25; draw rotation(pteaig,centrehorloge,90-30*(#1+#2/60)) withpen pencircle scaled 2bp; ); draw Hor; \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] marque_horloge=1; save Hor; picture Hor; path gdeaig,pteaig,trot; pair centrehorloge; centrehorloge=(0,0); path tourhorloge; tourhorloge=cercles(centrehorloge,marque_horloge*cm); Hor=image( %% dessin de l'horloge draw tourhorloge; for i=0 upto 59: if (i mod 5)=0: if (i mod 15)=0: draw pointarc(tourhorloge,6*i)--(pointarc(tourhorloge,6*i) shifted (7*unitvector(centrehorloge-pointarc(tourhorloge,6*i)))) withpen pencircle scaled 2bp; else: draw pointarc(tourhorloge,6*i)--(pointarc(tourhorloge,6*i) shifted (5*unitvector(centrehorloge-pointarc(tourhorloge,6*i)))) withpen pencircle scaled 1.5bp; fi; else: draw pointarc(tourhorloge,6*i)--(pointarc(tourhorloge,6*i) shifted (3*unitvector(centrehorloge-pointarc(tourhorloge,6*i)))); fi; endfor; path graduhorloge; graduhorloge=cercles(centrehorloge,marque_horloge*cm+5*abs(unitvector(centrehorloge-pointarc(tourhorloge,0)))); % marque_p:="plein"; pointe(centrehorloge); marque_p:="rien"; %% placement des aiguilles gdeaig=centrehorloge--(pointarc(tourhorloge,0) shifted (7*unitvector(centrehorloge-pointarc(tourhorloge,0)))); pteaig=centrehorloge--(pointarc(tourhorloge,0) shifted (18*unitvector(centrehorloge-pointarc(tourhorloge,0)))); trot=centrehorloge--(pointarc(tourhorloge,0) shifted (10*unitvector(centrehorloge-pointarc(tourhorloge,0)))); draw rotation(trot,centrehorloge,90-6*#3) withpen pencircle scaled0.4; draw rotation(gdeaig,centrehorloge,90-6*#2) withpen pencircle scaled1.25; draw rotation(pteaig,centrehorloge,90-30*(#1+#2/60)) withpen pencircle scaled 2bp; ); draw Hor; \end{mpost} \fi } \newcommand\QFNumeration{% \begin{CadreNombre} {\Large LE NOMBRE DU JOUR est : } \tcbox[BoiteExpression]{\num{\ListeFlash[1,1]}} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie1] $\square$ \textbf{Le chiffre des \ListeFlash[1,2] est :} \tcbox[BoiteExpression]{\phantom{1500000}} \end{tcolorbox} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie2] $\square$ \textbf{Le chiffre \ListeFlash[1,3] repr\'esente le chiffre des :} \tcbox[BoiteExpression]{\phantom{1500000}} \end{tcolorbox} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie3] $\square$ \textbf{Le nombre de \ListeFlash[1,4] est :} \tcbox[BoiteExpression]{\phantom{1500000}} \end{tcolorbox} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie4] $\square$ \textbf{\ListeFlash[1,5] est le nombre des :} \tcbox[BoiteExpression]{\phantom{1500000}} \end{tcolorbox} \end{CadreNombre} } \newcommand\QFHeure{% \begin{CadreNombre} {\Large L'HEURE DU JOUR est : }\ifboolKV[ClesFlash]{Numerique}{\raisebox{-0.3cm}{\MPAfficheur{\NbHeures}{\NbMinutes}{\NbSecondes}}}{\raisebox{-0.9cm}{{\MPHorloge{\NbHeures}{\NbMinutes}{\NbSecondes}}}} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie1] $\square$ \textbf{\ListeFlash[1,2] :} \tcbox[BoiteExpression]{\phantom{1500000000}} \end{tcolorbox} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie2] $\square$ \textbf{\ListeFlash[1,3] :} \tcbox[BoiteExpression]{\phantom{1500000000}} \end{tcolorbox} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie3] $\square$ \textbf{\ListeFlash[1,4] :} \tcbox[BoiteExpression]{\phantom{\hbox to4.5em{15}}} \end{tcolorbox} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie4] $\square$ \textbf{\ListeFlash[1,5] :} \tcbox[BoiteExpression]{\phantom{\hbox to4.5em{1500000}}} \end{tcolorbox} \end{CadreNombre} } \newcommand\QFMesure{% \begin{CadreNombre} {\Large LA MESURE DU JOUR est : } \tcbox[BoiteExpression]{\ListeFlash[1,1]} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie1] $\square$ \textbf{Convertis-la en \ListeFlash[1,2] :} \tcbox[BoiteExpression]{\phantom{1500000000}} \end{tcolorbox} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie2] $\square$ \textbf{Elle peut aussi s'\'ecrire \ListeFlash[1,3] } \tcbox[BoiteExpression]{\phantom{1500000000}} \end{tcolorbox} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie3] $\square$ \textbf{Ajoute-lui \ListeFlash[1,4] :} \tcbox[BoiteExpression]{\phantom{\hbox to5em{1500000}}} \end{tcolorbox} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie4] $\square$ \textbf{Enl\`eve-lui \ListeFlash[1,5] :} \tcbox[BoiteExpression]{\phantom{\hbox to5em{1500000}}} \end{tcolorbox} \end{CadreNombre} } \tikzset{ arrow/.style={ draw, minimum height=1.25cm, inner sep=0.25em, shape=signal, signal from=west, signal to=east, signal pointer angle=150, } } \newcommand\QFDaily{% \begin{tikzpicture}% \begin{scope}[start chain=transition going right,node distance=-\pgflinewidth]% \foreach \s in {1,...,\ListeFlashlen}{% \xintifboolexpr{\s == 1}{% \node[arrow,on chain] {\Huge\bfseries\ListeFlash[\s]};% \ifboolKV[ClesFlash]{Pause}{\pause}{}% }{% \xintifboolexpr{\s == \ListeFlashlen}{% \node[arrow,on chain] {\Huge\bfseries?};% }{% \node[arrow,on chain] {\ListeFlash[\s]};% \ifboolKV[ClesFlash]{Pause}{\pause}{}% }% }% }% \end{scope}% \end{tikzpicture}% }% \newcommand\QFDecimal{% \begin{CadreNombre} {\Large LE NOMBRE DU JOUR est : } \tcbox[BoiteExpression]{\num{\ListeFlash[1,1]}} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie1] $\square$ \textbf{\'Ecris-le en fraction d\'ecimale :} \tcbox[BoiteExpression]{$\dfrac{\phantom{1000000}}{\phantom{1000000}}$} \end{tcolorbox} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie2] $\square$ \begin{tabular}{c} \textbf{Partie}\\ \textbf{enti\`ere} \end{tabular} \textbf{: } \tcbox[BoiteExpression]{\phantom{100000}}\hfill% $\square$ \begin{tabular}{c} \textbf{Partie}\\ \textbf{d\'ecimale} \end{tabular} \textbf{: } \tcbox[BoiteExpression]{\phantom{100000}} \end{tcolorbox} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie3] $\square$ \textbf{\useKV[ClesFlash]{Operation}-le par \ListeFlash[1,2] :} \tcbox[BoiteExpression]{\phantom{1000000000}} \end{tcolorbox} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie4] $\square$ \textbf{Trouve le nombre entier le plus proche :} \tcbox[BoiteExpression]{\phantom{10000000}} \end{tcolorbox} \end{CadreNombre} } \newcommand\QFMental{% \begin{CadreNombre} {\Large LE NOMBRE DU JOUR est : } \tcbox[BoiteExpression]{\ListeFlash[1,1]} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie1] $\square$ \textbf{Ajoute-lui} \tcbox[BoiteExpression]{\ListeFlash[1,2]}\hfill$\square$ \textbf{Soustrais-lui} \tcbox[BoiteExpression]{\ListeFlash[1,3]} \end{tcolorbox} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie2] $\square$ \textbf{Multiplie-le par } \tcbox[BoiteExpression]{\ListeFlash[1,4]}\hfill$\square$ \textbf{Divise-le par } \tcbox[BoiteExpression]{\ListeFlash[1,5]} \end{tcolorbox} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie3] $\square$ \textbf{Trouve} \tcbox[BoiteExpression]{\ListeFlash[1,6]} \textbf{\% de ce nombre.} \end{tcolorbox} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie4] $\square$ \textbf{Trouve } \tcbox[BoiteExpression]{\ListeFlash[1,7]} \textbf{de ce nombre.} \end{tcolorbox} \end{CadreNombre} } \newcommand\QFExpression{% \begin{CadreNombre} {\Large L'EXPRESSION DU JOUR est : } \tcbox[BoiteExpression]{\ListeFlash[1,1]} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie1] $\square$ \textbf{Ajoute-lui} \tcbox[BoiteExpression]{\ListeFlash[1,2]} \end{tcolorbox} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie2] $\square$ \textbf{Soustrais-lui} \tcbox[BoiteExpression]{\ListeFlash[1,3]} \end{tcolorbox} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie3] $\square$ \textbf{Multiplie-la par} \tcbox[BoiteExpression]{\ListeFlash[1,4]} \end{tcolorbox} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie4] $\square$ \textbf{\'Evalue-la lorsque} \tcbox[BoiteExpression]{\ListeFlash[1,5]} \end{tcolorbox} \end{CadreNombre} } \newcommand\BoiteFlash[1]{% \ifx\bla#1\bla% \tcbox[BoiteExpression]{\phantom{10000000}}% \else \tcbox[BoiteExpression]{#1}% \fi } \newcommand\QFVide{% \begin{CadreNombre} {\ListeFlash[1]} \xintFor* ##1 in {\xintSeq {1}{\ListeFlashlen-1}}\do{% \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{tcolorbox}[ExpressionSerie##1] \ListeFlash[1+##1] \end{tcolorbox} } \end{CadreNombre} } \newcommand\QFlash[2][]{% \useKVdefault[ClesFlash]% \setKV[ClesFlash]{#1}% \setlength{\HauteurFlash}{\useKV[ClesFlash]{Hauteur}}% \colorlet{CouleurUn}{\useKV[ClesFlash]{Couleur1}}% \colorlet{CouleurDeux}{\useKV[ClesFlash]{Couleur2}}% \colorlet{CouleurTrois}{\useKV[ClesFlash]{Couleur3}}% \colorlet{CouleurQuatre}{\useKV[ClesFlash]{Couleur4}}% \ifboolKV[ClesFlash]{Evaluation}{% \ifboolKV[ClesFlash]{Seul}{% \setsepchar[*]{/}% \readlist*\ListeFlash{#2}% \QFVide% }{% \ifboolKV[ClesFlash]{Numeration}{% \setsepchar[*]{,*/}% \readlist*\ListeFlash{#2}% \QFNumeration% }{% \ifboolKV[ClesFlash]{Heure}{% \setsepchar[*]{,*/}% \readlist*\ListeFlash{#2}% \StrMid{\ListeFlash[1,1]}{1}{2}[\NbHeures]% \StrMid{\ListeFlash[1,1]}{3}{4}[\NbMinutes]% \StrMid{\ListeFlash[1,1]}{5}{6}[\NbSecondes]% \QFHeure% }{% \ifboolKV[ClesFlash]{Mesure}{% \setsepchar[*]{,*/}% \readlist*\ListeFlash{#2}% \QFMesure% }{% \ifboolKV[ClesFlash]{Daily}{% \setsepchar[*]{/}% \readlist*\ListeFlash{#2}% \QFDaily% }{% \ifboolKV[ClesFlash]{Decimal}{% \setsepchar[*]{,*/}% \readlist*\ListeFlash{#2}% \QFDecimal% }{% \ifboolKV[ClesFlash]{Mental}{% \setsepchar[*]{,*/}% \readlist*\ListeFlash{#2}% \QFMental% }{% \ifboolKV[ClesFlash]{Expression}{% \setsepchar[*]{,*/}% \readlist*\ListeFlash{#2}% \QFExpression% }{% \setsepchar[*]{/}% \readlist*\ListeFlash{#2}% \ifboolKV[ClesFlash]{Simple}{% \ListeFlash[1] \begin{tcolorbox}[valign=center] \ListeFlash[2] \end{tcolorbox} }{% \setsepchar[*]{*/}% \readlist*\ListeFlash{#2}% \ifboolKV[ClesFlash]{Kahout}{% \setsepchar[*]{*/}% \readlist*\ListeFlash{#2}% \begin{tcolorbox}[halign=center,valign=center] \ListeFlash[1,1] \end{tcolorbox} % \par \begin{multicols}{4} \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurUn!150,colback=CouleurUn,halign=center,valign=center] \ListeFlash[1,2] \end{tcolorbox} % \hfill% \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurDeux!150,colback=CouleurDeux,halign=center,valign=center] \ListeFlash[1,3] \end{tcolorbox} % \hfill% \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurTrois!150,colback=CouleurTrois,halign=center,valign=center] \ListeFlash[1,4] \end{tcolorbox} % \hfill% \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurQuatre!150,colback=CouleurQuatre,halign=center,valign=center] \ListeFlash[1,5] \end{tcolorbox} \end{multicols} }{% \setsepchar[*]{*/}% \readlist*\ListeFlash{#2}% \begin{tcolorbox}[halign=center,valign=center] \ListeFlash[1,1] \end{tcolorbox} \begin{multicols}{4} \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurUn!150,colback=white,boxrule=1mm,halign=center,valign=center] \ListeFlash[1,2] \end{tcolorbox} \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurDeux!150,colback=white,boxrule=1mm,halign=center,valign=center] \ListeFlash[1,3] \end{tcolorbox} \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurTrois!150,boxrule=1mm,colback=white,halign=center,valign=center] \ListeFlash[1,4] \end{tcolorbox} \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurQuatre!150,colback=white,boxrule=1mm,halign=center,valign=center] \ListeFlash[1,5] \end{tcolorbox} \end{multicols} }% }% }% }% }% }% }% }% }% }% }{% \ifboolKV[ClesFlash]{Seul}{% \setsepchar[*]{/}% \readlist*\ListeFlash{#2}% \begin{frame} \QFVide% \end{frame} }{% \ifboolKV[ClesFlash]{Numeration}{% \setsepchar[*]{,*/}% \readlist*\ListeFlash{#2}% \begin{frame} \QFNumeration% \end{frame} }{% \ifboolKV[ClesFlash]{Heure}{% \setsepchar[*]{,*/}% \readlist*\ListeFlash{#2}% \StrMid{\ListeFlash[1,1]}{1}{2}[\NbHeures]% \StrMid{\ListeFlash[1,1]}{3}{4}[\NbMinutes]% \StrMid{\ListeFlash[1,1]}{5}{6}[\NbSecondes]% \begin{frame} \QFHeure% \end{frame} }{% \ifboolKV[ClesFlash]{Mesure}{% \setsepchar[*]{,*/}% \readlist*\ListeFlash{#2}% \begin{frame} \QFMesure% \end{frame} }{% \ifboolKV[ClesFlash]{Daily}{% \setsepchar[*]{/}% \readlist*\ListeFlash{#2}% \begin{frame} \QFDaily% \end{frame} }{% \ifboolKV[ClesFlash]{Decimal}{% \setsepchar[*]{,*/}% \readlist*\ListeFlash{#2}% \begin{frame} \QFDecimal% \end{frame} }{% \ifboolKV[ClesFlash]{Mental}{% \setsepchar[*]{,*/}% \readlist*\ListeFlash{#2}% \begin{frame} \QFMental% \end{frame} }{% \ifboolKV[ClesFlash]{Expression}{% \setsepchar[*]{,*/}% \readlist*\ListeFlash{#2}% \begin{frame} \QFExpression% \end{frame} }{% \setsepchar[*]{/}% \readlist*\ListeFlash{#2}% \ifboolKV[ClesFlash]{Simple}{% \begin{frame} \ListeFlash[1] \begin{tcolorbox}[valign=center] \ListeFlash[2] \end{tcolorbox} \end{frame} }{% \setsepchar[*]{,*/}% \readlist*\ListeFlash{#2}% \ifboolKV[ClesFlash]{Kahout}{% \setsepchar[*]{*/}% \readlist*\ListeFlash{#2}% \begin{frame} \begin{tcolorbox}[valign=center] \ListeFlash[1,1] \end{tcolorbox} \vfill \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{columns}[T] \begin{column}{0.45\linewidth} \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurUn!150,colback=CouleurUn,halign=center,valign=center] \ListeFlash[1,2] \end{tcolorbox} \end{column} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{column}{0.45\linewidth} \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurDeux!150,colback=CouleurDeux,halign=center,valign=center] \ListeFlash[1,3] \end{tcolorbox} \end{column} \end{columns} \bigskip \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{columns}[T] \begin{column}{0.45\linewidth} \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurTrois!150,colback=CouleurTrois,halign=center,valign=center] \ListeFlash[1,4] \end{tcolorbox} \end{column} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{column}{0.45\linewidth} \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurQuatre!150,colback=CouleurQuatre,halign=center,valign=center] \ListeFlash[1,5] \end{tcolorbox} \end{column} \end{columns} \end{frame} }{% \setsepchar[*]{*/}% \readlist*\ListeFlash{#2}% \begin{frame} \begin{tcolorbox}[valign=center] \ListeFlash[1,1] \end{tcolorbox} \vfill \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{columns}[T] \begin{column}{0.45\linewidth} \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurUn!150,colback=white,boxrule=1mm,halign=center,valign=center] \ListeFlash[1,2] \end{tcolorbox} \end{column} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{column}{0.45\linewidth} \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurDeux!150,colback=white,boxrule=1mm,halign=center,valign=center] \ListeFlash[1,3] \end{tcolorbox} \end{column} \end{columns} \bigskip \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{columns}[T] \begin{column}{0.45\linewidth} \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurTrois!150,boxrule=1mm,colback=white,halign=center,valign=center] \ListeFlash[1,4] \end{tcolorbox} \end{column} \ifboolKV[ClesFlash]{Pause}{\pause}{} \begin{column}{0.45\linewidth} \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurQuatre!150,colback=white,boxrule=1mm,halign=center,valign=center] \ListeFlash[1,5] \end{tcolorbox} \end{column} \end{columns} \end{frame} }% }% }% }% }% }% }% }% }% }% }% }% %%% % Fractions %%% \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{% % #1 longueur du c\^ot\'e % #2 partage sur le c\^ot\'e % #3 num % #4 d\'eno (attention : = #2^2) % #5 couleur \ifluatex \mplibforcehmode \begin{mplibcode} nbtriangle=0; vardef Ligne(expr longueur)= for k=0 upto 2*(longueur-1): nbtriangle:=nbtriangle+1; if (k mod 2)=0: M[nbtriangle]=(Tria shifted(0.5*k*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A)); else: M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A)); fi; endfor; enddef; pair A,B,C; A=u*(0.5,0.5); B-A=(#1,0); C=rotation(B,A,60); nbparts:=#2; path M[]; path Tria,Trir; Tria=polygone(A,(1/nbparts)[A,B],(1/nbparts)[A,C]); Trir=symetrie(Tria,(1/nbparts)[A,B],(1/nbparts)[A,C]); for k=nbparts downto 1: Ligne(k); endfor; m:=#3 div #4; 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; vardef Ligne(expr longueur)= for k=0 upto 2*(longueur-1): nbtriangle:=nbtriangle+1; if (k mod 2)=0: M[nbtriangle]=(Tria shifted(0.5*k*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A)); else: M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A)); fi; endfor; enddef; pair A,B,C; A=u*(0.5,0.5); B-A=(#1,0); C=rotation(B,A,60); nbparts:=#2; path M[]; path Tria,Trir; Tria=polygone(A,(1/nbparts)[A,B],(1/nbparts)[A,C]); Trir=symetrie(Tria,(1/nbparts)[A,B],(1/nbparts)[A,C]); for k=nbparts downto 1: Ligne(k); endfor; m:=#3 div #4; 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 } \def\MPFractionTriangleH#1#2#3#4#5#6{ % #1 longueur du c\^ot\'e % #2 partage sur le c\^ot\'e % #3 num % #4 d\'eno (attention : = #2^2) % #5 couleur % #6 \'epaisseur \ifluatex \mplibforcehmode \begin{mplibcode} nbtriangle=0; vardef Ligne(expr longueur)= for k=0 upto 2*(longueur-1): nbtriangle:=nbtriangle+1; if (k mod 2)=0: M[nbtriangle]=(Tria shifted(0.5*k*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A)); else: M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A)); fi; endfor; enddef; pair A,B,C; A=u*(0.5,0.5); B-A=(#1,0); C=rotation(B,A,60); nbparts:=#2; path M[]; path Tria,Trir; Tria=polygone(A,(1/nbparts)[A,B],(1/nbparts)[A,C]); Trir=symetrie(Tria,(1/nbparts)[A,B],(1/nbparts)[A,C]); for k=nbparts downto 1: Ligne(k); endfor; m:=#3 div #4; for l=1 upto (#3 mod #4): drawoptions(withpen pencircle scaled #6); 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} nbtriangle=0; vardef Ligne(expr longueur)= for k=0 upto 2*(longueur-1): nbtriangle:=nbtriangle+1; if (k mod 2)=0: M[nbtriangle]=(Tria shifted(0.5*k*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A)); else: M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A)); fi; endfor; enddef; pair A,B,C; A=u*(0.5,0.5); B-A=(#1,0); C=rotation(B,A,60); nbparts:=#2; path M[]; path Tria,Trir; Tria=polygone(A,(1/nbparts)[A,B],(1/nbparts)[A,C]); Trir=symetrie(Tria,(1/nbparts)[A,B],(1/nbparts)[A,C]); for k=nbparts downto 1: Ligne(k); endfor; diversite=floor(uniformdeviate(#2**2-#3-1)); for k=(1+diversite) upto (#3+diversite): drawoptions(withpen pencircle scaled #6); trace hachurage(M[k],90,0.2,0) withcolor #5; endfor; drawoptions(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; \end{mpost} \fi } \def\MPFractionRegulier#1#2#3#4#5{% % #1 rayon, #2 nb c\^ot\'es, #3 num, #4 deno, #5 couleur \ifluatex \mplibforcehmode \begin{mplibcode} pair O,A[],B[]; O=u*(0,0); path cc,cd; cc=cercles(O,#1); for k=0 upto #2: A[k]=pointarc(cc,k*(360/#2)); endfor; cd=polygone(A0 for k=1 upto #2-1:,A[k] endfor); for k=0 upto #4-1: B[k]=point(k*(#2/#4)) of cd; endfor; picture fondcolore; fondcolore=image( remplis O--arccercle(B[0],B[#3 mod #4],O)--cycle withcolor #5; clip currentpicture to cd; 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[]; O=u*(0,0); path cc,cd; cc=cercles(O,#1); for k=0 upto #2: A[k]=pointarc(cc,k*(360/#2)); endfor; cd=polygone(A0 for k=1 upto #2-1:,A[k] endfor); for k=0 upto #4-1: B[k]=point(k*(#2/#4)) of cd; endfor; picture fondcolore; fondcolore=image( remplis O--arccercle(B[0],B[#3 mod #4],O)--cycle withcolor #5; clip currentpicture to cd; 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, #6 épaisseur \ifluatex \mplibforcehmode \begin{mplibcode} pair O,A[],B[]; O=u*(0,0); path cc,cd; cc=cercles(O,#1); for k=0 upto #2: A[k]=pointarc(cc,k*(360/#2)); endfor; cd=polygone(A0 for k=1 upto #2-1:,A[k] endfor); for k=0 upto #4-1: B[k]=point(k*(#2/#4)) of cd; endfor; 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); 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): 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 \begin{mpost} pair O,A[],B[]; O=u*(0,0); path cc,cd; cc=cercles(O,#1); for k=0 upto #2: A[k]=pointarc(cc,k*(360/#2)); endfor; cd=polygone(A0 for k=1 upto #2-1:,A[k] endfor); for k=0 upto #4-1: B[k]=point(k*(#2/#4)) of cd; endfor; 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); 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): 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 } \def\MPFractionRectangle#1#2#3#4#5#6{% % #1 longueur, #2 largeur, #3 num, #4 deno, #5 couleur, #6 multiple \ifluatex \mplibforcehmode \begin{mplibcode} pair A,B,C,D,M[],N[],R[],S[]; A=(1,1); B-A=(#1,0); C-B=(0,#2); D-C=A-B; numeric parts; parts=(#4 div #6); for k=0 upto parts: M[k]=(k/parts)[A,B]; N[k]=(k/parts)[D,C]; endfor; if #6>1: for k=0 upto #6: R[k]=(k/#6)[A,D]; S[k]=(k/#6)[B,C]; endfor; fi; picture FondRectangle; FondRectangle=image(% draw polygone(A,B,C,D); for k=1 upto (parts-1): draw segment(M[k],N[k]); endfor; if #6>1: for k=1 upto (#6-1): 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[]; A=(1,1); B-A=(#1,0); C-B=(0,#2); D-C=A-B; numeric parts; parts=(#4 div #6); for k=0 upto parts: M[k]=(k/parts)[A,B]; N[k]=(k/parts)[D,C]; endfor; if #6>1: for k=0 upto #6: R[k]=(k/#6)[A,D]; S[k]=(k/#6)[B,C]; endfor; fi; picture FondRectangle; FondRectangle=image(% draw polygone(A,B,C,D); for k=1 upto (parts-1): draw segment(M[k],N[k]); endfor; if #6>1: for k=1 upto (#6-1): 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 } \def\MPFractionRectangleH#1#2#3#4#5#6#7{% % #1 longueur, #2 largeur, #3 num, #4 deno, #5 couleur, #6 multiple \ifluatex \mplibforcehmode \begin{mplibcode} pair A,B,C,D,M[],N[],R[],S[]; A=(1,1); B-A=(#1,0); C-B=(0,#2); D-C=A-B; numeric parts; parts=(#4 div #6); for k=0 upto parts: M[k]=(k/parts)[A,B]; N[k]=(k/parts)[D,C]; endfor; if #6>1: for k=0 upto #6: R[k]=(k/#6)[A,D]; S[k]=(k/#6)[B,C]; endfor; fi; picture FondRectangle; FondRectangle=image(% draw polygone(A,B,C,D); for k=1 upto (parts-1): draw segment(M[k],N[k]); endfor; if #6>1: for k=1 upto (#6-1): draw segment(R[k],S[k]); endfor; 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} pair A,B,C,D,M[],N[],R[],S[]; A=(1,1); B-A=(#1,0); C-B=(0,#2); D-C=A-B; numeric parts; parts=(#4 div #6); for k=0 upto parts: M[k]=(k/parts)[A,B]; N[k]=(k/parts)[D,C]; endfor; if #6>1: for k=0 upto #6: R[k]=(k/#6)[A,D]; 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); draw polygone(A,B,C,D); for k=1 upto (parts-1): draw segment(M[k],N[k]); endfor; if #6>1: for k=1 upto (#6-1): draw segment(R[k],S[k]); endfor; drawoptions(); fi; \end{mpost} \fi } \def\MPFractionDisque#1#2#3#4{% \ifluatex \mplibforcehmode \begin{mplibcode} pair A,B[]; A=(0,0); path cc; cc=cercles(A,#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): 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]) shifted(l*(2*#1+1cm,0)); endfor; endfor; \end{mplibcode} \else \begin{mpost} pair A,B[]; A=(0,0); path cc; cc=cercles(A,#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): 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]) shifted(l*(2*#1+1cm,0)); endfor; endfor; \end{mpost} \fi } \def\MPFractionDisqueH#1#2#3#4#5{% \ifluatex \mplibforcehmode \begin{mplibcode} pair A,B[]; A=(0,0); path cc; cc=cercles(A,#1); for k=0 upto #3: B[k]=pointarc(cc,(360/#3)*k); endfor; m=#2 div #3; if (#2 mod #3)=0:m:=m-1; fi; if m>0: for l=0 upto (m-1): drawoptions(withpen pencircle scaled#5); draw hachurage(cc shifted(l*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4; endfor; fi; drawoptions(withpen pencircle scaled#5); draw hachurage((A--B0--arccercle(B[0],B[#2 mod #3],A)--cycle) shifted(m*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4; drawoptions(withpen pencircle scaled#5); for l=0 upto m: draw cc shifted(l*(2*#1+1cm,0)); for k=0 upto (#3-1): draw segment(A,B[k]) shifted(l*(2*#1+1cm,0)); endfor; endfor; \end{mplibcode} \else \begin{mpost} pair A,B[]; A=(0,0); path cc; cc=cercles(A,#1); for k=0 upto #3: B[k]=pointarc(cc,(360/#3)*k); endfor; m=#2 div #3; if (#2 mod #3)=0:m:=m-1; fi; if m>0: for l=0 upto (m-1): drawoptions(withpen pencircle scaled#5); draw hachurage(cc shifted(l*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4; endfor; fi; drawoptions(withpen pencircle scaled#5); draw hachurage((A--B0--arccercle(B[0],B[#2 mod #3],A)--cycle) shifted(m*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4; drawoptions(withpen pencircle scaled#5); for l=0 upto m: draw cc shifted(l*(2*#1+1cm,0)); for k=0 upto (#3-1): draw segment(A,B[k]) shifted(l*(2*#1+1cm,0)); endfor; endfor; \end{mpost} \fi } \def\MPFractionSegment#1#2#3#4{ \ifluatex \mplibforcehmode \begin{mplibcode} 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): 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] 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[]; 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): 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] 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{% \ifluatex \mplibforcehmode \begin{mplibcode} 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[#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) shifted(l*(#1+1cm,0)); endfor; fi; if (#2 mod #3)<>0: drawoptions(withpen pencircle scaled#5); draw hachurage(polygone(B[0]+u*(0,-0.15),B[#2 mod #3]+u*(0,-0.15),B[#2 mod #3]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(m*(#1+1cm,0)),120,0.2,0) withcolor #4; drawoptions(withpen pencircle scaled#5); draw segment(A,C) shifted(m*(#1+1cm,0)); fi; marque_p:="tiretv"; for l=0 upto m-1: for k=0 upto #3: pointe(B[k] shifted(l*(#1+1cm,0))); endfor; endfor; if (#2 mod #3)<>0: for k=0 upto #3: pointe(B[k] shifted(m*(#1+1cm,0))); endfor; fi; \end{mplibcode} \else \begin{mpost} 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[#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) shifted(l*(#1+1cm,0)); endfor; fi; if (#2 mod #3)<>0: drawoptions(withpen pencircle scaled#5); draw hachurage(polygone(B[0]+u*(0,-0.15),B[#2 mod #3]+u*(0,-0.15),B[#2 mod #3]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(m*(#1+1cm,0)),120,0.2,0) withcolor #4; drawoptions(withpen pencircle scaled#5); draw segment(A,C) shifted(m*(#1+1cm,0)); fi; marque_p:="tiretv"; for l=0 upto m-1: for k=0 upto #3: pointe(B[k] shifted(l*(#1+1cm,0))); endfor; endfor; if (#2 mod #3)<>0: for k=0 upto #3: pointe(B[k] shifted(m*(#1+1cm,0))); endfor; fi; \end{mpost} \fi } \newcommand\Fraction[2][]{% \useKVdefault[ClesFraction]% \setKV[ClesFraction]{#1}% \setsepchar[*]{/}% \readlist*\ListeFraction{#2}% \ifboolKV[ClesFraction]{Triangle}{% \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}% \ifboolKV[ClesFraction]{Hachures}{% \MPFractionTriangleH{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Parts}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}% }{% \MPFractionTriangle{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Parts}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}% } }{% \ifboolKV[ClesFraction]{Regulier}{% \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}% \ifboolKV[ClesFraction]{Hachures}{% \MPFractionRegulierH{\useKV[ClesFraction]{Rayon}}{\useKV[ClesFraction]{Cotes}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}% }{% \MPFractionRegulier{\useKV[ClesFraction]{Rayon}}{\useKV[ClesFraction]{Cotes}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}% } }{% \ifboolKV[ClesFraction]{Segment}{% \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}% \ifboolKV[ClesFraction]{Hachures}{% \MPFractionSegmentH{\useKV[ClesFraction]{Longueur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}% }{% \MPFractionSegment{\useKV[ClesFraction]{Longueur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}% } }{ \ifboolKV[ClesFraction]{Rectangle}{%rectangle \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}% \ifboolKV[ClesFraction]{Hachures}{% \MPFractionRectangleH{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Largeur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Multiple}}{\useKV[ClesFraction]{Epaisseur}}% }{% \MPFractionRectangle{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Largeur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Multiple}}% } }{%disque \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}% \ifboolKV[ClesFraction]{Hachures}{% \MPFractionDisqueH{\useKV[ClesFraction]{Rayon}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}% }{% \MPFractionDisque{\useKV[ClesFraction]{Rayon}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}% }% }% }% }% }% }% %%% % R\'eponses \`a relier %%% \setKVdefault[ClesRelie]{Solution=false,LargeurG=5cm,LargeurD=2cm,Stretch=1.5,Ecart=2cm} \newcommand\Relie[2][]{% \useKVdefault[ClesRelie]% \setKV[ClesRelie]{#1}% \setsepchar[*]{,*/}% \readlist*\ListeRelie{#2}% \buildtabrelie% \ifboolKV[ClesRelie]{Solution}{% \xintFor* ##1 in {\xintSeq {1}{\ListeRelielen}}\do{% \itemtomacro\ListeRelie[##1,1]\untest \ifx\bla\untest\bla% \else \tikz[remember picture,overlay]{\draw (RelieG-##1) -- (RelieD-\ListeRelie[##1,3]);}% \fi }% }{% }% } \newcounter{NbRelie} \def\buildtabrelie{% \setcounter{NbRelie}{0}% \renewcommand{\arraystretch}{\useKV[ClesRelie]{Stretch}}% \begin{tabular}{p{\useKV[ClesRelie]{LargeurG}}cp{\useKV[ClesRelie]{Ecart}}>{\tikz[remember picture]{\node[name=RelieD-\theNbRelie,inner sep=0pt]{};\fill[] (RelieD-\theNbRelie) circle[radius=1.5pt]}}cp{\useKV[ClesRelie]{LargeurD}}}% \xintFor* ##1 in {\xintSeq {1}{\ListeRelielen}}\do{\ListeRelie[##1,1]\itemtomacro\ListeRelie[##1,1]\untest% \ifx\bla\untest\bla% \uppercase{&}\stepcounter{NbRelie}% \else \uppercase{&}\stepcounter{NbRelie}\tikz[remember picture,overlay]{\node[name=RelieG-\theNbRelie,inner sep=0pt]{};\fill[] (RelieG-\theNbRelie) circle[radius=1.5pt];} \fi&&&\ListeRelie[##1,2]\\}% \end{tabular}% \setcounter{NbRelie}{0}% }% \def\buildtabrelieold{% \setcounter{NbRelie}{0}% \renewcommand{\arraystretch}{\useKV[ClesRelie]{Stretch}}% \begin{tabular}{p{\useKV[ClesRelie]{LargeurG}}cp{\useKV[ClesRelie]{Ecart}}>{\tikz[remember picture,baseline]{\node[name=RelieD-\theNbRelie]{\Large\textbullet};}}cp{\useKV[ClesRelie]{LargeurD}}}% \xintFor* ##1 in {\xintSeq {1}{\ListeRelielen}}\do{\ListeRelie[##1,1]\itemtomacro\ListeRelie[##1,1]\untest% \ifx\bla\untest\bla% \uppercase{&}\stepcounter{NbRelie}% \else \uppercase{&}\stepcounter{NbRelie}\tikz[remember picture,baseline]{\node[name=RelieG-\theNbRelie]{\Large\textbullet};} \fi&&&\ListeRelie[##1,2]\\}% \end{tabular}% \setcounter{NbRelie}{0}% }% %%% % QCM %%% \setKVdefault[ClesQCM]{Reponses=3,Solution=false,Stretch=1,Largeur=2cm,Couleur=gray!15,Titre=false,Nom=R\'eponse,NomV=Vrai,NomF=Faux,Alph=false,AlphT=false,VF=false,Depart=1,Alterne=false,Noms={A/B/C},Multiple=false}% \newlength{\LargeurQCM}% \newcounter{QuestionQCM}% \newcounter{TitreQCM}% \newcommand\QCM[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}% }% }% } \newcommand\QCMPfC[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}% }% }% \renewcommand{\arraystretch}{1}% } %%% % Somme des angles %%% \setKVdefault[ClesSommeAngle]{Detail=true,Isocele=false,Figure=false,FigureSeule=false,Angle=0,Perso=false,Echelle=1cm}% \def\MPFigureSommeAngle#1#2#3#4#5#6#7{ % #1 Premier sommet % #2 Deuxi\`eme sommet % #3 Troisi\`eme sommet % #4 1er angle % #5 2eme angle % #6 0 isoc\`ele / 1 pas isoc\`ele \ifluatex \mplibcodeinherit{enable} \mplibforcehmode \begin{mplibcode} pair A,B,C,O,I;% u:=\useKV[ClesSommeAngle]{Echelle}; % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure A=u*(1,1); B-A=u*(4,0); C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]); % On d\'efinit le centre du cercle circonscrit O - .5[A,B] = whatever * (B-A) rotated 90; O - .5[B,C] = whatever * (C-B) rotated 90; % On tourne pour \'eventuellement moins de lassitude :) A:=A rotatedabout(O,#7); B:=B rotatedabout(O,#7); C:=C rotatedabout(O,#7); % On d\'efinit le centre du cercle inscrit (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C]; (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C]; % on dessine \`a main lev\'ee :) path triangle; triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle; % pour marquer les angles path cc; cc=fullcircle scaled 1u; % on marque les angles picture MAngle; MAngle=image( draw (cc shifted A); draw (cc shifted B); draw (cc shifted C); ); draw MAngle; clip currentpicture to triangle; draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}; draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}; draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}; % on labelise label(btex #1 etex,1.2[O,A]); label(btex #2 etex,1.2[O,B]); label(btex #3 etex,1.2[O,C]); if #6=0: if #4=#5: marque_s:=marque_s/2; draw Codelongueur(A,B,A,C,2); marque_s:=marque_s*2; label(btex $\ang{#4}$ etex,B+0.95u*unitvector(I-B)); label(btex ? etex,A+0.95u*unitvector(I-A)); else: marque_s:=marque_s/2; draw Codelongueur(A,B,A,C,2); marque_s:=marque_s*2; label(btex $\ang{#4}$ etex,A+0.95u*unitvector(I-A)); label(btex ? etex,B+0.95u*unitvector(I-B)); fi; else: label(btex $\ang{#4}$ etex,B+0.95u*unitvector(I-B)); label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C)); label(btex ? etex,A+0.95u*unitvector(I-A)); fi; %fi; \end{mplibcode} \mplibcodeinherit{disable} \else \begin{mpost}[mpsettings={u:=\useKV[ClesSommeAngle]{Echelle};}] pair A,B,C,O,I;% % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure A=u*(1,1); B-A=u*(4,0); C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]); % On d\'efinit le centre du cercle circonscrit O - .5[A,B] = whatever * (B-A) rotated 90; O - .5[B,C] = whatever * (C-B) rotated 90; % On tourne pour \'eventuellement moins de lassitude :) A:=A rotatedabout(O,#7); B:=B rotatedabout(O,#7); C:=C rotatedabout(O,#7); % On d\'efinit le centre du cercle inscrit (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C]; (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C]; % on dessine \`a main lev\'ee :) path triangle; triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle; % pour marquer les angles path cc; cc=fullcircle scaled 1u; % on marque les angles picture MAngle; MAngle=image( draw (cc shifted A); draw (cc shifted B); draw (cc shifted C); ); draw MAngle; clip currentpicture to triangle; draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}; draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}; draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}; % on labelise label(btex #1 etex,1.2[O,A]); label(btex #2 etex,1.2[O,B]); label(btex #3 etex,1.2[O,C]); if #6=0: if #4=#5: marque_s:=marque_s/2; draw Codelongueur(A,B,A,C,2); marque_s:=marque_s*2; label(btex $\ang{#4}$ etex,B+0.95u*unitvector(I-B)); label(btex ? etex,A+0.95u*unitvector(I-A)); else: marque_s:=marque_s/2; draw Codelongueur(A,B,A,C,2); marque_s:=marque_s*2; label(btex $\ang{#4}$ etex,A+0.95u*unitvector(I-A)); label(btex ? etex,B+0.95u*unitvector(I-B)); fi; else: label(btex $\ang{#4}$ etex,B+0.95u*unitvector(I-B)); label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C)); label(btex ? etex,A+0.95u*unitvector(I-A)); fi; %fi; \end{mpost} \fi } \xdef\RedactionSomme{} \newcommand\RedactionSom[4][]{% % #1 : nom du triangle pA pB pC % #2 : mesure de l'angle pApBpC % #3 : mesure de l'angle pBpCpA % la macro calculant la mesure de l'angle pCpApB \useKVdefault[ClesSommeAngle]%obligatoire car la macro n'est pas dans un groupe. \setKV[ClesSommeAngle]{#1}%On lit les arguments optionnels % On r\'ecup\`ere les noms des sommets. \StrMid{#2}{1}{1}[\NomA]% \StrMid{#2}{2}{2}[\NomB]% \StrMid{#2}{3}{3}[\NomC]% \xdef\NomTriangle{\NomA\NomB\NomC}% \xdef\NomSommetB{\NomB}% \xdef\NomSommetA{\NomA}% \xdef\NomSommetC{\NomC}% % On r\'edige \ifboolKV[ClesSommeAngle]{Perso}{\RedactionSomme}{Dans le triangle $\NomA\NomB\NomC$,\ifboolKV[ClesSommeAngle]{Isocele}{ isoc\`ele en \NomA,}{} on a :}% \ifboolKV[ClesSommeAngle]{Isocele}{% \ifx\bla#4\bla% \begin{align*}% \widehat{\NomA\NomB\NomC}+\widehat{\NomB\NomC\NomA}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\% 2\times\ang{#3}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\% \xdef\sommeangle{\fpeval{2*#3}}\xdef\totalangle{\fpeval{180-\sommeangle}}\ang{\sommeangle}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\% \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomC\NomA\NomB}&=\ang{180}-\ang{\sommeangle}\\}{\widehat{\NomC\NomA\NomB}&=\ang{\totalangle}}% \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomC\NomA\NomB}&=\ang{\totalangle}}{}% \end{align*}% \xdef\ResultatAngle{\totalangle}% \else% \begin{align*}% \widehat{\NomA\NomB\NomC}+\widehat{\NomB\NomC\NomA}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\% 2\times\widehat{\NomA\NomB\NomC}+\ang{#4}&=\ang{180}\\% \xdef\totalangle{\fpeval{180-#4}}% \ifboolKV[ClesSommeAngle]{Detail}{2\times\widehat{\NomA\NomB\NomC}&=\ang{180}-\ang{#4}\\}{2\times\widehat{\NomA\NomB\NomC}&=\ang{\totalangle}\\}% \ifboolKV[ClesSommeAngle]{Detail}{2\times\widehat{\NomA\NomB\NomC}&=\ang{\totalangle}\\}{\widehat{\NomA\NomB\NomC}&=\frac{\ang{\totalangle}}{2}\\}% \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomA\NomB\NomC}&=\frac{\ang{\totalangle}}{2}\\}{\widehat{\NomA\NomB\NomC}&=\ang{\fpeval{0.5*(180-#4)}}}%\\ \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomA\NomB\NomC}&=\ang{\fpeval{0.5*(180-#4)}}\\}{}% \end{align*}% \xdef\ResultatAngle{\fpeval{0.5*(180-#4)}}% \fi% }{% \begin{align*}% \widehat{\NomA\NomB\NomC}+\widehat{\NomB\NomC\NomA}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\% \ang{#3}+\ang{#4}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\% \xdef\sommeangle{\fpeval{#3+#4}}\xdef\totalangle{\fpeval{180-\sommeangle}}\ang{\sommeangle}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\% \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomC\NomA\NomB}&=\ang{180}-\ang{\sommeangle}\\}{\widehat{\NomC\NomA\NomB}&=\ang{\totalangle}}%\\ \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomC\NomA\NomB}&=\ang{\totalangle}}{}% \end{align*}% \xdef\ResultatAngle{\totalangle}% }% }% \newcommand\SommeAngles[4][]{% % #1 : nom du triangle pA pB pC % #2 : mesure de l'angle pApBpC % #3 : mesure de l'angle pBpCpA % la macro calculant la mesure de l'angle pCpApB \useKVdefault[ClesSommeAngle]%obligatoire car la macro n'est pas dans un groupe. \setKV[ClesSommeAngle]{#1}%On lit les arguments optionnels % On r\'ecup\`ere les noms des sommets. \StrMid{#2}{1}{1}[\NomA]% \StrMid{#2}{2}{2}[\NomB]% \StrMid{#2}{3}{3}[\NomC]% % Figure ou pas ? \ifboolKV[ClesSommeAngle]{FigureSeule}{% \ifx\bla#3\bla% \xdef\Intermed{\fpeval{0.5*(180-#4)}}% \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#4}{\Intermed}{0}{\useKV[ClesSommeAngle]{Angle}}% \else% \ifx\bla#4\bla% \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#3}{0}{\useKV[ClesSommeAngle]{Angle}}% \else% \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#4}{1}{\useKV[ClesSommeAngle]{Angle}}% \fi% \fi% }{% \ifboolKV[ClesSommeAngle]{Figure}{% \begin{multicols}{2}% {\em La figure est donn\'ee \`a titre indicatif.}% \ifx\bla#3\bla% \xdef\Intermed{\fpeval{0.5*(180-#4)}}% \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#4}{\Intermed}{0}{\useKV[ClesSommeAngle]{Angle}}\]% \else% \ifx\bla#4\bla% \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#3}{0}{\useKV[ClesSommeAngle]{Angle}}\]% \else% \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#4}{1}{\useKV[ClesSommeAngle]{Angle}}\]% \fi% \fi% \par\columnbreak\par% % on r\'edige \RedactionSom[#1]{#2}{#3}{#4}% \end{multicols}% }{% on r\'edige \RedactionSom[#1]{#2}{#3}{#4}% }% }% }% %%% % Le th\'eor\`eme de Pythagore %%% \setKVdefault[ClesPythagore]{Exact=false,AvantRacine=false,Racine=false,Entier=false,Egalite=false,Precision=2,Soustraction=false,Figure=false,FigureSeule=false,Angle=0,Echelle=1cm,Reciproque=false,ReciColonnes=false,Faible=false,Unite=cm,EnchaineA=false,EnchaineB=false,EnchaineC=false,ValeurA=0,ValeurB=0,ValeurC=0,Perso=false} % On d\'efinit les figures \`a utiliser \def\MPFigurePytha#1#2#3#4#5#6{% % #1 Premier sommet % #2 Sommet de l'angle droit % #3 troisi\`eme sommet % #4 1ere longueur % #5 2eme longueur % #6 angle de rotation de la figure \ifluatex \mplibforcehmode \begin{mplibcode} u:=\useKV[ClesPythagore]{Echelle}; pair A,B,C,O,D,E,F;%B est le sommet de l'angle droit O=u*(2.5,2.5); path cc; cc=(fullcircle scaled 4u) shifted O; % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure A=point(0.9*length cc) of cc; B=A rotatedabout(O,-120); C=2[A,O]; % On tourne pour \'eventuellement moins de lassitude :) A:=A rotatedabout(O,#6); B:=B rotatedabout(O,#6); C:=C rotatedabout(O,#6); % On d\'efinit l'angle droit D-B=7*unitvector(C-B); F-B=7*unitvector(A-B); E-D=F-B; draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}; draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}; draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}; draw D--E--F; numeric decalage; decalage=3mm; if #4<#5 : if ypart(B)>ypart(O) : label(btex \num{#4} etex,1/2[C,B]-decalage*(unitvector(A-B))); label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B))); else: label(btex \num{#4} etex,1/2[C,B]-decalage*(unitvector(A-B))); label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B))); fi else: if ypart(B)>ypart(O) : label(btex \num{#4} etex,1/2[C,A]-decalage*(unitvector(C-A) rotated 90)); label(btex \num{#5} etex,1/2[C,B]+decalage*(unitvector(B-A))); else: label(btex \num{#4} etex,1/2[A,C]+decalage*(unitvector(A-C) rotated 90)); label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B))); fi; fi; label(btex #3 etex,1.2[O,A]); label(btex #2 etex,1.2[O,B]); label(btex #1 etex,1.2[O,C]); \end{mplibcode} \else \begin{mpost}[mpsettings={u:=\useKV[ClesPythagore]{Echelle};}] pair A,B,C,O,D,E,F;%B est le sommet de l'angle droit O=u*(2.5,2.5); path cc; cc=(fullcircle scaled 4u) shifted O; % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure A=point(0.9*length cc) of cc; B=A rotatedabout(O,-120); C=2[A,O]; % On tourne pour \'eventuellement moins de lassitude :) A:=A rotatedabout(O,#6); B:=B rotatedabout(O,#6); C:=C rotatedabout(O,#6); % On d\'efinit l'angle droit D-B=7*unitvector(C-B); F-B=7*unitvector(A-B); E-D=F-B; draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}; draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}; draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}; draw D--E--F; decalage=3mm; if #4<#5 : if ypart(B)>ypart(O) : label(btex \num{#4} etex,1/2[C,B]-decalage*(unitvector(A-B))); label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B))); else: label(btex \num{#4} etex,1/2[C,B]-decalage*(unitvector(A-B))); label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B))); fi else: if ypart(B)>ypart(O) : label(btex \num{#4} etex,1/2[C,A]-decalage*(unitvector(C-A) rotated 90)); label(btex \num{#5} etex,1/2[C,B]+decalage*(unitvector(B-A))); else: label(btex \num{#4} etex,1/2[A,C]+decalage*(unitvector(A-C) rotated 90)); label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B))); fi; fi; label(btex #3 etex,1.2[O,A]); label(btex #2 etex,1.2[O,B]); label(btex #1 etex,1.2[O,C]); \end{mpost} \fi } \def\MPFigureReciPytha#1#2#3#4#5#6#7{% % #1 Premier sommet % #2 Sommet de l'angle droit % #3 troisi\`eme sommet % #4 1ere longueur % #5 2eme longueur % #6 3eme longueur % #7 angle de rotation de la figure \ifluatex \mplibforcehmode \begin{mplibcode} u:=\useKV[ClesPythagore]{Echelle}; pair A,B,C,O,D,E,F;%B est le sommet de l'angle droit O=u*(2.5,2.5); path cc; cc=(fullcircle scaled 4u) shifted O; % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure A=point(0.8*length cc) of cc; B=A rotatedabout(O,-100); C=2[A,O]; % On tourne pour \'eventuellement moins de lassitude :) A:=A rotatedabout(O,#7); B:=B rotatedabout(O,#7); C:=C rotatedabout(O,#7); draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}; draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}; draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}; decalage=3mm; if ypart(B)>ypart(O) : label(btex \num{#4} etex,1/2[C,A]-decalage*(unitvector(C-A) rotated 90)); label(btex \num{#5} etex,1/2[C,B]-decalage*(unitvector(C-B))); label(btex \num{#6} etex,1/2[A,B]-decalage*(unitvector(C-B))); else: label(btex \num{#4} etex,1/2[A,C]+decalage*(unitvector(A-C) rotated 90)); label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B))); label(btex \num{#6} etex,1/2[C,B]-decalage*(unitvector(A-B))); fi; label(btex #1 etex,1.2[O,A]); label(btex #2 etex,1.2[O,B]); label(btex #3 etex,1.2[O,C]); \end{mplibcode} \else \begin{mpost}[mpsettings={u:=\useKV[ClesPythagore]{Echelle};}] pair A,B,C,O,D,E,F;%B est le sommet de l'angle droit O=u*(2.5,2.5); path cc; cc=(fullcircle scaled 4u) shifted O; % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure A=point(0.8*length cc) of cc; B=A rotatedabout(O,-100); C=2[A,O]; % On tourne pour \'eventuellement moins de lassitude :) A:=A rotatedabout(O,#7); B:=B rotatedabout(O,#7); C:=C rotatedabout(O,#7); draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}; draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}; draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}; decalage=3mm; if ypart(B)>ypart(O) : label(LATEX("\num{"&decimal(#4)&"}") rotated angle(C-A),1/2[C,A]-decalage*(unitvector(C-A) rotated 90)); label(LATEX("\num{"&decimal(#5)&"}") rotated(angle(C-B)),1/2[C,B]-decalage*(unitvector(C-B))); label(LATEX("\num{"&decimal(#6)&"}") rotated(angle(B-A)),1/2[A,B]-decalage*(unitvector(C-B))); else: label(LATEX("\num{"&decimal(#4)&"}") rotated angle(A-C),1/2[A,C]+decalage*(unitvector(A-C) rotated 90)); label(LATEX("\num{"&decimal(#5)&"}") rotated(angle(A-B)),1/2[A,B]-decalage*(unitvector(C-B))); label(LATEX("\num{"&decimal(#6)&"}") rotated angle(C-B),1/2[C,B]-decalage*(unitvector(A-B))); fi; label(btex #1 etex,1.2[O,A]); label(btex #2 etex,1.2[O,B]); label(btex #3 etex,1.2[O,C]); \end{mpost} \fi } \newcommand\RedactionPythagore{} \newcommand{\Pythagore}[5][]{% % #1 Param\`etres sous forme de cl\'es % #2 Nom "complet" du triangle : ABC par exemple % #3 Premi\`ere longueur % #4 Deuxi\`eme longueur % #5 Troisi\`eme longueur (\'eventuellement vide) \useKVdefault[ClesPythagore]%obligatoire car la macro n'est pas dans un groupe. \setKV[ClesPythagore]{#1}%On lit les arguments optionnels \ifboolKV[ClesPythagore]{Reciproque}{% % On retient les noms des sommets \StrMid{#2}{1}{1}[\NomA]% \StrMid{#2}{2}{2}[\NomB]% \StrMid{#2}{3}{3}[\NomC]% % on stocke les valeurs donn\'ees \opcopy{#3}{A1}% \opcopy{#4}{A2}% \opcopy{#5}{A3}% % On trace une figure ou pas ? \ifboolKV[ClesPythagore]{FigureSeule}{% \MPFigureReciPytha{\NomA}{\NomB}{\NomC}{#3}{#4}{#5}{\useKV[ClesPythagore]{Angle}}% }{% \ifboolKV[ClesPythagore]{Figure}{%Utilisation obligatoire de l'option --shell-escape de la compilation \begin{multicols}{2} {\em La figure est donn\'ee \`a titre indicatif.}% \[\MPFigureReciPytha{\NomA}{\NomB}{\NomC}{#3}{#4}{#5}{\useKV[ClesPythagore]{Angle}}\]% \par\columnbreak\par% % on r\'edige Dans le triangle $#2$, $[\NomA\NomC]$ est le plus grand c\^ot\'e.% \ifboolKV[ClesPythagore]{ReciColonnes}{% \[ \begin{array}{cccc|cccc} &&\NomA\NomC^2&&&\NomA\NomB^2&+&\NomB\NomC^2\\ &&\opexport{A1}{\Aun}\num{\Aun}^2&&&\opexport{A2}{\Adeux}\num{\Adeux}^2&+&\opexport{A3}{\Atrois}\num{\Atrois}^2\\ &&\opmul*{A1}{A1}{a1}&&&\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}&+&\opmul*{A3}{A3}{a3}\opexport{a3}{\Atrois}\num{\Atrois}\\ &&\opexport{a1}{\Aun}\num{\Aun}&&&\multicolumn{3}{c}{\opadd*{a2}{a3}{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}}\\ \end{array} \] }{% \[\left. \begin{array}{l} \NomA\NomC^2=\opexport{A1}{\Aun}\num{\Aun}^2=\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}\\ \\ \NomA\NomB^2+\NomB\NomC^2=\opexport{A2}{\Adeux}\num{\Adeux}^2+\opexport{A3}{\Atrois}\num{\Atrois}^2=\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}+\opmul*{A3}{A3}{a3}\opexport{a3}{\Atrois}\num{\Atrois}=\opadd*{a2}{a3}{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}\\ \end{array} \right\}\opcmp{a1}{a4}\ifopeq\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2\fi\opcmp{a1}{a4}\ifopneq\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2\fi \] } \ifboolKV[ClesPythagore]{Egalite}{% \opcmp{a1}{a4}\ifopeq Comme $\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2$, alors l'\'egalit\'e de Pythagore est v\'erifi\'ee. Donc le triangle $#2$ est rectangle en $\NomB$.\fi% \opcmp{a1}{a4}\ifopneq Comme $\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2$, alors l'\'egalit\'e de Pythagore n'est pas v\'erifi\'ee. Donc le triangle $#2$ n'est pas rectangle.\fi% }{% \opcmp{a1}{a4}\ifopeq Comme $\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2$, alors le triangle $#2$ est rectangle en $\NomB$ d'apr\`es la r\'eciproque du th\'eor\`eme de Pythagore.\fi% \opcmp{a1}{a4}\ifopneq Comme $\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2$, alors le triangle $#2$ n'est pas rectangle\ifboolKV[ClesPythagore]{Faible}{.}{ d'apr\`es la contrapos\'ee du th\'eor\`eme de Pythagore.}\fi% } \end{multicols} }{% Dans le triangle $#2$, $[\NomA\NomC]$ est le plus grand c\^ot\'e.% \ifboolKV[ClesPythagore]{ReciColonnes}{% \[ \begin{array}{cccc|cccc} &&\NomA\NomC^2&&&\NomA\NomB^2&+&\NomB\NomC^2\\ &&\opexport{A1}{\Aun}\num{\Aun}^2&&&\opexport{A2}{\Adeux}\num{\Adeux}^2&+&\opexport{A3}{\Atrois}\num{\Atrois}^2\\ &&\opmul*{A1}{A1}{a1}&&&\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}&+&\opmul*{A3}{A3}{a3}\opexport{a3}{\Atrois}\num{\Atrois}\\ &&\opexport{a1}{\Aun}\num{\Aun}&&&\multicolumn{3}{c}{\opadd*{a2}{a3}{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}}\\ \end{array} \] }{% \[\left. \begin{array}{l} \NomA\NomC^2=\opexport{A1}{\Aun}\num{\Aun}^2=\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}\\ \\ \NomA\NomB^2+\NomB\NomC^2=\opexport{A2}{\Adeux}\num{\Adeux}^2+\opexport{A3}{\Atrois}\num{\Atrois}^2=\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}+\opmul*{A3}{A3}{a3}\opexport{a3}{\Atrois}\num{\Atrois}=\opadd*{a2}{a3}{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}\\ \end{array} \right\}\opcmp{a1}{a4}\ifopeq\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2\fi\opcmp{a1}{a4}\ifopneq\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2\fi \] }% \ifboolKV[ClesPythagore]{Egalite}{% \opcmp{a1}{a4}\ifopeq Comme $\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2$, alors l'\'egalit\'e de Pythagore est v\'erifi\'ee. Donc le triangle $#2$ est rectangle en $\NomB$.\fi% \opcmp{a1}{a4}\ifopneq Comme $\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2$, alors l'\'egalit\'e de Pythagore n'est pas v\'erifi\'ee. Donc le triangle $#2$ n'est pas rectangle.\fi% }{% \opcmp{a1}{a4}\ifopeq Comme $\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2$, alors le triangle $#2$ est rectangle en $\NomB$ d'apr\`es la r\'eciproque du th\'eor\`eme de Pythagore.\fi% \opcmp{a1}{a4}\ifopneq Comme $\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2$, alors le triangle $#2$ n'est pas rectangle\ifboolKV[ClesPythagore]{Faible}{.}{ d'apr\`es la contrapos\'ee du th\'eor\`eme de Pythagore.}\fi% }% }% }% }{% % [xlop] param\`etres de calcul \opcopy{#3}{A1}% \opcopy{#4}{A2}% \opcopy{\useKV[ClesPythagore]{Precision}}{pres}% % On retient les noms des sommets \StrMid{#2}{1}{1}[\NomA]% \StrMid{#2}{2}{2}[\NomB]% \StrMid{#2}{3}{3}[\NomC]% \xdef\NomTriangle{\NomA\NomB\NomC}% \xdef\NomAngleDroit{\NomB}% \xdef\NomSommetA{\NomA}% \xdef\NomSommetC{\NomC}% % On trace une figure ou pas ? \ifboolKV[ClesPythagore]{FigureSeule}{% \xintifboolexpr{#3<#4 || #3==#4}{%\ifnum#3<#4% \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2+#4^2),\useKV[ClesPythagore]{Precision})}}% }{% \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2-#4^2),\useKV[ClesPythagore]{Precision})}}% }% \MPFigurePytha{\NomA}{\NomB}{\NomC}{#3}{#4}{\useKV[ClesPythagore]{Angle}} }{% \ifboolKV[ClesPythagore]{Figure}{%Utilisation obligatoire de l'option --shell-escape de la compilation \begin{multicols}{2}% {\em La figure est donn\'ee \`a titre indicatif.}% \[\MPFigurePytha{\NomA}{\NomB}{\NomC}{#3}{#4}{\useKV[ClesPythagore]{Angle}}\] \par\columnbreak\par% % On d\'emarre la r\'esolution \ifboolKV[ClesPythagore]{Perso}{\RedactionPythagore}{\ifboolKV[ClesPythagore]{Egalite}{Comme le triangle $#2$ est rectangle en $\NomB$, alors l'\'egalit\'e de Pythagore est v\'erifi\'ee :}{Dans le triangle $#2$ rectangle en $\NomB$, le th\'eor\`eme de Pythagore permet d'\'ecrire :% }% }% \xintifboolexpr{#3<#4 || #3==#4}{%\ifnum#3<#4% \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2+#4^2),\useKV[ClesPythagore]{Precision})}}% %\xdef\ResultatPytha{\fpeval{round(sqrt(#3^2+#4^2),\useKV[ClesPythagore]{Precision})}}% \begin{align*} \NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\ \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opcopy{\useKV[ClesPythagore]{ValeurA}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\ \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\ \NomA\NomC^2&=\opadd*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\ \ifboolKV[ClesPythagore]{AvantRacine}{}{% \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomC&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}} \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomC&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomC&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\ }% \end{align*} }{%\else% \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2-#4^2),\useKV[ClesPythagore]{Precision})}}% \begin{align*} \NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\ \ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}&=\NomA\NomB^2+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\ \ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}&=\NomA\NomB^2+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\ \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}-\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\ \NomA\NomB^2&=\opsub*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\ \ifboolKV[ClesPythagore]{AvantRacine}{}{% \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomB&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}} \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomB&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\ }% \end{align*} }%\fi% \end{multicols} }{% % On d\'emarre la r\'esolution \ifboolKV[ClesPythagore]{Perso}{\RedactionPythagore}{\ifboolKV[ClesPythagore]{Egalite}{Comme le triangle $#2$ est rectangle en $\NomB$, alors l'\'egalit\'e de Pythagore est v\'erifi\'ee :}{Dans le triangle $#2$ rectangle en $\NomB$, le th\'eor\`eme de Pythagore permet d'\'ecrire :% }}% \xintifboolexpr{#3<#4 || #3==#4}{%\ifnum#3<#4% \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2+#4^2),\useKV[ClesPythagore]{Precision})}}% \begin{align*} \NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\ \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opcopy{\useKV[ClesPythagore]{ValeurA}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\ \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\ \NomA\NomC^2&=\opadd*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\ \ifboolKV[ClesPythagore]{AvantRacine}{}{% \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomC&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}} \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomC&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomC&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\ } \end{align*} }{%\else \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2-#4^2),\useKV[ClesPythagore]{Precision})}}% \ifboolKV[ClesPythagore]{Soustraction}{% \begin{align*} \NomA\NomB^2&=\NomA\NomC^2-\NomB\NomC^2\\ \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}-\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\ \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}-\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\ \NomA\NomB^2&=\opsub*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\ \ifboolKV[ClesPythagore]{AvantRacine}{}{% \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomB&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}} \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomB&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\ } \end{align*} }{% \begin{align*} \NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\ \ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}&=\NomA\NomB^2+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\ \ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}&=\NomA\NomB^2+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\ \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}-\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\ \NomA\NomB^2&=\opsub*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\ \ifboolKV[ClesPythagore]{AvantRacine}{}{% \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomB&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}}% \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomB&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\ } \end{align*} }% }%\fi% }% }% }% }% %%% % Distributivit\'e %%% % https://tex.stackexchange.com/questions/168972/draw-arrows-to-show-multiplication-pattern-distributive-property/169278?noredirect=1 \newcommand{\Tikzmark}[1]{% \tikz[remember picture,baseline,inner sep=0pt]{% \node[name=Distri-\theNbDistri,anchor=base] {${#1}$};}% \stepcounter{NbDistri}% }% \newcommand{\DrawArrow}{% \begin{tikzpicture}[overlay,remember picture] \draw[-stealth,out=50,in=140,DCFlechesh,transform canvas={yshift=2pt}] (Distri-0.north) to (Distri-2.north); \draw[-stealth,out=50,in=140,DCFlechesh!50,transform canvas={yshift=2pt}] (Distri-0.north) to (Distri-3.north); \draw[-stealth,out=-50,in=-140,DCFlechesb,transform canvas={yshift=-2pt}] (Distri-1.south) to (Distri-2.south); \draw[-stealth,out=-50,in=-140,DCFlechesb!50,transform canvas={yshift=-2pt}] (Distri-1.south) to (Distri-3.south); \end{tikzpicture} } \newcommand{\DrawArrowSimple}[1]{% \begin{tikzpicture}[overlay,remember picture] \draw[-stealth,out=50,in=140,DCFlechesh,transform canvas={yshift=2pt}] (Distri-#1.north) to (Distri-2.north); \draw[-stealth,out=50,in=140,DCFlechesh!50,transform canvas={yshift=2pt}] (Distri-#1.north) to (Distri-3.north); \end{tikzpicture} } \newcommand{\DrawArrowSimpleRenverse}[1]{% \begin{tikzpicture}[overlay,remember picture] \draw[-stealth,out=140,in=50,DCFlechesh,transform canvas={yshift=2pt}] (Distri-#1.north) to (Distri-0.north); \draw[-stealth,out=140,in=50,DCFlechesh!50,transform canvas={yshift=2pt}] (Distri-#1.north) to (Distri-1.north); \end{tikzpicture} } \newcounter{NbDistri}% \setcounter{NbDistri}{0}% \newcounter{NbCalculDistri}%Pour compter combien de distributivit\'e il % 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,Tuile=false,Vide=false,Impression=false}%,AideAdd=false:inutile ? \newcommand\Tuile[4]{% \ifluatex \mplibforcehmode \begin{mplibcode} boolean Vide,Print; Vide=\useKV[ClesDistributivite]{Vide}; Print=\useKV[ClesDistributivite]{Impression}; 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)); if Print=false: fill cc withcolor col; fi; 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)); if Print=false: fill cc withcolor col; fi; 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))); if Print=false: fill titi withcolor if #1*#3>0:ColorCarrePos else: ColorCarreNeg fi; 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))); if Print=false: fill titi withcolor if #1*#4>0:ColorLetterPos else: ColorLetterNeg fi; 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))); if Print=false: fill titi withcolor if #2*#3>0:ColorLetterPos else: ColorLetterNeg fi; 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))); if Print=false: fill titi withcolor if #2*#4>0:ColorNumPos else: ColorNumNeg fi; 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,Print; Vide=\useKV[ClesDistributivite]{Vide}; Print=\useKV[ClesDistributivite]{Impression};}] 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)); if Print=false: fill cc withcolor col; fi; 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)); if Print=false: fill cc withcolor col; fi; 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))); if Print=false: fill titi withcolor if #1*#3>0:ColorCarrePos else: ColorCarreNeg fi; 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))); if Print=false: fill titi withcolor if #1*#4>0:ColorLetterPos else: ColorLetterNeg fi; 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))); if Print=false: fill titi withcolor if #2*#3>0:ColorLetterPos else: ColorLetterNeg fi; 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))); if Print=false: fill titi withcolor if #2*#4>0:ColorNumPos else: ColorNumNeg fi; 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 \def\LETTRE{\useKV[ClesDistributivite]{Lettre}}% \ensuremath{% % partie du x^2 \xintifboolexpr{#2==0}{}{\xintifboolexpr{#2==1}{}{\xintifboolexpr{#2==-1}{-}{\num{#2}}}\LETTRE^2}% % partie du x \xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{\xintifboolexpr{#2==0}{}{+}\xintifboolexpr{#3==1}{}{\num{#3}}}{% \xintifboolexpr{#2==0}{\xintifboolexpr{#3==-1}{-}{\num{#3}}}{\xintifboolexpr{#3==-1}{-}{-\num{\fpeval{abs(#3)}}}}% }\LETTRE}% % partie du nombre \xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\xintifboolexpr{#2==0}{\xintifboolexpr{#3==0}{}{+}}{+}\num{#4}}{% \xintifboolexpr{#2==0}{\xintifboolexpr{#3==0}{\num{#4}}{-\num{\fpeval{abs(#4)}}}}{-\num{\fpeval{abs(#4)}}}}}% % }% }% \xdef\SommeA{0}% \xdef\SommeB{0}% \xdef\SommeC{0}% \newcommand{\Distri}[5][]{% \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]{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% }{}% }{% \ifboolKV[ClesDistributivite]{Numerique}{% \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==0}{% \num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}\multido{\i=2+1}{4}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}% }{% \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==-1}{% \Distri[Numerique,Etape=3]{#2}{#3}{#4}{#5}\multido{\i=2+-1}{2}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}=\num{\fpeval{(#2+#3)*(#4+#5)}}% }{% \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==1}{\num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}}{}% \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==2}{\num{\fpeval{#2+#3}}\times(\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#5)}})}{}% \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==3}{\num{#3}\times\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{#3}\times\num{\fpeval{abs(#5)}}}{}% \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==4}{\num{\fpeval{#3*#4}}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#3*#5)}}}{}% \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==5}{\num{\fpeval{#3*#4+#3*#5}}}{}% }% }% }{% \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}{)}{}}% }% }{% \xintifboolexpr{\Multij==0}{}{\xintifboolexpr{\Multi==0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\Affichage{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}% \xintifboolexpr{\Multik==0}{}{\xintifboolexpr{\Multil==0}{\xintifboolexpr{#2==0}{}{+}}{\xintifboolexpr{#2==0}{}{+}}\xintifboolexpr{\Multik<0}{(}{}\Affichage{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}% }% \xintifboolexpr{\Multil==0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}% }{}% % Etape 4 \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==4}{% \xdef\Multi{\fpeval{#2*#4}}% \xdef\Multij{\fpeval{#2*#5}}% \xdef\Multik{\fpeval{#3*#4}}% \xdef\Multil{\fpeval{#3*#5}}% %% ils sont red\'efinis pour pouvoir envisager la somme de deux %% expressions \`a d\'evelopper \xdef\Multim{\fpeval{#2*#5+#3*#4}}% \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}% \stepcounter{NbCalculDistri}% \ifboolKV[ClesDistributivite]{Oppose}{% \xdef\Multi{\fpeval{-\Multi}}% \xdef\Multim{\fpeval{-\Multim}}% \xdef\Multil{\fpeval{-\Multil}}% \xintifboolexpr{\Multi==0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}% \xintifboolexpr{\Multim==0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}% \xintifboolexpr{\Multil==0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}% }{% \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}}}{}% }{}% }% }% }% }% }% }% }% \newcommand{\Resultat}[1][]{% \setKV[ClesDistributivite]{#1}%On lit les arguments optionnels \ensuremath{% \Affichage{\SommeA}{\SommeB}{\SommeC} } } \newcommand\AffichageEchange[4][]{% \setKV[ClesDistributivite]{#1}%On lit les arguments optionnels \def\LETTRE{\useKV[ClesDistributivite]{Lettre}}% \ensuremath{% % partie du nombre \xintifboolexpr{#2==0}{}{\num{#2}}% % partie du x \xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{\xintifboolexpr{#2==0}{}{+}\xintifboolexpr{#3==1}{}{\num{#3}}}{% \xintifboolexpr{#2==0}{\xintifboolexpr{#3==-1}{-}{\num{#3}}}{\xintifboolexpr{#3==-1}{-}{-\num{\fpeval{abs(#3)}}}} }\LETTRE}% % partie du x^2 \xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\xintifboolexpr{#2==0}{\xintifboolexpr{#3==0}{}{+}}{+}\xintifboolexpr{#4==1}{}{\num{#4}}}{% \xintifboolexpr{#2==0}{\xintifboolexpr{#3==0}{\num{#4}}{-\num{\fpeval{abs(#4)}}}}{-\num{\fpeval{abs(#4)}}}}\LETTRE^2}% }% }% \newcommand{\DistriEchange}[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}}% \ifboolKV[ClesDistributivite]{Remarquable}{% \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==1}{\ifx\bla#4\bla(\AffichageEchange{#2}{#3}{0})^2\else(\AffichageEchange{#2}{#3}{0})(\AffichageEchange{#4}{#5}{0})\fi }{} \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==2}{% \ifx\bla#4\bla\xintifboolexpr{#3>0}{% \num{#2}^2+2\times\num{#2}\times\xintifboolexpr{#3==1}{}{\num{#3}}\useKV[ClesDistributivite]{Lettre}+ \xintifboolexpr{#3==1}{}{(\num{#3}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#3==1}{}{)}^2% }{% \num{#2}^2-2\times\num{#2}\times\xintifboolexpr{#3==-1}{}{\num{\fpeval{0-#3}}}\useKV[ClesDistributivite]{Lettre}+ \xintifboolexpr{#3==-1}{}{(\num{\fpeval{0-#3}}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#3==-1}{}{)}^2% }% \else\num{#2}^2-\xintifboolexpr{#3==1}{}{(\num{#3}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#3==1}{}{)}^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}{(}{}\AffichageEchange{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}% \xintifboolexpr{\Multim==0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\AffichageEchange{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}% \xintifboolexpr{\Multil==0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\AffichageEchange{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}% }{% \AffichageEchange{\Multi}{\Multim}{\Multil}% } \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#3*#3}}\xdef\SommeB{\fpeval{\SommeB+#2*#3+#3*#2}}\xdef\SommeC{\fpeval{\SommeC+#2*#2}}}{}% \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#3*#3}}\xdef\SommeB{\fpeval{\SommeB-#2*#3-#3*#2}}\xdef\SommeC{\fpeval{\SommeC-#2*#2}}}{}% \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}{(}{}\AffichageEchange{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}% \xintifboolexpr{\Multim==0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\AffichageEchange{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}% \xintifboolexpr{\Multil==0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\AffichageEchange{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}% }{% \AffichageEchange{\Multi}{\Multim}{\Multil}% } % \`a faire \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#3*#5}}\xdef\SommeB{\fpeval{\SommeB+#2*#5+#3*#4}}\xdef\SommeC{\fpeval{\SommeC+#2*#4}}}{}% \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#3*#5}}\xdef\SommeB{\fpeval{\SommeB-#2*#5-#3*#4}}\xdef\SommeC{\fpeval{\SommeC-#2*#4}}}{}% % \fi% }{}% }{% \ifboolKV[ClesDistributivite]{Numerique}{% }{% \ifboolKV[ClesDistributivite]{All}{% \xdef\NomLettre{\useKV[ClesDistributivite]{NomExpression}}% \xdef\NomFin{\useKV[ClesDistributivite]{Fin}}% \xdef\ValeurEchange{\useKV[ClesDistributivite]{Echange}} \xintFor* ##1 in {\xintSeq {1}{\useKV[ClesDistributivite]{Fin}-1}}\do {\NomLettre&=\DistriEchange[Echange=\ValeurEchange,Etape=##1]{#2}{#3}{#4}{#5}\\}% \NomLettre&=\DistriEchange[Echange=\ValeurEchange,Etape=\NomFin]{#2}{#3}{#4}{#5}% }{% % Etape 1 \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==1}{% \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==1||\useKV[ClesDistributivite]{Echange}==3}{% \xintifboolexpr{#2==0}{% }{\xintifboolexpr{#3==0}{% }{(}}\Tikzmark{\Affichage[#1]{0}{0}{#2}}% \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{+(}}{}% \xintifboolexpr{#3>0}{\xintifboolexpr{#2==0}{}{+}}{\xintifboolexpr{#3<0}{-}{}}\Tikzmark{\Affichage[#1]{0}{\fpeval{abs(#3)}}{0}}% \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{)}}{}% \xintifboolexpr{#2==0}{% }{\xintifboolexpr{#3==0}{% }{)}}% }{ \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{\useKV[ClesDistributivite]{Echange}==2||\useKV[ClesDistributivite]{Echange}==3}{% \xintifboolexpr{\Multi==0}{\times% \xintifboolexpr{#4<0}{(}{\xintifboolexpr{#5<0}{(}{}}}{(}% \Tikzmark{\AffichageEchange[#1]{#4}{0}{0}}% \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{+(}}{}% \xintifboolexpr{#5>0}{\xintifboolexpr{#4==0}{}{+}}{\xintifboolexpr{#5<0}{-}{}}\Tikzmark{\AffichageEchange[#1]{0}{\fpeval{abs(#5)}}{0}}% \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{)}}{}% \xintifboolexpr{\Multi==0}{% \xintifboolexpr{#4<0}{)}{\xintifboolexpr{#5<0}{)}{}}}{)}% }{% \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}{% \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==1}{% \xdef\Multi{\fpeval{#2*#4}}% \xintifboolexpr{\Multi==0}{}{% \xintifboolexpr{#2<0}{(}{}\AffichageEchange[#1]{#2}{0}{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}{(}{}\AffichageEchange[#1]{#2}{0}{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}{(}{}\AffichageEchange[#1]{0}{#3}{0}\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}{(}{}\AffichageEchange[#1]{0}{#3}{0}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}% }% }{}% \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==2}{% \xdef\Multi{\fpeval{#2*#4}}% \xintifboolexpr{\Multi==0}{}{% \xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\AffichageEchange[#1]{#4}{0}{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}{(}{}\AffichageEchange[#1]{0}{#5}{0}\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}{(}{}\AffichageEchange[#1]{#4}{0}{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}{(}{}\AffichageEchange[#1]{0}{#5}{0}\xintifboolexpr{#5<0}{)}{}% }% }{}% \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==3}{% \xdef\Multi{\fpeval{#2*#4}}% \xintifboolexpr{\Multi==0}{}{% \xintifboolexpr{#2<0}{(}{}\AffichageEchange[#1]{#2}{0}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\AffichageEchange[#1]{#4}{0}{0}\xintifboolexpr{#4<0}{)}{}% }% \xdef\Multij{\fpeval{#2*#5}}% \xintifboolexpr{\Multij==0}{}{% \xintifboolexpr{\Multi==0}{}{+}% \xintifboolexpr{#2<0}{(}{}\AffichageEchange[#1]{#2}{0}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\AffichageEchange[#1]{0}{#5}{0}\xintifboolexpr{#5<0}{)}{}% }% \xdef\Multik{\fpeval{#3*#4}}% \xintifboolexpr{\Multik==0}{}{% \xintifboolexpr{\Multi==0}{}{+}% \xintifboolexpr{#3<0}{(}{}\AffichageEchange[#1]{0}{#3}{0}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\AffichageEchange[#1]{#4}{0}{0}\xintifboolexpr{#4<0}{)}{}% }% \xdef\Multil{\fpeval{#3*#5}}% \xintifboolexpr{\Multil==0}{}{+% \xintifboolexpr{#3<0}{(}{}\AffichageEchange[#1]{0}{#3}{0}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\AffichageEchange[#1]{0}{#5}{0}\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{\useKV[ClesDistributivite]{Echange}==1}{% \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\AffichageEchange{0}{\Multi}{0})}{\AffichageEchange{0}{\Multi}{0}}}{\AffichageEchange{0}{\Multi}{0}}% \xintifboolexpr{\Multij==0}{}{\xintifboolexpr{\Multi==0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\AffichageEchange{\Multij}{0}{0}\xintifboolexpr{\Multij<0}{)}{}}% \xintifboolexpr{\Multik==0}{}{\xintifboolexpr{\Multil==0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\AffichageEchange{0}{0}{\Multik}\xintifboolexpr{\Multik<0}{)}{}}% \xintifboolexpr{\Multil==0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\AffichageEchange{0}{\Multil}{0}\xintifboolexpr{\Multil<0}{)}{}% \xdef\Multim{\fpeval{#2*#4+#3*#5}}% \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multik}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multij}}}{}% \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multik}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multij}}}{}% }{}% \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==2}{% \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\AffichageEchange{0}{\Multi}{0})}{\AffichageEchange{0}{\Multi}{0}}}{\AffichageEchange{0}{\Multi}{0}}% \xintifboolexpr{\Multij==0}{}{\xintifboolexpr{\Multi==0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\AffichageEchange{0}{0}{\Multij}\xintifboolexpr{\Multij<0}{)}{}}% \xintifboolexpr{\Multik==0}{}{\xintifboolexpr{\Multil==0}{\xintifboolexpr{#2==0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\AffichageEchange{\Multik}{0}{0}\xintifboolexpr{\Multik<0}{)}{}}% \xintifboolexpr{\Multil==0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\AffichageEchange{0}{\Multil}{0}\xintifboolexpr{\Multil<0}{)}{}% \xdef\Multim{\fpeval{#2*#4+#3*#5}}% \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multij}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multik}}}{}% \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multij}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multik}}}{}% }{}% \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==3}{% \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\AffichageEchange{\Multi}{0}{0})}{\AffichageEchange{\Multi}{0}{0}}}{\AffichageEchange{\Multi}{0}{0}}% \xintifboolexpr{\Multij==0}{}{\xintifboolexpr{\Multi==0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\AffichageEchange{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}% \xintifboolexpr{\Multik==0}{}{\xintifboolexpr{\Multil==0}{\xintifboolexpr{#2==0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\AffichageEchange{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}% \xintifboolexpr{\Multil==0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\AffichageEchange{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}% \xdef\Multim{\fpeval{#2*#5+#3*#4}}% \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multil}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multi}}}{}% \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multil}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multi}}}{}% }{}% }{}%fin etape3 % 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 \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}% \stepcounter{NbCalculDistri}% \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==1}{% \xdef\Multim{\fpeval{#2*#4+#3*#5}}% \ifboolKV[ClesDistributivite]{Oppose}{% \xdef\Multiko{\fpeval{-\Multik}}% \xdef\Multimo{\fpeval{-\Multim}}% \xdef\Multijo{\fpeval{-\Multij}}% \xintifboolexpr{\Multiko==0}{}{\xintifboolexpr{\Multiko<0}{(}{}\Affichage{\Multiko}{0}{0}\xintifboolexpr{\Multiko<0}{)}{}}% \xintifboolexpr{\Multimo==0}{}{\xintifboolexpr{\Multimo>0}{+}{+(}\Affichage{0}{\Multimo}{0}\xintifboolexpr{\Multimo<0}{)}{}}% \xintifboolexpr{\Multijo==0}{}{\xintifboolexpr{\Multijo>0}{+}{+(}\Affichage{0}{0}{\Multijo}\xintifboolexpr{\Multijo<0}{)}{}}% }{% \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multik<0}{(\Affichage{\Multik}{0}{0})}{\Affichage{\Multik}{0}{0}}}{\Affichage{\Multik}{0}{0}}% \xintifboolexpr{\Multim==0}{}{% \xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}% }% \xintifboolexpr{\Multij==0}{}{\xintifboolexpr{\Multij<0}{-\Affichage{0}{0}{\fpeval{-\Multij}}}{+\Affichage{0}{0}{\Multij}}}% }% \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multik}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multij}}}{}% \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multik}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multij}}}{}% }{}% \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==2}{% \xdef\Multim{\fpeval{#2*#4+#3*#5}}% \ifboolKV[ClesDistributivite]{Oppose}{% \xdef\Multijo{\fpeval{-\Multij}}% \xdef\Multimo{\fpeval{-\Multim}}% \xdef\Multiko{\fpeval{-\Multik}}% \xintifboolexpr{\Multijo==0}{}{\xintifboolexpr{\Multijo<0}{(}{}\Affichage{\Multijo}{0}{0}\xintifboolexpr{\Multijo<0}{)}{}}% \xintifboolexpr{\Multimo==0}{}{\xintifboolexpr{\Multimo>0}{+}{+(}\Affichage{0}{\Multimo}{0}\xintifboolexpr{\Multimo<0}{)}{}}% \xintifboolexpr{\Multiko==0}{}{\xintifboolexpr{\Multiko>0}{+}{+(}\Affichage{0}{0}{\Multiko}\xintifboolexpr{\Multiko<0}{)}{}}% }{% \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multij<0}{(\Affichage{\Multij}{0}{0})}{\Affichage{\Multij}{0}{0}}}{\Affichage{\Multij}{0}{0}}% \xintifboolexpr{\Multim==0}{}{% \xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}% }% \xintifboolexpr{\Multik==0}{}{\xintifboolexpr{\Multik<0}{-\Affichage{0}{0}{\fpeval{-\Multik}}}{+\Affichage{0}{0}{\Multik}}}% }% \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multij}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multik}}}{}% \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multij}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multik}}}{}% }{}% \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==3}{% \xdef\Multim{\fpeval{#2*#5+#3*#4}}% \ifboolKV[ClesDistributivite]{Oppose}{% \xdef\Multilo{\fpeval{-\Multil}}% \xdef\Multimo{\fpeval{-\Multim}}% \xdef\Multio{\fpeval{-\Multi}}% \xintifboolexpr{\Multilo==0}{}{\xintifboolexpr{\Multilo<0}{(}{}\Affichage{\Multilo}{0}{0}\xintifboolexpr{\Multilo<0}{)}{}}% \xintifboolexpr{\Multimo==0}{}{\xintifboolexpr{\Multimo>0}{+}{+(}\Affichage{0}{\Multimo}{0}\xintifboolexpr{\Multimo<0}{)}{}}% \xintifboolexpr{\Multio==0}{}{\xintifboolexpr{\Multio>0}{+}{+(}\Affichage{0}{0}{\Multio}\xintifboolexpr{\Multio<0}{)}{}}% }{% \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multil<0}{(\Affichage{\Multil}{0}{0})}{\Affichage{\Multil}{0}{0}}}{\Affichage{\Multil}{0}{0}}% \xintifboolexpr{\Multim==0}{}{% \xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}% }% \xintifboolexpr{\Multi==0}{}{\xintifboolexpr{\Multi<0}{-\Affichage{0}{0}{\fpeval{-\Multi}}}{+\Affichage{0}{0}{\Multi}}}% } \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multil}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multi}}}{}% \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multil}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multi}}}{}% }{}% }{}% }% }% }% }% }% %%% % Nombre Premier %%% \setKVdefault[ClesNombrePremier]{Tableau=false,TableauVertical=false,TableauVerticalVide=false,Exposant=false,Longue=false,All=false,Arbre=false,ArbreVide=false,ArbreComplet=false,Diviseurs=false,DiviseursT=false,Dot=\dotfill,Impose=false,ImposeAll=false} \defKV[ClesNombrePremier]{Nombre=\setKV[ClesNombrePremier]{Impose}} \defKV[ClesNombrePremier]{AllNombre=\setKV[ClesNombrePremier]{ImposeAll}} \newcommand\Decomposition[2][]{% \useKVdefault[ClesNombrePremier]% \setKV[ClesNombrePremier]{#1}% \ifboolKV[ClesNombrePremier]{Impose}{\NombrePremierImpose{#2}{\useKV[ClesNombrePremier]{Nombre}}{\fpeval{#2/\useKV[ClesNombrePremier]{Nombre}}}}{}% \ifboolKV[ClesNombrePremier]{ImposeAll}{\NombrePremierImposeAll{#2}{\useKV[ClesNombrePremier]{AllNombre}}{\fpeval{#2/\useKV[ClesNombrePremier]{AllNombre}}}}{}% \ifboolKV[ClesNombrePremier]{Tableau}{\NombrePremier{#2}}{}% \ifboolKV[ClesNombrePremier]{TableauVertical}{\NombrePremierVertical{#2}}{}% \ifboolKV[ClesNombrePremier]{TableauVerticalVide}{\NombrePremierVerticalVide{#2}}{}% \ifboolKV[ClesNombrePremier]{Exposant}{\PremierExposant{#2}}{}% \ifboolKV[ClesNombrePremier]{Longue}{\PremierLong{#2}}{}% \ifboolKV[ClesNombrePremier]{All}{\NombrePremierExposant{#2}}{}% \ifboolKV[ClesNombrePremier]{Arbre}{\MPArbre{#2}}{}% \ifboolKV[ClesNombrePremier]{ArbreComplet}{\MPArbreComplet{#2}}{}% \ifboolKV[ClesNombrePremier]{Diviseurs}{\ListeDiviseur{#2}}{}% \ifboolKV[ClesNombrePremier]{DiviseursT}{\ListeDiviseurT{#2}}{}% \ifboolKV[ClesNombrePremier]{ArbreVide}{\MPArbreVide{#2}}{}% }% \def\MPArbre#1{% \ifluatex \mplibforcehmode \begin{mplibcode} numeric depart; pair Ancre[]; numeric decalage; decalage=10mm; vardef PremierSimple(expr NB)= b:=2; depart:=NB; if Estcepremier(depart)=false: forever: if (depart mod b)=0: Ancre[k+1]-Ancre[k]=(-decalage*0.5,-decalage); Ancre[k+2]-Ancre[k+1]=(decalage,0); depart:=depart div b; label(TEX("\num{"&decimal(b)&"}"),Ancre[k+1]); label(TEX("\num{"&decimal(depart)&"}"),Ancre[k+2]); draw 1/5[Ancre[k],Ancre[k+1]]--4/5[Ancre[k],Ancre[k+1]]; draw 1/5[Ancre[k],Ancre[k+2]]--4/5[Ancre[k],Ancre[k+2]]; k:=k+2; racine:=depart; depart:=1; else: b:=b+1; fi; exitif depart=1; endfor; else: racine:=1; fi; enddef; vardef Estcepremier(expr NBa)= boolean $; c:=2; departa:=NBa; test:=1; $=true; if departa=1: $:=false; else: forever: if (departa mod c)=0: departa:=departa div c; test:=test+1; else: c:=c+1; fi; exitif departa=1; endfor; fi; if test=2: $:=true else: $:=false; fi; $ enddef; k:=0; Ancre0:=(0,0); racine:=#1; label(btex \num{#1} etex,(0,0)); forever: PremierSimple(racine); exitif racine=1; endfor; \end{mplibcode} \else \begin{mpost} numeric depart; pair Ancre[]; numeric decalage; decalage=10mm; vardef PremierSimple(expr NB)= b:=2; depart:=NB; if Estcepremier(depart)=false: forever: if (depart mod b)=0: Ancre[k+1]-Ancre[k]=(-decalage*0.5,-decalage); Ancre[k+2]-Ancre[k+1]=(decalage,0); depart:=depart div b; label(LATEX("\num{"&decimal(b)&"}"),Ancre[k+1]); label(LATEX("\num{"&decimal(depart)&"}"),Ancre[k+2]); draw 1/5[Ancre[k],Ancre[k+1]]--4/5[Ancre[k],Ancre[k+1]]; draw 1/5[Ancre[k],Ancre[k+2]]--4/5[Ancre[k],Ancre[k+2]]; k:=k+2; racine:=depart; depart:=1; else: b:=b+1; fi; exitif depart=1; endfor; else: racine:=1; fi; enddef; vardef Estcepremier(expr NBa)= boolean $; c:=2; departa:=NBa; test:=1; $=true; if departa=1: $:=false; else: forever: if (departa mod c)=0: departa:=departa div c; test:=test+1; else: c:=c+1; fi; exitif departa=1; endfor; fi; if test=2: $:=true else: $:=false; fi; $ enddef; k:=0; Ancre0:=(0,0); racine:=#1; label(LATEX("\num{"&decimal(racine)&"}"),(0,0)); forever: PremierSimple(racine); exitif racine=1; endfor; \end{mpost} \fi } \def\MPArbreComplet#1{% \ifluatex \mplibforcehmode \begin{mplibcode} beginfig(1); numeric depart; pair Ancre[]; numeric decalage; decalage=7.5mm; vardef NbEtape(expr nb)= b:=2; depart:=nb; etape:=0; Stock[0][0]=depart; forever: if (depart mod b)=0: etape:=etape+1; if etape=1: Stock[etape][0]=b; Stock[etape][etape]:=depart div b; else: for k=0 upto etape-2: Stock[etape][k]:=Stock[etape-1][k]; endfor; Stock[etape][etape-1]:=b; Stock[etape][etape]:=depart div b; fi; depart:=depart div b; else: b:=b+1; fi; exitif depart=1; endfor; etape enddef; dx:=1cm; dy:=1cm; pair N[][]; vardef Positions(expr Step)= for k=0 upto (Step-1): for l=0 upto k: N[k][l]=(-k*dx+(l+k*.5)*dx,-k*dy); label(TEX("\num{"&decimal(Stock[k][l])&"}"),N[k][l]); endfor; for l=0 upto k-1: label(btex $\times$ etex,1/2[N[k][l],N[k][l+1]]); endfor; endfor; for k=0 upto (Step-1): for l=0 upto (k-1): draw 1/5[N[k][l],N[k-1][l]]--4/5[N[k][l],N[k-1][l]]; endfor; if k>0: draw 1/5[N[k][k],N[k-1][k-1]]--4/5[N[k][k],N[k-1][k-1]]; fi; endfor; enddef; Positions(NbEtape(#1)); \end{mplibcode} \else \begin{mpost} numeric depart; pair Ancre[]; numeric decalage; decalage=7.5mm; vardef NbEtape(expr nb)= b:=2; depart:=nb; etape:=0; Stock[0][0]=depart; forever: if (depart mod b)=0: etape:=etape+1; if etape=1: Stock[etape][0]=b; Stock[etape][etape]:=depart div b; else: for k=0 upto etape-2: Stock[etape][k]:=Stock[etape-1][k]; endfor; Stock[etape][etape-1]:=b; Stock[etape][etape]:=depart div b; fi; depart:=depart div b; else: b:=b+1; fi; exitif depart=1; endfor; etape enddef; dx:=1cm; dy:=1cm; pair N[][]; vardef Positions(expr Step)= for k=0 upto (Step-1): for l=0 upto k: N[k][l]=(-k*dx+(l+k*.5)*dx,-k*dy); label(LATEX("\num{"&decimal(Stock[k][l])&"}"),N[k][l]); endfor; for l=0 upto k-1: label(btex $\times$ etex,1/2[N[k][l],N[k][l+1]]); endfor; endfor; for k=0 upto (Step-1): for l=0 upto (k-1): draw 1/5[N[k][l],N[k-1][l]]--4/5[N[k][l],N[k-1][l]]; endfor; if k>0: draw 1/5[N[k][k],N[k-1][k-1]]--4/5[N[k][k],N[k-1][k-1]]; fi; endfor; enddef; Positions(NbEtape(#1)); \end{mpost} \fi } \def\MPArbreVide#1{% \ifluatex \mplibforcehmode \begin{mplibcode} numeric depart; pair Ancre[]; numeric decalage; decalage=7.5mm; vardef NbEtape(expr nb)= b:=2; depart:=nb; etape:=0; Stock[0][0]=depart; forever: if (depart mod b)=0: etape:=etape+1; if etape=1: Stock[etape][0]=b; Stock[etape][etape]:=depart div b; else: for k=0 upto etape-2: Stock[etape][k]:=Stock[etape-1][k]; endfor; Stock[etape][etape-1]:=b; Stock[etape][etape]:=depart div b; fi; depart:=depart div b; else: b:=b+1; fi; exitif depart=1; endfor; etape enddef; dx:=1cm; dy:=1cm; pair N[][]; vardef Positions(expr Step)= for k=0 upto (Step-1): for l=0 upto k: N[k][l]=(-k*dx+(l+k*.5)*dx,-k*dy); endfor; for l=0 upto k-1: label(btex $\times$ etex,1/2[N[k][l],N[k][l+1]]); endfor; endfor; for k=0 upto (Step-1): for l=0 upto (k-1): draw 1/5[N[k][l],N[k-1][l]]--4/5[N[k][l],N[k-1][l]]; endfor; if k>0: draw 1/5[N[k][k],N[k-1][k-1]]--4/5[N[k][k],N[k-1][k-1]]; fi; endfor; label(TEX("\num{"&decimal(Stock[0][0])&"}"),N[0][0]); enddef; Positions(NbEtape(#1)); \end{mplibcode} \else \begin{mpost} numeric depart; pair Ancre[]; numeric decalage; decalage=7.5mm; vardef NbEtape(expr nb)= b:=2; depart:=nb; etape:=0; Stock[0][0]=depart; forever: if (depart mod b)=0: etape:=etape+1; if etape=1: Stock[etape][0]=b; Stock[etape][etape]:=depart div b; else: for k=0 upto etape-2: Stock[etape][k]:=Stock[etape-1][k]; endfor; Stock[etape][etape-1]:=b; Stock[etape][etape]:=depart div b; fi; depart:=depart div b; else: b:=b+1; fi; exitif depart=1; endfor; etape enddef; dx:=1cm; dy:=1cm; pair N[][]; vardef Positions(expr Step)= for k=0 upto (Step-1): for l=0 upto k: N[k][l]=(-k*dx+(l+k*.5)*dx,-k*dy); endfor; for l=0 upto k-1: label(btex $\times$ etex,1/2[N[k][l],N[k][l+1]]); endfor; endfor; for k=0 upto (Step-1): for l=0 upto (k-1): draw 1/5[N[k][l],N[k-1][l]]--4/5[N[k][l],N[k-1][l]]; endfor; if k>0: draw 1/5[N[k][k],N[k-1][k-1]]--4/5[N[k][k],N[k-1][k-1]]; fi; endfor; label(LATEX("\num{"&decimal(Stock[0][0])&"}"),N[0][0]); enddef; Positions(NbEtape(#1)); \end{mpost} \fi } \newcount\premier \newcommand{\NombrePremier}[1]{%\'ecrire la d\'ecomposition compl\`ete % #1 le nombre premier \`a tester \newcount\anp\newcount\bnp\newcount\cnp%\newcount\e\newcount\f% \anp=#1\relax \bnp=2\relax \premier=-1\relax % Pour d\'eterminer le nombre d'\'etapes \whiledo{\anp > 1}{% \modulo{\the\anp}{\the\bnp} \ifnum\remainder=0\relax \global\premier=\numexpr\premier+1\relax \cnp=\numexpr\anp/\bnp\relax \anp=\cnp\relax \else% \bnp=\numexpr\bnp+1\relax% \fi% } \ifnum\premier=0 Le nombre \num{#1} est un nombre premier. \else \begin{align*} \xintFor* ##1 in {\xintSeq {1}{\premier}}\do {\num{#1}&=\PremierEtape{#1}{##1}\xintifboolexpr{##1<\premier}{\\}{}}% \end{align*} \fi } \newcount\premierun \newcount\premierdeux \newcommand\NombrePremierImpose[3]{%\'ecrire la d\'ecomposition compl\`ete % #1 le nombre premier \`a tester % #2 est le premier facteur imposé % #3 est le deuxième facteur imposé \newcount\anp\newcount\bnp\newcount\cnp%\newcount\e\newcount\f% % Pour d\'eterminer le nombre d'\'etapes pour #1 \anp=#1\relax \bnp=2\relax \premier=-1\relax \whiledo{\anp > 1}{% \modulo{\the\anp}{\the\bnp} \ifnum\remainder=0\relax \global\premier=\numexpr\premier+1\relax \cnp=\numexpr\anp/\bnp\relax \anp=\cnp\relax \else% \bnp=\numexpr\bnp+1\relax% \fi% }% % Pour d\'eterminer le nombre d'\'etapes pour #2 \anp=#2\relax \bnp=2\relax \premierun=-1\relax \whiledo{\anp > 1}{% \modulo{\the\anp}{\the\bnp} \ifnum\remainder=0\relax \global\premierun=\numexpr\premierun+1\relax \cnp=\numexpr\anp/\bnp\relax \anp=\cnp\relax \else% \bnp=\numexpr\bnp+1\relax% \fi% }% % Pour d\'eterminer le nombre d'\'etapes pour #3 \anp=#3\relax \bnp=2\relax \premierdeux=-1\relax \whiledo{\anp > 1}{% \modulo{\the\anp}{\the\bnp} \ifnum\remainder=0\relax \global\premierdeux=\numexpr\premierdeux+1\relax \cnp=\numexpr\anp/\bnp\relax \anp=\cnp\relax \else% \bnp=\numexpr\bnp+1\relax% \fi% }% \ifnum\premier=0 Le nombre \num{#1} est un nombre premier. \else \xintifboolexpr{\premierun>\premierdeux}{\premier=\premierun}{\premier=\premierdeux} \begin{align*} \num{#1}&=\num{#2}\times\num{#3}%\\ \xintifboolexpr{\premier>0}{\\% \xintFor* ##1 in {\xintSeq {1}{\premier}}\do {\num{#1}&=\xintifboolexpr{##1<\premierun}{\PremierEtape{#2}{##1}}{\Decomposition[Longue]{#2}}\mathrel{\times}\xintifboolexpr{##1<\premierdeux}{\PremierEtape{#3}{##1}}{\Decomposition[Longue]{#3}}\xintifboolexpr{##1<\premier}{\\}{}}% }{}% \end{align*} \fi }% \newcommand\NombrePremierImposeAll[3]{%\'ecrire la d\'ecomposition compl\`ete % #1 le nombre premier \`a tester % #2 est le premier facteur imposé % #3 est le deuxième facteur imposé \newcount\anp\newcount\bnp\newcount\cnp%\newcount\e\newcount\f% % Pour d\'eterminer le nombre d'\'etapes pour #1 \anp=#1\relax \bnp=2\relax \premier=-1\relax \whiledo{\anp > 1}{% \modulo{\the\anp}{\the\bnp} \ifnum\remainder=0\relax \global\premier=\numexpr\premier+1\relax \cnp=\numexpr\anp/\bnp\relax \anp=\cnp\relax \else% \bnp=\numexpr\bnp+1\relax% \fi% } % Pour d\'eterminer le nombre d'\'etapes pour #2 \anp=#2\relax \bnp=2\relax \premierun=-1\relax \whiledo{\anp > 1}{% \modulo{\the\anp}{\the\bnp} \ifnum\remainder=0\relax \global\premierun=\numexpr\premierun+1\relax \cnp=\numexpr\anp/\bnp\relax \anp=\cnp\relax \else% \bnp=\numexpr\bnp+1\relax% \fi% } % Pour d\'eterminer le nombre d'\'etapes pour #3 \anp=#3\relax \bnp=2\relax \premierdeux=-1\relax \whiledo{\anp > 1}{% \modulo{\the\anp}{\the\bnp} \ifnum\remainder=0\relax \global\premierdeux=\numexpr\premierdeux+1\relax \cnp=\numexpr\anp/\bnp\relax \anp=\cnp\relax \else% \bnp=\numexpr\bnp+1\relax% \fi% }% \ifnum\premier=0 Le nombre \num{#1} est un nombre premier. \else% \xintifboolexpr{\premierun>\premierdeux}{\premier=\premierun}{\premier=\premierdeux}% \begin{align*} \num{#1}&=\num{#2}\times\num{#3}%\\ \xintifboolexpr{\premier>0}{\\% \xintFor* ##1 in {\xintSeq {1}{\premier}}\do {\num{#1}&=\xintifboolexpr{##1<\premierun}{\PremierEtape{#2}{##1}}{\Decomposition[Longue]{#2}}\mathrel{\times}\xintifboolexpr{##1<\premierdeux}{\PremierEtape{#3}{##1}}{\Decomposition[Longue]{#3}}\\ }% \num{#1}&=\PremierExposant{#1}% }{} \end{align*} \fi% }% \newcommand{\NombrePremierVertical}[1]{%\'ecrire la d\'ecomposition compl\`ete % #1 le nombre premier \`a tester \newcount\anpv\newcount\bnpv\newcount\cnpv%\newcount\e\newcount\f% \anpv=#1\relax \bnpv=2\relax \premier=-1\relax % Pour d\'eterminer le nombre d'\'etapes \whiledo{\anpv > 1}{% \modulo{\the\anpv}{\the\bnpv} \ifnum\remainder=0\relax \global\premier=\numexpr\premier+1\relax \cnpv=\numexpr\anpv/\bnpv\relax \anpv=\cnpv\relax \else% \bnpv=\numexpr\bnpv+1\relax% \fi% } \ifnum\premier=0 Le nombre \num{#1} est un nombre premier. \else \begin{tabular}{c|c} \xintFor* ##1 in {\xintSeq {0}{\premier}}\do {\PremierMultipleVide{#1}{##1}&\xdef\Etape{\fpeval{##1+1}}\PremierDiviseurVide{#1}{\Etape} \xintifboolexpr{##1<\premier}{\\}{\\1\\}}% \end{tabular} \fi } \newcommand{\PremierDiviseurVide}[2]{% %#1 : le nombre entier \`a tester %#2 : le nombre d'\'etapes \`a effectuer \newcount\anpvv\newcount\bnpvv\newcount\cnpvv\newcount\dnpvv% \ensuremath{% \anpvv=#1\relax \bnpvv=2\relax \dnpvv=0\relax% \whiledo{\anpvv > 1}{% \whiledo{\dnpvv < \number#2}{% \modulo{\the\anpvv}{\the\bnpvv} \ifnum\remainder=0\relax \dnpvv=\numexpr\dnpvv+1\relax \cnpvv=\numexpr\anpvv/\bnpvv\relax \anpvv=\cnpvv\relax \else% \bnpvv=\numexpr\bnpvv+1\relax% \fi% } \num{\the\bnpvv}% \anpvv=1% } } } \newcommand{\PremierMultipleVide}[2]{% %#1 : le nombre entier \`a tester %#2 : le nombre d'\'etapes \`a effectuer \newcount\anpmv\newcount\bnpmv\newcount\cnpmv\newcount\dnpmv% \ensuremath{% \anpmv=#1\relax \bnpmv=2\relax \dnpmv=0\relax% \whiledo{\anpmv > 1}{% \whiledo{\dnpmv < \number#2}{% \modulo{\the\anpmv}{\the\bnpmv} \ifnum\remainder=0\relax \dnpmv=\numexpr\dnpmv+1\relax \cnpmv=\numexpr\anpmv/\bnpmv\relax \anpmv=\cnpmv\relax \else% \bnpmv=\numexpr\bnpmv+1\relax% \fi% } \num{\the\anpmv}% \anpmv=1% } } } \newcommand{\NombrePremierVerticalVide}[1]{%\'ecrire la d\'ecomposition compl\`ete % #1 le nombre premier \`a tester \newcount\anpv\newcount\bnpv\newcount\cnpv%\newcount\e\newcount\f% \anpv=#1\relax \bnpv=2\relax \premier=-1\relax % Pour d\'eterminer le nombre d'\'etapes \whiledo{\anpv > 1}{% \modulo{\the\anpv}{\the\bnpv} \ifnum\remainder=0\relax \global\premier=\numexpr\premier+1\relax \cnpv=\numexpr\anpv/\bnpv\relax \anpv=\cnpv\relax \else% \bnpv=\numexpr\bnpv+1\relax% \fi% } \ifnum\premier=0 Le nombre \num{#1} est un nombre premier. \else \renewcommand{\arraystretch}{1.5} \begin{tabular}{c|c} \PremierMultipleVide{#1}{0}&\hbox to1cm{\useKV[ClesNombrePremier]{Dot}}\\ \xintFor* ##1 in {\xintSeq {1}{\premier}}\do {\hbox to1cm{\useKV[ClesNombrePremier]{Dot}}&\hbox to1cm{\useKV[ClesNombrePremier]{Dot}}\xintifboolexpr{##1<\premier}{\\}{\\\hbox to1cm{\useKV[ClesNombrePremier]{Dot}}\\}}% \end{tabular} \renewcommand{\arraystretch}{1} \fi } \newcommand{\NombrePremierExposant}[1]{%\'ecrire la d\'ecomposition % compl\`ete \newcount\anp\newcount\bnp\newcount\cnp%\newcount\e\newcount\f% % #1 le nombre premier \`a tester \anp=#1\relax% \bnp=2\relax% \premier=-1\relax% % Pour d\'eterminer le nombre d'\'etapes \whiledo{\anp > 1}{% \modulo{\the\anp}{\the\bnp} \ifnum\remainder=0\relax% \global\premier=\numexpr\premier+1\relax% \cnp=\numexpr\anp/\bnp\relax% \anp=\cnp\relax% \else% \bnp=\numexpr\bnp+1\relax% \fi% }% \ifnum\premier=0% Le nombre \num{#1} est un nombre premier.% \else% \begin{align*} \xintFor* ##1 in {\xintSeq {1}{\premier}}\do {\num{#1}&=\PremierEtape{#1}{##1}\\}% \num{#1}&=\PremierExposant{#1}% \end{align*}% \fi% }% \newcommand{\PremierEtape}[2]{% %#1 : le nombre entier \`a tester %#2 : le nombre d'\'etapes \`a effectuer \newcount\anp\newcount\bnp\newcount\cnp\newcount\dnp% \ensuremath{% \anp=#1\relax \bnp=2\relax \dnp=0\relax% \whiledo{\anp > 1}{% \whiledo{\dnp < \number#2}{% \modulo{\the\anp}{\the\bnp} \ifnum\remainder=0\relax \dnp=\numexpr\dnp+1\relax \cnp=\numexpr\anp/\bnp\relax \anp=\cnp\relax \num{\the\bnp}\times% \else% \bnp=\numexpr\bnp+1\relax% \fi% } \num{\the\anp}% \anp=1% } } } \newcommand{\PremierExposant}[1]{% %#1 : le nombre entier \`a tester \ensuremath{% \newcount\anp\newcount\bnp\newcount\cnp% \newcount\pileb\newcount\exposant% \exposant=0\relax% \anp=#1\relax% \bnp=2\relax% \pileb=2\relax% \whiledo{\the\anp > 1}{% \modulo{\the\anp}{\the\bnp} \ifnum\remainder=0\relax \cnp=\numexpr\anp/\bnp\relax \ifnum\pileb=\bnp \exposant=\numexpr\exposant+1\relax \fi \anp=\cnp\relax \else% \ifnum\exposant>0\relax \num{\the\pileb}\ifnum\exposant>1 ^{\num{\the\exposant}}\fi\times% \fi \bnp=\numexpr\bnp+1\relax% \pileb=\bnp\relax% \exposant=0\relax% \fi% }% \num{\the\pileb}\ifnum\exposant>1^{\num{\the\exposant}}\fi% }% }% \newcommand{\PremierLong}[1]{% %#1 : le nombre entier \`a tester \ensuremath{% \newcount\anpl\newcount\bnpl\newcount\cnpl% \newcount\pilebl% \anpl=#1\relax% \bnpl=2\relax% \pilebl=2\relax% \whiledo{\the\anpl > 1}{% \modulo{\the\anpl}{\the\bnpl} \ifnum\remainder=0\relax \cnpl=\numexpr\anpl/\bnpl\relax \num{\the\bnpl}\ifnum\anpl>\bnpl\times\fi% \anpl=\cnpl\relax \else% \bnpl=\numexpr\bnpl+1\relax% \pilebl=\bnpl\relax% \fi% } } } \newcommand{\ListeDiviseur}[1]{%#1 : le nombre entier \`a tester \newcount\anp\newcount\bnp% \anp=#1% \bnp=2\relax% 1 % \whiledo{\bnp<\anp}{% \modulo{\the\anp}{\the\bnp}{}% \ifnum\remainder=0% ; $\num{\the\bnp}$ % \fi% \bnp=\numexpr\bnp+1% }% et \num{\the\anp}% } \newcount\anpT\newcount\bnpT\newcount\cnpT\newcount\dnpT% \newcommand\ListeDiviseurT[1]{%#1 : le nombre entier \`a tester \anpT=#1% \bnpT=2\relax% %On compte les diviseurs propres. \cnpT=0\relax% \whiledo{\bnpT<\anpT}{% \modulo{\the\anpT}{\the\bnpT}{}% \ifnum\remainder=0% \cnpT=\numexpr\cnpT+1 \fi% \bnpT=\numexpr\bnpT+1% }% \ifodd\cnpT \begin{tabular}{c|c} 1&\num{#1}\\ \xintFor* ##1 in {\xintSeq {1}{\fpeval{(\cnpT+1)/2}}}\do{% \DiviseurNumero{#1}{##1}\num{\fpeval{\dnpT}}\uppercase{&}\DiviseurNumero{#1}{##1}\xintifboolexpr{\dnpT=\fpeval{#1/\dnpT}}{}{\num{\fpeval{#1/\dnpT}}}\\ } \end{tabular} \else \begin{tabular}{c|c} 1&\num{#1}\\ \xintFor* ##1 in {\xintSeq {1}{\fpeval{\cnpT/2}}}\do{% \DiviseurNumero{#1}{##1}\num{\fpeval{\dnpT}}\uppercase{&}\DiviseurNumero{#1}{##1}\num{\fpeval{#1/\dnpT}}\\ } \end{tabular} \fi } \newcommand\DiviseurNumero[2]{% % #1 nb entier \`a tester % #2 no du diviseur (\`a part 1 et #1) \anpT=#1% \bnpT=2\relax% %On compte les diviseurs propres. \cnpT=0\relax% \whiledo{\bnpT<\anpT}{% \modulo{\the\anpT}{\the\bnpT}{}% \ifnum\remainder=0% \cnpT=\numexpr\cnpT+1% \ifnum\cnpT=\numexpr#2-1% \dnpT=\bnpT% \bnpT=\anpT% \fi% \fi% \bnpT=\numexpr\bnpT+1% }% } %%% % Simplification %%% \makeatletter%by christian Tellechea % Calcul du PGCD de #1 et #2 \newcount\cnt@a\newcount\cnt@b\newcount\pgcd \def\PGCD#1#2{% \ifnum#1>#2\cnt@a#1\cnt@b#2\else\cnt@a#2\cnt@b#1\relax\fi \PGCD@i } \def\PGCD@i{\edef\PGCD@ii##1{##1{\number\cnt@a}{\number\cnt@b}}\PGCD@ii\PGCD@iii} \def\PGCD@iii#1#2{% \cnt@b#1\relax\global\divide\cnt@b#2% \global\cnt@b\numexpr#1-#2*\cnt@b% \global\cnt@a#2\global\pgcd\cnt@a% \ifnum\cnt@b>\z@\expandafter\PGCD@i% \fi}% \makeatother \def\SSimplifie#1#2{% % Simplification d'une \'ecriture #1/#2 \ensuremath{ \newcount\numerateur\newcount\denominateur\newcount\valabsnum\newcount\valabsdeno \numerateur=\number#1 \denominateur=\number#2 \ifnum\number#1<0\relax \valabsnum=\numexpr0-\number#1 \else \valabsnum=\number#1 \fi \ifnum\number#2<0\relax \valabsdeno=\numexpr0-\number#2 \else \valabsdeno=\number#2 \fi \ifnum\the\numerateur<0\relax \ifnum\the\denominateur<0\relax \numerateur=\valabsnum \denominateur=\valabsdeno \fi \else \ifnum\the\denominateur<0\relax \numerateur=-\valabsnum \denominateur=\valabsdeno \fi \fi \ifnum\number#2=0\relax \text{\bfseries(???)} \else \ifnum\number#1=0\relax 0 \else \PGCD{\the\valabsnum}{\the\valabsdeno}% \ifnum\pgcd>1\relax \ifthenelse{\pgcd=\number#2 \OR \pgcd=\the\valabsdeno}{% \divide\numerateur by \denominateur\num{\the\numerateur} }{\divide\numerateur by\pgcd% \divide\denominateur by\pgcd% \frac{\num{\the\numerateur}}{\num{\the\denominateur}} } \else%%%comme on est avec les n\'egatifs, on doit regarder si la valeur absolue est \'egale \`a 1 \ifnum\valabsdeno=1\relax \divide\numerateur by \denominateur\num{\the\numerateur} \else \frac{\num{\the\numerateur}}{\num{\the\denominateur}} \fi \fi% \fi% \fi% }% } \newcommand{\SSimpli}[2]{% % D\'ecomposition d'une simplification de #1/#2 \newcount\numerateur\newcount\denominateur\newcount\valabsnum\newcount\valabsdeno% \numerateur=\number#1 \denominateur=\number#2 \ifnum\number#1<0 \valabsnum=\numexpr0-\number#1 \else \valabsnum=\number#1 \fi \ifnum\number#2<0 \valabsdeno=\numexpr0-\number#2 \else \valabsdeno=\number#2 \fi \ifnum\the\numerateur<0\relax \ifnum\the\denominateur<0\relax \numerateur=\valabsnum \denominateur=\valabsdeno \fi \else \ifnum\the\denominateur<0\relax \numerateur=-\valabsnum \denominateur=\valabsdeno \fi \fi \ifnum\number#2=0\relax \ensuremath{\text{\bfseries(???)}} \else \ifnum\number#1=0\relax 0 \else \PGCD{\the\valabsnum}{\the\valabsdeno}% \ifnum\pgcd>1\relax \ifthenelse{\pgcd=\number#2 \OR \pgcd=\the\valabsdeno}{% \divide\numerateur by \denominateur\num{\the\numerateur} }{%\divide\numerateur by\pgcd% % \divide\denominateur by\pgcd% \ensuremath{\frac{\num{\the\numerateur}_{\mbox{\tiny$\div\num{\number\pgcd}$}}}{\num{\the\denominateur}_{\mbox{\tiny$\div\num{\number\pgcd}$}}}}% } \else \ifnum\denominateur=1\relax \ensuremath{\frac{\num{\the\numerateur}_{\mbox{\tiny$\div\num{\number\pgcd}$}}}{\num{\the\denominateur}_{\mbox{\tiny$\div\num{\number\pgcd}$}}}} \else \ensuremath{\frac{\num{\the\numerateur}}{\num{\the\denominateur}}} \fi \fi \fi \fi } \newcount\anpdc\newcount\bnpdc\newcount\cnpdc\newcount\dnpdc% \newcount\DivCom \newcommand\DiviseurCommun[2]{% % #1 : le premier nombre entier % #2 : le deuxi\`eme nombre entier % nombre 1 vaut #1 - Nombre 2 vaut #2 \anpdc=#1% \cnpdc=#2% \bnpdc=2\relax% \dnpdc=\numexpr#1+1\relax% \DivCom=1\relax% \whiledo{\bnpdc<\dnpdc}{% \modulo{\the\anpdc}{\the\bnpdc}\relax \ifnum\remainder=0% \modulo{\the\cnpdc}{\the\bnpdc} \ifnum\remainder=0% \DivCom=\bnpdc% \bnpdc=\anpdc% \else% \DivCom=1% \fi \else% \DivCom=1% \fi \bnpdc=\numexpr\bnpdc+1\relax% }% } \newcommand\LongueSimplification[2]{% \xdef\NumerateurDiv{#1}% \xdef\DenominateurDiv{#2}% \DiviseurCommun{#1}{#2}% \ensuremath{% \whiledo{\DivCom>1}{% \frac{\num{\fpeval{\NumerateurDiv/\the\DivCom}}\times\num{\the\DivCom}}{\num{\fpeval{\DenominateurDiv/\the\DivCom}}\times\num{\the\DivCom}}=\frac{\num{\fpeval{\NumerateurDiv/\DivCom}}}{\num{\fpeval{\DenominateurDiv/\DivCom}}}% \xdef\NumerateurDiv{\fpeval{\NumerateurDiv/\DivCom}}% \xdef\DenominateurDiv{\fpeval{\DenominateurDiv/\DivCom}}% \DiviseurCommun{\NumerateurDiv}{\DenominateurDiv}% \xintifboolexpr{\DivCom>1}{=}{}% }% }% }% \setKVdefault[ClesSimplification]{Details=false,All=false,Longue=false,Fleches=false,Contraire=0} \newcounter{NbFrac}% \setcounter{NbFrac}{0}% \newcommand\Simplification[3][]{% \stepcounter{NbFrac}% \useKVdefault[ClesSimplification]% \setKV[ClesSimplification]{#1}% \ifboolKV[ClesSimplification]{Fleches}{% \setsepchar[*]{,*/}%\ignoreemptyitems \readlist*\Listea{#2}% \readlist*\Listeb{#3}% \setbox1=\hbox{\Listea[1,1]{}}% \setbox2=\hbox{\Listeb[1,1]}% \setbox3=\hbox{\Listea[1,3]}% \setbox4=\hbox{\Listeb[1,3]}% \ensuremath{% \frac{\tikzmarknode[anchor=north]{A-\theNbFrac}{\Listea[1,1]}{}}{\tikzmarknode[anchor=south]{B-\theNbFrac}{\Listeb[1,1]}{}}=\frac{\tikzmarknode[anchor=north]{C-\theNbFrac}{\Listea[1,3]}{}}{\tikzmarknode[anchor=south]{D-\theNbFrac}{\Listeb[1,3]}{}}% }% \begin{tikzpicture}[remember picture,overlay]% \draw[out=45,in=135,-stealth,transform canvas={yshift=0.25em}] let \p1=(pic cs:A-\theNbFrac), \p2=(pic cs:C-\theNbFrac) in (pic cs:A-\theNbFrac) to node[midway,above]{\Listea[1,2]}(\x2,\y1); \draw[out=-45,in=-135,-stealth,transform canvas={yshift=-0.25em}] (pic cs:B-\theNbFrac) to node[midway,below]{\Listeb[1,2]}(pic cs:D-\theNbFrac);% \end{tikzpicture}% }{% \xintifboolexpr{\useKV[ClesSimplification]{Contraire}>1}{% \ensuremath{% \frac{\num{#2}}{\num{#3}}=\frac{\num{#2}\times\num{\useKV[ClesSimplification]{Contraire}}}{\num{#3}\times\num{\useKV[ClesSimplification]{Contraire}}}=\frac{\num{\fpeval{\useKV[ClesSimplification]{Contraire}*#2}}}{\num{\fpeval{\useKV[ClesSimplification]{Contraire}*#3}}}% }% }{% \ifboolKV[ClesSimplification]{Longue}{% \LongueSimplification{#2}{#3}% }{% \ifboolKV[ClesSimplification]{Details}{\SSimpli{#2}{#3}}{\ifboolKV[ClesSimplification]{All}{\ensuremath{\SSimpli{#2}{#3}=\SSimplifie{#2}{#3}}}{\SSimplifie{#2}{#3}}}% }% }% }% }% %%% % Thales %%% \newcount\ppcm \newcommand\PPCM[2]{% \PGCD{#1}{#2} \ppcm=\numexpr#1*#2/\pgcd\relax } \setKVdefault[ClesThales]{Calcul=true,Droites=false,Propor=false,Segment=false,Figure=false,FigureSeule=false,Figurecroisee=false,FigurecroiseeSeule=false,Angle=0,Precision=2,Entier=false,Unite=cm,Reciproque=false,Produit=false,ChoixCalcul=0,Simplification,Redaction=false,Remediation=false,Echelle=1cm} %On d\'efinit la figure \`a utiliser \def\MPFigThales#1#2#3#4#5#6{ % #1 Premier sommet % #2 Deuxi\`eme sommet % #3 Troisi\`eme sommet % #4 point sur le segment #1#2 % #5 point sur le segment #1#3 \ifluatex \mplibcodeinherit{enable} \mplibforcehmode \begin{mplibcode} u:=\useKV[ClesThales]{Echelle}; pair A,B,C,M,N,O;% %On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure A=u*(1,1); B-A=u*(4,0); C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]); % On d\'efinit le centre du cercle circonscrit O - .5[A,B] = whatever * (B-A) rotated 90; O - .5[B,C] = whatever * (C-B) rotated 90; % On tourne pour \'eventuellement moins de lassitude :) A:=A rotatedabout(O,#6); B:=B rotatedabout(O,#6); C:=C rotatedabout(O,#6); % on dessine \`a main lev\'ee :) path cotes[]; cotes1=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}; cotes2=B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}; cotes3=C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}; M=point(0.4*length cotes1) of cotes1; N=point(0.6*length cotes3) of cotes3; cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)}; path triangle; triangle=cotes1--cotes2--cotes3--cycle; draw triangle; draw cotes4; %on labelise label(btex #1 etex,1.15[O,A]); label(btex #2 etex,1.15[O,B]); label(btex #3 etex,1.15[O,C]); label(btex #4 etex,1.1[C,M]); label(btex #5 etex,1.1[B,N]); fill (fullcircle scaled 0.75mm) shifted (cotes1 intersectionpoint cotes4); fill (fullcircle scaled 0.75mm) shifted (cotes3 intersectionpoint cotes4); pair I,J,K; I=1/2[M,N]; J=1/2[B,C]; K=1/2[I,J]; path cd; cd=(fullcircle scaled 6mm) shifted K; drawoptions(withcolor 0.75*white); drawarrow reverse((I{dir(210+angle(I-J))}..{dir(150+angle(I-J))}K) cutafter cd); drawarrow reverse((J{dir(210+angle(J-I))}..{dir(150+angle(J-I))}K) cutafter cd); draw cd; label(btex $//$ etex ,K); drawoptions(); \end{mplibcode} \mplibcodeinherit{disable} \else \begin{mpost}[mpsettings={u:=\useKV[ClesThales]{Echelle};}] pair A,B,C,M,N,O;% %On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure A=u*(1,1); B-A=u*(4,0); C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]); % On d\'efinit le centre du cercle circonscrit O - .5[A,B] = whatever * (B-A) rotated 90; O - .5[B,C] = whatever * (C-B) rotated 90; % On tourne pour \'eventuellement moins de lassitude :) A:=A rotatedabout(O,#6); B:=B rotatedabout(O,#6); C:=C rotatedabout(O,#6); % on dessine \`a main lev\'ee :) path cotes[]; cotes1=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}; cotes2=B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}; cotes3=C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}; M=point(0.4*length cotes1) of cotes1; N=point(0.6*length cotes3) of cotes3; cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)}; path triangle; triangle=cotes1--cotes2--cotes3--cycle; draw triangle; draw cotes4; %on labelise label(btex #1 etex,1.15[O,A]); label(btex #2 etex,1.15[O,B]); label(btex #3 etex,1.15[O,C]); label(btex #4 etex,1.1[C,M]); label(btex #5 etex,1.1[B,N]); fill (fullcircle scaled 0.75mm) shifted (cotes1 intersectionpoint cotes4); fill (fullcircle scaled 0.75mm) shifted (cotes3 intersectionpoint cotes4); pair I,J,K; I=1/2[M,N]; J=1/2[B,C]; K=1/2[I,J]; path cd; cd=(fullcircle scaled 6mm) shifted K; drawoptions(withcolor 0.75*white); drawarrow reverse((I{dir(210+angle(I-J))}..{dir(150+angle(I-J))}K) cutafter cd); drawarrow reverse((J{dir(210+angle(J-I))}..{dir(150+angle(J-I))}K) cutafter cd); draw cd; label(btex $//$ etex ,K); drawoptions(); \end{mpost} \fi } %On d\'efinit la figure \`a utiliser \def\MPFigReciThales#1#2#3#4#5#6{ % #1 Premier sommet % #2 Deuxi\`eme sommet % #3 Troisi\`eme sommet % #4 point sur le segment #1#2 % #5 point sur le segment #1#3 \ifluatex \mplibcodeinherit{enable} \mplibforcehmode \begin{mplibcode} u:=\useKV[ClesThales]{Echelle}; pair A,B,C,M,N,O;% %On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure A=u*(1,1); B-A=u*(4,0); C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]); % On d\'efinit le centre du cercle circonscrit O - .5[A,B] = whatever * (B-A) rotated 90; O - .5[B,C] = whatever * (C-B) rotated 90; % On tourne pour \'eventuellement moins de lassitude :) A:=A rotatedabout(O,#6); B:=B rotatedabout(O,#6); C:=C rotatedabout(O,#6); % on dessine \`a main lev\'ee :) path cotes[]; cotes1=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}; cotes2=B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}; cotes3=C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}; M=point(0.4*length cotes1) of cotes1; N=point(0.6*length cotes3) of cotes3; cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)}; path triangle; triangle=cotes1--cotes2--cotes3--cycle; draw triangle; draw cotes4; %on labelise label(btex #1 etex,1.15[O,A]); label(btex #2 etex,1.15[O,B]); label(btex #3 etex,1.15[O,C]); label(btex #4 etex,1.1[C,M]); label(btex #5 etex,1.1[B,N]); fill (fullcircle scaled 0.75mm) shifted (cotes1 intersectionpoint cotes4); fill (fullcircle scaled 0.75mm) shifted (cotes3 intersectionpoint cotes4); \end{mplibcode} \mplibcodeinherit{disable} \else \begin{mpost}[mpsettings={u:=\useKV[ClesThales]{Echelle};}] pair A,B,C,M,N,O;% %On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure A=u*(1,1); B-A=u*(4,0); C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]); % On d\'efinit le centre du cercle circonscrit O - .5[A,B] = whatever * (B-A) rotated 90; O - .5[B,C] = whatever * (C-B) rotated 90; % On tourne pour \'eventuellement moins de lassitude :) A:=A rotatedabout(O,#6); B:=B rotatedabout(O,#6); C:=C rotatedabout(O,#6); % on dessine \`a main lev\'ee :) path cotes[]; cotes1=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}; cotes2=B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}; cotes3=C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}; M=point(0.4*length cotes1) of cotes1; N=point(0.6*length cotes3) of cotes3; cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)}; path triangle; triangle=cotes1--cotes2--cotes3--cycle; draw triangle; draw cotes4; %on labelise label(btex #1 etex,1.15[O,A]); label(btex #2 etex,1.15[O,B]); label(btex #3 etex,1.15[O,C]); label(btex #4 etex,1.1[C,M]); label(btex #5 etex,1.1[B,N]); fill (fullcircle scaled 0.75mm) shifted (cotes1 intersectionpoint cotes4); fill (fullcircle scaled 0.75mm) shifted (cotes3 intersectionpoint cotes4); \end{mpost} \fi } %On d\'efinit la deuxi\`eme figure \`a utiliser \def\MPFigThalesCroisee#1#2#3#4#5#6{% % #1 Premier sommet % #2 Deuxi\`eme sommet % #3 Troisi\`eme sommet % #4 point sur la droite #1#2 % #5 point sur la droite #1#3 \ifluatex \mplibforcehmode \mplibcodeinherit{enable} \begin{mplibcode} u:=\useKV[ClesThales]{Echelle}; pair A,B,C,M,N,O;% O=(2.5u,2.5u); path cc; cc=(fullcircle scaled 3u) shifted O; %On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure A=point(0.1*length cc) of cc; B=A rotatedabout(O,130); C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]); % On tourne pour \'eventuellement moins de lassitude :) A:=A rotatedabout(O,#6); B:=B rotatedabout(O,#6); C:=C rotatedabout(O,#6); % on dessine \`a main lev\'ee :) M=1.4[B,A]; N=1.4[C,A]; path cotes[]; cotes1=A{dir(angle(B-A)+5)}..1.15[A,B]{dir(angle(B-A)+5)}; cotes2=1.15[C,B]{dir(angle(C-B)+5)}..1.15[B,C]{dir(angle(C-B)+5)}; cotes3=1.15[A,C]{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}; cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)}; cotes5=A{dir(angle(M-A)+5)}..1.15[A,M]{dir(angle(M-A)+5)}; cotes6=A{dir(angle(N-A)+5)}..1.15[A,N]{dir(angle(N-A)+5)}; for k=1 upto 6: draw cotes[k]; endfor; pair I; % On d\'efinit le centre du cercle inscrit \`a AMC (I-C) rotated ((angle(A-C)-angle(M-C))/2) shifted C=whatever[A,C]; (I-M) rotated ((angle(C-M)-angle(A-M))/2) shifted M=whatever[M,C]; %on labelise label(btex #1 etex,I); label(btex #2 etex,1.2[M,B]); label(btex #3 etex,1.2[N,C]); label(btex #4 etex,1.1[B,M]); label(btex #5 etex,1.1[C,N]); fill (fullcircle scaled 0.75mm) shifted (cotes5 intersectionpoint cotes4); fill (fullcircle scaled 0.75mm) shifted (cotes6 intersectionpoint cotes4); pair I,J,K; I=1.1[N,M]; J=1.1[B,C]; K=1/2[I,J]; path cd; cd=(fullcircle scaled 6mm) shifted K; drawoptions(withcolor 0.75*white); drawarrow reverse((I{dir(210+angle(I-J))}..{dir(150+angle(I-J))}K) cutafter cd); drawarrow reverse((J{dir(210+angle(J-I))}..{dir(150+angle(J-I))}K) cutafter cd); draw cd; label(btex $//$ etex ,K); drawoptions(); \end{mplibcode} \mplibcodeinherit{disable} \else \begin{mpost}[mpsettings={u:=\useKV[ClesThales]{Echelle};}] pair A,B,C,M,N,O;% O=(2.5u,2.5u); path cc; cc=(fullcircle scaled 3u) shifted O; %On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure A=point(0.1*length cc) of cc; B=A rotatedabout(O,130); C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]); % On tourne pour \'eventuellement moins de lassitude :) A:=A rotatedabout(O,#6); B:=B rotatedabout(O,#6); C:=C rotatedabout(O,#6); % on dessine \`a main lev\'ee :) M=1.4[B,A]; N=1.4[C,A]; path cotes[]; cotes1=A{dir(angle(B-A)+5)}..1.15[A,B]{dir(angle(B-A)+5)}; cotes2=1.15[C,B]{dir(angle(C-B)+5)}..1.15[B,C]{dir(angle(C-B)+5)}; cotes3=1.15[A,C]{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}; cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)}; cotes5=A{dir(angle(M-A)+5)}..1.15[A,M]{dir(angle(M-A)+5)}; cotes6=A{dir(angle(N-A)+5)}..1.15[A,N]{dir(angle(N-A)+5)}; for k=1 upto 6: draw cotes[k]; endfor; pair I; % On d\'efinit le centre du cercle inscrit \`a AMC (I-C) rotated ((angle(A-C)-angle(M-C))/2) shifted C=whatever[A,C]; (I-M) rotated ((angle(C-M)-angle(A-M))/2) shifted M=whatever[M,C]; %on labelise label(btex #1 etex,I); label(btex #2 etex,1.2[M,B]); label(btex #3 etex,1.2[N,C]); label(btex #4 etex,1.1[B,M]); label(btex #5 etex,1.1[C,N]); fill (fullcircle scaled 0.75mm) shifted (cotes5 intersectionpoint cotes4); fill (fullcircle scaled 0.75mm) shifted (cotes6 intersectionpoint cotes4); pair I,J,K; I=1.1[N,M]; J=1.1[B,C]; K=1/2[I,J]; path cd; cd=(fullcircle scaled 6mm) shifted K; drawoptions(withcolor 0.75*white); drawarrow reverse((I{dir(210+angle(I-J))}..{dir(150+angle(I-J))}K) cutafter cd); drawarrow reverse((J{dir(210+angle(J-I))}..{dir(150+angle(J-I))}K) cutafter cd); draw cd; label(btex $//$ etex ,K); drawoptions(); \end{mpost} \fi } %On d\'efinit la deuxi\`eme figure \`a utiliser \def\MPFigReciThalesCroisee#1#2#3#4#5#6{% % #1 Premier sommet % #2 Deuxi\`eme sommet % #3 Troisi\`eme sommet % #4 point sur la droite #1#2 % #5 point sur la droite #1#3 \ifluatex \mplibforcehmode \mplibcodeinherit{enable} \begin{mplibcode} u:=\useKV[ClesThales]{Echelle}; pair A,B,C,M,N,O;% O=(2.5u,2.5u); path cc; cc=(fullcircle scaled 3u) shifted O; %On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure A=point(0.1*length cc) of cc; B=A rotatedabout(O,130); C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]); % On tourne pour \'eventuellement moins de lassitude :) A:=A rotatedabout(O,#6); B:=B rotatedabout(O,#6); C:=C rotatedabout(O,#6); % on dessine \`a main lev\'ee :) M=1.4[B,A]; N=1.4[C,A]; path cotes[]; cotes1=A{dir(angle(B-A)+5)}..1.15[A,B]{dir(angle(B-A)+5)}; cotes2=1.15[C,B]{dir(angle(C-B)+5)}..1.15[B,C]{dir(angle(C-B)+5)}; cotes3=1.15[A,C]{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}; cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)}; cotes5=A{dir(angle(M-A)+5)}..1.15[A,M]{dir(angle(M-A)+5)}; cotes6=A{dir(angle(N-A)+5)}..1.15[A,N]{dir(angle(N-A)+5)}; for k=1 upto 6: draw cotes[k]; endfor; pair I; % On d\'efinit le centre du cercle inscrit \`a AMC (I-C) rotated ((angle(A-C)-angle(M-C))/2) shifted C=whatever[A,C]; (I-M) rotated ((angle(C-M)-angle(A-M))/2) shifted M=whatever[M,C]; %on labelise label(btex #1 etex,I); label(btex #2 etex,1.2[M,B]); label(btex #3 etex,1.2[N,C]); label(btex #4 etex,1.1[B,M]); label(btex #5 etex,1.1[C,N]); fill (fullcircle scaled 0.75mm) shifted (cotes5 intersectionpoint cotes4); fill (fullcircle scaled 0.75mm) shifted (cotes6 intersectionpoint cotes4); fill (fullcircle scaled 0.75mm) shifted (cotes1 intersectionpoint cotes2); fill (fullcircle scaled 0.75mm) shifted (cotes3 intersectionpoint cotes2); \end{mplibcode} \mplibcodeinherit{disable} \else \begin{mpost}[mpsettings={u:=\useKV[ClesThales]{Echelle};}] pair A,B,C,M,N,O;% O=(2.5u,2.5u); path cc; cc=(fullcircle scaled 3u) shifted O; %On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure A=point(0.1*length cc) of cc; B=A rotatedabout(O,130); C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]); % On tourne pour \'eventuellement moins de lassitude :) A:=A rotatedabout(O,#6); B:=B rotatedabout(O,#6); C:=C rotatedabout(O,#6); % on dessine \`a main lev\'ee :) M=1.4[B,A]; N=1.4[C,A]; path cotes[]; cotes1=A{dir(angle(B-A)+5)}..1.15[A,B]{dir(angle(B-A)+5)}; cotes2=1.15[C,B]{dir(angle(C-B)+5)}..1.15[B,C]{dir(angle(C-B)+5)}; cotes3=1.15[A,C]{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}; cotes4=1.5[N,M]{dir(angle(N-M)+5)}..1.5[M,N]{dir(angle(N-M)+5)}; cotes5=A{dir(angle(M-A)+5)}..1.15[A,M]{dir(angle(M-A)+5)}; cotes6=A{dir(angle(N-A)+5)}..1.15[A,N]{dir(angle(N-A)+5)}; for k=1 upto 6: draw cotes[k]; endfor; pair I; % On d\'efinit le centre du cercle inscrit \`a AMC (I-C) rotated ((angle(A-C)-angle(M-C))/2) shifted C=whatever[A,C]; (I-M) rotated ((angle(C-M)-angle(A-M))/2) shifted M=whatever[M,C]; %on labelise label(btex #1 etex,I); label(btex #2 etex,1.2[M,B]); label(btex #3 etex,1.2[N,C]); label(btex #4 etex,1.1[B,M]); label(btex #5 etex,1.1[C,N]); fill (fullcircle scaled 0.75mm) shifted (cotes5 intersectionpoint cotes4); fill (fullcircle scaled 0.75mm) shifted (cotes6 intersectionpoint cotes4); fill (fullcircle scaled 0.75mm) shifted (cotes1 intersectionpoint cotes2); fill (fullcircle scaled 0.75mm) shifted (cotes3 intersectionpoint cotes2); \end{mpost} \fi } %%% \newcommand{\TTThales}[6][]{% \useKVdefault[ClesThales]% \setKV[ClesThales]{#1}% \ifboolKV[ClesThales]{Droites}{% Les droites \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$(#3#5)$} et \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$(#4#6)$} sont s\'ecantes en \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$#2$}.% }{% Dans le triangle \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$#2#3#4$}, \ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{$#5$} est un point \ifboolKV[ClesThales]{Segment}{du segment}{de la droite} \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{\ifboolKV[ClesThales]{Segment}{$[#2#3]$}{$(#2#3)$}}, \ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{$#6$} est un point \ifboolKV[ClesThales]{Segment}{du segment}{de la droite} \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{\ifboolKV[ClesThales]{Segment}{$[#2#4]$}{$(#2#4)$}}.% } \\Comme les droites \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$(#5#6)$} et \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$(#3#4)$} sont parall\`eles, alors \ifboolKV[ClesThales]{Propor}{le tableau% \[\begin{array}{c|c|c} \ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#5}&\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#6}&\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#5#6}\\ \hline \ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#3}&\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#4}&\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#3#4}\\ \end{array} \] est un tableau de proportionnalit\'e\ifboolKV[ClesThales]{Segment}{.}{ d'apr\`es le th\'eor\`eme de Thal\`es.}% }{% \ifboolKV[ClesThales]{Segment}{on a :}{le th\'eor\`eme de Thal\`es permet d'\'ecrire :}% \[\frac{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#5}}{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#3}}=\frac{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#6}}{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#2#4}}=\frac{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#5#6}}{\ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{#3#4}}\]% } } \newcommand{\TThalesCalculsD}[8][]{% \setKV[ClesThales]{#1}% \newcount\zzz\newcount\yyy\newcount\xxx%Pour se rappeller des calculs \`a faire et combien en faire% \def\Nomx{}% \def\Nomy{}% \def\Nomz{}% \zzz=0\yyy=0\xxx=0% \TTThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par \IfDecimal{#3}{% \IfDecimal{#6}{}{% \IfDecimal{#4}{% \IfDecimal{#7}{% \xxx=5263%#6&=\frac{#3\times#7}{#4}\\ \edef\Nomx{#6}\opcopy{#3}{valx}\opcopy{#7}{Valx}\opcopy{#4}{denox}% \xdef\ResultatThalesx{\fpeval{round(#3*#7/#4,\useKV[ClesThales]{Precision})}}% }{% \IfDecimal{#8}{\IfDecimal{#5}{\xxx=5274%\[#6=\frac{#3\times#8}{#5}\] \edef\Nomx{#6}\opcopy{#3}{valx}\opcopy{#8}{Valx}\opcopy{#5}{denox}% \xdef\ResultatThalesx{\fpeval{round(#3*#8/#5,\useKV[ClesThales]{Precision})}}% }{}}{} } }{\IfDecimal{#8}{\IfDecimal{#5}{\xxx=5274%\[#6=\frac{#3\times#8}{#5}\] \edef\Nomx{#6}\opcopy{#3}{valx}\opcopy{#8}{Valx}\opcopy{#5}{denox}% \xdef\ResultatThalesx{\fpeval{round(#3*#8/#5,\useKV[ClesThales]{Precision})}}% }{}}{} } } }{% \IfDecimal{#6}{% \IfDecimal{#4}{% \IfDecimal{#7}{% \xxx=2536%\[#3=\frac{#6\times#4}{#7}\]% \edef\Nomx{#3}\opcopy{#6}{valx}\opcopy{#4}{Valx}\opcopy{#7}{denox}% \xdef\ResultatThalesx{\fpeval{round(#6*#4/#7,\useKV[ClesThales]{Precision})}}% }{% \IfDecimal{#5}{\IfDecimal{#8}{\xxx=2547 \edef\Nomx{#3}\opcopy{#6}{valx}\opcopy{#5}{Valx}\opcopy{#8}{denox}%\[#3=\frac{#6\times#5}{#8}\] \xdef\ResultatThalesx{\fpeval{round(#6*#5/#8,\useKV[ClesThales]{Precision})}}% }{}}{} } }{\IfDecimal{#5}{\IfDecimal{#8}{\xxx=2547 \edef\Nomx{#3}\opcopy{#6}{valx}\opcopy{#5}{Valx}\opcopy{#8}{denox}%\[#3=\frac{#6\times#5}{#8}\] \xdef\ResultatThalesx{\fpeval{round(#6*#5/#8,\useKV[ClesThales]{Precision})}}% }{}}{} } }{} }% % \IfDecimal{#4}{% \IfDecimal{#7}{}{% \IfDecimal{#5}{% \IfDecimal{#8}{% \yyy=6374%\[#7=\frac{#4\times#8}{#5}\]% \edef\Nomy{#7}\opcopy{#4}{valy}\opcopy{#8}{Valy}\opcopy{#5}{denoy}% \xdef\ResultatThalesy{\fpeval{round(#4*#8/#5,\useKV[ClesThales]{Precision})}}% }{% \IfDecimal{#6}{\IfDecimal{#3}{\yyy=6352%\[#7=\frac{#4\times#6}{#3}\] \edef\Nomy{#7}\opcopy{#4}{valy}\opcopy{#6}{Valy}\opcopy{#3}{denoy}% \xdef\ResultatThalesy{\fpeval{round(#4*#6/#3,\useKV[ClesThales]{Precision})}}% }{}}{} } }{\IfDecimal{#6}{\IfDecimal{#3}{\yyy=6352%\[#7=\frac{#4\times#6}{#3}\] \edef\Nomy{#7}\opcopy{#4}{valy}\opcopy{#6}{Valy}\opcopy{#3}{denoy}% \xdef\ResultatThalesy{\fpeval{round(#4*#6/#3,\useKV[ClesThales]{Precision})}}% }{}}{} } } }{% \IfDecimal{#7}{% \IfDecimal{#5}{% \IfDecimal{#8}{% \yyy=3647%\[#4=\frac{#7\times#5}{#8}\]% \edef\Nomy{#4}\opcopy{#7}{valy}\opcopy{#5}{Valy}\opcopy{#8}{denoy}% \xdef\ResultatThalesy{\fpeval{round(#7*#5/#8,\useKV[ClesThales]{Precision})}}% }{% \IfDecimal{#3}{\IfDecimal{#6}{\yyy=3625%\[#4=\frac{#7\times#3}{#6}\] \edef\Nomy{#4}\opcopy{#7}{valy}\opcopy{#3}{Valy}\opcopy{#6}{denoy}% \xdef\ResultatThalesy{\fpeval{round(#7*#3/#6,\useKV[ClesThales]{Precision})}}% }{}}{} } }{\IfDecimal{#3}{\IfDecimal{#6}{\yyy=3625%\[#4=\frac{#7\times#3}{#6}\] \edef\Nomy{#4}\opcopy{#7}{valy}\opcopy{#3}{Valy}\opcopy{#6}{denoy}% \xdef\ResultatThalesy{\fpeval{round(#7*#3/#6,\useKV[ClesThales]{Precision})}}% }{}}{} }}{}}% % \IfDecimal{#5}{% \IfDecimal{#8}{}{% \IfDecimal{#4}{ \IfDecimal{#7}{ \zzz=7463%\[#8=\frac{#5\times#7}{#4}\]% \edef\Nomz{#8}\opcopy{#5}{valz}\opcopy{#7}{Valz}\opcopy{#4}{denoz}% \xdef\ResultatThalesz{\fpeval{round(#5*#7/#4,\useKV[ClesThales]{Precision})}}% }{% \IfDecimal{#3}{\IfDecimal{#6}{\zzz=7452%\[#8=\frac{#5\times#6}{#3}\] \edef\Nomz{#8}\opcopy{#5}{valz}\opcopy{#6}{Valz}\opcopy{#3}{denoz}% \xdef\ResultatThalesz{\fpeval{round(#5*#6/#3,\useKV[ClesThales]{Precision})}}% }{}}{} } }{\IfDecimal{#3}{\IfDecimal{#6}{\zzz=7452%\[#8=\frac{#5\times#6}{#3}\] \edef\Nomz{#8}\opcopy{#5}{valz}\opcopy{#6}{Valz}\opcopy{#3}{denoz}% \xdef\ResultatThalesz{\fpeval{round(#5*#6/#3,\useKV[ClesThales]{Precision})}}% }{}}{} } } }{% \IfDecimal{#8}{% \IfDecimal{#4}{% \IfDecimal{#7}{% \zzz=4736% \[#5=\frac{#8\times#4}{#7}\]% \edef\Nomz{#5}\opcopy{#8}{valz}\opcopy{#4}{Valz}\opcopy{#7}{denoz}% \xdef\ResultatThalesz{\fpeval{round(#8*#4/#7,\useKV[ClesThales]{Precision})}}% }{% \IfDecimal{#3}{\IfDecimal{#6}{\zzz=4725%\[#5=\frac{#8\times#3}{#6}\] \edef\Nomz{#5}\opcopy{#8}{valz}\opcopy{#3}{Valz}\opcopy{#6}{denoz}% \xdef\ResultatThalesz{\fpeval{round(#8*#3/#6,\useKV[ClesThales]{Precision})}}% }{}}{} } }{\IfDecimal{#3}{\IfDecimal{#6}{\zzz=4725%\[#5=\frac{#8\times#3}{#6}\] \edef\Nomz{#5}\opcopy{#8}{valz}\opcopy{#3}{Valz}\opcopy{#6}{denoz}% \xdef\ResultatThalesz{\fpeval{round(#8*#3/#6,\useKV[ClesThales]{Precision})}}% }{}}{} }}{} }% %% \StrMid{\the\zzz}{1}{1}[\cmza]% \StrMid{\the\yyy}{1}{1}[\cmya]% \StrMid{\the\xxx}{1}{1}[\cmxa]% \ifboolKV[ClesThales]{Calcul}{% %%%%%%%%%%%%%%%%%%%%%%%%%%% On remplace par les longueurs connues :% \ifboolKV[ClesThales]{Propor}{% \[\begin{array}{c|c|c} \IfDecimal{#3}{\num{#3}}{#3}&\IfDecimal{#4}{\num{#4}}{#4}&\IfDecimal{#5}{\num{#5}}{#5}\\ \hline \IfDecimal{#6}{\num{#6}}{#6}&\IfDecimal{#7}{\num{#7}}{#7}&\IfDecimal{#8}{\num{#8}}{#8} \end{array} \] }{% \[\frac{\IfDecimal{#3}{\num{#3}}{#3}}{\IfDecimal{#6}{\num{#6}}{#6}}=\frac{\IfDecimal{#4}{\num{#4}}{#4}}{\IfDecimal{#7}{\num{#7}}{#7}}=\frac{\IfDecimal{#5}{\num{#5}}{#5}}{\IfDecimal{#8}{\num{#8}}{#8}}\] }% % On choisit \'eventuellement le calcul \`a faire s'il y en a plusieurs. \xdef\CompteurCalcul{\useKV[ClesThales]{ChoixCalcul}}% \xintifboolexpr{\CompteurCalcul>0}{\xintifboolexpr{\CompteurCalcul==1}{\xdef\cmya{0}\xdef\cmza{0}}{\xintifboolexpr{\CompteurCalcul==2}{\xdef\cmxa{0}\xdef\cmza{0}}{\xdef\cmxa{0}\xdef\cmya{0}}}}{}% %%on fait les calculs \begin{align*} %Premier compteur \xxx \ifnum\cmxa>0 \Nomx\uppercase{&}=\frac{\opexport{valx}{\valx}\num{\valx}\times\opexport{Valx}{\Valx}\num{\Valx}}{\opexport{denox}{\denox}\num{\denox}}\relax%\global\numx=\numexpr\opprint{valx}*\opprint{Valx}\relax \fi % % Deuxi\`eme compteur \yyy \ifnum\cmya>0 \ifnum\cmxa=0 \else \uppercase{&} \fi% \Nomy\uppercase{&}=\frac{\opexport{valy}{\valy}\num{\valy}\times\opexport{Valy}{\Valy}\num{\Valy}}{\opexport{denoy}{\denoy}\num{\denoy}}\relax%\global\numy=\numexpr\opprint{valy}*\opprint{Valy}\relax \fi % Troisi\`eme compteur \zzz \ifnum\cmza>0 \ifnum\cmxa=0 \ifnum\cmya=0 % \else \uppercase{&} \fi \Nomz\uppercase{&}=\frac{\opexport{valz}{\valz}\num{\valz}\times\opexport{Valz}{\Valz}\num{\Valz}}{\opexport{denoz}{\denoz}\num{\denoz}}\relax%\global\numz=\numexpr\opprint{valz}*\opprint{Valz}\relax \else \uppercase{&}\Nomz\uppercase{&}=\frac{\opexport{valz}{\valz}\num{\valz}\times\opexport{Valz}{\Valz}\num{\Valz}}{\opexport{denoz}{\denoz}\num{\denoz}}\relax%\global\numz=\numexpr\opprint{valz}*\opprint{Valz}\relax \fi \fi \\ % % 2eme ligne du tableau : calcul des num\'erateurs % %Premier compteur \xxx \ifnum\cmxa>0 \Nomx\uppercase{&}=\frac{\opmul*{valx}{Valx}{numx}\opexport{numx}{\numx}\num{\numx}}{\opexport{denox}{\denox}\num{\denox}} \fi % % Deuxi\`eme compteur \yyy \ifnum\cmya>0 \ifnum\cmxa=0 % \else \uppercase{&} \fi \Nomy\uppercase{&}=\frac{\opmul*{valy}{Valy}{numy}\opexport{numy}{\numy}\num{\numy}}{\opexport{denoy}{\denoy}\num{\denoy}}% \fi % %Troisi\`eme compteur \zzz \ifnum\cmza>0 \ifnum\cmxa=0 \ifnum\cmya=0 % \else \uppercase{&} \fi \Nomz\uppercase{&}=\frac{\opmul*{valz}{Valz}{numz}\opexport{numz}{\numz}\num{\numz}}{\opexport{denoz}{\denoz}\num{\denoz}} \else \uppercase{&}\Nomz\uppercase{&}=\frac{\opmul*{valz}{Valz}{numz}\opexport{numz}{\numz}\num{\numz}}{\opexport{denoz}{\denoz}\num{\denoz}} \fi \fi \\ % % 3eme ligne : Calculs \ifnum\cmxa>0 \Nomx\uppercase{&}\opdiv*{numx}{denox}{resultatx}{restex}\opcmp{restex}{0}\ifopeq=\num{\ResultatThalesx}\else\approx\num{\fpeval{round(\ResultatThalesx,\useKV[ClesThales]{Precision})}}\fi~\text{\useKV[ClesThales]{Unite}}% \fi % % Deuxi\`eme compteur \yyy \ifnum\cmya>0 \ifnum\cmxa=0 % \else \uppercase{&} \fi \Nomy\uppercase{&}\opdiv*{numy}{denoy}{resultaty}{restey}\opcmp{restey}{0}\ifopeq=\num{\ResultatThalesy}\else\approx\num{\fpeval{round(\ResultatThalesy,\useKV[ClesThales]{Precision})}}\fi~\text{\useKV[ClesThales]{Unite}}% \fi % %Troisi\`eme compteur \zzz \ifnum\cmza>0 \ifnum\cmxa=0 \ifnum\cmya=0 % \else \uppercase{&} \fi \Nomz\uppercase{&}\opdiv*{numz}{denoz}{resultatz}{restez}\opcmp{restez}{0}\ifopeq=\num{\ResultatThalesz}\else\approx\num{\fpeval{round(\ResultatThalesz,\useKV[ClesThales]{Precision})}}\fi~\text{\useKV[ClesThales]{Unite}}% \else \uppercase{&}\Nomz\uppercase{&}\opdiv*{numz}{denoz}{resultatz}{restez}\opcmp{restez}{0}\ifopeq=\num{\ResultatThalesz}\else\approx\num{\fpeval{round(\ResultatThalesz,\useKV[ClesThales]{Precision})}}\fi~\text{\useKV[ClesThales]{Unite}}% \fi \fi \end{align*} }{} } \newcommand{\TThalesCalculsE}[8][]{% \setKV[ClesThales]{#1}% \newcount\zzz\newcount\yyy\newcount\xxx%Pour se rappeller des calculs \`a faire et combien en faire% \newcount\valx\newcount\Valx% \newcount\valy\newcount\Valy% \newcount\valz\newcount\Valz% \newcount\numx\newcount\numy\newcount\numz% \newcount\denox\newcount\denoy\newcount\denoz% \def\Nomx{}% \def\Nomy{}% \def\Nomz{}% \zzz=0\yyy=0\xxx=0% \TTThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par% \IfDecimal{#3}{% \IfDecimal{#6}{}{% \IfDecimal{#4}{% \IfDecimal{#7}{% \xxx=5263%#6&=\frac{#3\times#7}{#4}\\ \edef\Nomx{#6}\valx=#3\Valx=#7\denox=#4% }{% \IfDecimal{#8}{\IfDecimal{#5}{\xxx=5274%\[#6=\frac{#3\times#8}{#5}\] \edef\Nomx{#6}\valx=#3\Valx=#8\denox=#5% }{}}{} } }{\IfDecimal{#8}{\IfDecimal{#5}{\xxx=5274%\[#6=\frac{#3\times#8}{#5}\] \edef\Nomx{#6}\valx=#3\Valx=#8\denox=#5% }{}}{} } } }{% \IfDecimal{#6}{% \IfDecimal{#4}{% \IfDecimal{#7}{% \xxx=2536%\[#3=\frac{#6\times#4}{#7}\]% \edef\Nomx{#3}\valx=#6\Valx=#4\denox=#7% }{% \IfDecimal{#5}{\IfDecimal{#8}{\xxx=2547 \edef\Nomx{#3}\valx=#6\Valx=#5\denox=#8%\[#3=\frac{#6\times#5}{#8}\] }{}}{} } }{\IfDecimal{#5}{\IfDecimal{#8}{\xxx=2547 \edef\Nomx{#3}\valx=#6\Valx=#5\denox=#8%\[#3=\frac{#6\times#5}{#8}\] }{}}{} } }{} }% % \IfDecimal{#4}{% \IfDecimal{#7}{}{% \IfDecimal{#5}{% \IfDecimal{#8}{% \yyy=6374%\[#7=\frac{#4\times#8}{#5}\]% \edef\Nomy{#7}\valy=#4\Valy=#8\denoy=#5% }{% \IfDecimal{#6}{\IfDecimal{#3}{\yyy=6352%\[#7=\frac{#4\times#6}{#3}\] \edef\Nomy{#7}\valy=#4\Valy=#6\denoy=#3% }{}}{} } }{\IfDecimal{#6}{\IfDecimal{#3}{\yyy=6352%\[#7=\frac{#4\times#6}{#3}\] \edef\Nomy{#7}\valy=#4\Valy=#6\denoy=#3% }{}}{} } } }{% \IfDecimal{#7}{% \IfDecimal{#5}{% \IfDecimal{#8}{% \yyy=3647%\[#4=\frac{#7\times#5}{#8}\]% \edef\Nomy{#4}\valy=#7\Valy=#5\denoy=#8% }{% \IfDecimal{#3}{\IfDecimal{#6}{\yyy=3625%\[#4=\frac{#7\times#3}{#6}\] \edef\Nomy{#4}\valy=#7\Valy=#3\denoy=#6% }{}}{} } }{\IfDecimal{#3}{\IfDecimal{#6}{\yyy=3625%\[#4=\frac{#7\times#3}{#6}\] \edef\Nomy{#4}\valy=#7\Valy=#3\denoy=#6% }{}}{} }}{}}% % \IfDecimal{#5}{% \IfDecimal{#8}{}{% \IfDecimal{#4}{ \IfDecimal{#7}{ \zzz=7463%\[#8=\frac{#5\times#7}{#4}\]% \edef\Nomz{#8}\valz=#5\Valz=#7\denoz=#4% }{% \IfDecimal{#3}{\IfDecimal{#6}{\zzz=7452%\[#8=\frac{#5\times#6}{#3}\] \edef\Nomz{#8}\valz=#5\Valz=#6\denoz=#3% }{}}{} } }{\IfDecimal{#3}{\IfDecimal{#6}{\zzz=7452%\[#8=\frac{#5\times#6}{#3}\] \edef\Nomz{#8}\valz=#5\Valz=#6\denoz=#3% }{}}{} } } }{% \IfDecimal{#8}{% \IfDecimal{#4}{% \IfDecimal{#7}{% \zzz=4736% \[#5=\frac{#8\times#4}{#7}\]% \edef\Nomz{#5}\valz=#8\Valz=#4\denoz=#7% }{% \IfDecimal{#3}{\IfDecimal{#6}{\zzz=4725%\[#5=\frac{#8\times#3}{#6}\] \edef\Nomz{#5}\valz=#8\Valz=#3\denoz=#6% }{}}{} } }{\IfDecimal{#3}{\IfDecimal{#6}{\zzz=4725%\[#5=\frac{#8\times#3}{#6}\] \edef\Nomz{#5}\valz=#8\Valz=#3\denoz=#6% }{}}{} }}{} }% %% \StrMid{\the\zzz}{1}{1}[\cmza]% \StrMid{\the\yyy}{1}{1}[\cmya]% \StrMid{\the\xxx}{1}{1}[\cmxa]% \ifboolKV[ClesThales]{Calcul}{% %%%%%%%%%%%%%%%%%%%%%%%%%%% On remplace par les longueurs connues : \ifboolKV[ClesThales]{Propor}{% \[\begin{array}{c|c|c} \IfDecimal{#3}{\num{#3}}{#3}&\IfDecimal{#4}{\num{#4}}{#4}&\IfDecimal{#5}{\num{#5}}{#5}\\ \hline \IfDecimal{#6}{\num{#6}}{#6}&\IfDecimal{#7}{\num{#7}}{#7}&\IfDecimal{#8}{\num{#8}}{#8}\\ \end{array} \] }{% \[\frac{\IfDecimal{#3}{\num{#3}}{#3}}{\IfDecimal{#6}{\num{#6}}{#6}}=\frac{\IfDecimal{#4}{\num{#4}}{#4}}{\IfDecimal{#7}{\num{#7}}{#7}}=\frac{\IfDecimal{#5}{\num{#5}}{#5}}{\IfDecimal{#8}{\num{#8}}{#8}}\] }% % On choisit \'eventuellement le calcul \`a faire s'il y en a plusieurs. \xdef\CompteurCalcul{\useKV[ClesThales]{ChoixCalcul}}% \xintifboolexpr{\CompteurCalcul>0}{\xintifboolexpr{\CompteurCalcul==1}{\xdef\cmya{0}\xdef\cmza{0}}{\xintifboolexpr{\CompteurCalcul==2}{\xdef\cmxa{0}\xdef\cmza{0}}{\xdef\cmxa{0}\xdef\cmya{0}}}}% %%on fait les calculs \begin{align*} %Premier compteur \xxx \ifnum\cmxa>0 \Nomx\uppercase{&}=\frac{\the\valx\times\the\Valx}{\the\denox}\global\numx=\numexpr\the\valx*\the\Valx\relax \fi % % Deuxi\`eme compteur \yyy \ifnum\cmya>0 \ifnum\cmxa=0 \else \uppercase{&} \fi% \Nomy\uppercase{&}=\frac{\the\valy\times\the\Valy}{\the\denoy}\global\numy=\numexpr\the\valy*\the\Valy\relax % \else % \uppercase{&}\Nomy\uppercase{&}=\frac{\the\valy\times\the\Valy}{\the\denoy}\global\numy=\numexpr\the\valy*\the\Valy\relax % \fi \fi % Troisi\`eme compteur \zzz \ifnum\cmza>0 \ifnum\cmxa=0 \ifnum\cmya=0 %\Nomz\uppercase{&}=\frac{\the\valz\times\the\Valz}{\the\denoz}\global\numz=\numexpr\the\valz*\the\Valz\relax \else \uppercase{&}%\Nomz\uppercase{&}=\frac{\the\valz\times\the\Valz}{\the\denoz}\global\numz=\numexpr\the\valz*\the\Valz\relax \fi \Nomz\uppercase{&}=\frac{\the\valz\times\the\Valz}{\the\denoz}\global\numz=\numexpr\the\valz*\the\Valz\relax \else \uppercase{&}\Nomz\uppercase{&}=\frac{\the\valz\times\the\Valz}{\the\denoz}\global\numz=\numexpr\the\valz*\the\Valz\relax \fi \fi \\ % 2eme ligne du tableau : calcul des num\'erateurs %Premier compteur \xxx \ifnum\cmxa>0 \Nomx\uppercase{&}=\frac{\num{\the\numx}}{\num{\the\denox}} \fi % % Deuxi\`eme compteur \yyy \ifnum\cmya>0 \ifnum\cmxa=0 %\Nomy\uppercase{&}=\frac{\num{\the\numy}}{\num{\the\denoy}} \else \uppercase{&}%\Nomy\uppercase{&}=\frac{\num{\the\numy}}{\num{\the\denoy}} \fi \Nomy\uppercase{&}=\frac{\num{\the\numy}}{\num{\the\denoy}}% \fi %Troisi\`eme compteur \zzz \ifnum\cmza>0 \ifnum\cmxa=0 \ifnum\cmya=0 %\Nomz\uppercase{&}=\frac{\num{\the\numz}}{\num{\the\denoz}} \else \uppercase{&}%\Nomz\uppercase{&}=\frac{\num{\the\numz}}{\num{\the\denoz}} \fi \Nomz\uppercase{&}=\frac{\num{\the\numz}}{\num{\the\denoz}} \else \uppercase{&}\Nomz\uppercase{&}=\frac{\num{\the\numz}}{\num{\the\denoz}} \fi \fi \\ % 3eme ligne : faire les simplifications ou pas ? %Premier compteur \xxx \ifnum\cmxa>0 \PGCD{\the\numx}{\the\denox} \ifnum\pgcd>1 \Nomx\uppercase{&}=\SSimpli{\the\numx}{\the\denox} \else \uppercase{&} \fi \fi % % Deuxi\`eme compteur \yyy \ifnum\cmya>0 \PGCD{\the\numy}{\the\denoy} \ifnum\cmxa=0 \ifnum\pgcd>1 \Nomy\uppercase{&}=\SSimpli{\the\numy}{\the\denoy} \else \uppercase{&} \fi \else \ifnum\pgcd>1 \uppercase{&}\Nomy\uppercase{&}=\SSimpli{\the\numy}{\the\denoy} \else \uppercase{&&} \fi \fi \fi %Troisi\`eme compteur \zzz \ifnum\cmza>0 \PGCD{\the\numz}{\the\denoz} \ifnum\cmxa=0 \ifnum\cmya=0 \ifnum\pgcd>1 \Nomz\uppercase{&}=\SSimpli{\the\numz}{\the\denoz} \else \uppercase{&} \fi \else \ifnum\pgcd>1 \uppercase{&}\Nomz\uppercase{&}=\SSimpli{\the\numz}{\the\denoz} \else \uppercase{&&} \fi \fi \else \ifnum\pgcd>1 \uppercase{&}\Nomz\uppercase{&}=\SSimpli{\the\numz}{\the\denoz} \else \uppercase{&&} \fi \fi \fi \\ % 4eme ligne : Terminer les simplifications ? %Premier compteur \xxx \ifnum\cmxa>0 \PGCD{\the\numx}{\the\denox} \ifnum\pgcd>1 \ifnum\pgcd<\the\denox \Nomx\uppercase{&}=\SSimplifie{\the\numx}{\the\denox} \else \uppercase{&} \fi \else \uppercase{&} \fi \fi % % Deuxi\`eme compteur \yyy \ifnum\cmya>0 \PGCD{\the\numy}{\the\denoy} \ifnum\cmxa=0 \ifnum\pgcd>1 \ifnum\pgcd<\the\denoy \Nomy\uppercase{&}=\SSimplifie{\the\numy}{\the\denoy} \else \uppercase{&} \fi \else \uppercase{&} \fi \else \ifnum\pgcd>1 \ifnum\pgcd<\the\denoy \uppercase{&}\Nomy\uppercase{&}=\SSimplifie{\the\numy}{\the\denoy} \else \uppercase{&&} \fi \else \uppercase{&&} \fi \fi \fi %Troisi\`eme compteur \zzz \ifnum\cmza>0 \PGCD{\the\numz}{\the\denoz} \ifnum\cmxa=0 \ifnum\cmya=0 \ifnum\pgcd>1 \ifnum\pgcd<\the\denoz \Nomz\uppercase{&}=\SSimplifie{\the\numz}{\the\denoz} \else \uppercase{&} \fi \else \uppercase{&} \fi \else \ifnum\pgcd>1 \ifnum\pgcd<\the\denoz \uppercase{&}\Nomz\uppercase{&}=\SSimplifie{\the\numz}{\the\denoz} \else \uppercase{&&} \fi \else \uppercase{&&} \fi \fi \else \ifnum\pgcd>1 \ifnum\pgcd<\the\denoz \uppercase{&}\Nomz\uppercase{&}=\SSimplifie{\the\numz}{\the\denoz} \else \uppercase{&&} \fi \else \uppercase{&&} \fi \fi \fi%\\ \end{align*} }{}% } \newcommand{\TThales}[8][]{% \setKV[ClesThales]{#1}% \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]% \ifboolKV[ClesThales]{FigureSeule}{% \MPFigThales{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}% }{\ifboolKV[ClesThales]{FigurecroiseeSeule}{% \MPFigThalesCroisee{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}% }{% \ifboolKV[ClesThales]{Figure}{% \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]% \begin{multicols}{2}% {\em La figure est donn\'ee \`a titre indicatif.}% \[\MPFigThales{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}\]% \par\columnbreak\par% \ifboolKV[ClesThales]{Entier}{\TThalesCalculsE[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}{\TThalesCalculsD[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}% \end{multicols}% }{\ifboolKV[ClesThales]{Figurecroisee}{% \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]% \begin{multicols}{2}% {\em La figure est donn\'ee \`a titre indicatif.}% \[\MPFigThalesCroisee{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}\]% \par\columnbreak\par% \ifboolKV[ClesThales]{Entier}{\TThalesCalculsE[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}{\TThalesCalculsD[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}% \end{multicols}% }{\ifboolKV[ClesThales]{Entier}{\TThalesCalculsE[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}{\TThalesCalculsD[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}}% }% }% }% }% %%%% \newcommand{\ReciThales}[6][]{% \ifboolKV[ClesThales]{Droites}{% Les droites $(#3#5)$ et $(#4#6)$ sont s\'ecantes en $#2$. }{% Dans le triangle $#2#3#4$, $#5$ est un point \ifboolKV[ClesThales]{Segment}{du segment $[#2#3]$}{de la droite $(#2#3)$}, $#6$ est un point \ifboolKV[ClesThales]{Segment}{du segment $[#2#4]$}{de la droite $(#2#4)$}. } % \ifboolKV[ClesThales]{Propor}{Le tableau $\begin{array}{c|c} #2#5#6\\ \hline #2#3#4\\ \end{array} $ est-il un tableau de proportionnalit\'e ? }{% } } \newcommand{\ReciThalesCalculs}[8][]{% \StrMid{#2}{1}{1}[\NomA]% \StrMid{#2}{2}{2}[\NomB]% \StrMid{#2}{3}{3}[\NomC]% \StrMid{#2}{4}{4}[\NomM]% \StrMid{#2}{5}{5}[\NomN]% \ifboolKV[ClesThales]{Produit}{% \begin{align*} \dfrac{\NomA\NomM}{\NomA\NomB}=\dfrac{\num{#3}}{\num{#4}}&&\dfrac{\NomA\NomN}{\NomA\NomC}=\dfrac{\num{#5}}{\num{#6}} \end{align*} Effectuons les produits en croix :\xdef\NumA{\fpeval{#3*#6}}\xdef\NumB{\fpeval{#4*#5}} \begin{align*} \num{#3}\times\num{#6}&=\num{\fpeval{#3*#6}}&&&\num{#4}\times\num{#5}&=\num{\fpeval{#4*#5}} \end{align*} \xintifboolexpr{\NumA == \NumB}{Comme les produits en croix sont \'egaux, alors $\dfrac{\NomA\NomM}{\NomA\NomB}=\dfrac{\NomA\NomN}{\NomA\NomC}$.\\[0.5em]% }{% Comme les produits en croix sont diff\'erents, alors $\dfrac{\NomA\NomM}{\NomA\NomB}\not=\dfrac{\NomA\NomN}{\NomA\NomC}$.\\% }% }{% \[\left. \begin{array}{l} \dfrac{\NomA\NomM}{\NomA\NomB}=\dfrac{\num{#3}}{\num{#4}}\ifx\bla#7\bla\ifboolKV[ClesThales]{Simplification}{\PGCD{#3}{#4}\xintifboolexpr{\pgcd==1}{%il faut regarder si on doit continuer avec le PPCM... \PGCD{#5}{#6}\xintifboolexpr{\pgcd>1}{\xdef\DenomSimpaa{\fpeval{#6/\pgcd}}\PPCM{#4}{\DenomSimpaa}\xintifboolexpr{\ppcm==#4}{}{=\dfrac{#3\times\num{\fpeval{\ppcm/#4}}}{#4\times\num{\fpeval{\ppcm/#4}}}=\dfrac{\num{\fpeval{#3*\ppcm/#4}}}{\num{\fpeval{\ppcm}}}}}{}% }{=\displaystyle\Simplification[All]{#3}{#4}\PGCD{#3}{#4}\xdef\NumSimp{\fpeval{#3/\pgcd}}\xdef\DenomSimp{\fpeval{#4/\pgcd}}\PGCD{#5}{#6}\xdef\NumSimpa{\fpeval{#5/\pgcd}}\xdef\DenomSimpa{\fpeval{#6/\pgcd}}\PPCM{\DenomSimp}{\DenomSimpa}\xintifboolexpr{\fpeval{\the\ppcm/\DenomSimp}==1}{}{=\dfrac{\num{\NumSimp}\times\num{\fpeval{\the\ppcm/\DenomSimp}}}{\num{\DenomSimp}\times\PPCM{\DenomSimp}{\DenomSimpa}\num{\fpeval{\the\ppcm/\DenomSimp}}}=\dfrac{\PPCM{\DenomSimp}{\DenomSimpa}\num{\fpeval{\NumSimp*\the\ppcm/\DenomSimp}}}{\PPCM{\DenomSimp}{\DenomSimpa}\num{\the\ppcm}}}}}{\PPCM{#4}{#6}\xintifboolexpr{\fpeval{\the\ppcm/#4}==1}{}{=\dfrac{\num{#3}\times\num{\fpeval{\the\ppcm/#4}}}{\num{#4}\times\PPCM{#4}{#6}\num{\fpeval{\the\ppcm/#4}}}=\dfrac{\PPCM{#4}{#6}\num{\fpeval{#3*\the\ppcm/#4}}}{\PPCM{#4}{#6}\num{\the\ppcm}}}}\xdef\NumA{\fpeval{#3*#6}}\else% \xintifboolexpr{#7==1}{}{=\dfrac{\num{#3}\times\num{#7}}{\num{#4}\times\num{#7}}=\dfrac{\num{\fpeval{#3*#7}}}{\num{\fpeval{#4*#7}}}}\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\xintifboolexpr{\the\ppcm==\fpeval{#4*#7}}{}{=\dfrac{\num{\fpeval{#3*#7}}\times\num{\fpeval{\the\ppcm/(#4*#7)}}}{\num{\fpeval{#4*#7}}\times\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{\the\ppcm/(#4*#7)}}}=\dfrac{\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{#3*\the\ppcm/#4}}}{\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{\the\ppcm}}}}\xdef\NumA{\fpeval{#3*#7*#6*#8}} \fi \\ \\ \dfrac{\NomA\NomN}{\NomA\NomC}=\dfrac{\num{#5}}{\num{#6}}% \ifx\bla#8\bla% \ifboolKV[ClesThales]{Simplification}{\PGCD{#5}{#6}\xintifboolexpr{\pgcd==1}{%il faut regarder si on doit continuer avec le PPCM... \PGCD{#3}{#4}\xintifboolexpr{\pgcd>1}{\xdef\DenomSimpaa{\fpeval{#4/\pgcd}}\PPCM{#6}{\DenomSimpaa}\xintifboolexpr{\ppcm==#6}{}{=\dfrac{#5\times\num{\fpeval{\ppcm/#6}}}{#6\times\num{\fpeval{\ppcm/#6}}}=\dfrac{\num{\fpeval{#5*\ppcm/#6}}}{\num{\fpeval{\ppcm}}}}}{}% }{=\displaystyle\Simplification[All]{#5}{#6}\PGCD{#5}{#6}\xdef\NumSimp{\fpeval{#5/\pgcd}}\xdef\DenomSimp{\fpeval{#6/\pgcd}}\PGCD{#3}{#4}\xdef\NumSimpa{\fpeval{#3/\pgcd}}\xdef\DenomSimpa{\fpeval{#4/\pgcd}}\PPCM{\DenomSimp}{\DenomSimpa}\xintifboolexpr{\fpeval{\the\ppcm/\DenomSimp}==1}{}{=\dfrac{\num{\NumSimp}\times\num{\fpeval{\the\ppcm/\DenomSimp}}}{\num{\DenomSimp}\times\PPCM{\DenomSimp}{\DenomSimpa}\num{\fpeval{\the\ppcm/\DenomSimp}}}=\dfrac{\PPCM{\DenomSimp}{\DenomSimpa}\num{\fpeval{\NumSimp*\the\ppcm/\DenomSimp}}}{\PPCM{\DenomSimp}{\DenomSimpa}\num{\the\ppcm}}}}}{\PPCM{#4}{#6}\xintifboolexpr{\fpeval{\the\ppcm/#6}==1}{}{=\dfrac{\num{#5}\times\num{\fpeval{\the\ppcm/#6}}}{\num{#6}\times\PPCM{#4}{#6}\num{\fpeval{\the\ppcm/#6}}}=\dfrac{\PPCM{#4}{#6}\num{\fpeval{#5*\the\ppcm/#6}}}{\PPCM{#4}{#6}\num{\the\ppcm}}}}\xdef\NumB{\fpeval{#5*#4}}% \else% \xintifboolexpr{#8==1}{}{=\dfrac{\num{#5}\times\num{#8}}{\num{#6}\times\num{#8}}=\dfrac{\num{\fpeval{#5*#8}}}{\num{\fpeval{#6*#8}}}}\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\xintifboolexpr{\the\ppcm==\fpeval{#6*#8}}{}{=\dfrac{\num{\fpeval{#5*#8}}\times\num{\fpeval{\the\ppcm/(#6*#8)}}}{\num{\fpeval{#6*#8}}\times\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{\the\ppcm/(#6*#8)}}}=\dfrac{\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{#5*\the\ppcm/#6}}}{\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{\the\ppcm}}} }\xdef\NumB{\fpeval{#5*#8*#4*#7}} \fi\\ \end{array} \right\}\ifnum\NumA=\NumB \dfrac{\NomA\NomM}{\NomA\NomB}=\dfrac{\NomA\NomN}{\NomA\NomC}\else\dfrac{\NomA\NomM}{\NomA\NomB}\not=\dfrac{\NomA\NomN}{\NomA\NomC}\fi \] } \ifboolKV[ClesThales]{Propor}{% \ifnum\NumA=\NumB Donc le tableau $\begin{array}{c|c} \NomA\NomM&\NomA\NomN\\ \hline \NomA\NomB&\NomA\NomC\\ \end{array} $ est bien un tableau de proportionnalit\'e.\\De plus, les points $\NomA$, $\NomM$, $\NomB$ sont align\'es dans le m\^eme ordre que les points $\NomA$, $\NomN$, $\NomC$. Donc les droites $(\NomM\NomN)$ et $(\NomB\NomC)$ sont parall\`eles d'apr\`es la r\'eciproque du th\'eor\`eme de Thal\`es.\else% Donc les droites $(\NomM\NomN)$ et $(\NomB\NomC)$ ne sont pas parall\`eles.\fi }{% \xintifboolexpr{\NumA==\NumB}{% De plus, les points $\NomA$, $\NomM$, $\NomB$ sont align\'es dans le m\^eme ordre que les points $\NomA$, $\NomN$, $\NomC$. Donc les droites $(\NomM\NomN)$ et $(\NomB\NomC)$ sont parall\`eles d'apr\`es la r\'eciproque du th\'eor\`eme de Thal\`es.}{% Donc les droites $(\NomM\NomN)$ et $(\NomB\NomC)$ ne sont pas parall\`eles.} } } \newcommand\ReciproqueThales[8][]{% % #1 Cl\'es % #2 NomTriangle + Points ABCEF pour droite (BC)//(EF) % #3 longueur AE % #4 longueur AB % #5 longueur AF % #6 longueur AC \ifboolKV[ClesThales]{FigureSeule}{% \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]% \MPFigReciThales{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}% }{\ifboolKV[ClesThales]{FigurecroiseeSeule}{% \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]% \MPFigReciThalesCroisee{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}% }{% \ifboolKV[ClesThales]{Figure}{% \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]% \begin{multicols}{2} {\em La figure est donn\'ee \`a titre indicatif.} \[\MPFigReciThales{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}\] \par\columnbreak\par \ReciThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par \ReciThalesCalculs[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8} \end{multicols} }{\ifboolKV[ClesThales]{Figurecroisee}{% \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN] \begin{minipage}{0.4\linewidth} {\em La figure est donn\'ee \`a titre indicatif.} \[\MPFigReciThalesCroisee{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}\] \end{minipage} \hfill \begin{minipage}{0.55\linewidth} \ReciThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par \ReciThalesCalculs[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}% \end{minipage}\\% }{\ReciThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par \ReciThalesCalculs[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}% }% }% }% }% }% \newcommand{\Thales}[8][]{% \useKVdefault[ClesThales]% \setKV[ClesThales]{#1}% \ifboolKV[ClesThales]{Reciproque}{% \ReciproqueThales[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}% }{% \ifboolKV[ClesThales]{FigureSeule}{% \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]% \MPFigThales{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}% }{% \ifboolKV[ClesThales]{FigurecroiseeSeule}{% \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]% \MPFigThalesCroisee{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}% }{% \ifboolKV[ClesThales]{Redaction}{% \ifboolKV[ClesThales]{Figure}{% \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]% \begin{multicols}{2} {\em La figure est donn\'ee \`a titre indicatif.}% \[\MPFigThales{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}\]% \par\columnbreak\par% \TTThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}% \end{multicols}% }{% \ifboolKV[ClesThales]{Figurecroisee}{% \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]% \begin{multicols}{2} {\em La figure est donn\'ee \`a titre indicatif.}% \[\MPFigThalesCroisee{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}\]% \par\columnbreak\par% \TTThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}% \end{multicols} }{% \TTThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}% } } }{% \TThales[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}% }% }% }% }% }% %%% % Trigonom\'etrie %%% \def\MPFigTrigo#1#2#3#4#5#6#7#8{% \ifluatex \mplibcodeinherit{enable} \mplibforcehmode \begin{mplibcode} u:=\useKV[ClesTrigo]{Echelle}; pair A,B,C,O,I,D,E,F;% % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure A=u*(1,1); B-A=u*(3,0); C=(A--2[A,B rotatedabout(A,50)]) intersectionpoint (B--2[B,A rotatedabout(B,-90)]); % On d\'efinit le centre du cercle circonscrit O - .5[A,B] = whatever * (B-A) rotated 90; O - .5[B,C] = whatever * (C-B) rotated 90; % On tourne pour \'eventuellement moins de lassitude :) A:=A rotatedabout(O,#8); B:=B rotatedabout(O,#8); C:=C rotatedabout(O,#8); % On d\'efinit le centre du cercle inscrit (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C]; (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C]; % on dessine \`a main lev\'ee :) path triangle; triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle; % on d\'efinit l'angle droit D-B=7*unitvector(C-B); F-B=7*unitvector(A-B); E-D=F-B; draw D{dir(angle(E-D)+5)}..E{dir(angle(E-D)+5)}--E{dir(angle(F-E)+5)}..F{dir(angle(F-E)+5)}; % L'angle :) path cc; cc=fullcircle scaled 1u; % on marque les angles picture MAngle; MAngle=image( draw (cc shifted A); ); draw MAngle; clip currentpicture to triangle; draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}; draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}; draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}; % on labelise picture z; label(btex #1 etex,1.15[O,A]); label(btex #2 etex,1.15[O,B]); label(btex #3 etex,1.15[O,C]); label(btex \ang{#7} etex,A+0.95u*unitvector(I-A)); decalage:=3mm; if #6<0: else: if angle(1/2[A,C]-B)>0: if #6=0: label(btex ? etex,1.1[B,1/2[A,C]]); else: label(btex \num{#6} etex,1.2[B,1/2[A,C]]); fi; else: if #6=0: label(btex ? etex,1.1[B,1/2[A,C]]); else: label(btex \num{#6} etex,1.2[B,1/2[A,C]]); fi; fi; fi; if #4<0: else: if angle(1/2[B,C]-A)>0: if #4=0: label(btex ? etex,1/2[B,C]-decalage*(unitvector(A-B))); else: label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B))); fi; else: if #4=0: label(btex ? etex,1/2[B,C]-decalage*(unitvector(A-B))); else: label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B))); fi; fi; fi; if #5<0: else: if angle(1/2[A,B]-C)>0: if #5=0: label(btex ? etex,1/2[A,B]-decalage*(unitvector(C-B))); else: label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B))); fi; else: if #5=0: label(btex ? etex,1/2[A,B]-decalage*(unitvector(C-B))); else: label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B))); fi; fi; fi; \end{mplibcode} \mplibcodeinherit{disable} \else \begin{mpost}[mpsettings={u:=\useKV[ClesTrigo]{Echelle};}] pair A,B,C,O,I,D,E,F;% % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure A=u*(1,1); B-A=u*(3,0); C=(A--2[A,B rotatedabout(A,50)]) intersectionpoint (B--2[B,A rotatedabout(B,-90)]); % On d\'efinit le centre du cercle circonscrit O - .5[A,B] = whatever * (B-A) rotated 90; O - .5[B,C] = whatever * (C-B) rotated 90; % On tourne pour \'eventuellement moins de lassitude :) A:=A rotatedabout(O,#8); B:=B rotatedabout(O,#8); C:=C rotatedabout(O,#8); % On d\'efinit le centre du cercle inscrit (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C]; (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C]; % on dessine \`a main lev\'ee :) path triangle; triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle; % on d\'efinit l'angle droit D-B=7*unitvector(C-B); F-B=7*unitvector(A-B); E-D=F-B; draw D{dir(angle(E-D)+5)}..E{dir(angle(E-D)+5)}--E{dir(angle(F-E)+5)}..F{dir(angle(F-E)+5)}; % L'angle :) path cc; cc=fullcircle scaled 1u; % on marque les angles picture MAngle; MAngle=image( draw (cc shifted A); % draw (cc shifted B); % draw (cc shifted C); ); draw MAngle; clip currentpicture to triangle; draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}; draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}; draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}; % on labelise picture z; label(btex #1 etex,1.15[O,A]); label(btex #2 etex,1.15[O,B]); label(btex #3 etex,1.15[O,C]); label(btex \ang{#7} etex,A+0.95u*unitvector(I-A)); decalage:=3mm; if #6<0: else: if angle(1/2[A,C]-B)>0: if #6=0: label(btex ? etex rotated angle(C-A),1.1[B,1/2[A,C]]); else: label(btex \num{#6} etex rotated angle(C-A),1.2[B,1/2[A,C]]); fi; else: if #6=0: label(btex ? etex rotated angle(A-C),1.1[B,1/2[A,C]]); else: label(btex \num{#6} etex rotated angle(A-C),1.2[B,1/2[A,C]]); fi; fi; fi; if #4<0: else: if angle(1/2[B,C]-A)>0: if #4=0: label(btex ? etex rotated(angle(B-C)),1/2[B,C]-decalage*(unitvector(A-B))); else: label(btex \num{#4} etex rotated(angle(B-C)),1/2[B,C]-decalage*(unitvector(A-B))); fi; else: if #4=0: label(btex ? etex rotated(angle(C-B)),1/2[B,C]-decalage*(unitvector(A-B))); else: label(btex \num{#4} etex rotated(angle(C-B)),1/2[B,C]-decalage*(unitvector(A-B))); fi; fi; fi; if #5<0: else: if angle(1/2[A,B]-C)>0: if #5=0: label(btex ? etex rotated angle(A-B),1/2[A,B]-decalage*(unitvector(C-B))); else: label(btex \num{#5} etex rotated angle(A-B),1/2[A,B]-decalage*(unitvector(C-B))); fi; else: if #5=0: label(btex ? etex rotated angle(B-A),1/2[A,B]-decalage*(unitvector(C-B))); else: label(btex \num{#5} etex rotated angle(B-A),1/2[A,B]-decalage*(unitvector(C-B))); fi; fi; fi; \end{mpost} \fi } \def\MPFigTrigoAngle#1#2#3#4#5#6#7{% % #1 A % #2 B % #3 C % #4 opp % #5 adj % #6 hyp % #7 angle de rotation \ifluatex \mplibcodeinherit{enable} \mplibforcehmode \begin{mplibcode} u:=\useKV[ClesTrigo]{Echelle}; pair A,B,C,O,I,D,E,F;% % On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure A=u*(1,1); B-A=u*(3,0); C=(A--2[A,B rotatedabout(A,50)]) intersectionpoint (B--2[B,A rotatedabout(B,-90)]); % On d\'efinit le centre du cercle circonscrit O - .5[A,B] = whatever * (B-A) rotated 90; O - .5[B,C] = whatever * (C-B) rotated 90; % On tourne pour \'eventuellement moins de lassitude :) A:=A rotatedabout(O,#7); B:=B rotatedabout(O,#7); C:=C rotatedabout(O,#7); % On d\'efinit le centre du cercle inscrit (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C]; (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C]; %on dessine \`a main lev\'ee :) path triangle; triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle; %on d\'efinit l'angle droit D-B=7*unitvector(C-B); F-B=7*unitvector(A-B); E-D=F-B; draw D{dir(angle(E-D)+5)}..E{dir(angle(E-D)+5)}--E{dir(angle(F-E)+5)}..F{dir(angle(F-E)+5)}; %L'angle :) path cc; cc=fullcircle scaled 1u; % on marque les angles picture MAngle; MAngle=image( draw (cc shifted A); ); draw MAngle; clip currentpicture to triangle; draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}; draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}; draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}; % on labelise label(btex #1 etex,1.15[O,A]); label(btex #2 etex,1.15[O,B]); label(btex #3 etex,1.15[O,C]); label(btex ? etex,A+0.95u*unitvector(I-A)); decalage:=3mm; if #6>0: if angle(1/2[A,C]-B)>0: label(btex \num{#6} etex,1.2[B,1/2[A,C]]); else: label(btex \num{#6} etex,1.2[B,1/2[A,C]]); fi; fi; if #4>0: if angle(1/2[B,C]-A)>0: label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B))); else: label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B))); fi; fi; if #5>0: if angle(1/2[A,B]-C)>0: label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B))); else: label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B))); fi; fi; \end{mplibcode} \mplibcodeinherit{disable} \else \begin{mpost}[mpsettings={u:=\useKV[ClesTrigo]{Echelle};}] u:=1cm; pair A,B,C,O,I,D,E,F;% %On place les points A,B,C sur le cercle de mani\`ere \`a faciliter la rotation de la figure A=u*(1,1); B-A=u*(3,0); C=(A--2[A,B rotatedabout(A,50)]) intersectionpoint (B--2[B,A rotatedabout(B,-90)]); % On d\'efinit le centre du cercle circonscrit O - .5[A,B] = whatever * (B-A) rotated 90; O - .5[B,C] = whatever * (C-B) rotated 90; % On tourne pour \'eventuellement moins de lassitude :) A:=A rotatedabout(O,#7); B:=B rotatedabout(O,#7); C:=C rotatedabout(O,#7); % On d\'efinit le centre du cercle inscrit (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C]; (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C]; %on dessine \`a main lev\'ee :) path triangle; triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle; %on d\'efinit l'angle droit D-B=7*unitvector(C-B); F-B=7*unitvector(A-B); E-D=F-B; draw D{dir(angle(E-D)+5)}..E{dir(angle(E-D)+5)}--E{dir(angle(F-E)+5)}..F{dir(angle(F-E)+5)}; %L'angle :) path cc; cc=fullcircle scaled 1u; % on marque les angles picture MAngle; MAngle=image( draw (cc shifted A); ); draw MAngle; clip currentpicture to triangle; draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}; draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}; draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}; %on labelise label(btex #1 etex,1.15[O,A]); label(btex #2 etex,1.15[O,B]); label(btex #3 etex,1.15[O,C]); label(btex ? etex,A+0.95u*unitvector(I-A)); decalage:=3mm; if #6>0: if angle(1/2[A,C]-B)>0: label(btex \num{#6} etex,1.2[B,1/2[A,C]]); else: label(btex \num{#6} etex,1.2[B,1/2[A,C]]); fi; fi; if #4>0: if angle(1/2[B,C]-A)>0: label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B))); else: label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B))); fi; fi; if #5>0: if angle(1/2[A,B]-C)>0: label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B))); else: label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B))); fi; fi; \end{mpost} \fi } \setKVdefault[ClesTrigo]{Angle=0,Propor=false,Figure=false,FigureSeule=false,Precision=2,Unite=cm,Sinus=false,Cosinus=false,Tangente=false,Perso=false,Echelle=1cm}% \newcommand\RedactionTrigo{}% \newcommand\TrigoCalculs[5][]{% \setKV[ClesTrigo]{#1}% % #1 Cl\'es % #2 Nom du triangle ABC, rectangle en B, angle connu ou pas : BAC % #3 Longueur % #4 Longueur % #5 angle % On d\'efinit les points \StrMid{#2}{1}{1}[\NomA]% \StrMid{#2}{2}{2}[\NomB]% \StrMid{#2}{3}{3}[\NomC]% \xdef\NomTriangle{\NomA\NomB\NomC}% \xdef\NomAngleDroit{\NomB}% \xdef\NomSommetA{\NomA}% \xdef\NomSommetB{\NomB}% \xdef\NomSommetC{\NomC}% \ifboolKV[ClesTrigo]{Perso}{% \RedactionTrigo% }{% Dans le triangle $\NomA\NomB\NomC$, rectangle en $\NomB$, on a :% }% \ifboolKV[ClesTrigo]{Cosinus}{% \ifx\bla#3\bla%on calcule le c\^ot\'e adjacent \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(#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(#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(#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(#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(#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(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(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(acosd(#3/#4),9)}}{=}{\approx}\ang{\fpeval{round(acosd(#3/#4),\useKV[ClesTrigo]{Precision})}}% \end{align*}% }% \fi% \fi% }{}% \ifboolKV[ClesTrigo]{Sinus}{% \ifx\bla#3\bla%on calcule le c\^ot\'e oppos\'e \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(#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(#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(#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(#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(#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(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(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(asind(#3/#4),9)}}{=}{\approx}\ang{\fpeval{round(asind(#3/#4),\useKV[ClesTrigo]{Precision})}}% \end{align*}% }% \fi% \fi% }{}% \ifboolKV[ClesTrigo]{Tangente}{% \ifx\bla#3\bla%on calcule le c\^ot\'e oppos\'e \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(#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(#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(#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(#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(#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 \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(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(atand(#3/#4),9)}}{=}{\approx}\ang{\fpeval{round(atand(#3/#4),\useKV[ClesTrigo]{Precision})}}% \end{align*}% }% \fi% \fi% }{}% }% \newcommand\Trigo[5][]{% \useKVdefault[ClesTrigo]% \setKV[ClesTrigo]{#1}% % #1 Cl\'es % #2 Nom du triangle ABC, rectangle en B, angle connu ou pas : BAC % #3 Longueur % #4 Longueur % #5 angle % On d\'efinit les points \StrMid{#2}{1}{1}[\NomA]% \StrMid{#2}{2}{2}[\NomB]% \StrMid{#2}{3}{3}[\NomC]% % On r\'edige \ifboolKV[ClesTrigo]{FigureSeule}{% \ifx\bla#5\bla% \ifboolKV[ClesTrigo]{Cosinus}{% \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{-1}{#3}{#4}{\useKV[ClesTrigo]{Angle}} }{}% \ifboolKV[ClesTrigo]{Sinus}{% \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{-1}{#4}{\useKV[ClesTrigo]{Angle}} }{}% \ifboolKV[ClesTrigo]{Tangente}{% \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{#4}{-1}{\useKV[ClesTrigo]{Angle}} }{}% \else%}{%figure pour calculer une longueur \ifboolKV[ClesTrigo]{Cosinus}{% \ifx\bla#3\bla%adjacent inconnu \MPFigTrigo{\NomA}{\NomB}{\NomC}{-1}{0}{#4}{#5}{\useKV[ClesTrigo]{Angle}} \else \MPFigTrigo{\NomA}{\NomB}{\NomC}{-1}{#3}{0}{#5}{\useKV[ClesTrigo]{Angle}} \fi }{}% \ifboolKV[ClesTrigo]{Sinus}{% \ifx\bla#3\bla%adjacent inconnu \MPFigTrigo{\NomA}{\NomB}{\NomC}{0}{-1}{#4}{#5}{\useKV[ClesTrigo]{Angle}} \else \MPFigTrigo{\NomA}{\NomB}{\NomC}{#3}{-1}{0}{#5}{\useKV[ClesTrigo]{Angle}} \fi }{}% \ifboolKV[ClesTrigo]{Tangente}{% \ifx\bla#3\bla%adjacent inconnu \MPFigTrigo{\NomA}{\NomB}{\NomC}{0}{#4}{-1}{#5}{\useKV[ClesTrigo]{Angle}} \else% \MPFigTrigo{\NomA}{\NomB}{\NomC}{#3}{0}{-1}{#5}{\useKV[ClesTrigo]{Angle}} \fi% }{}% \fi% }{% \ifboolKV[ClesTrigo]{Figure}{% \begin{multicols}{2}% {\em La figure est donn\'ee \`a titre indicatif.}% \ifx\bla#5\bla% \ifboolKV[ClesTrigo]{Cosinus}{% \begin{center} \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{-1}{#3}{#4}{\useKV[ClesTrigo]{Angle}} \end{center} }{}% \ifboolKV[ClesTrigo]{Sinus}{% \begin{center} \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{-1}{#4}{\useKV[ClesTrigo]{Angle}} \end{center} }{}% \ifboolKV[ClesTrigo]{Tangente}{% \begin{center} \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{#4}{-1}{\useKV[ClesTrigo]{Angle}} \end{center} }{}% \else%}{%figure pour calculer une longueur \ifboolKV[ClesTrigo]{Cosinus}{% \ifx\bla#3\bla%adjacent inconnu \begin{center} \MPFigTrigo{\NomA}{\NomB}{\NomC}{-1}{0}{#4}{#5}{\useKV[ClesTrigo]{Angle}} \end{center} \else \begin{center} \MPFigTrigo{\NomA}{\NomB}{\NomC}{-1}{#3}{0}{#5}{\useKV[ClesTrigo]{Angle}} \end{center} \fi }{}% \ifboolKV[ClesTrigo]{Sinus}{% \ifx\bla#3\bla%adjacent inconnu \begin{center} \MPFigTrigo{\NomA}{\NomB}{\NomC}{0}{-1}{#4}{#5}{\useKV[ClesTrigo]{Angle}} \end{center} \else \begin{center} \MPFigTrigo{\NomA}{\NomB}{\NomC}{#3}{-1}{0}{#5}{\useKV[ClesTrigo]{Angle}} \end{center} \fi }{}% \ifboolKV[ClesTrigo]{Tangente}{% \ifx\bla#3\bla%adjacent inconnu \begin{center} \MPFigTrigo{\NomA}{\NomB}{\NomC}{0}{#4}{-1}{#5}{\useKV[ClesTrigo]{Angle}} \end{center} \else% \begin{center} \MPFigTrigo{\NomA}{\NomB}{\NomC}{#3}{0}{-1}{#5}{\useKV[ClesTrigo]{Angle}} \end{center} \fi% }{}% \fi% \par\columnbreak\par \TrigoCalculs[#1]{#2}{#3}{#4}{#5}% \end{multicols} }{% \TrigoCalculs[#1]{#2}{#3}{#4}{#5}% }% }% }% %%% % Statistiques %%% \newcommand\NbDonnees{} \newcommand\SommeDonnees{}% \newcommand\EffectifTotal{}% \newcommand\Moyenne{}% \newcommand\Etendue{}% \newcommand\Mediane{}% \newcommand\DonneeMax{}% \newcommand\DonneeMin{}% \newcommand\EffectifMax{}% \setKVdefault[ClesStat]{ColVide=0,EffVide=false,% FreqVide=false,AngVide=false,ECCVide=false,TotalVide=false,Sondage=false,% Tableau=false,Stretch=1,Frequence=false,EffectifTotal=false,% Etendue=false,Moyenne=false,SET=false,Mediane=false,Total=false,Concret=false,% Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Grille=false,Origine=0,Angle=false,SemiAngle=false,Qualitatif=false,TableauVide=false,Graphique=false,Batons=true,Pasx=1,Pasy=1,Unitex=0.5,Unitey=0.5,Rayon=3cm,AffichageAngle=false,Liste=false,ECC=false,Coupure=10,CouleurTab=gray!15,ListeCouleurs={white},Hachures=false,Inverse=false,AbscisseRotation=false,Representation=false} % La construction du tableau \def\addtotok#1#2{#1\expandafter{\the#1#2}} \newtoks\tabtoksa\newtoks\tabtoksb\newtoks\tabtoksc \def\updatetoks#1/#2\nil{\addtotok\tabtoksa{\ifboolKV[ClesStat]{Qualitatif}{&\cellcolor{\useKV[ClesStat]{CouleurTab}}#1}{&\cellcolor{\useKV[ClesStat]{CouleurTab}}\num{#1}}}\addtotok\tabtoksb{&\num{#2}}} \def\buildtab{% %%Tableau sans total \tabtoksa{\useKV[ClesStat]{Donnee}}\tabtoksb{\useKV[ClesStat]{Effectif}}% \foreachitem\compteur\in\ListeComplete{\expandafter\updatetoks\compteur\nil}% \[% \renewcommand{\arraystretch}{\useKV[ClesStat]{Stretch}}% \begin{tabular}{|>{\columncolor{\useKV[ClesStat]{CouleurTab}}}c|*{\fpeval{\ListeCompletelen}}{>{\centering\arraybackslash}p{\useKV[ClesStat]{Largeur}}|}}% \hline% \the\tabtoksa\\\hline% \xintifboolexpr{\useKV[ClesStat]{ColVide}<1 || \useKV[ClesStat]{ColVide}>\ListeCompletelen}{% \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&}}{\the\tabtoksb}\\\hline% \ifboolKV[ClesStat]{Frequence}{Fr\'equence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}\\\hline}{}% \ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}\\\hline}{}% \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}\\\hline}{}% \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}\\\hline}{}% }{% \xintifboolexpr{\useKV[ClesStat]{ColVide}==1}{% \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&}}{\useKV[ClesStat]{Effectif}&\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{&\ListeComplete[##1,2]}}\\\hline% \ifboolKV[ClesStat]{Frequence}{Fr\'equence (\%)&\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}\\\hline}{}% \ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})&\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}\\\hline}{}% \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})&\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}\\\hline}{}% \ifboolKV[ClesStat]{ECC}{E.C.C.&\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}\\\hline}{}% }{% \xintifboolexpr{\useKV[ClesStat]{ColVide}==\ListeCompletelen}{% \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&}}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen-1}}\do{&\ListeComplete[##1,2]}}&\\\hline% \ifboolKV[ClesStat]{Frequence}{Fr\'equence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}&\\\hline}{}% \ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}&\\\hline}{}% \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}&\\\hline}{}% \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}&\\\hline}{}% }{% \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&}}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\fpeval{\useKV[ClesStat]{ColVide}-1}}}\do{&\ListeComplete[##1,2]}&\xintFor* ##1 in {\xintSeq {\fpeval{\useKV[ClesStat]{ColVide}+1}}{\ListeCompletelen}}\do{&\ListeComplete[##1,2]}}\\\hline% \ifboolKV[ClesStat]{Frequence}{Fr\'equence (\%)\xintFor* ##1 in {\xintSeq {1}{\fpeval{\useKV[ClesStat]{ColVide}-1}}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}&\xintFor* ##1 in {\xintSeq {\fpeval{\useKV[ClesStat]{ColVide}+1}}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}\\\hline}{}% \ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\fpeval{\useKV[ClesStat]{ColVide}-1}}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}&\xintFor* ##1 in {\xintSeq {\fpeval{\useKV[ClesStat]{ColVide}+1}}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculAngle{##1}}}}\\\hline}{}% \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\fpeval{\useKV[ClesStat]{ColVide}-1}}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}&\xintFor* ##1 in {\xintSeq {\fpeval{\useKV[ClesStat]{ColVide}+1}}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculSemiAngle{##1}}}}\\\hline}{}% \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\fpeval{\useKV[ClesStat]{ColVide}-1}}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}&\xintFor* ##1 in {\xintSeq {\fpeval{\useKV[ClesStat]{ColVide}+1}}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}\\\hline}{}% }% }% }% \end{tabular} \renewcommand{\arraystretch}{1}% \]% }% \def\buildtabt{% %%Tableau avec total \tabtoksa{\useKV[ClesStat]{Donnee}}\tabtoksb{\useKV[ClesStat]{Effectif}}% \foreachitem\compteur\in\ListeComplete{\expandafter\updatetoks\compteur\nil}% \[% \renewcommand{\arraystretch}{\useKV[ClesStat]{Stretch}}% \begin{tabular}{|>{\columncolor{\useKV[ClesStat]{CouleurTab}}}c|*{\fpeval{\ListeCompletelen+1}}{>{\centering\arraybackslash}p{\useKV[ClesStat]{Largeur}}|}}% \hline% \the\tabtoksa&\cellcolor{\useKV[ClesStat]{CouleurTab}}Total\\\hline% \xintifboolexpr{\useKV[ClesStat]{ColVide}<1 || \useKV[ClesStat]{ColVide}>\ListeCompletelen}{% \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&}}{\the\tabtoksb&\ifboolKV[ClesStat]{TotalVide}{}{\num{\EffectifTotal}}}\\\hline% \ifboolKV[ClesStat]{Frequence}{Fr\'equence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{100}}}\\\hline}{}% \ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{360}}}\\\hline}{}% \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{180}}}\\\hline}{}% \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\num{\EffectifTotal}}}}\\\hline}{}% }{% \xintifboolexpr{\useKV[ClesStat]{ColVide}==1}{% \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&}}{\useKV[ClesStat]{Effectif}&\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{&\ListeComplete[##1,2]}&\ifboolKV[ClesStat]{TotalVide}{}{\num{\EffectifTotal}}}\\\hline% \ifboolKV[ClesStat]{Frequence}{Fr\'equence (\%)&\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{100}}}\\\hline}{}% \ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})&\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{360}}}\\\hline}{}% \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})&\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{180}}}\\\hline}{}% \ifboolKV[ClesStat]{ECC}{E.C.C.&\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\num{\EffectifTotal}}}}\\\hline}{}% }{% \xintifboolexpr{\useKV[ClesStat]{ColVide}==\ListeCompletelen}{% \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&}}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen-1}}\do{&\ListeComplete[##1,2]}&&\ifboolKV[ClesStat]{TotalVide}{}{\num{\EffectifTotal}}}\\\hline% \ifboolKV[ClesStat]{Frequence}{Fr\'equence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}&&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{100}}}\\\hline}{}% \ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}&&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{360}}}\\\hline}{}% \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}&&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{180}}}\\\hline}{}% \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}&&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\num{\EffectifTotal}}}}\\\hline}{}% }{% \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&}}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\fpeval{\useKV[ClesStat]{ColVide}-1}}}\do{&\ListeComplete[##1,2]}&\xintFor* ##1 in {\xintSeq {\fpeval{\useKV[ClesStat]{ColVide}+1}}{\ListeCompletelen}}\do{&\ListeComplete[##1,2]}&\ifboolKV[ClesStat]{TotalVide}{}{\num{\EffectifTotal}}}\\\hline% \ifboolKV[ClesStat]{Frequence}{Fr\'equence (\%)\xintFor* ##1 in {\xintSeq {1}{\fpeval{\useKV[ClesStat]{ColVide}-1}}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}&\xintFor* ##1 in {\xintSeq {\fpeval{\useKV[ClesStat]{ColVide}+1}}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{100}}}\\\hline}{}% \ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\fpeval{\useKV[ClesStat]{ColVide}-1}}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}&\xintFor* ##1 in {\xintSeq {\fpeval{\useKV[ClesStat]{ColVide}+1}}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculAngle{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{360}}}\\\hline}{}% \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\fpeval{\useKV[ClesStat]{ColVide}-1}}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}&\xintFor* ##1 in {\xintSeq {\fpeval{\useKV[ClesStat]{ColVide}+1}}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculSemiAngle{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{180}}}\\\hline}{}% \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\fpeval{\useKV[ClesStat]{ColVide}-1}}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}&\xintFor* ##1 in {\xintSeq {\fpeval{\useKV[ClesStat]{ColVide}+1}}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\num{\EffectifTotal}}}}\\\hline}{}% }% }% }% \end{tabular} \renewcommand{\arraystretch}{1}% \]% }% % Pour construire le diagramme en bâtons \def\Updatetoks#1/#2\nil{\addtotok\toklistepoint{(#1,#2),}} \newcommand\buildgraph[1][]{% \newtoks\toklistepoint \foreachitem\compteur\in\ListeComplete{\expandafter\Updatetoks\compteur\nil}% \[\MPStat[#1]{\useKV[ClesStat]{Unitex}}{\useKV[ClesStat]{Unitey}}{\the\toklistepoint}{\useKV[ClesStat]{Donnee}}{\useKV[ClesStat]{Effectif}}{\useKV[ClesStat]{Origine}}{\useKV[ClesStat]{AbscisseRotation}}\]% }% % Pour construire le diagramme en bâtons qualitatif \def\Updatetoksq#1/#2\nil{\addtotok\toklistepointq{"#1",#2,}} \newcommand\buildgraphq[1][]{% \newtoks\toklistepointq \foreachitem\compteur\in\ListeComplete{\expandafter\Updatetoksq\compteur\nil} \[\MPStatQ[#1]{2*\useKV[ClesStat]{Unitex}}{0.5*\useKV[ClesStat]{Unitey}}{\the\toklistepointq}{\useKV[ClesStat]{Donnee}}{\useKV[ClesStat]{Effectif}}{\useKV[ClesStat]{Origine}}{\useKV[ClesStat]{AbscisseRotation}}\] } \def\UpdateCoul#1\nil{\addtotok\toklistecouleur{#1,}}% % Pour construire le diagramme circulaire qualitatif \def\buildgraphcq#1{% \newtoks\toklistepointq% \toklistepointq{}% \newtoks\toklistecouleur% \toklistecouleur{}% % \foreachitem\compteur\in\ListeComplete{\expandafter\Updatetoksq\compteur\nil}% \xdef\ListeAvantCouleurs{\useKV[ClesStat]{ListeCouleurs}}% \readlist*\ListeCouleur{\ListeAvantCouleurs}% \foreachitem\couleur\in\ListeCouleur{\expandafter\UpdateCoul\couleur\nil}% \ifboolKV[ClesStat]{AffichageAngle}{% \ifboolKV[ClesStat]{Hachures}{% \ifboolKV[ClesStat]{Inverse}{% \[\MPStatCirculaireQ{\useKV[ClesStat]{Rayon}}{\the\toklistepointq}{#1}{1}{\the\toklistecouleur}{1}{1}\]% }{% \[\MPStatCirculaireQ{\useKV[ClesStat]{Rayon}}{\the\toklistepointq}{#1}{1}{\the\toklistecouleur}{1}{0}\]% }% }{% \ifboolKV[ClesStat]{Inverse}{% \[\MPStatCirculaireQ{\useKV[ClesStat]{Rayon}}{\the\toklistepointq}{#1}{1}{\the\toklistecouleur}{0}{1}\]% }{% \[\MPStatCirculaireQ{\useKV[ClesStat]{Rayon}}{\the\toklistepointq}{#1}{1}{\the\toklistecouleur}{0}{0}\]% }% }% }{% \ifboolKV[ClesStat]{Hachures}{% \ifboolKV[ClesStat]{Inverse}{% \[\MPStatCirculaireQ{\useKV[ClesStat]{Rayon}}{\the\toklistepointq}{#1}{0}{\the\toklistecouleur}{1}{1}\]% }{% \[\MPStatCirculaireQ{\useKV[ClesStat]{Rayon}}{\the\toklistepointq}{#1}{0}{\the\toklistecouleur}{1}{0}\]% }% }{% \ifboolKV[ClesStat]{Inverse}{% \[\MPStatCirculaireQ{\useKV[ClesStat]{Rayon}}{\the\toklistepointq}{#1}{0}{\the\toklistecouleur}{0}{1}\]% }{% \[\MPStatCirculaireQ{\useKV[ClesStat]{Rayon}}{\the\toklistepointq}{#1}{0}{\the\toklistecouleur}{0}{0}\]% }% }% }% }% %% calcul des fr\'equences \newcommand\CalculFrequence[1]{% \fpeval{round(\ListeComplete[#1,2]*100/\EffectifTotal,0)} } %% calcul des angles \newcommand\CalculAngle[1]{% \fpeval{round(\ListeComplete[#1,2]*360/\EffectifTotal,0)} } \newcommand\CalculSemiAngle[1]{% \fpeval{round(\ListeComplete[#1,2]*180/\EffectifTotal,0)} } %% calcul des ECC \newcount\CompteurECC% \newcount\CompteurECCTotal% \newcommand\CalculECC[1]{% \xdef\TotalECC{0}% \CompteurECC=1% \CompteurECCTotal=\numexpr#1+1% \whiledo{\CompteurECC < \CompteurECCTotal}{% \xdef\TotalECC{\fpeval{\TotalECC+\ListeComplete[\the\CompteurECC,2]}}% \CompteurECC=\numexpr\CompteurECC+1% }% \num{\TotalECC}% } % la construction du graphique en bâtons pour quantitatif \newcommand\MPStat[8][]{% \ifluatex \mplibforcehmode \begin{mplibcode} maxx:=0; maxy:=0; unitex:=#2*cm; unitey:=#3*cm; pair A[],B[],P[]; n:=0; vardef toto(text t)= for p_=t: if pair p_: n:=n+1; P[n]=((xpart(p_)-(#7))*unitex,ypart(p_)*unitey); if xpart(p_)>maxx: maxx:=xpart(p_)-(#7); fi; if ypart(p_)>maxy: maxy:=ypart(p_); fi; A[n]=unitex*(xpart(p_)-(#7),0); B[n]=unitey*(0,ypart(p_)); if (#8): label.bot(TEX("\num{"&decimal(xpart(p_))&"}") rotated 90,A[n]); else : label.bot(TEX("\num{"&decimal(xpart(p_))&"}"),A[n]); fi; label.lft(TEX("\num{"&decimal(ypart(p_))&"}"),B[n]); fi; endfor; enddef; toto(#4); boolean Grille; Grille:=\useKV[ClesStat]{Grille}; Pasx:=\useKV[ClesStat]{Pasx}; Pasy:=\useKV[ClesStat]{Pasy}; if Grille: drawoptions(withcolor 0.75white); for k=0 step Pasx until ((maxx+1)): trace (k*unitex,0)--(k*unitex,unitey*(maxy+1)); endfor; for k=0 step Pasy until ((maxy+1)): trace (0,k*unitey)--(unitex*(maxx+1),k*unitey); endfor; drawoptions(); fi; for k=1 upto n: draw A[k]--P[k] withpen pencircle scaled 2bp; draw B[k]--P[k] dashed evenly; endfor; drawarrow (0,0)--unitex*(maxx+1,0); drawarrow (0,0)--unitey*(0,maxy+1); label.lrt(btex #5 etex,unitex*(maxx+1,0)); label.urt(btex #6 etex,unitey*(0,maxy+1)); \end{mplibcode} \else \mpxcommands{% \setKV[ClesStat]{#1}% } \begin{mpost}[mpsettings={boolean Grille; Grille:=\useKV[ClesStat]{Grille}; Pasx:=\useKV[ClesStat]{Pasx}; Pasy:=\useKV[ClesStat]{Pasy};}] maxx:=0; maxy:=0; unitex:=#2*cm; unitey:=#3*cm; pair A[],B[],P[]; n:=0; vardef toto(text t)= for p_=t: if pair p_: n:=n+1; P[n]=((xpart(p_)-(#7))*unitex,ypart(p_)*unitey); if xpart(p_)>maxx: maxx:=xpart(p_)-(#7); fi; if ypart(p_)>maxy: maxy:=ypart(p_); fi; A[n]=unitex*(xpart(p_)-(#7),0); B[n]=unitey*(0,ypart(p_)); if (#8): label.bot(LATEX("\num{"&decimal(xpart(p_))&"}") rotated 90,A[n]); else : label.bot(LATEX("\num{"&decimal(xpart(p_))&"}"),A[n]); fi; label.lft(LATEX("\num{"&decimal(ypart(p_))&"}"),B[n]); fi; endfor; enddef; toto(#4); if Grille: drawoptions(withcolor 0.75white); for k=0 step Pasx until ((maxx+1)): trace (k*unitex,0)--(k*unitex,unitey*(maxy+1)); endfor; for k=0 step Pasy until ((maxy+1)): trace (0,k*unitey)--(unitex*(maxx+1),k*unitey); endfor; drawoptions(); fi; for k=1 upto n: draw A[k]--P[k] withpen pencircle scaled 2bp; draw B[k]--P[k] dashed evenly; endfor; drawarrow (0,0)--unitex*(maxx+1,0); drawarrow (0,0)--unitey*(0,maxy+1); label.lrt(\btex \useKV[ClesStat]{Donnee} etex,unitex*(maxx+1,0)); label.urt(\btex \useKV[ClesStat]{Effectif} etex,unitey*(0,maxy+1)); \end{mpost} \fi } % la construction du graphique en bâtons pour qualitatif \newcommand\MPStatQ[8][]{% \ifluatex \mplibforcehmode \begin{mplibcode} maxy:=0; unitex:=#2*cm; unitey:=#3*cm; pair A[],B[],P[]; n:=0; vardef toto(text t)= for p_=t: if numeric p_: P[n]=((n+1)*unitex,unitey*p_); B[n]=(0,unitey*p_); label.lft(TEX("\num{"&decimal(p_)&"}"),B[n]); if p_>maxy: maxy:=p_; fi; n:=n+1; else: A[n]=unitex*(n+1,0); if (#8): label.bot(TEX(p_) rotated 90,A[n]); else : label.bot(TEX(p_),A[n]); fi; fi; endfor; enddef; toto(#4); boolean Grille; Grille:=\useKV[ClesStat]{Grille}; Pasx:=\useKV[ClesStat]{Pasx}; Pasy:=\useKV[ClesStat]{Pasy}; if Grille: drawoptions(withcolor 0.75white); for k=0 step Pasx until ((n+1)): trace (k*unitex,0)--(k*unitex,unitey*(maxy+1)); endfor; for k=0 step Pasy until ((maxy+1)): trace (0,k*unitey)--(unitex*(n+1),k*unitey); endfor; drawoptions(); fi; for k=0 upto n-1: draw A[k]--P[k] withpen pencircle scaled 2bp; draw B[k]--P[k] dashed evenly; endfor; drawarrow (0,0)--unitex*(n+1,0); drawarrow (0,0)--unitey*(0,maxy+1); label.lrt(btex #5 etex,unitex*(n+1,0)); label.urt(btex #6 etex,unitey*(0,maxy+1)); \end{mplibcode} \else \mpxcommands{% \setKV[ClesStat]{#1}% } \begin{mpost}[mpsettings={boolean Grille; Grille:=\useKV[ClesStat]{Grille}; Pasx:=\useKV[ClesStat]{Pasx}; Pasy:=\useKV[ClesStat]{Pasy};}] maxy:=0; unitex:=#2*cm; unitey:=#3*cm; pair A[],B[],P[]; n:=0; vardef toto(text t)= for p_=t: if numeric p_: P[n]=((n+1)*unitex,unitey*p_); B[n]=(0,unitey*p_); label.lft(LATEX("\num{"&decimal(p_)&"}"),B[n]); if p_>maxy: maxy:=p_; fi; n:=n+1; else: A[n]=unitex*(n+1,0); if (#8): label.bot(LATEX(p_) rotated 90,A[n]); else : label.bot(LATEX(p_),A[n]); fi; fi; endfor; enddef; toto(#4); if Grille: drawoptions(withcolor 0.75white); for k=0 step Pasx until ((n+1)): trace (k*unitex,0)--(k*unitex,unitey*(maxy+1)); endfor; for k=0 step Pasy until ((maxy+1)): trace (0,k*unitey)--(unitex*(n+1),k*unitey); endfor; drawoptions(); fi; for k=0 upto n-1: draw A[k]--P[k] withpen pencircle scaled 2bp; draw B[k]--P[k] dashed evenly; endfor; drawarrow (0,0)--unitex*(n+1,0); drawarrow (0,0)--unitey*(0,maxy+1); label.lrt(\btex \useKV[ClesStat]{Donnee} etex,unitex*(n+1,0)); label.urt(\btex \useKV[ClesStat]{Effectif} etex,unitey*(0,maxy+1)); \end{mpost} \fi } % la construction du graphique qualitatif \def\MPStatCirculaireQ#1#2#3#4#5#6#7{% \ifluatex \mplibforcehmode \begin{mplibcode} pair A[],O,B[],C[],D[]; O=(0,0); n:=0; numeric total[],ang[]; total[0]=0; ang[0]:=0; path cc; cc=(fullcircle scaled (2*#1)); % on r\'ecup\`ere les couleurs color Col[]; n:=0; for p_=#5: n:=n+1; Col[n]=p_; endfor; if #7=0: A[0]=point(0) of cc; else: A[0]=point(180) of cc; fi; vardef toto(text t)= n:=0; for p_=t: if numeric p_: n:=n+1; total[n]:=total[n-1]+p_; fi; endfor; N=n; for k=1 upto N: ang[k]=(#3/total[N])*total[k]; endfor; n:=0; for p_=t: if numeric p_: n:=n+1; if #7=0: A[n]=A[n-1] rotatedabout(O,p_*(#3/total[N])); else: A[n]=A[n-1] rotatedabout(O,-p_*(#3/total[N])); fi; %hachure ou pas ? if #6=0: fill (O--if #7=0:arccercle(A[n-1],A[n],O) else: arccercle(A[n],A[n-1],O) fi--cycle) withcolor if unknown Col[n]: white else:Col[n] fi; else: draw hachurage((O--if #7=0:arccercle(A[n-1],A[n],O) else:arccercle(A[n],A[n-1],O) fi--cycle),p_*(#3/total[N]) if (n mod 2)=0: +90 else: -90 fi,0.25,if (n mod 2)=0 : 0 else: 1 fi) if #4=1: withcolor 0.5white fi; fi; draw A[n-1]--O--A[n] if #6=1: withpen pencircle scaled2 fi; % Affichage des angles associ\'es if #4=1: if round(p_*(#3/total[N]))>15: if (n mod 2)=0: marque_a:=20*0.75*#1/cm; else: marque_a:=20*0.5*#1/cm; fi; if #6=1: if #7=0: undraw Codeangle(A[n-1],O,A[n],0,(((TEX("\ang{"&decimal(round(p_*(#3/total[N])))&"}"))))); else: undraw Codeangle(A[n],O,A[n-1],0,(((TEX("\ang{"&decimal(round(p_*(#3/total[N])))&"}"))))); fi; fill cercles(w shifted(marque_ang*unitvector(w-O)),3mm) withcolor blanc; fi; if #7=0: draw Codeangle(A[n-1],O,A[n],0,(((TEX("\ang{"&decimal(round(p_*(#3/total[N])))&"}"))))); else: draw Codeangle(A[n],O,A[n-1],0,(((TEX("\ang{"&decimal(round(p_*(#3/total[N])))&"}"))))); fi; fi; fi; % fi; endfor; if #3=360: draw cc if #6=1: withpen pencircle scaled2 fi; else: draw (subpath(0,length cc/2) of cc)--cycle if #6=1: withpen pencircle scaled2 fi;; fi; n:=0; path cd[]; for p_=t: if string p_: n:=n+1; C[n]=A[n-1] rotatedabout(O,if #7=1:-1* fi(ang[n]-ang[n-1])/2); draw 0.95[O,C[n]]--1.05[O,C[n]]; C[n]:=1.05[O,C[n]]; if (xpart(C[n])>xpart(O)) and (ypart(C[n])>ypart(O)): D[n]=C[n]+(0.5cm,0); draw C[n]--D[n]; label.urt(TEX(p_),D[n]); fi; if (xpart(C[n])ypart(O)): D[n]=C[n]-(0.5cm,0); draw C[n]--D[n]; label.ulft(TEX(p_),D[n]); fi; if (xpart(C[n])xpart(O)) and (ypart(C[n])15: if (n mod 2)=0: marque_a:=20*0.75*#1/cm; else: marque_a:=20*0.5*#1/cm; fi; if #6=1: if #7=0: undraw Codeangle(A[n-1],O,A[n],0,(((LATEX("\ang{"&decimal(round(p_*(#3/total[N])))&"}"))))); else: undraw Codeangle(A[n],O,A[n-1],0,(((LATEX("\ang{"&decimal(round(p_*(#3/total[N])))&"}"))))); fi; fill cercles(w shifted(marque_ang*unitvector(w-O)),3mm) withcolor blanc; fi; if #7=0: draw Codeangle(A[n-1],O,A[n],0,(((LATEX("\ang{"&decimal(round(p_*(#3/total[N])))&"}"))))); else: draw Codeangle(A[n],O,A[n-1],0,(((LATEX("\ang{"&decimal(round(p_*(#3/total[N])))&"}"))))); fi; fi; fi; % fi; endfor; if #3=360: draw cc if #6=1: withpen pencircle scaled2 fi; else: draw (subpath(0,length cc/2) of cc)--cycle if #6=1: withpen pencircle scaled2 fi;; fi; n:=0; path cd[]; for p_=t: if string p_: n:=n+1; C[n]=A[n-1] rotatedabout(O,if #7=1:-1* fi(ang[n]-ang[n-1])/2); draw 0.95[O,C[n]]--1.05[O,C[n]]; C[n]:=1.05[O,C[n]]; if (xpart(C[n])>xpart(O)) and (ypart(C[n])>ypart(O)): D[n]=C[n]+(0.5cm,0); draw C[n]--D[n]; label.urt(LATEX(p_),D[n]); fi; if (xpart(C[n])ypart(O)): D[n]=C[n]-(0.5cm,0); draw C[n]--D[n]; label.ulft(LATEX(p_),D[n]); fi; if (xpart(C[n])xpart(O)) and (ypart(C[n])\DonneeMax}{% \xdef\DonneeMax{\ListeComplete[##1,2]}% }{}% \xintifboolexpr{\ListeComplete[##1,2]<\DonneeMin}{% \xdef\DonneeMin{\ListeComplete[##1,2]}% }{}% }% \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]{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} \]% }% }% 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]}} }{}% }% }% }% %%% % Radar %%% \setKVdefault[ClesRadar]{Rayon=3cm,Reference=20,MoyenneClasse=false,Disciplines=false,Pas=5} \newtoks\toklisteradara%pour la moyenne de l'\'el\`eve \newtoks\toklisteradarb%pour la discipline \newtoks\toklisteradarc%pour la moyenne de classe \def\UpdateRadara#1/#2/#3\nil{\addtotok\toklisteradara{#1,}} \def\UpdateRadarb#1/#2/#3\nil{\addtotok\toklisteradarb{"#2",}} \def\UpdateRadarc#1/#2/#3\nil{\addtotok\toklisteradarc{#3,}} \newcommand\MPRadar[6]{% \ifluatex \mplibforcehmode \begin{mplibcode} pair O; O=(0,0); path cc; cc=cercles(O,#1); %%etiquettage des disciplines n:=0;%compter le nombre de disciplines for p_=#2: n:=n+1; endfor; for k=1 upto n: N[k]=k*(360/n); trace segment(O,pointarc(cc,N[k]));% dashed evenly; endfor; p:=0; for p_=#2: p:=p+1; if (N[p]<90) or (N[p]=90): label.urt(TEX(p_),1.025[O,pointarc(cc,N[p])]); fi; if ((N[p]>90) and (N[p]<180)) or (N[p]=180): label.ulft(TEX(p_),1.025[O,pointarc(cc,N[p])]); fi; if (N[p]>180) and (N[p]<270): label.llft(TEX(p_),1.025[O,pointarc(cc,N[p])]); fi; if (N[p]>270) or (N[p]=270): label.lrt(TEX(p_),1.025[O,pointarc(cc,N[p])]); fi; endfor; % trac\'e des pas: pas=#4/#3; for k=1 upto pas-1: trace (k/pas)[O,pointarc(cc,N[1])] for l=2 upto n: --(k/pas)[O,pointarc(cc,N[l])] endfor --cycle dashed evenly withcolor 0.5white; endfor; trace pointarc(cc,N[1]) for l=2 upto n: --pointarc(cc,N[l]) endfor --cycle; % etiquettage des pas dotlabel.urt(btex \tiny #4 etex,pointarc(cc,0)); dotlabel.urt(btex \tiny #3 etex,(1/pas)[O,pointarc(cc,0)]); % trac\'e des r\'esultats \'el\`eves pair El[]; el=0; for p_=#5: el:=el+1; El[el]=(p_/#4)[O,pointarc(cc,N[el])]; endfor; trace El[1] for p=2 upto n:--El[p] endfor --cycle withpen pencircle scaled 1.5 withcolor blue; % trac\'e des r\'esultats classe pair Cl[]; cl=0; for p_=#6: cl:=cl+1; Cl[cl]=(p_/#4)[O,pointarc(cc,N[cl])]; endfor; trace Cl[1] for p=2 upto n:--Cl[p] endfor --cycle withcolor rouge; \end{mplibcode} \else \begin{mpost} pair O; O=(0,0); path cc; cc=cercles(O,#1); %%etiquettage des disciplines n:=0;%compter le nombre de disciplines for p_=#2: n:=n+1; endfor; for k=1 upto n: N[k]=k*(360/n); trace segment(O,pointarc(cc,N[k]));% dashed evenly; endfor; p:=0; for p_=#2: p:=p+1; if (N[p]<90) or (N[p]=90): label.urt(TEX(p_),1.025[O,pointarc(cc,N[p])]); fi; if ((N[p]>90) and (N[p]<180)) or (N[p]=180): label.ulft(TEX(p_),1.025[O,pointarc(cc,N[p])]); fi; if (N[p]>180) and (N[p]<270): label.llft(TEX(p_),1.025[O,pointarc(cc,N[p])]); fi; if (N[p]>270) or (N[p]=270): label.lrt(TEX(p_),1.025[O,pointarc(cc,N[p])]); fi; endfor; % trac\'e des pas: pas=#4/#3; for k=1 upto pas-1: trace (k/pas)[O,pointarc(cc,N[1])] for l=2 upto n: --(k/pas)[O,pointarc(cc,N[l])] endfor --cycle dashed evenly withcolor 0.5white; endfor; trace pointarc(cc,N[1]) for l=2 upto n: --pointarc(cc,N[l]) endfor --cycle; % etiquettage des pas dotlabel.top(LATEX("\noexpand\tiny"&decimal(#4)&"") rotated -90,pointarc(cc,0)); dotlabel.urt(LATEX("\noexpand\tiny"&decimal(#3)&""),(1/pas)[O,pointarc(cc,0)]); % trac\'e des r\'esultats \'el\`eves pair El[]; el=0; for p_=#5: el:=el+1; El[el]=(p_/#4)[O,pointarc(cc,N[el])]; endfor; trace El[1] for p=2 upto n:--El[p] endfor --cycle withpen pencircle scaled 1.5 withcolor blue; % trac\'e des r\'esultats classe pair Cl[]; cl=0; for p_=#6: cl:=cl+1; Cl[cl]=(p_/#4)[O,pointarc(cc,N[cl])]; endfor; trace Cl[1] for p=2 upto n:--Cl[p] endfor --cycle withcolor rouge; \end{mpost} \fi } \newcommand\Radar[2][]{% % 1 les param\`etres % 2 la r\'epartition des notes \useKVdefault[ClesRadar]% \setKV[ClesRadar]{#1}% \ignoreemptyitems% \setsepchar[*]{,}% \readlist*\ListeRadar{#2}% \toklisteradara{}% \foreachitem\compteur\in\ListeRadar{\expandafter\UpdateRadara\compteur\nil}% \ifboolKV[ClesRadar]{Disciplines}{}{% \toklisteradarb{}% \foreachitem\compteur\in\ListeRadar{\expandafter\UpdateRadarb\compteur\nil}% } \ifboolKV[ClesRadar]{MoyenneClasse}{}{% \toklisteradarc{}% \foreachitem\compteur\in\ListeRadar{\expandafter\UpdateRadarc\compteur\nil}% } \MPRadar{\useKV[ClesRadar]{Rayon}}{\the\toklisteradarb}{\useKV[ClesRadar]{Pas}}{\useKV[ClesRadar]{Reference}}{\the\toklisteradara}{\the\toklisteradarc}% } %%% % Barres de niveaux %%% \setKVdefault[ClesBarre]{Niveau=false,LimiteI=25,LimiteF=50,LimiteS=75,TexteOrigine=0,TexteReference=100,CouleurGraduation=white,CouleurFond=gray!50,CouleurBarre=black,Graduation=false,Nom=D\'efaut,Pas=10,CouleurI=red,CouleurF=orange,CouleurS=yellow,CouleurM=green} \newlength{\barrewidth} \newcommand\Jauge[2][]{% \setlength{\barrewidth}{\linewidth-2\fboxsep}% \useKVdefault[ClesBarre]% \setKV[ClesBarre]{#1}% \xdef\NomComp{\useKV[ClesBarre]{Nom}}% \xdef\TexteOrigine{\useKV[ClesBarre]{Origine}} \xdef\TexteReference{\useKV[ClesBarre]{Reference}} \xdef\CouleurFond{\useKV[ClesBarre]{CouleurFond}}% \xdef\CouleurGrad{\useKV[ClesBarre]{CouleurGraduation}}% \xdef\CouleurBarre{\useKV[ClesBarre]{CouleurBarre}}% \xdef\CouleurI{\useKV[ClesBarre]{CouleurI}}% \xdef\CouleurF{\useKV[ClesBarre]{CouleurF}}% \xdef\CouleurS{\useKV[ClesBarre]{CouleurS}}% \xdef\CouleurM{\useKV[ClesBarre]{CouleurM}}% \ifboolKV[ClesBarre]{Niveau}{% \begin{tikzpicture}[rounded corners=2pt,very thin] \fill [gray!50] (0,0) rectangle (\barrewidth, 0.15); \xintifboolexpr{#2<\useKV[ClesBarre]{LimiteI}}{% \fill [\CouleurI] (0,0) rectangle (#2/100*\barrewidth, 0.15); }{\xintifboolexpr{#2<\useKV[ClesBarre]{LimiteF}}{% \fill [\CouleurF] (0,0) rectangle (#2/100*\barrewidth, 0.15); }{\xintifboolexpr{#2<\useKV[ClesBarre]{LimiteS}}{% \fill [\CouleurS] (0,0) rectangle (#2/100*\barrewidth, 0.15); }{\fill [\CouleurM] (0,0) rectangle (#2/100*\barrewidth, 0.15);} } } \node[anchor=south west] at (0,0.5em) {\NomComp};% \node[anchor=north] at (0,-0.25em) {\TexteOrigine}; \node[anchor=north] at (\barrewidth,-0.25em) {\TexteReference}; \ifboolKV[ClesBarre]{Graduation}{% \foreach \s in {1,...,\fpeval{\useKV[ClesBarre]{Pas}-1}}% { \draw[\CouleurGrad] (\s/\useKV[ClesBarre]{Pas}*\barrewidth,0)--(\s/\useKV[ClesBarre]{Pas}*\barrewidth,0.15); } }{} \foreach \s in {\useKV[ClesBarre]{LimiteI},\useKV[ClesBarre]{LimiteF},\useKV[ClesBarre]{LimiteS}}% { \draw[black] (\s/100*\barrewidth,-0.1)--(\s/100*\barrewidth,0.2);% } \end{tikzpicture}% }{% \begin{tikzpicture}[rounded corners=2pt,very thin] \fill [\CouleurFond] (0,0) rectangle (\barrewidth, 0.15);% \fill [\CouleurBarre] (0,0) rectangle (#2/100*\barrewidth, 0.15);% \node[anchor=south west] at (0,0.5em) {\NomComp};% \node[anchor=north] at (0,-0.25em) {\useKV[ClesBarre]{TexteOrigine}};% \node[anchor=north] at (\barrewidth,-0.25em) {\useKV[ClesBarre]{TexteReference}};% \ifboolKV[ClesBarre]{Graduation}{% \foreach \s in {1,...,\fpeval{\useKV[ClesBarre]{Pas}-1}}% { \draw[\CouleurGrad] (\s/\useKV[ClesBarre]{Pas}*\barrewidth,0)--(\s/\useKV[ClesBarre]{Pas}*\barrewidth,0.15); }}{}% \end{tikzpicture}% } } %%% % Equations %%% \setKVdefault[ClesEquation]{Ecart=0.5,Fleches=false,FlecheDiv=false,Laurent=false,Decomposition=false,Terme=false,Composition=false,Symbole=false,Decimal=false,Entier=false,Lettre=x,Solution=false,LettreSol=true,Bloc=false,Simplification=false,CouleurTerme=black,CouleurCompo=black,CouleurSous=red,CouleurSymbole=orange,Verification=false,Nombre=0,Egalite=false,Produit=false,Facteurs=false,Carre=false,Exact=false,Pose=false,Equivalence=false} \newcommand\rightcomment[4]% {\begin{tikzpicture}[remember picture,overlay] \draw[Cfleches,-stealth] ($({pic cs:#3}|-{pic cs:#1})+(\useKV[ClesEquation]{Ecart},0)$) .. controls +(0.2,-0.05) and +(0.2,0.1) .. node[right,align=left]{#4} ($({pic cs:#3}|-{pic cs:#2})+(\useKV[ClesEquation]{Ecart},0.1)$); \end{tikzpicture}% } \newcommand\leftcomment[4]% {\begin{tikzpicture}[remember picture,overlay] \draw[Cfleches,-stealth] ($({pic cs:#3}|-{pic cs:#1})-(\useKV[ClesEquation]{Ecart},0)$) .. controls +(-0.2,-0.05) and +(-0.2,0.1) .. node[left,align=right]{#4} ($({pic cs:#3}|-{pic cs:#2})-(\useKV[ClesEquation]{Ecart},-0.1)$); \end{tikzpicture}% } \newcommand\Rightcomment[4]% {\begin{tikzpicture}[remember picture,overlay] \draw[Cfleches,-stealth] ($({pic cs:#3}|-{pic cs:#1})+(\useKV[ClesEquation]{Ecart},0)$) .. controls +(0.2,-0.05) and +(0.2,0.1) .. node[right,align=left]{#4} ($({pic cs:#3}|-{pic cs:#2})+(\useKV[ClesEquation]{Ecart},0.1)$); \end{tikzpicture}% } \newcommand\Leftcomment[4]% {\begin{tikzpicture}[remember picture,overlay] \draw[Cfleches,-stealth] ($({pic cs:#3}|-{pic cs:#1})-(\useKV[ClesEquation]{Ecart},0)$) .. controls +(-0.2,-0.05) and +(-0.2,0.1) .. node[left,align=right]{#4} ($({pic cs:#3}|-{pic cs:#2})-(\useKV[ClesEquation]{Ecart},-0.1)$); \end{tikzpicture}% } % Pour "oublier" les tikzmarks. En cas de plusieurs utilisations de la macro \ResolEquation \newcounter{Nbequa} \setcounter{Nbequa}{0} %CT \newdimen\fdashwidth \fdashwidth = 0.8pt % \'epaisseur traits \newdimen\fdashlength \fdashlength = 0.5mm % longueur des pointill\'es et s\'eparation entre pointill\'es \newdimen\fdashsep \fdashsep = 3pt % s\'eparateur entre contenu et traits \def\fdash#1{% \leavevmode\begingroup% \setbox0\hbox{#1}% \def\hdash{\vrule height\fdashwidth width\fdashlength\relax}% \def\vdash{\hrule height\fdashlength width\fdashwidth\relax}% \def\dashblank{\kern\fdashlength}% \ifdim\fdashsep>0pt \setbox0\hbox{\vrule width0pt height\dimexpr\ht0+\fdashsep depth\dimexpr\dp0+\fdashsep\kern\fdashsep\unhbox0 \kern\fdashsep}% \fi \edef\hdash{\hbox to\the\wd0{\noexpand\color{Csymbole}\hdash\kern.5\fdashlength\xleaders\hbox{\hdash\dashblank}\hfil\hdash}}% \edef\vdash{\vbox to\the\dimexpr\ht0+\dp0+2\fdashwidth{\noexpand\color{Csymbole}\vdash\kern.5\fdashlength\xleaders\vbox{\vdash\dashblank}\vfil\vdash}}% \hbox{% \vdash \vtop{\vbox{\offinterlineskip\hdash\hbox{\unhbox0 }\hdash}}% \vdash}% \endgroup } % fin CT \def\Fdash#1{\raisebox{-2\fdashsep+\fdashwidth}{\fdash{#1}}} %Une simplification de a/b est possible ou non ? \newboolean{Simplification} \newcommand{\SSimpliTest}[2]{% % Test d'une simplification possible ou pas de #1/#2 \newcount\numerateur\newcount\denominateur\newcount\valabsnum\newcount\valabsdeno% \numerateur=\number#1 \denominateur=\number#2 \ifnum\number#1<0 \valabsnum=\numexpr0-\number#1 \else \valabsnum=\number#1 \fi \ifnum\number#2<0 \valabsdeno=\numexpr0-\number#2 \else \valabsdeno=\number#2 \fi \ifnum\the\valabsnum=0 \setboolean{Simplification}{true} \else \PGCD{\the\valabsnum}{\the\valabsdeno} \ifnum\pgcd>1 \setboolean{Simplification}{true} \else \ifnum\the\numerateur<0 \ifnum\the\denominateur<0 \setboolean{Simplification}{true} \else \ifnum\valabsdeno=1\relax \setboolean{Simplification}{true} \else \setboolean{Simplification}{false} \fi \fi \else \ifnum\valabsdeno=1\relax \setboolean{Simplification}{true} \else \setboolean{Simplification}{false} \fi \fi \fi \fi } \definecolor{Cfleches}{RGB}{100,100,100}% \newcommand\AffichageEqua[4]{% \def\LETTRE{\useKV[ClesEquation]{Lettre}}% \ensuremath{% % partie du x \xintifboolexpr{#1==0}{}{\xintifboolexpr{#1==1}{}{\xintifboolexpr{#1==-1}{-}{\num{#1}}}\LETTRE}% % partie du nombre \xintifboolexpr{#2==0}{\xintifboolexpr{#1==0}{0}{}}{\xintifboolexpr{#2>0}{\xintifboolexpr{#1==0}{}{+}\num{#2}}{\num{#2}}}% % egal = % partie du x \xintifboolexpr{#3==0}{}{\xintifboolexpr{#3==1}{}{\xintifboolexpr{#3==-1}{-}{\num{#3}}}\LETTRE}% % partie du nombre \xintifboolexpr{#4==0}{% \xintifboolexpr{#3==0}{0}{} }{% \xintifboolexpr{#4>0}{\xintifboolexpr{#3==0}{}{+}\num{#4}}{\num{#4}}% } }% }% \newcommand\EcrireSolutionEquation[4]{% L'équation \AffichageEqua{#1}{#2}{#3}{#4} a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$. }% \input{PfCEquationSoustraction2}% \input{PfCEquationTerme1}% \input{PfCEquationComposition2}% \input{PfCEquationPose1}% \input{PfCEquationSymbole1}% \input{PfCEquationLaurent1} \newcommand\ResolEquation[5][]{% \useKVdefault[ClesEquation]% \setKV[ClesEquation]{#1}% \colorlet{Cterme}{\useKV[ClesEquation]{CouleurTerme}}% \colorlet{Ccompo}{\useKV[ClesEquation]{CouleurCompo}}% \colorlet{Csymbole}{\useKV[ClesEquation]{CouleurSymbole}}% \colorlet{Cdecomp}{\useKV[ClesEquation]{CouleurSous}}% \ifboolKV[ClesEquation]{Carre}{% \ResolEquationCarre[#1]{#2}% }{% \ifboolKV[ClesEquation]{Produit}{% \ResolEquationProduit[#1]{#2}{#3}{#4}{#5}% }{% \ifboolKV[ClesEquation]{Verification}{% \Verification[#1]{#2}{#3}{#4}{#5}% }{% \ifboolKV[ClesEquation]{Symbole}{% \ResolEquationSymbole[#1]{#2}{#3}{#4}{#5}% }{% \ifboolKV[ClesEquation]{Laurent}{% \ResolEquationLaurent[#1]{#2}{#3}{#4}{#5}% }{% \ifboolKV[ClesEquation]{Terme}{% \ResolEquationTerme[#1]{#2}{#3}{#4}{#5}% }{\ifboolKV[ClesEquation]{Composition}{% \ResolEquationComposition[#1]{#2}{#3}{#4}{#5}% }{\ifboolKV[ClesEquation]{Pose}{% \ResolEquationL[#1]{#2}{#3}{#4}{#5}% }{% \ResolEquationSoustraction[#1]{#2}{#3}{#4}{#5}% }% }% }% }% }% }% }% }% }% \newcommand\ResolEquationCarre[2][]{% \setKV[ClesEquation]{#1}% \xintifboolexpr{#2<0}{% Comme $\num{#2}$ est n\'egatif, alors l'\'equation $\useKV[ClesEquation]{Lettre}^2=\num{#2}$ n'a aucune solution.% }{\xintifboolexpr{#2==0}{% L'\'equation $\useKV[ClesEquation]{Lettre}^2=0$ a une unique solution : $\useKV[ClesEquation]{Lettre}=0$.% }{% Comme \num{#2} est positif, alors l'\'equation $\useKV[ClesEquation]{Lettre}^2=\num{#2}$ a deux solutions :% \begin{align*} \useKV[ClesEquation]{Lettre}&=\sqrt{\num{#2}}&&\text{et}&\useKV[ClesEquation]{Lettre}&=-\sqrt{\num{#2}}%\\ \ifboolKV[ClesEquation]{Exact}{\\% \useKV[ClesEquation]{Lettre}&=\num{\fpeval{sqrt(#2)}}&&\text{et}&\useKV[ClesEquation]{Lettre}&=-\num{\fpeval{sqrt(#2)}}}{}% \end{align*} }% }% }% \newcommand\ResolEquationProduit[5][]{% \setKV[ClesEquation]{#1}% \ifboolKV[ClesEquation]{Equivalence}{}{C'est un produit nul donc \ifboolKV[ClesEquation]{Facteurs}{l'un au moins des facteurs est nul}{} :}% \ifboolKV[ClesEquation]{Equivalence}{% \[\Distri{#2}{#3}{#4}{#5}=0\] \begin{align*}% &\makebox[0pt]{$\Longleftrightarrow$}&\xintifboolexpr{#3==0}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}&=0&\quad&\makebox[0pt]{ou}\quad&\xintifboolexpr{#5==0}{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}&=0\\ &\makebox[0pt]{$\Longleftrightarrow$}&\xintifboolexpr{#3==0}{\xdef\Coeffa{1}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{#2==1}{&}{\useKV[ClesEquation]{Lettre}&=0}}{\xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}}&&&\xintifboolexpr{#5==0}{\xdef\Coeffc{1}\xdef\Coeffd{\fpeval{0-#5}}\xintifboolexpr{#4==1}{&}{\useKV[ClesEquation]{Lettre}&=0}}{\xdef\Coeffc{#4}\xdef\Coeffd{\fpeval{0-#5}}\xintifboolexpr{\Coeffc==1}{}{\num{\Coeffc}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffd}}%\\ \xintifboolexpr{\Coeffa==1 'and' \Coeffc==1}{}{\\%\ifnum\cmtd>1 &\makebox[0pt]{$\Longleftrightarrow$}&\xintifboolexpr{\Coeffa==1}{&}{\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}}\xintifboolexpr{\Coeffc==1}{}{&&&\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffd}}{\num{\Coeffc}}} % accolade%\\ %%%% \ifboolKV[ClesEquation]{Entier}{% \xdef\TSimp{}% \SSimpliTest{\Coeffb}{\Coeffa}\ifthenelse{\boolean{Simplification}}{\xintifboolexpr{#3==0}{\xdef\TSimp{0}}{\xdef\TSimp{1}}}{\xdef\TSimp{0}} \SSimpliTest{\Coeffd}{\Coeffc}\ifthenelse{\boolean{Simplification}}{\xintifboolexpr{#5==0}{}{\xdef\TSimp{\fpeval{\TSimp+1}}}}{} \xintifboolexpr{\TSimp==0}{}{\\ \ifboolKV[ClesEquation]{Simplification}{% &\makebox[0pt]{$\Longleftrightarrow$}&\SSimpliTest{\Coeffb}{\Coeffa}\xintifboolexpr{\Coeffa==1}{&}{\ifthenelse{\boolean{Simplification}}{\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{&}%\\ } }{} &&&\ifboolKV[ClesEquation]{Simplification}{% \SSimpliTest{\Coeffd}{\Coeffc}% \xintifboolexpr{\Coeffc==1}{}{\ifthenelse{\boolean{Simplification}}{\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffd}{\Coeffc}}{}%\\ } }{} } }{} } \end{align*} }{% \begin{align*} \xintifboolexpr{#3==0}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}&=0&&\text{ou}&\xintifboolexpr{#5==0}{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}&=0\\ \xintifboolexpr{#3==0}{\xdef\Coeffa{1}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{#2==1}{&}{\useKV[ClesEquation]{Lettre}&=0}}{\xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}}&&&\xintifboolexpr{#5==0}{\xdef\Coeffc{1}\xdef\Coeffd{\fpeval{0-#5}}\xintifboolexpr{#4==1}{&}{\useKV[ClesEquation]{Lettre}&=0}}{\xdef\Coeffc{#4}\xdef\Coeffd{\fpeval{0-#5}}\xintifboolexpr{\Coeffc==1}{}{\num{\Coeffc}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffd}}%\\ \xintifboolexpr{\Coeffa==1 'and' \Coeffc==1}{}{\\%\ifnum\cmtd>1 \xintifboolexpr{\Coeffa==1}{&}{\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}}\xintifboolexpr{\Coeffc==1}{}{&&&\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffd}}{\num{\Coeffc}}} %accolade%\\ %%%% \ifboolKV[ClesEquation]{Entier}{% \xdef\TSimp{} \SSimpliTest{\Coeffb}{\Coeffa}\ifthenelse{\boolean{Simplification}}{\xintifboolexpr{#3==0}{\xdef\TSimp{0}}{\xdef\TSimp{1}}}{\xdef\TSimp{0}} \SSimpliTest{\Coeffd}{\Coeffc}\ifthenelse{\boolean{Simplification}}{\xintifboolexpr{#5==0}{}{\xdef\TSimp{\fpeval{\TSimp+1}}}}{} \xintifboolexpr{\TSimp==0}{}{\\ \ifboolKV[ClesEquation]{Simplification}{% \SSimpliTest{\Coeffb}{\Coeffa} \xintifboolexpr{\Coeffa==1}{&}{\ifthenelse{\boolean{Simplification}}{\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{&}%\\ } }{} &&&\ifboolKV[ClesEquation]{Simplification}{% \SSimpliTest{\Coeffd}{\Coeffc}% \xintifboolexpr{\Coeffc==1}{}{\ifthenelse{\boolean{Simplification}}{\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffd}{\Coeffc}}{}%\\ } }{} } }{} } \end{align*} }% \ifboolKV[ClesEquation]{Solution}{L'\'equation $\xintifboolexpr{#3==0}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}{(\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}})}\xintifboolexpr{#5==0}{\times\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}{(\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}})}=0$ a deux solutions : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$ et \opdiv*{\Coeffd}{\Coeffc}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffd}{\Coeffc}}{\frac{\num{\Coeffd}}{\num{\Coeffc}}}\fi$. }{}% } \newcommand\Verification[5][]{% \setKV[ClesEquation]{#1}% \xdef\ValeurTest{\useKV[ClesEquation]{Nombre}}% Testons la valeur $\useKV[ClesEquation]{Lettre}=\num{\ValeurTest}$ :% \begin{align*} \xintifboolexpr{#2==0}{\num{#3}}{\num{#2}\times\xintifboolexpr{\ValeurTest<0}{(\num{\ValeurTest})}{\num{\ValeurTest}}\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{\num{#3}}}}&&\xintifboolexpr{#4==0}{\num{#5}}{\num{#4}\times\xintifboolexpr{\ValeurTest<0}{(\num{\ValeurTest})}{\num{\ValeurTest}}\xintifboolexpr{#5==0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{\num{#5}}}}\\ \xintifboolexpr{#2==0}{}{\num{\fpeval{#2*\useKV[ClesEquation]{Nombre}}}\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{\num{#3}}}}&&\xintifboolexpr{#4==0}{}{\num{\fpeval{#4*\useKV[ClesEquation]{Nombre}}}\xintifboolexpr{#5==0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{\num{#5}}}}\\ \xintifboolexpr{#2==0}{}{\num{\fpeval{#2*\useKV[ClesEquation]{Nombre}+#3}}}&&\xintifboolexpr{#4==0}{}{\num{\fpeval{#4*\useKV[ClesEquation]{Nombre}+#5}}} \end{align*} \xdef\Testa{\fpeval{#2*\useKV[ClesEquation]{Nombre}+#3}}\xdef\Testb{\fpeval{#4*\useKV[ClesEquation]{Nombre}+#5}}% \ifboolKV[ClesEquation]{Egalite}{% Comme \xintifboolexpr{\Testa==\Testb}{$\num{\Testa}=\num{\Testb}$}{$\num{\Testa}\not=\num{\Testb}$}, alors l'\'egalit\'e $\xintifboolexpr{#2==0}{\num{#3}}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}=\xintifboolexpr{#4==0}{\num{#5}}{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5==0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}}$ \xintifboolexpr{\Testa==\Testb}{ est v\'erifi\'ee }{ n'est pas v\'erifi\'ee } pour $\useKV[ClesEquation]{Lettre}=\num{\useKV[ClesEquation]{Nombre}}$.% }{\xintifboolexpr{\Testa==\Testb}{Comme $\num{\Testa}=\num{\Testb}$, alors $\useKV[ClesEquation]{Lettre}=\num{\useKV[ClesEquation]{Nombre}}$ est bien }{Comme $\num{\Testa}\not=\num{\Testb}$, alors $\useKV[ClesEquation]{Lettre}=\num{\useKV[ClesEquation]{Nombre}}$ n'est pas }une solution de l'\'equation $\xintifboolexpr{#2==0}{\num{#3}}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}=\xintifboolexpr{#4==0}{\num{#5}}{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5==0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}}$.}% }% %%% % Proportionnalit\'e %%% \setKVdefault[ClesPropor]{GrandeurA=Grandeur A,GrandeurB=Grandeur B,Largeur=1cm,Math=false,Stretch=1,ColorFill=white,CouleurTab=gray!15}% \def\Updatetoksmath#1/#2\nil{\addtotok\tabtoksa{}\addtotok\tabtoksb{}}% \def\buildtabpropor{% \tabtoksa{}\tabtoksb{}% \tabtoksa{\useKV[ClesPropor]{GrandeurA}}\tabtoksb{\useKV[ClesPropor]{GrandeurB}}% \ifboolKV[ClesPropor]{Math}{% \foreachitem\compteur\in\ListeValeur{\expandafter\Updatetoksmath\compteur\nil}% }{\foreachitem\compteur\in\ListeValeur{\expandafter\updatetoks\compteur\nil}% }% \xdef\LongListe{\ListeValeurlen}% \renewcommand{\arraystretch}{\useKV[ClesPropor]{Stretch}}% \begin{tabular}{|>{\columncolor{\useKV[ClesPropor]{CouleurTab}}}c|*{\number\numexpr\ListeValeurlen}{>{\centering\arraybackslash}p{\useKV[ClesPropor]{Largeur}}|}}% \multicolumn{1}{c}{\TikzPHD\setcounter{NbPropor}{1}}\xintFor* ##1 in {\xintSeq {1}{\ListeValeurlen}}\do{&\multicolumn{1}{c}{\TikzPH}}\\% \hhline{*{\number\numexpr\ListeValeurlen+1}{-}}% \the\tabtoksa\\% \hhline{*{\number\numexpr\ListeValeurlen+1}{-}}% \the\tabtoksb\\% \hhline{*{\number\numexpr\ListeValeurlen+1}{-}}% \multicolumn{1}{c}{\TikzPBD\setcounter{NbPropor}{1}}\xintFor* ##1 in {\xintSeq {1}{\ListeValeurlen}}\do{&\multicolumn{1}{c}{\TikzPB}}\\% \end{tabular}% \renewcommand{\arraystretch}{1}% }% \newcounter{NbPropor} \newcommand{\TikzPH}{% \tikz[remember picture,overlay]{% \coordinate[name=ProporH-\theNbPropor,yshift=-\the\dp\strutbox*\arraystretch];}% \stepcounter{NbPropor}% }% \newcommand{\TikzPHD}{% \setbox1=\hbox{\useKV[ClesPropor]{GrandeurA}}% \setbox2=\hbox{\useKV[ClesPropor]{GrandeurB}}% \xintifboolexpr{\wd1>\wd2}{% \tikz[remember picture,overlay]{% \coordinate[name=ProporHD,xshift=-0.5\wd1,yshift=-\the\dp\strutbox*\arraystretch];}% }{% \tikz[remember picture,overlay]{% \coordinate[name=ProporHD,xshift=-0.5\wd2,yshift=-\the\dp\strutbox*\arraystretch];}% } }% \newcommand{\TikzPB}{% \tikz[remember picture, overlay]{% \coordinate[name=ProporB-\theNbPropor,yshift=\the\ht\strutbox*\arraystretch];}% \stepcounter{NbPropor}% }% \newcommand{\TikzPBD}{% \setbox1=\hbox{\useKV[ClesPropor]{GrandeurA}}% \setbox2=\hbox{\useKV[ClesPropor]{GrandeurB}}% \xintifboolexpr{\wd1>\wd2}{% \tikz[remember picture, overlay]{% \coordinate[name=ProporBD,xshift=-0.5*\the\wd1,yshift=\the\ht\strutbox*\arraystretch];}% }{% \tikz[remember picture, overlay]{% \coordinate[name=ProporBD,xshift=-0.5*\the\wd2,yshift=\the\ht\strutbox*\arraystretch];}% } \stepcounter{NbPropor}% }% \newcommand\FlechesPH[3]{% \ifnum#1<#2\relax% \begin{tikzpicture}[remember picture,overlay]% \draw[-stealth,out=50,in=130] (ProporH-#1) to node[inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.5, sloped]{#3}(ProporH-#2);% \end{tikzpicture}% \else% \begin{tikzpicture}[remember picture,overlay]% \draw[-stealth,out=130,in=50] (ProporH-#1) to node[inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.5, sloped]{#3}(ProporH-#2);% \end{tikzpicture}% \fi% }% \newcommand\FlechesPB[3]{% \ifnum\number#1<\number#2\relax% \begin{tikzpicture}[remember picture,overlay]% \draw[-stealth,out=-50,in=-130] (ProporB-#1) to node[inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.5, sloped]{#3}(ProporB-#2);% \end{tikzpicture}% \else% \begin{tikzpicture}[remember picture,overlay]% \draw[-stealth,out=-130,in=-50] (ProporB-#1) to node[inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.5, sloped]{#3}(ProporB-#2);% \end{tikzpicture}% \fi% } \newcommand\Propor[2][]{% \useKVdefault[ClesPropor]% \setKV[ClesPropor]{#1}% \xdef\colorfill{\useKV[ClesPropor]{ColorFill}}% \xdef\EcartLargeur{\useKV[ClesPropor]{Largeur}}% % %on lit la liste \'ecrite sous la forme valeur/effectif \setsepchar[*]{,*/}\ignoreemptyitems% \readlist*\ListeValeur{#2}% \buildtabpropor% } \newcommand\FlecheCoef[2][\EcartLargeur]{% \begin{tikzpicture}[remember picture, overlay]% \node[] (Point1) at ($(ProporH-\LongListe)!0.1!(ProporB-\LongListe)$) {};% \node[] (Point2) at ($(ProporH-\LongListe)!0.9!(ProporB-\LongListe)$) {};% \coordinate[right of=Point1,node distance=0.5*#1+\tabcolsep] (point1);% \coordinate[right of=Point2,node distance=0.5*#1+\tabcolsep] (point2);% \draw[-stealth,out=-20,in=20] (point1) to node[midway,right,inner sep=1pt]{#2}(point2);% \end{tikzpicture}% }% \newcommand\FlecheCoefDebut[2][\tabcolsep+\arrayrulewidth]{% \begin{tikzpicture}[remember picture, overlay]% \node[] (Noeud1) at ($(ProporHD)!0.1!(ProporBD)$) {};% \node[] (Noeud2) at ($(ProporHD)!0.9!(ProporBD)$) {};% \coordinate[left of=Noeud1,node distance=#1] (noeud1);% \coordinate[left of=Noeud2,node distance=#1] (noeud2);% \draw[-stealth,out=160,in=-160] (noeud2) to node[midway,left,inner sep=1pt]{#2}(noeud1);% \end{tikzpicture}% }% \newcommand\FlecheCoefInv[2][1cm]{% \begin{tikzpicture}[remember picture, overlay]% \node[] (Point1) at ($(ProporH-\LongListe)!0.1!(ProporB-\LongListe)$) {};% \node[] (Point2) at ($(ProporH-\LongListe)!0.9!(ProporB-\LongListe)$) {};% \coordinate[right of=Point1,node distance=0.5*#1+\tabcolsep] (point1);% \coordinate[right of=Point2,node distance=0.5*#1+\tabcolsep] (point2);% \draw[-stealth,out=20,in=-20] (point2) to node[midway,right,inner sep=1pt]{#2}(point1);% \end{tikzpicture}% }% \newcommand\FlecheLineaireH[4]{% \begin{tikzpicture}[remember picture,overlay,node distance=\ht\strutbox] \node[inner sep=0pt] (MilieuH) at ($(ProporH-#1)!0.5!(ProporH-#2)$) {}; \node[circle,draw,inner sep=0pt] [above of=MilieuH] (aux) {#4} ; \coordinate[above of=aux] (aux1); \draw[-stealth] (ProporH-#1) |- (aux); \draw[-stealth] (ProporH-#2) |- (aux); \draw[-stealth] (aux) -- (aux1) -| (ProporH-#3); \end{tikzpicture} } \newcommand\FlecheLineaireB[4]{% \begin{tikzpicture}[remember picture,overlay,node distance=3mm] \node[inner sep=0pt] (MilieuB) at ($(ProporB-#1)!0.5!(ProporB-#2)$) {}; \node[circle,draw,inner sep=0pt] [below of=MilieuB] (aux) {#4} ; \coordinate[below of=aux,node distance=3mm] (aux1); \draw[-stealth] (ProporB-#1) |- (aux); \draw[-stealth] (ProporB-#2) |- (aux); \draw[-stealth] (aux) -- (aux1) -| (ProporB-#3); \end{tikzpicture} } %%% % 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,Largeur=1cm,MotReduction=diminution,AideTableau=false,ColorFill=white,CouleurTab=gray!15} \newcommand\Pourcentage[3][]{% \useKVdefault[ClesPourcentage]% \setKV[ClesPourcentage]{#1}% \ifboolKV[ClesPourcentage]{Reduire}{% \ifboolKV[ClesPourcentage]{Formule}{% R\'eduire une quantit\'e de \num{#2}~\%, cela revient \`a multiplier cette quantit\'e par $1-\dfrac{\num{#2}}{100}$. Par cons\'equent, si on r\'eduit \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{} de \num{#2}~\%, cela donne : \[\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times\left(1-\frac{\num{#2}}{100}\right)=\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times(1-\num{\fpeval{#2/100}})=\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times\num{\fpeval{(1-#2/100)}}=\num{\fpeval{#3*(1-#2/100)}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\] }{% Calculons ce que repr\'esente la \useKV[ClesPourcentage]{MotReduction} de \num{#2}~\%. \ifboolKV[ClesPourcentage]{AideTableau}{% \xdef\NomA{\useKV[ClesPourcentage]{GrandeurA}}% \xdef\NomB{\useKV[ClesPourcentage]{GrandeurB}}% \xdef\NomCouleurTab{\useKV[ClesPourcentage]{CouleurTab}}% \xdef\NomLargeurTab{\useKV[ClesPourcentage]{Largeur}}% \begin{center} \Propor[Math,GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab,Largeur=\NomLargeurTab]{/\num{#3},\num{#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}}{}.% }{Pour calculer \num{#2}~\% de \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}, on effectue le calcul : \[\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{#2}}{100}}{\num{\fpeval{#2/100}}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{\fpeval{#2*#3}}}{100}}{\num{\fpeval{#2*#3/100}}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\ifboolKV[ClesPourcentage]{Fractionnaire}{=\num{\fpeval{#2*#3/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}}{}\]% On obtient une \useKV[ClesPourcentage]{MotReduction} de $\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}}{}.} } }{% \ifboolKV[ClesPourcentage]{Augmenter}{% \ifboolKV[ClesPourcentage]{Formule}{% Augmenter de \num{#2}~\% une quantit\'e, cela revient \`a multiplier cette quantit\'e par $1+\dfrac{\num{#2}}{100}$. Par cons\'equent, si on augmente \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{} de \num{#2}~\%, cela donne : \[\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times\left(1+\frac{\num{#2}}{100}\right)=\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times(1+\num{\fpeval{#2/100}})=\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times\num{\fpeval{(1+#2/100)}}=\num{\fpeval{#3*(1+#2/100)}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\] }{% Calculons ce que repr\'esente l'augmentation de \num{#2}~\%. % \ifboolKV[ClesPourcentage]{AideTableau}{% \xdef\NomA{\useKV[ClesPourcentage]{GrandeurA}}% \xdef\NomB{\useKV[ClesPourcentage]{GrandeurB}}% \xdef\NomCouleurTab{\useKV[ClesPourcentage]{CouleurTab}}% \xdef\NomLargeurTab{\useKV[ClesPourcentage]{Largeur}}% \begin{center}% \Propor[Math,GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab,Largeur=\NomLargeurTab]{/\num{#3},\num{#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}}{}.% }{Pour calculer \num{#2}~\% de \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}, on effectue le calcul : \[\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{#2}}{100}}{\num{\fpeval{#2/100}}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{\fpeval{#2*#3}}}{100}}{\num{\fpeval{#2*#3/100}}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\ifboolKV[ClesPourcentage]{Fractionnaire}{=\num{\fpeval{#2*#3/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}}{}\]% On obtient une augmentation de $\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}}{}.} } }{% \ifboolKV[ClesPourcentage]{Calculer}{% \xdef\NomA{\useKV[ClesPourcentage]{GrandeurA}}% \xdef\NomB{\useKV[ClesPourcentage]{GrandeurB}}% \xdef\NomCouleurTab{\useKV[ClesPourcentage]{CouleurTab}}% \xdef\NomLargeurTab{\useKV[ClesPourcentage]{Largeur}}% \Propor[Math,GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab,Largeur=\NomLargeurTab]{\num{#2}/\num{#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}}$}% \xdef\ResultatPourcentage{\fpeval{#2*100/#3}}% }{% Pour calculer \num{#2}~\% de \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}, on effectue le calcul :% \[\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{#2}}{100}}{\num{\fpeval{#2/100}}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\ifboolKV[ClesPourcentage]{Fractionnaire}{\frac{\num{\fpeval{#2*#3}}}{100}}{\num{\fpeval{#2*#3/100}}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\ifboolKV[ClesPourcentage]{Fractionnaire}{=\num{\fpeval{#2*#3/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}}{}\]% }% }% }% }% %%% % Lien : ratio %%% \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 : ne sert à rien. Laissé en attente. % #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 labeloffset:=labeloffset/2; label.top(TEX("\footnotesize$\overbrace{\hbox to"&decimal(abs(A-B))&"pt{}}$"),iso(D,C)); labeloffset:=labeloffset*2; 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.top(btex \useKV[ClesRatio]{TexteTotal} etex,iso(D,C)); if #3>1: label.bot(btex #3~\useKV[ClesRatio]{TextePart}s etex,iso(A,(N[1]/somme)[A,B])); else: label.bot(btex #3~\useKV[ClesRatio]{TextePart} etex,iso(A,(N[1]/somme)[A,B])); fi; if #4>1: label.bot(btex #4~\useKV[ClesRatio]{TextePart}s etex,iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B])); else: label.bot(btex #4~\useKV[ClesRatio]{TextePart} etex,iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B])); fi; if n>2: if #5>1: label.bot(btex #5~\useKV[ClesRatio]{TextePart}s etex,iso(B,((N[1]+N[2])/somme)[A,B])); else: label.bot(btex #5~\useKV[ClesRatio]{TextePart} etex,iso(B,((N[1]+N[2])/somme)[A,B])); fi; fi; \end{mplibcode} \else \mpxcommands{% \setKVdefault[ClesRatio]{TexteTotal=quantit\'e,TextePart=part} \setKV[ClesRatio]{#1} } \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.top(LATEX("\noexpand\footnotesize$\noexpand\overbrace{\noexpand\hbox to"&decimal(abs(A-B))&"pt{}}$"),iso(D,C)); 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.top(\btex \useKV[ClesRatio]{TexteTotal} etex,iso(D,C)); if #3>1: label.bot(btex #3\unexpanded{~\useKV[ClesRatio]{TextePart}}s etex,iso(A,(N[1]/somme)[A,B])); else: label.bot(btex #3\unexpanded{~\useKV[ClesRatio]{TextePart}} etex,iso(A,(N[1]/somme)[A,B])); fi; if #4>1: label.bot(btex #4\unexpanded{~\useKV[ClesRatio]{TextePart}}s etex,iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B])); else: label.bot(btex #4\unexpanded{~\useKV[ClesRatio]{TextePart}} etex,iso(((N[1]+N[2])/somme)[A,B],(N[1]/somme)[A,B])); fi; if n>2: if #5>1: label.bot(btex #5\unexpanded{~\useKV[ClesRatio]{TextePart}}s etex,iso(B,((N[1]+N[2])/somme)[A,B])); else: label.bot(btex #5\unexpanded{~\useKV[ClesRatio]{TextePart}} etex,iso(B,((N[1]+N[2])/somme)[A,B])); fi; fi; \end{mpost} \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,}} \def\updateratiotoks#1/#2/#3\nil{\addtotok\tabtoksa{&\ifx\bla#2\bla\else\num{#2}\fi}\addtotok\tabtoksb{&\ifx\bla#3\bla\else\num{#3}\fi}\addtotok\tabtoksc{}} \def\buildtabratio{% \tabtoksa{}\tabtoksb{}\tabtoksc{}% \tabtoksa{\useKV[ClesRatio]{GrandeurA}}\tabtoksb{\useKV[ClesRatio]{GrandeurB}} \foreachitem\compteur\in\ListeRatio{\expandafter\updateratiotoks\compteur\nil}% \xdef\LongListe{\ListeRatiolen}% \renewcommand{\arraystretch}{\useKV[ClesRatio]{Stretch}}% \begin{tabular}{|>{\columncolor{\useKV[ClesRatio]{CouleurTab}}}c|*{\number\numexpr\ListeRatiolen}{>{\centering\arraybackslash}p{\useKV[ClesRatio]{Largeur}}|}l} \ifboolKV[ClesRatio]{Nom}{% \hhline{~*{\number\numexpr\ListeRatiolen}{-}} \multicolumn{1}{c|}{}\the\tabtoksc\\ }{} \hhline{*{\number\numexpr\ListeRatiolen+1}{-}}% \the\tabtoksa&\setcounter{NbPropor}{1}\TikzRH\\% \hhline{*{\number\numexpr\ListeRatiolen+1}{-}}% \the\tabtoksb&\setcounter{NbPropor}{1}\TikzRB\\% \hhline{*{\number\numexpr\ListeRatiolen+1}{-}}% \end{tabular}% }% \newcommand{\TikzRH}{% \tikz[remember picture,overlay]{% \coordinate[name=ProporH-\theNbPropor,yshift=\the\ht\strutbox*\arraystretch];}% \stepcounter{NbPropor}% }% \newcommand{\TikzRB}{% \tikz[remember picture, overlay]{% \coordinate[name=ProporB-\theNbPropor,yshift=-\the\dp\strutbox*\arraystretch];}% \stepcounter{NbPropor}% }% \newcommand\FlecheRatio[2][\EcartLargeur]{% \begin{tikzpicture}[remember picture, overlay]% \node[] (Point1) at ($(ProporH-1)!0.1!(ProporB-1)$) {};% \node[] (Point2) at ($(ProporH-1)!0.9!(ProporB-1)$) {};% \coordinate[right of=Point1,node distance=0*#1-\tabcolsep] (point1);% \coordinate[right of=Point2,node distance=0*#1-\tabcolsep] (point2);% \draw[-stealth,out=-20,in=20] (point1) to node[midway,right,inner sep=1pt]{#2}(point2);% \end{tikzpicture}% }% \newcommand\FlecheInvRatio[2][\EcartLargeur]{% \begin{tikzpicture}[remember picture, overlay]% \node[] (Point1) at ($(ProporH-1)!0.1!(ProporB-1)$) {};% \node[] (Point2) at ($(ProporH-1)!0.9!(ProporB-1)$) {};% \coordinate[right of=Point1,node distance=0*#1-\tabcolsep] (point1);% \coordinate[right of=Point2,node distance=0*#1-\tabcolsep] (point2);% \draw[-stealth,out=20,in=-20] (point2) to node[midway,right,inner sep=1pt]{#2}(point1);% \end{tikzpicture}% }% \newcommand\Ratio[2][]{% \useKVdefault[ClesRatio]% \setKV[ClesRatio]{#1}% \xdef\EcartLargeur{\useKV[ClesRatio]{Largeur}}% \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{}}% \MPTestCours[#1]{\useKV[ClesRatio]{Longueur}}{\NbUn}{\NbDeux}{\NbTrois}{\the\toklisteratio}{\useKV[ClesRatio]{CouleurUn}}{\useKV[ClesRatio]{CouleurDeux}}{\useKV[ClesRatio]{CouleurTrois}}% }{% \ifboolKV[ClesRatio]{Figure}{% \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}}% }{% \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}% \newenvironment{Mind}{\begin{tikzpicture}}{\end{tikzpicture}}% \newlength{\RoundedBoxWidth}% \NewEnviron{Bulle}[1][]{% \setKV[ClesMentales]{#1}% \setlength{\RoundedBoxWidth}{\useKV[ClesMentales]{Largeur}}% \xdef\Pointilles{\ifboolKV[ClesMentales]{Pointilles}{dashed}{}}% \xdef\CouleurTrace{\useKV[ClesMentales]{CTrace}}% \xdef\CouleurFond{\useKV[ClesMentales]{CFond}}% \xdef\EpaisseurLigne{\useKV[ClesMentales]{Epaisseur}}% \xdef\RayonCoin{\useKV[ClesMentales]{Rayon}}% \node(\useKV[ClesMentales]{Nom}) [align=justify,draw=\CouleurTrace,line width=\EpaisseurLigne,\Pointilles,fill=\CouleurFond,rounded corners=\RayonCoin,text width=\RoundedBoxWidth] at (\useKV[ClesMentales]{Ancre}) {\begin{minipage}{\RoundedBoxWidth}\BODY\end{minipage}};% \multido{\i=1+1}{9}{% \xdef\x{\fpeval{\i/10}} \coordinate (\useKV[ClesMentales]{Nom}-H-\i) at ($(\useKV[ClesMentales]{Nom}.north west)!\x!(\useKV[ClesMentales]{Nom}.north east)$); \coordinate (\useKV[ClesMentales]{Nom}-D-\i) at ($(\useKV[ClesMentales]{Nom}.north east)!\x!(\useKV[ClesMentales]{Nom}.south east)$); \coordinate (\useKV[ClesMentales]{Nom}-B-\i) at ($(\useKV[ClesMentales]{Nom}.south east)!\x!(\useKV[ClesMentales]{Nom}.south west)$); \coordinate (\useKV[ClesMentales]{Nom}-G-\i) at ($(\useKV[ClesMentales]{Nom}.south west)!\x!(\useKV[ClesMentales]{Nom}.north west)$); } } %%% % Ppt\'es des droites (6eme) %%% \setKVdefault[ClesDroites]{Brouillon=false,CitePropriete=false,Num=1,Figure=false,Remediation=false} \newcommand\Redaction[4][]{% \ifboolKV[ClesDroites]{Remediation}{% \xintifboolexpr{\useKV[ClesDroites]{Num}==1}{% \ifboolKV[ClesDroites]{CitePropriete}{% Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parall\`eles. Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parall\`eles.% Or, si deux droites sont parall\`eles, alors toute droite parall\`ele \`a l'une est parall\`ele \`a l'autre.% Donc les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parall\`eles.% }{% Comme les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont toutes les deux parall\`eles \`a la m\^eme droite $(\hbox to2em{\dotfill})$, alors les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parall\`eles.% } }{\xintifboolexpr{\useKV[ClesDroites]{Num}==2}{% \ifboolKV[ClesDroites]{CitePropriete}{% Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont perpendiculaires. Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont perpendiculaires.% Or, si deux droites sont perpendiculaires \`a une m\^eme droite, alors elles sont parall\`eles.% Donc les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont perpendiculaires. }{% Comme les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont toutes les deux perpendiculaires \`a la m\^eme droite $(\hbox to2em{\dotfill})$, alors les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parall\`eles. } }{% \ifboolKV[ClesDroites]{CitePropriete}{% Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parall\`eles. Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont perpendiculaires.% Or, si deux droites sont parall\`eles, alors toute droite droite perpendiculaire \`a l'une est perpendiculaire \`a l'autre.% Donc les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont perpendiculaires. }{% Comme les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parall\`eles, alors la droite $(\hbox to2em{\dotfill})$ qui est perpendiculaire \`a $(\hbox to2em{\dotfill})$ est \'egalement perpendiculaire \`a la droite $(\hbox to2em{\dotfill})$. } } }% }{% \xintifboolexpr{\useKV[ClesDroites]{Num}==1}{% \ifboolKV[ClesDroites]{CitePropriete}{% Les droites $(#2)$ et $(#4)$ sont parall\`eles. Les droites $(#3)$ et $(#4)$ sont parall\`eles.% Or, si deux droites sont parall\`eles, alors toute droite parall\`ele \`a l'une est parall\`ele \`a l'autre.% Donc les droites $(#2)$ et $(#3)$ sont parall\`eles. }{% Comme les droites $(#2)$ et $(#3)$ sont toutes les deux parall\`eles \`a la m\^eme droite $(#4)$, alors les droites $(#2)$ et $(#3)$ sont parall\`eles. } }{\xintifboolexpr{\useKV[ClesDroites]{Num}==2}{% \ifboolKV[ClesDroites]{CitePropriete}{% Les droites $(#2)$ et $(#4)$ sont perpendiculaires. Les droites $(#3)$ et $(#4)$ sont perpendiculaires.% Or, si deux droites sont perpendiculaires \`a une m\^eme droite, alors elles sont parall\`eles.% Donc les droites $(#2)$ et $(#3)$ sont perpendiculaires. }{% Comme les droites $(#2)$ et $(#3)$ sont toutes les deux perpendiculaires \`a la m\^eme droite $(#4)$, alors les droites $(#2)$ et $(#3)$ sont parall\`eles. } }{% \ifboolKV[ClesDroites]{CitePropriete}{% Les droites $(#2)$ et $(#4)$ sont parall\`eles. Les droites $(#3)$ et $(#4)$ sont perpendiculaires.% Or, si deux droites sont parall\`eles, alors toute droite droite perpendiculaire \`a l'une est perpendiculaire \`a l'autre.% Donc les droites $(#2)$ et $(#3)$ sont perpendiculaires. }{% Comme les droites $(#2)$ et $(#4)$ sont parall\`eles, alors la droite $(#3)$ qui est perpendiculaire \`a $(#4)$ est \'egalement perpendiculaire \`a la droite $(#2)$. }% }% }% }% }% \newcommand\Brouillon[4][]{% \setlength{\abovedisplayskip}{0pt} \ifboolKV[ClesDroites]{Remediation}{% \xintifboolexpr{\useKV[ClesDroites]{Num}==1}{% \[\left. \begin{array}{l} (\hbox to2em{\dotfill})//(\hbox to2em{\dotfill})\\ \\ (\hbox to2em{\dotfill})//(\hbox to2em{\dotfill}) \end{array} \right\}(\hbox to2em{\dotfill})//(\hbox to2em{\dotfill}) \] }{\xintifboolexpr{\useKV[ClesDroites]{Num}==2}{% \[\left. \begin{array}{l} (\hbox to2em{\dotfill})\perp(\hbox to2em{\dotfill})\\ \\ (\hbox to2em{\dotfill})\perp(\hbox to2em{\dotfill})\\ \end{array} \right\}(\hbox to2em{\dotfill})//(\hbox to2em{\dotfill}) \] }{% \[\left. \begin{array}{l} (\hbox to2em{\dotfill})//(\hbox to2em{\dotfill})\\ \\ (\hbox to2em{\dotfill})\perp(\hbox to2em{\dotfill})\\ \end{array} \right\}(\hbox to2em{\dotfill})\perp(\hbox to2em{\dotfill}) \] } } }{ \xintifboolexpr{\useKV[ClesDroites]{Num}==1}{% \[\left. \begin{array}{l} (#2)//(#4)\\ \\ (#3)//(#4) \end{array} \right\}(#2)//(#3) \] }{\xintifboolexpr{\useKV[ClesDroites]{Num}==2}{% \[\left. \begin{array}{l} (#2)\perp(#4)\\ \\ (#3)\perp(#4)\\ \end{array} \right\}(#2)//(#3) \] }{% \[\left. \begin{array}{l} (#2)//(#4)\\ \\ (#3)\perp(#4)\\ \end{array} \right\}(#2)\perp(#3) \] }% }% }% }% \def\MPFigureDroite#1#2{% \ifluatex \mplibcodeinherit{enable} \mplibforcehmode \begin{mplibcode} pair A,B,C,D,E,F,G,H,I,J,K; u:=7.5mm; A=u*(1,3); B-A=u*(3,2); C-A=u*(2,-1); E-C=u*(1,-1.5); G-E=u*(1.5,0); I-A=whatever*(B-A); I-G=whatever*((B-A) rotated 90); D-B=C-A; F-D=E-C; H=1.1[G,I]; J=(C--D) intersectionpoint (G--H); K=(E--F) intersectionpoint (G--H); path Codeperp[]; pair M[]; M1-I=7*unitvector(B-I); M3-I=7*unitvector(J-I); M2-M3=M1-I; Codeperp1=M1--M2--M3; Codeperp2=Codeperp1 shifted(J-I); picture Codepara[]; pair R,S,T; path cd; Codepara1=image( R=1/3[A,B]; T=1/3[E,F]; S=1/3[R,T]; cd=(fullcircle scaled 6mm) shifted S; drawoptions(withcolor 0.75*white); drawarrow reverse((R{dir(210+angle(R-T))}..{dir(150+angle(R-T))}S) cutafter cd); drawarrow reverse((T{dir(210+angle(T-R))}..{dir(150+angle(T-R))}S) cutafter cd); draw cd; label(btex $//$ etex ,S); drawoptions(); ); Codepara2=image( R:=1/2[C,D]; T:=1/2[E,F]; S:=1/2[R,T]; cd:=(fullcircle scaled 6mm) shifted S; drawoptions(withcolor 0.75*white); drawarrow reverse((R{dir(210+angle(R-T))}..{dir(150+angle(R-T))}S) cutafter cd); drawarrow reverse((T{dir(210+angle(T-R))}..{dir(150+angle(T-R))}S) cutafter cd); draw cd; label(btex $//$ etex ,S); drawoptions(); ); path d[]; d1=A--B; d2=C--D; d3=E--F; d4=G--H; picture reste; reste=image( %trac\'es des droites draw d1; if #1=2: draw d2; elseif #1=3: draw d3; fi; if #2=3: draw d3; elseif #2=4: draw d4; fi; % trac\'es des codes if (#1=2) and (#2=3): draw Codepara1; draw Codepara2; fi; if (#1=2) and (#2=4): draw Codeperp1; draw Codeperp2; fi; if (#1=3) and (#2=4): draw Codepara1; draw Codeperp1; fi; ); reste:=reste rotatedabout(u*(3,3),-90+uniformdeviate(180)); draw reste; \end{mplibcode} \mplibcodeinherit{disable} \else \begin{mpost} pair A,B,C,D,E,F,G,H,I,J,K; u:=7.5mm; A=u*(1,3); B-A=u*(3,2); C-A=u*(2,-1); E-C=u*(1,-1.5); G-E=u*(1.5,0); I-A=whatever*(B-A); I-G=whatever*((B-A) rotated 90); D-B=C-A; F-D=E-C; H=1.1[G,I]; J=(C--D) intersectionpoint (G--H); K=(E--F) intersectionpoint (G--H); path Codeperp[]; pair M[]; M1-I=7*unitvector(B-I); M3-I=7*unitvector(J-I); M2-M3=M1-I; Codeperp1=M1--M2--M3; Codeperp2=Codeperp1 shifted(J-I); picture Codepara[]; pair R,S,T; path cd; Codepara1=image( R=1/3[A,B]; T=1/3[E,F]; S=1/3[R,T]; cd=(fullcircle scaled 6mm) shifted S; drawoptions(withcolor 0.75*white); drawarrow reverse((R{dir(210+angle(R-T))}..{dir(150+angle(R-T))}S) cutafter cd); drawarrow reverse((T{dir(210+angle(T-R))}..{dir(150+angle(T-R))}S) cutafter cd); draw cd; label(btex $//$ etex ,S); drawoptions(); ); Codepara2=image( R:=1/2[C,D]; T:=1/2[E,F]; S:=1/2[R,T]; cd:=(fullcircle scaled 6mm) shifted S; drawoptions(withcolor 0.75*white); drawarrow reverse((R{dir(210+angle(R-T))}..{dir(150+angle(R-T))}S) cutafter cd); drawarrow reverse((T{dir(210+angle(T-R))}..{dir(150+angle(T-R))}S) cutafter cd); draw cd; label(btex $//$ etex ,S); drawoptions(); ); path d[]; d1=A--B; d2=C--D; d3=E--F; d4=G--H; picture reste; reste=image( %trac\'es des droites draw d1; if #1=2: draw d2; elseif #1=3: draw d3; fi; if #2=3: draw d3; elseif #2=4: draw d4; fi; % trac\'es des codes if (#1=2) and (#2=3): draw Codepara1; draw Codepara2; fi; if (#1=2) and (#2=4): draw Codeperp1; draw Codeperp2; fi; if (#1=3) and (#2=4): draw Codepara1; draw Codeperp1; fi; ); reste:=reste rotatedabout(u*(3,3),-90+uniformdeviate(180)); draw reste; \end{mpost} \fi } \newcommand\FaireFigure[4][]{% \setlength{\abovedisplayskip}{0pt} \xintifboolexpr{\useKV[ClesDroites]{Num}==1}{% \MPFigureDroite{2}{3}% }{\xintifboolexpr{\useKV[ClesDroites]{Num}==2}{% \MPFigureDroite{2}{4}% }{% \MPFigureDroite{3}{4}% }% }% }% \newcommand\ProprieteDroites[4][]{% \useKVdefault[ClesDroites]% \setKV[ClesDroites]{#1}% \ifboolKV[ClesDroites]{Figure}{% \begin{multicols}{2}% \begin{center}% \FaireFigure[#1]{#2}{#3}{#4}% \end{center}% \columnbreak \ifboolKV[ClesDroites]{Brouillon}{\Brouillon[#1]{#2}{#3}{#4}}{}% \Redaction[#1]{#2}{#3}{#4}% \par% \end{multicols} }{% \ifboolKV[ClesDroites]{Brouillon}{\Brouillon[#1]{#2}{#3}{#4}}{}% \Redaction[#1]{#2}{#3}{#4}% }% }% %%% % Fonction Affine %%% \setKVdefault[ClesAffine]{Nom=f,Variable=x,Ligne=false,Image=false,Antecedent=false,Graphique=false,Retrouve=false,ProgCalcul=false,Unitex=1,Unitey=1,VoirCoef=false,ACoef=0,Redaction=false,Ecriture=false,Definition=false}%ACoefficient=false%: inutile ? \newcommand\FonctionAffine[5][]{% % #1 nombre ou abscisse premier point % #2 a ou ordonn\'ee premier point % #3 b ou abscisse deuxi\`eme point % #4 {} ou ordonn\'ee deuxi\`eme point \useKVdefault[ClesAffine]%A supprimer car appel r\'ecursif avec Redaction \setKV[ClesAffine]{#1}% \ifboolKV[ClesAffine]{Image}{% \ifboolKV[ClesAffine]{Ligne}{% \ensuremath{\useKV[ClesAffine]{Nom}(\num{#2})=\num{#3}\times\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}=\num{\fpeval{#2*#3}}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}\xintifboolexpr{#4==0}{}{=\num{\fpeval{#2*#3+#4}}}}% }{% \ifboolKV[ClesAffine]{ProgCalcul}{% \begin{align*} \useKV[ClesAffine]{Nom}&:\useKV[ClesAffine]{Variable}\stackrel{\times\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longrightarrow}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\stackrel{+\num{#4}}{\longrightarrow}}{\stackrel{\num{#4}}{\longrightarrow}}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}}\\ \useKV[ClesAffine]{Nom}&:\num{#2}\stackrel{\times\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longrightarrow}\num{\fpeval{#3*#2}}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\stackrel{+\num{#4}}{\longrightarrow}}{\stackrel{\num{#4}}{\longrightarrow}}\num{\fpeval{#3*#2+#4}}} \end{align*} }{% \begin{align*} \useKV[ClesAffine]{Nom}(\num{#2})&=\num{#3}\times\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}\\ \useKV[ClesAffine]{Nom}(\num{#2})&=\num{\fpeval{#3*#2}}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}%\\ \xintifboolexpr{#4==0}{}{\\ \useKV[ClesAffine]{Nom}(\num{#2})&=\num{\fpeval{#3*#2+#4}}%\\ } \end{align*} }% }% }{\ifboolKV[ClesAffine]{Antecedent}{% \ifboolKV[ClesAffine]{ProgCalcul}{% La fonction affine $\useKV[ClesAffine]{Nom}$ est d\'efinie par : \begin{align*} \useKV[ClesAffine]{Nom}&:\useKV[ClesAffine]{Variable}\stackrel{\times\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longrightarrow}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\stackrel{+\num{#4}}{\longrightarrow}}{\stackrel{\num{#4}}{\longrightarrow}}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}} \end{align*} Nous cherchons le nombre $\useKV[ClesAffine]{Variable}$ tel que son image par la fonction $\useKV[ClesAffine]{Nom}$ soit $\num{#2}$. Donc on obtient : \begin{align*} \useKV[ClesAffine]{Nom}&:\frac{\num{\fpeval{#2-#4}}}{\num{#3}}\stackrel{\div\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longleftarrow}\num{\fpeval{#2-#4}}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\stackrel{-\num{#4}}{\longleftarrow}}{\stackrel{+\num{\fpeval{0-#4}}}{\longleftarrow}}\num{#2}} \end{align*} }{% On cherche l'ant\'ec\'edent de $\num{#2}$ par la fonction $\useKV[ClesAffine]{Nom}$, c'est-\`a-dire le nombre $\useKV[ClesAffine]{Variable}$ tel que $\useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\num{#2}$. Or, la fonction $\useKV[ClesAffine]{Nom}$ est d\'efinie par : \[% \useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\xintifboolexpr{#3==0}{}{\num{#3}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#3==0}{\num{#4}}{\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}} \] Par cons\'equent, on a : \begin{align*} \num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}&=\num{#2}\\ \xintifboolexpr{#4==0}{\useKV[ClesAffine]{Variable}\uppercase{&}=\frac{\num{#2}}{\num{#3}}%\\ }{\num{#3}\useKV[ClesAffine]{Variable}&=\num{\fpeval{#2-#4}}\\ \useKV[ClesAffine]{Variable}&=\frac{\num{\fpeval{#2-#4}}}{\num{#3}}%\\ } \end{align*} }% }{% \ifboolKV[ClesAffine]{Retrouve}{% On sait que $\useKV[ClesAffine]{Nom}$ est une fonction affine. Donc elle s'\'ecrit sous la forme : \[\useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=a\useKV[ClesAffine]{Variable}+b\] Or, $\useKV[ClesAffine]{Nom}(\num{#2})=\num{#3}$ et $\useKV[ClesAffine]{Nom}(\num{#4})=\num{#5}$. Par cons\'equent, d'apr\`es la propri\'et\'e des accroissements : \begin{align*} a&=\frac{\useKV[ClesAffine]{Nom}(\num{#2})-\useKV[ClesAffine]{Nom}(\num{#4})}{\num{#2}-\xintifboolexpr{#4<0}{(\num{#4})}{\num{#4}}}\\ a&=\frac{\num{#3}-\xintifboolexpr{#5<0}{(\num{#5})}{\num{#5}}}{\num{\fpeval{#2-#4}}}\\ a&=\frac{\num{\fpeval{#3-#5}}}{\num{\fpeval{#2-#4}}}%\\ \SSimpliTest{\fpeval{#3-#5}}{\fpeval{#2-#4}}\ifthenelse{\boolean{Simplification}}{\\a&=\SSimplifie{\fpeval{#3-#5}}{\fpeval{#2-#4}}}{}% \end{align*} La fonction $\useKV[ClesAffine]{Nom}$ s'\'ecrit alors sous la forme $\displaystyle\useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\SSimplifie{\fpeval{#3-#5}}{\fpeval{#2-#4}}\useKV[ClesAffine]{Variable}+b$. \\De plus, comme $\useKV[ClesAffine]{Nom}(\num{#2})=\num{#3}$, alors : \begin{align*} \SSimplifie{\fpeval{#3-#5}}{\fpeval{#2-#4}}\times\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}+b&=\num{#3}\\ \SSimplifie{\fpeval{(#3-#5)*#2}}{\fpeval{#2-#4}}+b&=\num{#3}\\ b&=\num{\fpeval{#3-(#3-#5)*#2/(#2-#4)}} \end{align*} \xdef\OrdOrigine{\fpeval{#3-(#3-#5)*#2/(#2-#4)}} La fonction affine $\useKV[ClesAffine]{Nom}$ cherch\'ee est : \[\useKV[ClesAffine]{Nom}:\useKV[ClesAffine]{Variable}\mapsto\SSimplifie{\fpeval{#3-#5}}{\fpeval{#2-#4}}\useKV[ClesAffine]{Variable}\xintifboolexpr{\OrdOrigine==0}{}{\xintifboolexpr{\OrdOrigine>0}{+\num{\OrdOrigine}}{-\num{\fpeval{0-\OrdOrigine}}}}\] }{% % }% }% }% \ifboolKV[ClesAffine]{Graphique}{% \ifboolKV[ClesAffine]{VoirCoef}{% \MPFonctionAffine{\useKV[ClesAffine]{Unitex}}{\useKV[ClesAffine]{Unitey}}{#2}{#3}{#4}{#5}{\useKV[ClesAffine]{ACoef}}% }{% \MPFonctionAffine{\useKV[ClesAffine]{Unitex}}{\useKV[ClesAffine]{Unitey}}{#2}{#3}{#4}{#5}{""}}{}% }{}% \ifboolKV[ClesAffine]{Redaction}{% \xintifboolexpr{#2==0}{Comme la fonction $\useKV[ClesAffine]{Nom}$ est une fonction constante, alors sa repr\'esentation graphique est une droite parall\`ele \`a l'axe des abscisses passant par le point de coordonn\'ees $(0;\num{#3})$.}% {\xintifboolexpr{#3==0}{Comme la fonction $\useKV[ClesAffine]{Nom}$ est une fonction lin\'eaire, alors sa repr\'esentation graphique est une droite passant par l'origine du rep\`ere.\\Je choisis $\useKV[ClesAffine]{Variable}=\num{#4}$. Son image est \xdef\NomFonctionA{\useKV[ClesAffine]{Nom}}\FonctionAffine[Nom=\NomFonctionA,Image,Ligne]{#4}{#2}{#3}{#5}. On place le point de coordonn\'ees $(\num{#4};\num{\fpeval{#2*#4+#3}})$. }{% Comme $\useKV[ClesAffine]{Nom}$ est une fonction affine, alors sa repr\'esentation graphique est une droite.\\Je choisis $\useKV[ClesAffine]{Variable}=\num{#4}$. Son image est \xdef\NomVariable{\useKV[ClesAffine]{Variable}}\xdef\NomFonction{\useKV[ClesAffine]{Nom}}\FonctionAffine[Nom=\NomFonction,Image,Ligne]{#4}{#2}{#3}{#5}. On place le point de coordonn\'ees $(\num{#4};\num{\fpeval{#2*#4+#3}})$.\\Je choisis \setKV[ClesAffine]{Variable=\NomVariable}$\useKV[ClesAffine]{Variable}=\num{#5}$. Son image est \FonctionAffine[Nom=\NomFonction,Image,Ligne]{#5}{#2}{#3}{#4}. On place le point de coordonn\'ees $(\num{#5};\num{\fpeval{#2*#5+#3}})$.% }% }% }% {}% \ifboolKV[ClesAffine]{Ecriture}{\ensuremath{\useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\xintifboolexpr{#2==0}{}{\num{#2}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#2==0}{\num{#3}}{\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}}}{}% \ifboolKV[ClesAffine]{Definition}{\ensuremath{\useKV[ClesAffine]{Nom}:\useKV[ClesAffine]{Variable}\mapsto\xintifboolexpr{#2==0}{}{\num{#2}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#2==0}{\num{#3}}{\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}}}{}% }% \def\MPFonctionAffine#1#2#3#4#5#6#7{% % #1 Unitex #2 Unitey % #2 a pour f1 - #4 b pour f1 % #5 abscisse du premier point % #6 abscisse du deuxi\`eme point \ifluatex \mplibforcehmode \begin{mplibcode} XMin=-2; XMax=2; if #5XMax: XMax:=#5; fi; if #6>XMax: XMax:=#6; fi; YMax=2; YMin=-2; if (#5*#3+(#4))>YMax: YMax:=(#5*#3+(#4)); fi; if (#6*#3+(#4))>YMax: YMax:=(#6*#3+(#4)); fi; if (#5*#3+(#4))0: if (#5*#3+(#4))=0: else: if (#5*#3+(#4))<0: label.rt(TEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1))); else: label.lft(TEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1))); fi; fi; if (#6*#3+(#4))=0: else: if (#6*#3+(#4))<0: label.rt(TEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2))); else: label.lft(TEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2))); fi; fi; else: if (#5*#3+(#4))=0: else: if (#5*#3+(#4))<0: label.lft(TEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1))); else: label.rt(TEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1))); fi; fi; if (#6*#3+(#4))=0: else: if (#6*#3+(#4))<0: label.lft(TEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2))); else: label.rt(TEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2))); fi; fi; fi; fi; % On affiche ou pas "la marche" du coef directeur for p_=#7: if numeric p_: draw ((#7*unitex,(#7*#3+(#4))*unitey)--((#7+1)*unitex,(#7*#3+(#4))*unitey)--((#7+1)*unitex,((#7+1)*#3+(#4))*unitey)) withcolor red; fi; endfor; \end{mplibcode} \else \begin{mpost} % On d\'efinit les constantes XMin=-2; XMax=2; if #5XMax: XMax:=#5; fi; if #6>XMax: XMax:=#6; fi; YMax=2; YMin=-2; if (#5*#3+(#4))>YMax: YMax:=(#5*#3+(#4)); fi; if (#6*#3+(#4))>YMax: YMax:=(#6*#3+(#4)); fi; if (#5*#3+(#4))0: if (#5*#3+(#4))=0: else: if (#5*#3+(#4))<0: label.rt(LATEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1))); else: label.lft(LATEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1))); fi; fi; if (#6*#3+(#4))=0: else: if (#6*#3+(#4))<0: label.rt(LATEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2))); else: label.lft(LATEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2))); fi; fi; else: if (#5*#3+(#4))=0: else: if (#5*#3+(#4))<0: label.lft(LATEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1))); else: label.rt(LATEX("\num{"&decimal(#5*#3+(#4))&"}"),(0,ypart(A1))); fi; fi; if (#6*#3+(#4))=0: else: if (#6*#3+(#4))<0: label.lft(LATEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2))); else: label.rt(LATEX("\num{"&decimal(#6*#3+(#4))&"}"),(0,ypart(A2))); fi; fi; fi; fi; % On affiche ou pas "la marche" du coef directeur for p_=#7: if numeric p_: draw ((#7*unitex,(#7*#3+(#4))*unitey)--((#7+1)*unitex,(#7*#3+(#4))*unitey)--((#7+1)*unitex,((#7+1)*#3+(#4))*unitey)) withcolor red; fi; endfor; \end{mpost} \fi } %%% % Fonction %%% \setKVdefault[ClesFonction]{Nom=f,Variable=x,Calcul=x,Tableau=false,Largeur=5mm,Ecriture=false,Definition=false,Points=false,Tangentes=false,PasX=1,PasY=1,UniteX=1,UniteY=1,Prolonge=false,Trace=false} \newtoks\toklistePtsFn%pour la discipline \def\UpdatePtsFn#1/#2/#3/#4\nil{\addtotok\toklistePtsFn{#1,(#2,#3),#4,}}% \def\UpdatePtsFN#1/#2/#3/#4\nil{\addtotok\toklistePtsFn{(#2,#3),}}% \def\MPCourbePoints#1#2#3#4#5#6{% % #1 la liste des points % #2: pas en x % #3: pas en y % #4: unit\'e en x % #5: unit\'e en y % #6 : prolongement avant et apr\`es les premier et dernier points ? \ifluatex \mplibforcehmode \begin{mplibcode} x.u:=#2; y.u:=#3; X.u:=#4; Y.u:=#5; numeric dirav[],dirap[]; pair Fn[],Gn[]; n=0; for p_=#1: Gn[n]=p_; Fn[n]=cm*(X.u*xpart(p_),Y.u*ypart(p_)); n:=n+1; endfor; N:=(n-1); MinX=999; MaxX=-999; MinY=999; MaxY=-999; for k=0 upto N: if xpart(Gn[k])MaxX: MaxX:=xpart(Gn[k]); fi; if ypart(Gn[k])MaxY: MaxY:=ypart(Gn[k]); fi; endfor; if #6=0: for k=MinY-1 step y.u until MaxY+1: draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white; endfor; for k=MinX-1 step x.u until MaxX+1: draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white; endfor; else: for k=MinY-1 step y.u until MaxY+1: draw cm*((MinX)*X.u,k*Y.u)--cm*((MaxX)*X.u,k*Y.u) withcolor 0.75white; endfor; for k=MinX step x.u until MaxX: draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white; endfor; fi; if #6=0: for k=0 upto N: fill cercles(Fn[k],0.5mm); endfor; else: for k=1 upto N-1: fill cercles(Fn[k],0.5mm); endfor; fi; if #6=0: drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm); drawarrow ((MinX-1)*X.u*cm,0)--((MaxX+1)*X.u*cm,0); else: drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm); drawarrow ((MinX)*X.u*cm,0)--((MaxX)*X.u*cm,0); fi; label.llft(btex O etex,(0,0)); dotlabel.bot(btex 1 etex,cm*X.u*(1,0)); dotlabel.lft(btex 1 etex,cm*Y.u*(0,1)); draw Fn[0] for k=1 upto N: ..Fn[k] endfor; \end{mplibcode} \else \begin{mpost} x.u:=#2; y.u:=#3; X.u:=#4; Y.u:=#5; numeric dirav[],dirap[]; pair Fn[],Gn[]; n=0; for p_=#1: Gn[n]=p_; Fn[n]=cm*(X.u*xpart(p_),Y.u*ypart(p_)); n:=n+1; endfor; N:=(n-1); MinX=999; MaxX=-999; MinY=999; MaxY=-999; for k=0 upto N: if xpart(Gn[k])MaxX: MaxX:=xpart(Gn[k]); fi; if ypart(Gn[k])MaxY: MaxY:=ypart(Gn[k]); fi; endfor; if #6=0: for k=MinY-1 step y.u until MaxY+1: draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white; endfor; for k=MinX-1 step x.u until MaxX+1: draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white; endfor; else: for k=MinY-1 step y.u until MaxY+1: draw cm*((MinX)*X.u,k*Y.u)--cm*((MaxX)*X.u,k*Y.u) withcolor 0.75white; endfor; for k=MinX step x.u until MaxX: draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white; endfor; fi; if #6=0: for k=0 upto N: fill cercles(Fn[k],0.5mm); endfor; else: for k=1 upto N-1: fill cercles(Fn[k],0.5mm); endfor; fi; if #6=0: drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm); drawarrow ((MinX-1)*X.u*cm,0)--((MaxX+1)*X.u*cm,0); else: drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm); drawarrow ((MinX)*X.u*cm,0)--((MaxX)*X.u*cm,0); fi; label.llft(btex O etex,(0,0)); dotlabel.bot(btex 1 etex,cm*X.u*(1,0)); dotlabel.lft(btex 1 etex,cm*Y.u*(0,1)); draw Fn[0] for k=1 upto N: ..Fn[k] endfor; \end{mpost} \fi } \def\MPCourbe#1#2#3#4#5#6{% \ifluatex \mplibforcehmode \begin{mplibcode} x.u:=#2; y.u:=#3; X.u:=#4; Y.u:=#5; numeric dirav[],dirap[]; pair Fn[],Gn[]; n=0; for p_=#1: if (n mod 3)=0: dirav[n div 3]=p_; fi; if (n mod 3)=1: Gn[n div 3]=p_; Fn[n div 3]=cm*(X.u*xpart(p_),Y.u*ypart(p_)); fi; if (n mod 3)=2: dirap[n div 3]=p_; fi; n:=n+1; endfor; N:=(n-1) div 3; MinX=999; MaxX=-999; MinY=999; MaxY=-999; for k=0 upto N: if xpart(Gn[k])MaxX: MaxX:=xpart(Gn[k]); fi; if ypart(Gn[k])MaxY: MaxY:=ypart(Gn[k]); fi; endfor; if #6=0: for k=MinY-1 step y.u until MaxY+1: draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white; endfor; for k=MinX-1 step x.u until MaxX+1: draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white; endfor; else: for k=MinY-1 step y.u until MaxY+1: draw cm*((MinX)*X.u,k*Y.u)--cm*((MaxX)*X.u,k*Y.u) withcolor 0.75white; endfor; for k=MinX step x.u until MaxX: draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white; endfor; fi; if #6=0: for k=0 upto N: fill cercles(Fn[k],0.5mm); endfor; else: for k=1 upto N-1: fill cercles(Fn[k],0.5mm); endfor; fi; if #6=0: drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm); drawarrow ((MinX-1)*X.u*cm,0)--((MaxX+1)*X.u*cm,0); else: drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm); drawarrow ((MinX)*X.u*cm,0)--((MaxX)*X.u*cm,0); fi; label.llft(btex O etex,(0,0)); dotlabel.bot(btex 1 etex,cm*X.u*(1,0)); dotlabel.lft(btex 1 etex,cm*Y.u*(0,1)); draw Fn[0]{dir dirap[0]} for k=1 upto (N-1): ..{dir dirav[k]}Fn[k]{dir dirap[k]} endfor ..{dir dirav[N]}Fn[N]; \end{mplibcode} \else \begin{mpost} x.u:=#2; y.u:=#3; X.u:=#4; Y.u:=#5; numeric dirav[],dirap[]; pair Fn[],Gn[]; n=0; for p_=#1: if (n mod 3)=0: dirav[n div 3]=p_; fi; if (n mod 3)=1: Gn[n div 3]=p_; Fn[n div 3]=cm*(X.u*xpart(p_),Y.u*ypart(p_)); fi; if (n mod 3)=2: dirap[n div 3]=p_; fi; n:=n+1; endfor; N:=(n-1) div 3; MinX=999; MaxX=-999; MinY=999; MaxY=-999; for k=0 upto N: if xpart(Gn[k])MaxX: MaxX:=xpart(Gn[k]); fi; if ypart(Gn[k])MaxY: MaxY:=ypart(Gn[k]); fi; endfor; if #6=0: for k=MinY-1 step y.u until MaxY+1: draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white; endfor; for k=MinX-1 step x.u until MaxX+1: draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white; endfor; else: for k=MinY-1 step y.u until MaxY+1: draw cm*((MinX)*X.u,k*Y.u)--cm*((MaxX)*X.u,k*Y.u) withcolor 0.75white; endfor; for k=MinX step x.u until MaxX: draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white; endfor; fi; if #6=0: for k=0 upto N: fill cercles(Fn[k],0.5mm); endfor; else: for k=1 upto N-1: fill cercles(Fn[k],0.5mm); endfor; fi; if #6=0: drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm); drawarrow ((MinX-1)*X.u*cm,0)--((MaxX+1)*X.u*cm,0); else: drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm); drawarrow ((MinX)*X.u*cm,0)--((MaxX)*X.u*cm,0); fi; label.llft(btex O etex,(0,0)); dotlabel.bot(btex 1 etex,cm*X.u*(1,0)); dotlabel.lft(btex 1 etex,cm*Y.u*(0,1)); draw Fn[0]{dir dirap[0]} for k=1 upto (N-1): ..{dir dirav[k]}Fn[k]{dir dirap[k]} endfor ..{dir dirav[N]}Fn[N]; \end{mpost} \fi } \newcommand\Fonction[2][]{% \useKVdefault[ClesFonction] \setKV[ClesFonction]{#1} \ifboolKV[ClesFonction]{Trace}{% \useKVdefault[TraceG]% \setKV[TraceG]{#1}% \MPTraceFonction[#1]{\useKV[ClesFonction]{Calcul}}% }{% \ifboolKV[ClesFonction]{Points}{% \toklistePtsFn{}% % \setsepchar[*]{,*/}%\ignoreemptyitems% \setsepchar[*]{§*/}%\ignoreemptyitems% \readlist*\ListePoints{#2}% \ifboolKV[ClesFonction]{Tangentes}{% \foreachitem\compteur\in\ListePoints{% \expandafter\UpdatePtsFn\compteur\nil% }% \ifboolKV[ClesFonction]{Prolonge}{% \MPCourbe{\the\toklistePtsFn}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}{1}% }{% \MPCourbe{\the\toklistePtsFn}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}{0}% }% }{% \foreachitem\compteur\in\ListePoints{% \expandafter\UpdatePtsFN\compteur\nil% }% \ifboolKV[ClesFonction]{Prolonge}{% \MPCourbePoints{\the\toklistePtsFn}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}{1}% }{% \MPCourbePoints{\the\toklistePtsFn}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}{0}% }% }% }{% \ignoreemptyitems% \readlist*\ListeFonction{#2} \StrSubstitute{\useKV[ClesFonction]{Calcul}}{\useKV[ClesFonction]{Variable}}{\i}[\temp]% \StrSubstitute{\useKV[ClesFonction]{Calcul}}{**}{^}[\tempa]% \StrSubstitute{\tempa}{*}{}[\tempab]% \ifboolKV[ClesFonction]{Ecriture}{% \ensuremath{\useKV[ClesFonction]{Nom}(\useKV[ClesFonction]{Variable})=\tempab} }{}% \ifboolKV[ClesFonction]{Definition}{% \ensuremath{\useKV[ClesFonction]{Nom}:\useKV[ClesFonction]{Variable}\mapsto\tempab} }{}% \ifboolKV[ClesFonction]{Tableau}{% \buildtabfonction% }{}% }% }% }% \def\buildtabfonction{%\\ \[% \begin{array}{|>{\columncolor{gray!15}}c|*{\number\numexpr\ListeFonctionlen}{>{\centering\arraybackslash}p{\useKV[ClesFonction]{Largeur}}|}}% \hline \useKV[ClesFonction]{Variable}\xintFor* ##1 in {\xintSeq {1}{\ListeFonctionlen}}\do{&\num{\ListeFonction[##1]}}\\ \hline \useKV[ClesFonction]{Nom}(\useKV[ClesFonction]{Variable})\xintFor* ##1 in {\xintSeq {1}{\ListeFonctionlen}}\do{& \StrSubstitute{\useKV[ClesFonction]{Calcul}}{\useKV[ClesFonction]{Variable}}{(\ListeFonction[##1])}[\tempab]\num{\fpeval{\tempab}}} \\\hline \end{array} \] } %%% % Diff\'erentes représentations graphiques %%% \setKVdefault[TraceG]{Grille=false,Graduations=false,PasGrilleX=1,PasGrilleY=1,Xmin=-5.5,Xmax=5.5,Xstep=1,Ymin=-5.5,Ymax=5.5,Ystep=1,Bornea=-5.5,Borneb=5.5,LabelX={},LabelY={},LabelC=0.5,NomCourbe={},Origine={(5.5,5.5)},Fonction=false,Points=false,Invisible=false,CouleurPoint=red,CouleurTrace=black,Relie=false,RelieSegment=false} \newcommand\TraceGraphique[2][]{% \useKVdefault[TraceG]% \setKV[TraceG]{#1}% \ifboolKV[TraceG]{Fonction}{% \MPTraceFonction[#1]{#2}% }{% \setKV[TraceG]{Xmin=0,Ymin=0} \setKV[TraceG]{#1}% \readlist*\ListePointsPlaces{#2}% \newtoks\toklistepoint% \foreachitem\compteur\in\ListePointsPlaces{\expandafter\Updatetoks\compteur\nil}% \MPPlacePoint[#1]{\the\toklistepoint} }% }% \newcommand\MPPlacePoint[2][]{% \ifluatex \mplibforcehmode \begin{mplibcode} xmin=\useKV[TraceG]{Xmin}; xmax=\useKV[TraceG]{Xmax}; ymin=\useKV[TraceG]{Ymin}; ymax=\useKV[TraceG]{Ymax}; pasx=\useKV[TraceG]{Xstep}; pasy=\useKV[TraceG]{Ystep}; x.u=1cm/\useKV[TraceG]{Xstep}; y.u=1cm/\useKV[TraceG]{Ystep}; grillex=\useKV[TraceG]{PasGrilleX}; grilley=\useKV[TraceG]{PasGrilleY}; pos=\useKV[TraceG]{LabelC}; color colorpoint,colortrace; colorpoint=\useKV[TraceG]{CouleurPoint}; colortrace=\useKV[TraceG]{CouleurTrace}; boolean Grille; Grille=\useKV[TraceG]{Grille}; boolean Graduations; Graduations=\useKV[TraceG]{Graduations}; boolean Relie; Relie=\useKV[TraceG]{Relie}; boolean RelieSegment; RelieSegment=\useKV[TraceG]{RelieSegment}; boolean Invisible; Invisible=\useKV[TraceG]{Invisible}; pair Origine; Origine=(0,0); if Grille: drawoptions(withcolor 0.75white); for k=0 step grillex until (xmax-xmin): trace (k*x.u,ypart(Origine))--(x.u*k,y.u*(ymax-ymin)); endfor; for k=0 step grilley until (ymax-ymin): trace (xpart(Origine),k*y.u)--(x.u*(xmax-xmin),y.u*k); endfor; drawoptions(); fi; if Graduations: for k=0 step grillex until (xmax-xmin): trace ((0,-0.5mm)--(0,0.5mm)) shifted ((k*x.u,0) shifted Origine) withpen pencircle scaled1.25; label.bot(TEX("\num{"&decimal(xmin+k)&"}"),(k*x.u,0) shifted Origine); endfor; label.ulft(TEX("\num{"&decimal(ymin)&"}"),(0,0) shifted Origine); for k=grilley step grilley until (ymax-ymin): trace ((-0.5mm,0)--(0.5mm,0)) shifted ((0,k*y.u) shifted Origine) withpen pencircle scaled1.25; label.lft(TEX("\num{"&decimal(ymin+k)&"}"),(0,k*y.u) shifted Origine); endfor; fi; drawoptions(withpen pencircle scaled1.5); drawarrow Origine--(xpart(Origine),y.u*(ymax-ymin)); drawarrow Origine--((xmax-xmin)*x.u,ypart(Origine)); drawoptions(); % On relie éventuellement les points if Relie: pair N[]; nbpoint=0; for p_=#2: nbpoint:=nbpoint+1; N[nbpoint]=(x.u*(xpart(p_)-xmin),y.u*(ypart(p_)-ymin)); endfor; draw N[1] for k=2 upto nbpoint: ..N[k] endfor withcolor colortrace; fi; if RelieSegment: pair N[]; nbpoint=0; for p_=#2: nbpoint:=nbpoint+1; N[nbpoint]=(x.u*(xpart(p_)-xmin),y.u*(ypart(p_)-ymin)); endfor; draw N[1] for k=2 upto nbpoint: --N[k] endfor withcolor colortrace; fi; % On place les points if Invisible=false: drawoptions(withcolor colorpoint); for p_=#2: dotlabel("",(x.u*(xpart(p_)-xmin),y.u*(ypart(p_)-ymin))); endfor; drawoptions(); fi; %on labelise les axes label.urt(btex \useKV[TraceG]{LabelX} etex,(x.u*(xmax-xmin),ypart(Origine))); label.urt(btex \useKV[TraceG]{LabelY} etex,(xpart(Origine),y.u*(ymax-ymin))); \end{mplibcode} \else \mpxcommands{% \setKV[TraceG]{#1} } \begin{mpost}[mpsettings={xmin=\useKV[TraceG]{Xmin};xmax=\useKV[TraceG]{Xmax};ymin=\useKV[TraceG]{Ymin};ymax=\useKV[TraceG]{Ymax};pasx=\useKV[TraceG]{Xstep};pasy=\useKV[TraceG]{Ystep};xu=1cm/\useKV[TraceG]{Xstep};yu=1cm/\useKV[TraceG]{Ystep};grillex=\useKV[TraceG]{PasGrilleX};grilley=\useKV[TraceG]{PasGrilleY};pos=\useKV[TraceG]{LabelC};color colorpoint,colortrace;colorpoint=\useKV[TraceG]{CouleurPoint};colortrace=\useKV[TraceG]{CouleurTrace};boolean Grille;Grille=\useKV[TraceG]{Grille};boolean Graduations;Graduations=\useKV[TraceG]{Graduations};boolean Relie;Relie=\useKV[TraceG]{Relie};boolean RelieSegment;RelieSegment=\useKV[TraceG]{RelieSegment};boolean Invisible;Invisible=\useKV[TraceG]{Invisible};}] pair Origine; Origine=(0,0); if Grille: drawoptions(withcolor 0.75white); for k=0 step grillex until (xmax-xmin): trace (k*xu,ypart(Origine))--(xu*k,yu*(ymax-ymin)); endfor; for k=0 step grilley until (ymax-ymin): trace (xpart(Origine),k*yu)--(xu*(xmax-xmin),yu*k); endfor; drawoptions(); fi; if Graduations: for k=0 step grillex until (xmax-xmin): trace ((0,-0.5mm)--(0,0.5mm)) shifted ((k*xu,0) shifted Origine) withpen pencircle scaled1.25; label.bot(LATEX("\num{"&decimal(xmin+k)&"}"),(k*xu,0) shifted Origine); endfor; label.ulft(LATEX("\num{"&decimal(ymin)&"}"),(0,0) shifted Origine); for k=grilley step grilley until (ymax-ymin): trace ((-0.5mm,0)--(0.5mm,0)) shifted ((0,k*yu) shifted Origine) withpen pencircle scaled1.25; label.lft(LATEX("\num{"&decimal(ymin+k)&"}"),(0,k*yu) shifted Origine); endfor; fi; drawoptions(withpen pencircle scaled1.5); drawarrow Origine--(xpart(Origine),yu*(ymax-ymin)); drawarrow Origine--((xmax-xmin)*xu,ypart(Origine)); drawoptions(); % On relie éventuellement les points if Relie: pair N[]; nbpoint=0; for p_=#2: nbpoint:=nbpoint+1; N[nbpoint]=(xu*(xpart(p_)-xmin),yu*(ypart(p_)-ymin)); endfor; draw N[1] for k=2 upto nbpoint: ..N[k] endfor withcolor colortrace; fi; if RelieSegment: pair N[]; nbpoint=0; for p_=#2: nbpoint:=nbpoint+1; N[nbpoint]=(xu*(xpart(p_)-xmin),yu*(ypart(p_)-ymin)); endfor; draw N[1] for k=2 upto nbpoint: --N[k] endfor withcolor colortrace; fi; % On place les points if Invisible=false: drawoptions(withcolor colorpoint); for p_=#2: dotlabel("",(xu*(xpart(p_)-xmin),yu*(ypart(p_)-ymin))); endfor; drawoptions(); fi; %on labelise les axes label.urt(btex \unexpanded{\useKV[TraceG]{LabelX}} etex,(xu*(xmax-xmin),ypart(Origine))); label.urt(btex \unexpanded{\useKV[TraceG]{LabelY}} etex,(xpart(Origine),yu*(ymax-ymin))); \end{mpost} \fi } \newcommand\MPTraceFonction[2][]{% \ifluatex \mplibforcehmode \begin{mplibcode} borneinf=\useKV[TraceG]{Bornea}; bornesup=\useKV[TraceG]{Borneb}; xmin=\useKV[TraceG]{Xmin}; xmax=\useKV[TraceG]{Xmax}; ymin=\useKV[TraceG]{Ymin}; ymax=\useKV[TraceG]{Ymax}; pasx=\useKV[TraceG]{Xstep}; pasy=\useKV[TraceG]{Ystep}; x.u=1cm/\useKV[TraceG]{Xstep}; y.u=1cm/\useKV[TraceG]{Ystep}; grillex=\useKV[TraceG]{PasGrilleX}; grilley=\useKV[TraceG]{PasGrilleY}; pos=\useKV[TraceG]{LabelC}; color colortrace; colortrace=\useKV[TraceG]{CouleurTrace}; pair Origine; Origine=(xmin,ymin)+\useKV[TraceG]{Origine}; boolean Grille; Grille=\useKV[TraceG]{Grille}; boolean Graduations; Graduations=\useKV[TraceG]{Graduations}; vardef sin(expr t) = sind(c*t) enddef; vardef cos(expr t) = cosd(c*t) enddef; vardef tan(expr t) = sin(t)/cos(t) enddef; vardef exp(expr t) = e**t enddef; vardef ch(expr x)=(exp(x)+exp(-x))/2 enddef; vardef sh(expr x)=(exp(x)-exp(-x))/2 enddef; vardef ln(expr t) = mlog(t)/256 enddef; vardef arcsin(expr x)=%Définition mathématique en radian pi*angle((sqrt(1-x**2),x))/180 enddef; vardef arccos(expr x)=%Définition mathématique en radian pi*angle((x,sqrt(1-x**2)))/180 enddef; path Cb[]; vardef courbe[](expr a,b,nb)(text texte)= path Courbe; for i:=0 upto nb : x@[i]:=(a+i*(b-a)/nb); x:=x@[i]; y@[i]:=texte; endfor ; Cb@:=(x@.0*x.u,y@.0*y.u) for i:=1 upto nb : ..(x@[i]*x.u,y@[i]*y.u) endfor; Cb@:=Cb@ shifted (Origine*cm); Courbe=Cb@; Courbe enddef; if Grille: drawoptions(withcolor 0.75white); for k=xpart(Origine) step grillex until xmax: trace u*(k,ymin)--u*(k,ymax); endfor; for k=xpart(Origine) step -grillex until xmin: trace u*(k,ymin)--u*(k,ymax); endfor; for k=ypart(Origine) step grilley until ymax: trace u*(xmin,k)--u*(xmax,k); endfor; for k=ypart(Origine) step -grilley until ymin: trace u*(xmin,k)--u*(xmax,k); endfor; drawoptions(); fi; if Graduations: for k=1 upto xmax/grillex: dotlabel.bot(TEX("\num{"&decimal(k)&"}"),(k*x.u+xpart(Origine*cm),ypart(Origine*cm))); endfor; for k=-1 downto xmin/grillex: dotlabel.bot(TEX("\num{"&decimal(k)&"}"),(k*x.u+xpart(Origine*cm),ypart(Origine*cm))); endfor; for k=1 upto ymax/grilley: dotlabel.lft(TEX("\num{"&decimal(k)&"}"),(xpart(Origine*cm),k*y.u+ypart(Origine*cm))); endfor; for k=-1 downto ymin/grilley: dotlabel.lft(TEX("\num{"&decimal(k)&"}"),(xpart(Origine*cm),k*y.u+ypart(Origine*cm))); endfor; fi; drawoptions(withpen pencircle scaled1.5); drawarrow (u*(0,ymin)--u*(0,ymax)) shifted (u*(xpart(Origine),0)); drawarrow (u*(xmin,0)--u*(xmax,0)) shifted (u*(0,ypart(Origine))); drawoptions(); draw courbe1(borneinf,bornesup,100)(#2) withcolor colortrace; % labelisation numeric t; t=pos*length Cb1; pair PT,Tangente; PT:=point (pos*length Cb1) of Cb1; Tangente:=unitvector(direction t of Cb1); label(btex \useKV[TraceG]{NomCourbe} etex rotated angle(Tangente),PT+2mm*(Tangente rotated 90)); % fin labelisation clip currentpicture to polygone(u*(xmin,ymin),u*(xmax,ymin),u*(xmax,ymax),u*(xmin,ymax)); label.rt(btex \useKV[TraceG]{LabelX} etex,u*(xmax,ypart(Origine))); label.top(btex \useKV[TraceG]{LabelY} etex,u*(xpart(Origine),ymax)); \end{mplibcode} \else \mpxcommands{% \setKV[TraceG]{#1} } \begin{mpost}[mpsettings={borneinf=\useKV[TraceG]{Bornea};bornesup=\useKV[TraceG]{Borneb};xmin=\useKV[TraceG]{Xmin};xmax=\useKV[TraceG]{Xmax};ymin=\useKV[TraceG]{Ymin};ymax=\useKV[TraceG]{Ymax};pasx=\useKV[TraceG]{Xstep};pasy=\useKV[TraceG]{Ystep};xu=1cm/\useKV[TraceG]{Xstep};yu=1cm/\useKV[TraceG]{Ystep};grillex=\useKV[TraceG]{PasGrilleX};grilley=\useKV[TraceG]{PasGrilleY};pos=\useKV[TraceG]{LabelC};color colortrace;colortrace=\useKV[TraceG]{CouleurTrace};boolean Grille;Grille=\useKV[TraceG]{Grille};boolean Graduations;Graduations=\useKV[TraceG]{Graduations};}] pair Origine; Origine=(xmin,ymin)+\useKV[TraceG]{Origine}; vardef sin(expr t) = sind(c*t) enddef; vardef cos(expr t) = cosd(c*t) enddef; vardef tan(expr t) = sin(t)/cos(t) enddef; vardef exp(expr t) = e**t enddef; vardef ch(expr x)=(exp(x)+exp(-x))/2 enddef; vardef sh(expr x)=(exp(x)-exp(-x))/2 enddef; vardef ln(expr t) = mlog(t)/256 enddef; vardef arcsin(expr x)=%Définition mathématique en radian pi*angle((sqrt(1-x**2),x))/180 enddef; vardef arccos(expr x)=%Définition mathématique en radian pi*angle((x,sqrt(1-x**2)))/180 enddef; path Cb[]; vardef courbe[](expr a,b,nb)(text texte)= path Courbe; for i:=0 upto nb : x@[i]:=(a+i*(b-a)/nb); x:=x@[i]; y@[i]:=texte; endfor ; Cb@:=(x@.0*xu,y@.0*yu) for i:=1 upto nb : ..(x@[i]*xu,y@[i]*yu) endfor; Cb@:=Cb@ shifted (Origine*cm); Courbe=Cb@; Courbe enddef; if Grille: drawoptions(withcolor 0.75white); for k=xpart(Origine) step grillex until xmax: trace u*(k,ymin)--u*(k,ymax); endfor; for k=xpart(Origine) step -grillex until xmin: trace u*(k,ymin)--u*(k,ymax); endfor; for k=ypart(Origine) step grilley until ymax: trace u*(xmin,k)--u*(xmax,k); endfor; for k=ypart(Origine) step -grilley until ymin: trace u*(xmin,k)--u*(xmax,k); endfor; drawoptions(); fi; if Graduations: for k=1 upto xmax/grillex: dotlabel.bot(LATEX("\num{"&decimal(k)&"}"),(k*xu+xpart(Origine*cm),ypart(Origine*cm))); endfor; for k=-1 downto xmin/grillex: dotlabel.bot(LATEX("\num{"&decimal(k)&"}"),(k*xu+xpart(Origine*cm),ypart(Origine*cm))); endfor; for k=1 upto ymax/grilley: dotlabel.lft(LATEX("\num{"&decimal(k)&"}"),(xpart(Origine*cm),k*yu+ypart(Origine*cm))); endfor; for k=-1 downto ymin/grilley: dotlabel.lft(LATEX("\num{"&decimal(k)&"}"),(xpart(Origine*cm),k*yu+ypart(Origine*cm))); endfor; fi; drawoptions(withpen pencircle scaled1.5); drawarrow (u*(0,ymin)--u*(0,ymax)) shifted (u*(xpart(Origine),0)); drawarrow (u*(xmin,0)--u*(xmax,0)) shifted (u*(0,ypart(Origine))); drawoptions(); draw courbe1(borneinf,bornesup,100)(#2) withcolor colortrace; % % labelisation numeric t; t=pos*length Cb1; pair PT,Tangente; PT:=point (pos*length Cb1) of Cb1; Tangente:=unitvector(direction t of Cb1); label(btex \noexpand\useKV[TraceG]{NomCourbe} etex rotated angle(Tangente),PT+2mm*(Tangente rotated 90)); % % fin labelisation clip currentpicture to polygone(u*(xmin,ymin),u*(xmax,ymin),u*(xmax,ymax),u*(xmin,ymax)); label.rt(btex \useKV[TraceG]{LabelX} etex,u*(xmax,ypart(Origine))); label.top(btex \useKV[TraceG]{LabelY} etex,u*(xpart(Origine),ymax)); \end{mpost} \fi } %%% % Formules %%% \setKVdefault[ClesFormule]{Perimetre=false,Aire=false,Volume=false,Surface=carr\'e,Solide=pav\'e,Angle=0,Ancre={(0,0)},Largeur=5cm,Couleur=white} \def\MPFigureCarre{% \ifluatex \mplibforcehmode \begin{mplibcode} drawoptions( dashed dashpattern(on1cm)); pair A,B,C,D; A=u*(1,1); B-A=u*(2,0); C=rotation(A,B,-90); D-C=A-B; draw polygone(A,B,C,D); draw codeperp(A,B,C,5); draw codeperp(B,C,D,5); draw codeperp(C,D,A,5); draw codeperp(D,A,B,5); marque_s:=marque_s/3; draw Codelongueur(A,B,B,C,C,D,D,A,2); marque_s:=marque_s*3; draw appelation(A,B,-3mm,btex $c$ etex); \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] pair A,B,C,D; A=u*(1,1); B-A=u*(2,0); C=rotation(A,B,-90); D-C=A-B; draw polygone(A,B,C,D); draw codeperp(A,B,C,5); draw codeperp(B,C,D,5); draw codeperp(C,D,A,5); draw codeperp(D,A,B,5); marque_s:=marque_s/3; draw Codelongueur(A,B,B,C,C,D,D,A,2); marque_s:=marque_s*3; draw appelation(A,B,-3mm,btex $c$ etex); \end{mpost} \fi } \def\MPFigurePolygone{% \ifluatex \mplibforcehmode \begin{mplibcode} drawoptions( dashed dashpattern(on1cm)); pair A,B,C,D,E,F; A=u*(1,1); B-A=u*(2,0); C=3/5[B,rotation(A,B,-120)]; D-C=u*(0,1); E-D=u*(-1.25,-1); F-E=u*(-1,1); draw polygone(A,B,C,D,E,F); \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] pair A,B,C,D,E,F; A=u*(1,1); B-A=u*(2,0); C=3/5[B,rotation(A,B,-120)]; D-C=u*(0,1); E-D=u*(-1.25,-1); F-E=u*(-1,1); draw polygone(A,B,C,D,E,F); \end{mpost} \fi } \def\MPFigureParallelogramme{% \ifluatex \mplibforcehmode \begin{mplibcode} vardef marque_para(expr dd,ee,pa)= save im; picture im; pair kk,ll,mn,mo; kk=point(pa*length dd) of dd; ll=projection(kk,point(0.25*length ee) of ee,point(0.5*length ee) of ee); mn=iso(kk,ll); mo=(mn--kk) intersectionpoint cercles(mn,3mm); im=image( drawarrow mo--kk; drawarrow symetrie(mo,mn)--ll; label(btex $//$ etex,mn); ); im enddef; drawoptions( dashed dashpattern(on1cm)); Figure(-5u,-5u,5u,5u); pair A,B,C,D; A=u*(1,1); B-A=u*(2.25,0.25); D=4/5[A,rotation(B,A,40)]; C-D=B-A; draw polygone(A,B,C,D); drawoptions(withcolor gris); draw marque_para(droite(A,B),droite(C,D),0.455); draw marque_para(droite(B,C),droite(A,D),0.43); draw segment(B,2.5[C,B]) dashed evenly; draw segment(A,1.5[D,A]) dashed evenly; draw segment(A,1.55[B,A]) dashed evenly; draw segment(D,2[C,D]) dashed evenly; drawoptions(); \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] vardef marque_para(expr dd,ee,pa)= save im; picture im; pair kk,ll,mn,mo; kk=point(pa*length dd) of dd; ll=projection(kk,point(0.25*length ee) of ee,point(0.5*length ee) of ee); mn=iso(kk,ll); mo=(mn--kk) intersectionpoint cercles(mn,3mm); im=image( drawarrow mo--kk; drawarrow symetrie(mo,mn)--ll; label(btex $//$ etex,mn); ); im enddef; Figure(-5u,-5u,5u,5u); pair A,B,C,D; A=u*(1,1); B-A=u*(2.25,0.25); D=4/5[A,rotation(B,A,40)]; C-D=B-A; draw polygone(A,B,C,D); drawoptions(withcolor gris); draw marque_para(droite(A,B),droite(C,D),0.455); draw marque_para(droite(B,C),droite(A,D),0.43); draw segment(B,2.5[C,B]) dashed evenly; draw segment(A,1.5[D,A]) dashed evenly; draw segment(A,1.55[B,A]) dashed evenly; draw segment(D,2[C,D]) dashed evenly; drawoptions(); \end{mpost} \fi } \def\MPFigureParallelogrammeAire{% \ifluatex \mplibforcehmode \begin{mplibcode} drawoptions( dashed dashpattern(on1cm)); Figure(-5u,-5u,10u,5u); pair A,B,C,D,I,J; A=u*(1,1); B-A=u*(2,0.5); D=3/5[A,rotation(B,A,40)]; C-D=B-A; I=projection(D,A,B); draw polygone(A,B,C,D) withcolor gris; draw segment(A,B); draw segment(D,I); draw codeperp(D,I,B,5); A:=A+3*u*(1,0); B:=A+u*(2,0.5); D:=3/5[A,rotation(B,A,40)]; C:=D+B-A; J=projection(B,A,D); draw polygone(A,B,C,D) withcolor gris; draw segment(D,1.5[A,D]) dashed evenly withcolor gris; draw segment(A,D); draw segment(B,J); draw codeperp(B,J,A,5); \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] Figure(-5u,-5u,10u,5u); pair A,B,C,D,I,J; A=u*(1,1); B-A=u*(2,0.5); D=3/5[A,rotation(B,A,40)]; C-D=B-A; I=projection(D,A,B); draw polygone(A,B,C,D) withcolor gris; draw segment(A,B); draw segment(D,I); draw codeperp(D,I,B,5); A:=A+3*u*(1,0); B:=A+u*(2,0.5); D:=3/5[A,rotation(B,A,40)]; C:=D+B-A; J=projection(B,A,D); draw polygone(A,B,C,D) withcolor gris; draw segment(D,1.5[A,D]) dashed evenly withcolor gris; draw segment(A,D); draw segment(B,J); draw codeperp(B,J,A,5); \end{mpost} \fi } \def\MPFigureSphere{% \ifluatex \mplibforcehmode \begin{mplibcode} drawoptions( dashed dashpattern(on1cm)); typetrace:="3D"; Figure(-10u,-10u,10u,10u); Initialisation(5,0,10,500); color O,A,B,C; O=(0,0,0); A-O=(0,1/2,0); C-O=(-1/2,0,0); B-O=(0,0,1/2); path cc,cd; cc=cercles(O,A,O,A,C); cd=cercles(O,A,O,A,B); draw cd; draw (subpath(0,length cc/2) of cc) dashed evenly; draw subpath(length cc/2,length cc) of cc; draw cotationmil(O,A,0,18,btex rayon $r$ etex); marque_p:="plein"; pointe(O); marque_p:="non"; \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] typetrace:="3D"; Figure(-10u,-10u,10u,10u); Initialisation(5,0,10,500); color O,A,B,C; O=(0,0,0); A-O=(0,1/2,0); C-O=(-1/2,0,0); B-O=(0,0,1/2); path cc,cd; cc=cercles(O,A,O,A,C); cd=cercles(O,A,O,A,B); draw cd; draw (subpath(0,length cc/2) of cc) dashed evenly; draw subpath(length cc/2,length cc) of cc; draw cotationmil(O,A,0,18,btex rayon $r$ etex); marque_p:="plein"; pointe(O); marque_p:="non"; \end{mpost} \fi } \def\MPFigurePave{% \ifluatex \mplibforcehmode \begin{mplibcode} drawoptions( dashed dashpattern(on1cm)); typetrace:="3D"; typerepre:="persp"; Figure(-10u,-10u,10u,10u); Initialisation(5,30,20,115); color A,B,C,D,E,F,G,H; draw Pave(A,B,C,D,E,F,G,H)(0.5,1,1/3) withcolor gris; draw segment(A,B); draw segment(E,F); draw segment(A,F); draw appelation(A,B,-2mm,btex $\ell$ etex); draw appelation(F,E,2mm,btex $p$ etex); draw appelation(A,F,2mm,btex $h$ etex); \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] typetrace:="3D"; typerepre:="persp"; Figure(-10u,-10u,10u,10u); Initialisation(5,30,20,115); color A,B,C,D,E,F,G,H; draw Pave(A,B,C,D,E,F,G,H)(0.5,1,1/3) withcolor gris; draw segment(A,B); draw segment(E,F); draw segment(A,F); draw appelation(A,B,-2mm,\btex $\ell$ etex); draw appelation(F,E,2mm,\btex $p$ etex); draw appelation(A,F,2mm,\btex $h$ etex); \end{mpost} \fi } \def\MPFigurePrisme{% \ifluatex \mplibforcehmode \begin{mplibcode} drawoptions( dashed dashpattern(on1cm)); typetrace:="3D"; typerepre:="persp"; Figure(-10u,-10u,10u,10u); Initialisation(5,30,20,115); color A,B,C,D,E,F,G,H; D=(0.75,0,0); G=(0,1,0); H=(0,0,0); A-D=(0,0,0.5); C-D=G-H; E-H=A-D; F-E=(0,0.6,0); B-A=F-E; NbS:=8; Sommet1:=A; Sommet2:=B; Sommet3:=C; Sommet4:=D; Sommet5:=E; Sommet6:=F; Sommet7:=G; Sommet8:=H; NF:=6; Fc[100]:=4;Fc[101]:=1;Fc[102]:=4;Fc[103]:=3;Fc[104]:=2; Fc[200]:=4;Fc[201]:=4;Fc[202]:=1;Fc[203]:=5;Fc[204]:=8; Fc[300]:=4;Fc[301]:=4;Fc[302]:=8;Fc[303]:=7;Fc[304]:=3; Fc[400]:=4;Fc[401]:=8;Fc[402]:=5;Fc[403]:=6;Fc[404]:=7; Fc[500]:=4;Fc[501]:=1;Fc[502]:=2;Fc[503]:=6;Fc[504]:=5; Fc[600]:=4;Fc[601]:=2;Fc[602]:=3;Fc[603]:=7;Fc[604]:=6; CoulTrace:=gris; DessineObjet; drawoptions(withcolor gris); draw codeperp(B,A,E,5); draw codeperp(A,B,F,5); draw codeperp(H,D,C,5); draw codeperp(D,C,G,5); drawoptions(); draw polygone(A,B,C,D); draw hachurage(polygone(A,B,C,D),60,0.3,0); draw segment(A,E); draw appelation(A,E,3mm,btex hauteur etex); \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] typetrace:="3D"; typerepre:="persp"; Figure(-10u,-10u,10u,10u); Initialisation(5,30,20,115); color A,B,C,D,E,F,G,H; D=(0.75,0,0); G=(0,1,0); H=(0,0,0); A-D=(0,0,0.5); C-D=G-H; E-H=A-D; F-E=(0,0.6,0); B-A=F-E; NbS:=8; Sommet1:=A; Sommet2:=B; Sommet3:=C; Sommet4:=D; Sommet5:=E; Sommet6:=F; Sommet7:=G; Sommet8:=H; NF:=6; Fc[100]:=4;Fc[101]:=1;Fc[102]:=4;Fc[103]:=3;Fc[104]:=2; Fc[200]:=4;Fc[201]:=4;Fc[202]:=1;Fc[203]:=5;Fc[204]:=8; Fc[300]:=4;Fc[301]:=4;Fc[302]:=8;Fc[303]:=7;Fc[304]:=3; Fc[400]:=4;Fc[401]:=8;Fc[402]:=5;Fc[403]:=6;Fc[404]:=7; Fc[500]:=4;Fc[501]:=1;Fc[502]:=2;Fc[503]:=6;Fc[504]:=5; Fc[600]:=4;Fc[601]:=2;Fc[602]:=3;Fc[603]:=7;Fc[604]:=6; CoulTrace:=gris; DessineObjet; drawoptions(withcolor gris); draw codeperp(B,A,E,5); draw codeperp(A,B,F,5); draw codeperp(H,D,C,5); draw codeperp(D,C,G,5); drawoptions(); draw polygone(A,B,C,D); draw hachurage(polygone(A,B,C,D),60,0.3,0); draw segment(A,E); draw appelation(A,E,3mm,btex hauteur etex); \end{mpost} \fi } \def\MPFigureCylindre{% \ifluatex \mplibforcehmode \begin{mplibcode} drawoptions( dashed dashpattern(on1cm)); typetrace:="3D"; typerepre:="persp"; Figure(-10u,-10u,10u,10u); Initialisation(5,0,20,70); color O,O',A,A',B,B',C,C'; O=(0,0,0); O'-O=(0,0,1); A-O=(0,1,0); A'-A=O'-O; C=symetrie(A,O); C'-C=O'-O; B-O=(-1/2,0,0); B'-B=O'-O; path cc,cd; cc=cercles(O,A,O,A,B); cd=cercles(O',A',O',A',B'); draw cd; draw segment(C,C'); draw segment(A,A'); draw (subpath(0,length cc/2) of cc) dashed evenly; draw subpath(length cc/2,length cc) of cc; draw segment(O,A); draw cotationmil(C,C',3mm,25,btex hauteur $h$ etex); draw appelation(O,A,2mm,btex rayon $r$ etex); marque_p:="croix"; pointe(O); marque_p:="non"; \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] typetrace:="3D"; typerepre:="persp"; Figure(-10u,-10u,10u,10u); Initialisation(5,0,20,70); color O,O',A,A',B,B',C,C'; O=(0,0,0); O'-O=(0,0,1); A-O=(0,1,0); A'-A=O'-O; C=symetrie(A,O); C'-C=O'-O; B-O=(-1/2,0,0); B'-B=O'-O; path cc,cd; cc=cercles(O,A,O,A,B); cd=cercles(O',A',O',A',B'); draw cd; draw segment(C,C'); draw segment(A,A'); draw (subpath(0,length cc/2) of cc) dashed evenly; draw subpath(length cc/2,length cc) of cc; draw segment(O,A); draw cotationmil(C,C',3mm,25,btex hauteur $h$ etex); draw appelation(O,A,2mm,btex rayon $r$ etex); marque_p:="croix"; pointe(O); marque_p:="non"; \end{mpost} \fi } \def\MPFigureCone{% \ifluatex \mplibforcehmode \begin{mplibcode} drawoptions( dashed dashpattern(on1cm)); typetrace:="3D"; typerepre:="persp"; Figure(-10u,-10u,10u,10u); Initialisation(5,0,10,70); color O,O',A,B,C; O=(0,0,0); O'-O=(0,0,1.5); A-O=(0,1,0); C=symetrie(A,O); B-O=(-1/2,0,0); path cc; cc=cercles(O,A,O,A,B); draw chemin(C,O',A); draw (subpath(0,length cc/2) of cc) dashed evenly; draw subpath(length cc/2,length cc) of cc; draw chemin(O',O,A); draw appelation(O,O',2mm,btex hauteur etex); draw appelation(O,A,1mm,btex rayon $r$ etex); marque_p:="croix"; pointe(O); marque_p:="non"; \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] typetrace:="3D"; typerepre:="persp"; Figure(-10u,-10u,10u,10u); Initialisation(5,0,10,70); color O,O',A,B,C; O=(0,0,0); O'-O=(0,0,1.5); A-O=(0,1,0); C=symetrie(A,O); B-O=(-1/2,0,0); path cc; cc=cercles(O,A,O,A,B); draw chemin(C,O',A); draw (subpath(0,length cc/2) of cc) dashed evenly; draw subpath(length cc/2,length cc) of cc; draw chemin(O',O,A); draw appelation(O,O',2mm,btex hauteur etex); draw appelation(O,A,1mm,btex rayon $r$ etex); marque_p:="croix"; pointe(O); marque_p:="non"; \end{mpost} \fi } \def\MPFigurePyramide{% \ifluatex \mplibforcehmode \begin{mplibcode} drawoptions( dashed dashpattern(on1cm)); u:=0.5cm; z0=(-0.5,0)*u; z1=(2.5,0.5)*u; z2=(4,2)*u; z3=(-0.5,2.75)*u; z4=(-3,1.5)*u; z5=(0.5,6)*u; z6=(0.5,1.5)*u; z7=z6 shifted (5u,0); draw z5--z0 withcolor gris; draw z5--z1 withcolor gris; draw z5--z2 withcolor gris; draw z5--z4 withcolor gris; draw z5--z3 dashed evenly withcolor gris; draw hachurage(polygone(z4,z0,z1,z2,z3,z4),60,0.4,0); remplis codeperp(z7,z6,z5,8)--z6--cycle withcolor white; draw z4--z0--z1--z2; draw z2--z3--z4 dashed evenly; draw z5--z6 dashed evenly; draw codeperp(z7,z6,z5,8); \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] Figure(-10u,-10u,10u,10u); u:=0.5cm; z0=(-0.5,0)*u; z1=(2.5,0.5)*u; z2=(4,2)*u; z3=(-0.5,2.75)*u; z4=(-3,1.5)*u; z5=(0.5,6)*u; z6=(0.5,1.5)*u; z7=z6 shifted (5u,0); draw z5--z0 withcolor gris; draw z5--z1 withcolor gris; draw z5--z2 withcolor gris; draw z5--z4 withcolor gris; draw z5--z3 dashed evenly withcolor gris; draw hachurage(polygone(z4,z0,z1,z2,z3,z4),60,0.4,0); remplis codeperp(z7,z6,z5,8)--z6--cycle withcolor white; draw z4--z0--z1--z2; draw z2--z3--z4 dashed evenly; draw z5--z6 dashed evenly; draw codeperp(z7,z6,z5,8); \end{mpost} \fi } \def\MPFigureCube{% \ifluatex \mplibforcehmode \begin{mplibcode} drawoptions( dashed dashpattern(on1cm)); typetrace:="3D"; typerepre:="persp"; Figure(-10u,-10u,10u,10u); Initialisation(5,30,20,80); color A,B,C,D,E,F,G,H; draw Cube(A,B,C,D,E,F,G,H) withcolor gris; draw segment(E,H); draw appelation(E,H,2mm,btex $a$ etex); \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] typetrace:="3D"; typerepre:="persp"; Figure(-10u,-10u,10u,10u); Initialisation(5,30,20,80); color A,B,C,D,E,F,G,H; draw Cube(A,B,C,D,E,F,G,H) withcolor gris; draw segment(E,H); draw appelation(E,H,2mm,btex $a$ etex); \end{mpost} \fi } \def\MPFigureLosange{% \ifluatex \mplibforcehmode \begin{mplibcode} drawoptions( dashed dashpattern(on1cm)); Figure(-5u,-5u,5u,5u); pair A,B,C,D; A=u*(1,1); B-A=u*(2,0.5); D=rotation(B,A,40); C-D=B-A; draw polygone(A,B,C,D); marque_s:=marque_s/3; draw Codelongueur(A,B,B,C,C,D,D,A,2); marque_s:=marque_s*3; draw appelation(A,B,-3mm,btex $c$ etex); \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] Figure(-5u,-5u,5u,5u); pair A,B,C,D; A=u*(1,1); B-A=u*(2,0.5); D=rotation(B,A,40); C-D=B-A; draw polygone(A,B,C,D); marque_s:=marque_s/3; draw Codelongueur(A,B,B,C,C,D,D,A,2); marque_s:=marque_s*3; draw appelation(A,B,-3mm,btex $c$ etex); \end{mpost} \fi } \def\MPFigureLosangeAire{% \ifluatex \mplibforcehmode \begin{mplibcode} drawoptions( dashed dashpattern(on1cm)); Figure(-5u,-5u,5u,5u); pair A,B,C,D; A=u*(1,1); B-A=u*(2,0.5); D=rotation(B,A,40); C-D=B-A; draw polygone(A,B,C,D) withcolor gris; draw segment(A,C); draw segment(B,D); marque_s:=marque_s/3; draw Codelongueur(A,B,B,C,C,D,D,A,2); marque_s:=marque_s*3; \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] Figure(-5u,-5u,5u,5u); pair A,B,C,D; A=u*(1,1); B-A=u*(2,0.5); D=rotation(B,A,40); C-D=B-A; draw polygone(A,B,C,D) withcolor gris; draw segment(A,C); draw segment(B,D); marque_s:=marque_s/3; draw Codelongueur(A,B,B,C,C,D,D,A,2); marque_s:=marque_s*3; \end{mpost} \fi } \def\MPFigureRectangle{% \ifluatex \mplibforcehmode \begin{mplibcode} drawoptions( dashed dashpattern(on1cm)); pair A,B,C,D; A=u*(1,1); B-A=u*(3,0); C=2/3[B,rotation(A,B,-90)]; D-C=A-B; draw polygone(A,B,C,D); draw codeperp(A,B,C,5); draw codeperp(B,C,D,5); draw codeperp(C,D,A,5); draw codeperp(D,A,B,5); marque_s:=marque_s/3; draw Codelongueur(A,B,C,D,2); draw Codelongueur(A,D,C,B,5); marque_s:=marque_s*3; draw appelation(A,B,-3mm,btex $L$ etex); label.lft(btex $\ell$ etex,iso(A,D)); \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] pair A,B,C,D; A=u*(1,1); B-A=u*(3,0); C=2/3[B,rotation(A,B,-90)]; D-C=A-B; draw polygone(A,B,C,D); draw codeperp(A,B,C,5); draw codeperp(B,C,D,5); draw codeperp(C,D,A,5); draw codeperp(D,A,B,5); marque_s:=marque_s/3; draw Codelongueur(A,B,C,D,2); draw Codelongueur(A,D,C,B,5); marque_s:=marque_s*3; draw appelation(A,B,-3mm,btex $L$ etex); label.lft(btex $\ell$ etex,iso(A,D)); \end{mpost} \fi } \def\MPFigureTriangle{% \ifluatex \mplibforcehmode \begin{mplibcode} drawoptions( dashed dashpattern(on1cm)); Figure(-5u,-5u,5u,5u); pair A,B,C; A=u*(1,1); B-A=u*(3,0); C=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45)); draw polygone(A,B,C); \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] Figure(-5u,-5u,5u,5u); pair A,B,C; A=u*(1,1); B-A=u*(3,0); C=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45)); draw polygone(A,B,C); \end{mpost} \fi } \def\MPFigureCercle{% \ifluatex \mplibforcehmode \begin{mplibcode} drawoptions( dashed dashpattern(on1cm)); Figure(-5u,-5u,5u,5u); pair A,B,C; A=u*(2.5,2.5); path cc; cc=cercles(A,1.25u); B=pointarc(cc,195); C=symetrie(B,A); draw cc withcolor gris; draw segment(B,C); marque_p:="croix"; pointe(A); draw appelation(B,C,3mm,btex diam\`etre etex); \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] Figure(-5u,-5u,5u,5u); pair A,B,C; A=u*(2.5,2.5); path cc; cc=cercles(A,1.25u); B=pointarc(cc,195); C=symetrie(B,A); draw cc withcolor gris; draw segment(B,C); marque_p:="croix"; pointe(A); draw appelation(B,C,3mm,\btex diam\`etre etex); \end{mpost} \fi } \def\MPFigureDisque{% \ifluatex \mplibforcehmode \begin{mplibcode} drawoptions( dashed dashpattern(on1cm)); Figure(-5u,-5u,5u,5u); pair A,B,C; A=u*(2.5,2.5); path cc; cc=cercles(A,1.25u); B=pointarc(cc,195); C=symetrie(B,A); draw cc withcolor gris; draw segment(A,C); marque_p:="croix"; pointe(A); draw appelation(A,C,3mm,btex rayon $r$ etex); \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] Figure(-5u,-5u,5u,5u); pair A,B,C; A=u*(2.5,2.5); path cc; cc=cercles(A,1.25u); B=pointarc(cc,195); C=symetrie(B,A); draw cc withcolor gris; draw segment(A,C); marque_p:="croix"; pointe(A); draw appelation(A,C,3mm,\btex rayon $r$ etex); \end{mpost} \fi } \def\MPFigureTriangleAire{% \ifluatex \mplibforcehmode \begin{mplibcode} drawoptions( dashed dashpattern(on1cm)); pair A,B,C,H,I,J; A=u*(0.5,1); B-A=u*(1.4,0); C=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45)); H=projection(C,A,B); I=projection(A,B,C); J=projection(B,C,A); draw polygone(A,B,C) withcolor gris; drawoptions(); draw segment(C,H); draw segment(A,B); draw codeperp(C,H,B,5); drawoptions(); A:=A+u*(2.5,0); B:=A+u*(1.4,0); C:=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45)); I:=projection(A,B,C); J:=projection(B,C,A); draw polygone(A,B,C) withcolor gris; drawoptions(); draw segment(A,I); draw segment(C,B); draw codeperp(A,I,B,5); drawoptions(); A:=A-u*(1.25,1); B:=A+u*(1.4,0); C:=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45)); J:=projection(B,C,A); draw polygone(A,B,C) withcolor gris; drawoptions(); draw segment(B,J); draw segment(C,A); draw codeperp(B,J,C,5); drawoptions(); \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] Figure(-5u,-5u,5u,5u); pair A,B,C,H,I,J; A=u*(0.5,1); B-A=u*(1.4,0); C=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45)); H=projection(C,A,B); I=projection(A,B,C); J=projection(B,C,A); draw polygone(A,B,C) withcolor gris; drawoptions(); draw segment(C,H); draw segment(A,B); draw codeperp(C,H,B,5); drawoptions(); A:=A+u*(2.5,0); B:=A+u*(1.4,0); C:=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45)); I:=projection(A,B,C); J:=projection(B,C,A); draw polygone(A,B,C) withcolor gris; drawoptions(); draw segment(A,I); draw segment(C,B); draw codeperp(A,I,B,5); drawoptions(); A:=A-u*(1.25,1); B:=A+u*(1.4,0); C:=demidroite(A,rotation(B,A,60)) intersectionpoint demidroite(B,rotation(A,B,-45)); J:=projection(B,C,A); draw polygone(A,B,C) withcolor gris; drawoptions(); draw segment(B,J); draw segment(C,A); draw codeperp(B,J,C,5); drawoptions(); \end{mpost} \fi } \newcommand\Formule[1][]{% \useKVdefault[ClesFormule]% \setKV[ClesFormule]{#1}% \setlength{\RoundedBoxWidth}{\useKV[ClesFormule]{Largeur}}% \xdef\ColorFill{\useKV[ClesFormule]{Couleur}}% \ifboolKV[ClesFormule]{Perimetre}{% \begin{tikzpicture}[remember picture, overlay] \node[draw,fill=\ColorFill,dashed,rounded corners,rotate={\useKV[ClesFormule]{Angle}}] (test) at \useKV[ClesFormule]{Ancre} {\begin{minipage}{\RoundedBoxWidth}% \IfStrEqCase{\useKV[ClesFormule]{Surface}}{% {carre}{\begin{center} \MPFigureCarre\par P\'erim\`etre d'un carr\'e :\par$4\times c$ \end{center}}% {polygone}{% \begin{center} \MPFigurePolygone\par P\'erim\`etre d'un polygone : \par$\text{Somme des c\^ot\'es}$ \end{center} }% {rectangle}{% \begin{center} \MPFigureRectangle\par P\'erim\`etre d'un rectangle : \par$2\times(L+\ell)$ \end{center} }% {losange}{% \begin{center} \MPFigureLosange\par P\'erim\`etre d'un losange : \par$4\times c$ \end{center} }% {triangle}{% \begin{center} \MPFigureTriangle\par P\'erim\`etre d'un triangle : \par Somme des c\^ot\'es \end{center} }% {cercle}{% \begin{center} \MPFigureCercle\par P\'erim\`etre d'un cercle : \par$\pi\times\text{diam\`etre}$ \end{center} }% {parallelogramme}{% \begin{center} \MPFigureParallelogramme\par P\'erim\`etre d'un parall\'elogramme : \par Somme des c\^ot\'es \end{center} }} \end{minipage}}; \end{tikzpicture} }{\ifboolKV[ClesFormule]{Aire}{% \begin{tikzpicture}[remember picture, overlay] \node[draw,fill=\ColorFill,dashed,rounded corners=2,rotate={\useKV[ClesFormule]{Angle}}] (test) at \useKV[ClesFormule]{Ancre} {\begin{minipage}{\RoundedBoxWidth}% \IfStrEqCase{\useKV[ClesFormule]{Surface}}{% {carr\'e}{\begin{center} \MPFigureCarre\par Aire d'un carr\'e :\par$c\times c$ \end{center}}% {rectangle}{% \begin{center} \MPFigureRectangle\par Aire d'un rectangle :\par$L\times\ell$ \end{center} }% {losange}{% \begin{center} \MPFigureLosangeAire\par Aire d'un losange :\par$\dfrac{\text{grande diagonale}\times\text{petite diagonale}}{2}$ \end{center} }% {triangle}{% \begin{center} \MPFigureTriangleAire\par\vspace{1em}\par Aire d'un triangle : $\displaystyle\frac{\text{c\^ot\'e}\times\text{hauteur relative \`a ce c\^ot\'e}}{2}$ \end{center} }% {disque}{% \begin{center} \MPFigureDisque\par Aire d'un disque :\par$\pi\times r\times r$ \end{center} }% {parallelogramme}{% \begin{center} \MPFigureParallelogrammeAire\par Aire d'un parall\'elogramme : $\text{c\^ot\'e}\times\text{hauteur relative \`a ce c\^ot\'e}$ \end{center} } {sphere}{% \begin{center} \MPFigureSphere\par Aire d'une sph\`ere : $4\times\pi\times r^2$ \end{center} }} \end{minipage}}; \end{tikzpicture} }{%Volume \begin{tikzpicture}[remember picture, overlay] \node[draw,fill=\ColorFill,dashed,rounded corners=2,rotate={\useKV[ClesFormule]{Angle}}] (test) at \useKV[ClesFormule]{Ancre} {\begin{minipage}{\RoundedBoxWidth}% \IfStrEqCase{\useKV[ClesFormule]{Solide}}{% {boule}{\begin{center} \MPFigureSphere\par Volume d'une boule : $\dfrac{4\times\pi\times r^3}{3}$ \end{center}}% {cube}{% \begin{center} \MPFigureCube\par Volume d'une cube : $a^3\quad(a\times a\times a)$ \end{center} }% {pave}{% \begin{center} \MPFigurePave\par Volume d'un pav\'e droit : $\ell\times h\times p$ \end{center} } {prisme}{% \begin{center} \MPFigurePrisme\par Volume d'un prisme droit : $\text{Aire de la base}\times\mbox{hauteur}$ \end{center} } {cylindre}{% \begin{center} \MPFigureCylindre\par Volume d'un cylindre de r\'evolution : $\pi\times r^2\times h$ \end{center} } {pyramide}{% \begin{center} \MPFigurePyramide\par Volume d'une pyramide : $\dfrac{\text{Aire de la base}\times\text{hauteur}}{3}$ \end{center} } {cone}{% \begin{center} \MPFigureCone\par Volume d'un c\^one de r\'evolution : $\displaystyle\dfrac{\pi\times r^2\times h}{3}$ \end{center} } } \end{minipage}}; \end{tikzpicture} } } } %%% % Proba %%% \setKVdefault[ClesProba]{Echelle=false,Arbre=false,Branche=2,Angle=60,Rayon=0.25,LongueurEchelle=5,Affichage=0,Grille=1} \def\Updatetoksproba#1/#2\nil{\addtotok\toklistepointproba{"#1","\footnotesize #2",}} \def\Updatetoksprobaechelle#1/#2/#3\nil{\addtotok\toklistepointproba{#1,#2,"#3",}} \newtoks\toklistepointproba % Pour construire l'arbre de probabilit\'e \def\buildarbreproba{% \toklistepointproba{}% \foreachitem\compteur\in\ListeProba{\expandafter\Updatetoksproba\compteur\nil}% \MPArbreProba{\useKV[ClesProba]{Branche}}{\useKV[ClesProba]{Angle}}{\the\toklistepointproba}{\useKV[ClesProba]{Rayon}}% } % Pour construire l'\'echelle de probabilit\'e \def\buildechelleproba{% \toklistepointproba{}% \foreachitem\compteur\in\ListeProba{\expandafter\Updatetoksprobaechelle\compteur\nil}% \MPEchelleProbaUn{\useKV[ClesProba]{LongueurEchelle}}{\the\toklistepointproba}{\useKV[ClesProba]{Affichage}}{\useKV[ClesProba]{Grille}}% } \def\MPEchelleProbaUn#1#2#3#4{% % #1:longueur du segment repr\'esentant l'\'echelle % #2:Liste des \'ev\`enements/proba % #3: pour l'affichage des labels (0 : rien, 1: fleches, 2 : fleches+ev\`enements, 3: fleches+proba, 4 : tout) % #4 : dimension de "la grille" associ\'ee \ifluatex \begin{mplibcode} pair A,B,C[],D[];%les noeuds de l'arbre Figure(-10u,-10u,10u,10u); A=u*(1,1); B-A=u*(#1,0); draw segment(A,B); draw marquesegment(A,B); marque_s:=marque_s/2; if #4>1: for k=0 upto (#4-1): D[k]=(k/#4)[A,B]; endfor; if (#4 mod 2)=0: for k=0 step 2 until (#4-1): draw marquesegment(D[k],D[k+1]); endfor; else: for k=1 step 2 until (#4-1): draw marquesegment(D[k],D[k+1]); endfor; fi; fi; marque_s:=marque_s*2; labeloffset:=labeloffset*3; label.bot(btex 0 etex,A); label.bot(btex 1 etex,B); labeloffset:=labeloffset/3; n:=1;%compter les informations k:=1;% compter les informations noeud pour les placer vardef toto(text t)= for p_=t: if (n mod 3)=1: num:=p_; fi; if (n mod 3)=2: deno:=p_; fi; if (n mod 3=0): C[k]=(num/deno)[A,B]; if (#3>0): drawarrow (C[k]-u*(0,0.5))--(C[k]-u*(0,0.15)); fi; if (#3=2) or (#3=4): dotlabel.top(TEX(p_),C[k]); fi; if (#3=1) or (#3=3): dotlabel.top("",C[k]); fi; if (#3>2): label.bot(TEX("$\frac{"&decimal(num)&"}{"&decimal(deno)&"}$"),C[k]-u*(0,0.5)); fi; k:=k+1; fi; n:=n+1; endfor; enddef; toto(#2); \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] pair A,B,C[],D[];%les noeuds de l'arbre Figure(-10u,-10u,10u,10u); A=u*(1,1); B-A=u*(#1,0); draw segment(A,B); draw marquesegment(A,B); marque_s:=marque_s/2; if #4>1: for k=0 upto (#4-1): D[k]=(k/#4)[A,B]; endfor; if (#4 mod 2)=0: for k=0 step 2 until (#4-1): draw marquesegment(D[k],D[k+1]); endfor; else: for k=1 step 2 until (#4-1): draw marquesegment(D[k],D[k+1]); endfor; fi; fi; marque_s:=marque_s*2; labeloffset:=labeloffset*3; label.bot(btex 0 etex,A); label.bot(btex 1 etex,B); labeloffset:=labeloffset/3; n:=1;%compter les informations k:=1;% compter les informations noeud pour les placer vardef toto(text t)= for p_=t: if (n mod 3)=1: num:=p_; fi; if (n mod 3)=2: deno:=p_; fi; if (n mod 3=0): C[k]=(num/deno)[A,B]; if (#3>0): drawarrow (C[k]-u*(0,0.5))--(C[k]-u*(0,0.15)); fi; if (#3=2) or (#3=4): dotlabel.top(LATEX(p_),C[k]); fi; if (#3=1) or (#3=3): dotlabel.top("",C[k]); fi; if (#3>2): label.bot(LATEX("$\noexpand\frac{"&decimal(num)&"}{"&decimal(deno)&"}$"),C[k]-u*(0,0.5));%Le \noexpand est n\'ecessaire pour \'eviter un probl\`eme \`a la compilation, dû \`a l'expansion du \frac par gmp. fi; k:=k+1; fi; n:=n+1; endfor; enddef; toto(#2); \end{mpost} \fi } \def\MPArbreProba#1#2#3#4{% % #1:longueur d'une branche % #2:angle entre deux branches de m\^eme origine % #3:Liste des \'ev\`enements/proba \ifluatex \begin{mplibcode} pair A[],B[];%les noeuds de l'arbre Figure(-10u,-10u,10u,10u); A0=u*(1,1); B0-A0=u*(#1,0); A1=rotation(B0,A0,#2/2); A2=rotation(B0,A0,-#2/2); B1-A1=B0-A0; A3=rotation(B1,A1,#2/3); A4=rotation(B1,A1,-#2/3); B2-A2=B0-A0; A5=rotation(B2,A2,#2/3); A6=rotation(B2,A2,-#2/3); draw segment(A4,A1); draw segment(A5,A2); draw chemin(A3,A1,A0,A2,A6); for k=1 upto 6: fill cercles(A[k],#4*cm) withcolor white; endfor; n:=1;%compter les informations k:=1;% compter les informations noeud pour les placer l:=1;% compter les informations "num\'eriques" vardef toto(text t)= for p_=t: if (n mod 2)=1: if p_<>"": label(TEX(p_),A[k]); fi; k:=k+1; else: if (l mod 2)=1: if p_<>"": draw appelation(A[(l-1) div 2],A[l],4mm,TEX(p_)); fi; else: if p_<>"": draw appelation(A[(l-1) div 2],A[l],-4mm,TEX(p_)); fi; fi; l:=l+1; fi; n:=n+1; endfor; enddef; toto(#3); \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] pair A[],B[];%les noeuds de l'arbre Figure(-10u,-10u,10u,10u); A0=u*(1,1); B0-A0=u*(#1,0); A1=rotation(B0,A0,#2/2); A2=rotation(B0,A0,-#2/2); B1-A1=B0-A0; A3=rotation(B1,A1,#2/3); A4=rotation(B1,A1,-#2/3); B2-A2=B0-A0; A5=rotation(B2,A2,#2/3); A6=rotation(B2,A2,-#2/3); draw segment(A4,A1); draw segment(A5,A2); draw chemin(A3,A1,A0,A2,A6); for k=1 upto 6: fill cercles(A[k],#4*cm) withcolor white; endfor; n:=1;%compter les informations k:=1;% compter les informations noeud pour les placer l:=1;% compter les informations "num\'eriques" vardef toto(text t)= for p_=t: if (n mod 2)=1: label(LATEX(p_),A[k]); k:=k+1; else: if (l mod 2)=1: draw appelation(A[(l-1) div 2],A[l],4mm,LATEX(p_)); else: draw appelation(A[(l-1) div 2],A[l],-4mm,LATEX(p_)); fi; l:=l+1; fi; n:=n+1; endfor; enddef; toto(#3); \end{mpost} \fi } \newcommand\Proba[2][]{% \useKVdefault[ClesProba]% \setKV[ClesProba]{#1}% % On liste les diff\'erents \'el\'ements sous la forme Ev\`enement/proba \setsepchar[*]{,*/}\ignoreemptyitems% \readlist*\ListeProba{#2} \ifboolKV[ClesProba]{Echelle}{% \buildechelleproba% }{\ifboolKV[ClesProba]{Arbre}{% \buildarbreproba% }{} } } %%% % Reperage %%% \setKVdefault[ClesReperage]{Unitex=1,Pasx=1,Unitey=1,Pasy=1,Unitez=1,Pasz=1,DemiDroite=false,Droite=false,Plan=false,Trace=false,ListeSegment={},Espace=false,Sphere=false,AnglePhi=30,CouleurLa=white,CouleurLon=Tomato,AffichageNom=false,AffichageGrad=false,AffichageAbs=0,AffichageCoord=false,LectureCoord=false,ValeurUnitex=1,ValeurUnitey=1,ValeurOrigine=0,NomOrigine=O,EchelleEspace=50,CouleurCoord=black} % ValeurOrigine permet de faire des morceaux de demi-droite gradu\'ee en passant par droite :) \def\Updatetoksdroite#1/#2\nil{\addtotok\toklistepointdroite{#1,"#2",}} \def\Updatetoksrepere#1/#2/#3\nil{\addtotok\toklistepointrepere{#1,#2,"#3",}} \def\Updatetoksespace#1/#2/#3/#4\nil{\addtotok\toklistepointespace{#1,#2,#3,"#4",}} \newtoks\toklistepointrepere% \newtoks\toklistepointdroite% \newtoks\toklistepointespace% % Pour construire le rep\`ere de l'espace \def\buildespace{% \toklistepointespace{}% \ifboolKV[ClesReperage]{Sphere}{% \foreachitem\compteur\in\ListePointEspace{\expandafter\Updatetoksrepere\compteur\nil}% \[\MPEspaceSphere{\the\toklistepointrepere}{\useKV[ClesReperage]{EchelleEspace}}\] }{% \foreachitem\compteur\in\ListePointEspace{\expandafter\Updatetoksespace\compteur\nil}% \ifboolKV[ClesReperage]{AffichageNom}{% \ifboolKV[ClesReperage]{AffichageCoord}{% \[\MPEspacePave{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\useKV[ClesReperage]{Unitez}}{\useKV[ClesReperage]{Pasz}}{\the\toklistepointespace}{3}{\useKV[ClesReperage]{EchelleEspace}}\]% }{% \[\MPEspacePave{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\useKV[ClesReperage]{Unitez}}{\useKV[ClesReperage]{Pasz}}{\the\toklistepointespace}{2}{\useKV[ClesReperage]{EchelleEspace}}\]% }% }{% \ifboolKV[ClesReperage]{AffichageCoord}{% \[\MPEspacePave{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\useKV[ClesReperage]{Unitez}}{\useKV[ClesReperage]{Pasz}}{\the\toklistepointespace}{1}{\useKV[ClesReperage]{EchelleEspace}}\]% }{% \[\MPEspacePave{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\useKV[ClesReperage]{Unitez}}{\useKV[ClesReperage]{Pasz}}{\the\toklistepointespace}{0}{\useKV[ClesReperage]{EchelleEspace}}\]% }% }% }% }% \def\MPEspaceSphere#1#2{% \ifluatex \begin{mplibcode} typetrace:="3D"; typerepre:="persp"; anglephi:=\useKV[ClesReperage]{AnglePhi}; Initialisation(1500,anglephi,10,#2); color O,A,B,C,D,Z,M[]; O=(0,0,0); A=(cosd(anglephi+90),sind(anglephi+90),0); B=(cosd(anglephi+180),sind(anglephi+180),0); C=(1,0,0); D=(0,1,0); Z=(0,0,1); trace cercles(O,A,O,A,Z) withcolor 0.7white; path Equateur; Equateur=cercles(O,C,O,C,D); trace (subpath((0.25+anglephi/360)*length Equateur,(0.75+anglephi/360)*length Equateur) of Equateur) dashed evenly withcolor 0.7white; trace (subpath((0.75+anglephi/360)*length Equateur,(1.25+anglephi/360)*length Equateur) of Equateur) withcolor 0.7white; path greenwich; greenwich=cercles(O,C,O,C,Z); trace subpath(3*length greenwich/4,5*length greenwich/4) of greenwich withcolor 0.7white; clip currentpicture to cercles(O,A,O,A,Z); trace chemin(C,O,Z) dashed evenly withcolor 0.85white; trace chemin(O,2[Z,O]) dashed evenly withcolor 0.85white; vardef toto(text t)= n:=1; for p_=t: if (n mod 3)=1: k:=p_; fi; if (n mod 3)=2: l:=p_; fi; if (n mod 3)=0: M[n]=(cosd(k)*cosd(l),sind(k)*cosd(l),sind(l)); path Codageun,Codagedeux; if k>0: Codageun=cercles(O,1[O,C],O,1[O,C],D) cutafter chemin(O,(cosd(k),sind(k),0)); else: Codageun=cercles(O,1[O,C],O,1[O,C],D) cutbefore chemin(O,(cosd(k),sind(k),0)); fi; if l>0: Codagedeux=cercles(O,(cosd(k),sind(k),0),O,(cosd(k),sind(k),0),Z) cutafter chemin(O,M[n]); else: Codagedeux=cercles(O,(cosd(k),sind(k),0),O,(cosd(k),sind(k),0),Z) cutbefore chemin(O,M[n]); fi; %%%% if l>0: %%%fill Projette(O)--Projette((cosd(k),sind(k),0))--Codagedeux--cycle withcolor \useKV[ClesReperage]{CouleurLa}; %%%fill Projette(O)--Projette(C)--Codageun--cycle withcolor \useKV[ClesReperage]{CouleurLon}; %%%else: %%%fill Projette(O)--Codagedeux--Projette((cosd(k),sind(k),0))--cycle withcolor \useKV[ClesReperage]{CouleurLa}; %%%fill Projette(O)--Codageun--Projette(C)--cycle withcolor \useKV[ClesReperage]{CouleurLon}; %%%fi; trace Codageun; trace Codagedeux; if \useKV[ClesReperage]{AffichageCoord}: picture CodageUn,CodageDeux; CodageUn=image( if k>0: label.bot(TEX("\scriptsize\ang{"&decimal(k)&"} E"),(0,0)); else: label.bot(TEX("\scriptsize\ang{"&decimal(abs(k))&"} O"),(0,0)); fi; ); CodageDeux=image( if k>0: label.rt(TEX("\scriptsize\ang{"&decimal(l)&"} N"),(0,0)); else: label.lft(TEX("\scriptsize\ang{"&decimal(abs(l))&"} S"),(0,0)); fi; ); fill (polygone(llcorner CodageUn,lrcorner CodageUn,urcorner CodageUn,ulcorner CodageUn) shifted(point(0.5*length Codageun) of Codageun)) withcolor blanc; trace CodageUn shifted (point(0.5*length Codageun) of Codageun); fill (polygone(llcorner CodageDeux,lrcorner CodageDeux,urcorner CodageDeux,ulcorner CodageDeux) shifted(point(0.5*length Codagedeux) of Codagedeux)) withcolor blanc; trace CodageDeux shifted (point(0.5*length Codagedeux) of Codagedeux); fi; trace chemin(O,(cosd(k),sind(k),0)) dashed withdots scaled 0.5; trace chemin(O,M[n]) dashed withdots scaled 0.5; trace chemin(O,C) dashed withdots scaled 0.5; if \useKV[ClesReperage]{AffichageNom}: if l>0:dotlabel.top(p_,Projette(M[n])); else: dotlabel.bot(p_,Projette(M[n])); fi; fi; fi; n:=n+1; endfor; enddef; toto(#1); label.llft(btex \tiny \ang{0} etex,Projette(C)); \end{mplibcode} \else \begin{mpost}[mpsettings={boolean AffichageCoord; AffichageCoord=\useKV[ClesReperage]{AffichageCoord}; boolean AffichageNom; AffichageNom=\useKV[ClesReperage]{AffichageNom};anglephi:=\useKV[ClesReperage]{AnglePhi};}] typetrace:="3D"; typerepre:="persp"; Initialisation(1500,anglephi,10,#2); color O,A,B,C,D,Z,M[]; O=(0,0,0); A=(cosd(anglephi+90),sind(anglephi+90),0); B=(cosd(anglephi+180),sind(anglephi+180),0); C=(1,0,0); D=(0,1,0); Z=(0,0,1); trace cercles(O,A,O,A,Z) withcolor 0.7white; path Equateur; Equateur=cercles(O,C,O,C,D); trace (subpath((0.25+anglephi/360)*length Equateur,(0.75+anglephi/360)*length Equateur) of Equateur) dashed evenly withcolor 0.7white; trace (subpath((0.75+anglephi/360)*length Equateur,(1.25+anglephi/360)*length Equateur) of Equateur) withcolor 0.7white; path greenwich; greenwich=cercles(O,C,O,C,Z); trace subpath(3*length greenwich/4,5*length greenwich/4) of greenwich withcolor 0.7white; clip currentpicture to cercles(O,A,O,A,Z); trace chemin(C,O,Z) dashed evenly withcolor 0.85white; trace chemin(O,2[Z,O]) dashed evenly withcolor 0.85white; vardef toto(text t)= n:=1; for p_=t: if (n mod 3)=1: k:=p_; fi; if (n mod 3)=2: l:=p_; fi; if (n mod 3)=0: M[n]=(cosd(k)*cosd(l),sind(k)*cosd(l),sind(l)); path Codageun,Codagedeux; if k>0: Codageun=cercles(O,1[O,C],O,1[O,C],D) cutafter chemin(O,(cosd(k),sind(k),0)); else: Codageun=cercles(O,1[O,C],O,1[O,C],D) cutbefore chemin(O,(cosd(k),sind(k),0)); fi; if l>0: Codagedeux=cercles(O,(cosd(k),sind(k),0),O,(cosd(k),sind(k),0),Z) cutafter chemin(O,M[n]); else: Codagedeux=cercles(O,(cosd(k),sind(k),0),O,(cosd(k),sind(k),0),Z) cutbefore chemin(O,M[n]); fi; %if l>0: %fill Projette(O)--Projette((cosd(k),sind(k),0))--Codagedeux--cycle withcolor \useKV[ClesReperage]{CouleurLa}; %fill Projette(O)--Projette(C)--Codageun--cycle withcolor \useKV[ClesReperage]{CouleurLon}; %else: %fill Projette(O)--Codagedeux--Projette((cosd(k),sind(k),0))--cycle withcolor \useKV[ClesReperage]{CouleurLa}; %fill Projette(O)--Codageun--Projette(C)--cycle withcolor \useKV[ClesReperage]{CouleurLon}; %fi; trace Codageun; trace Codagedeux; if AffichageCoord: picture CodageUn,CodageDeux; CodageUn=image( if k>0: label.bot(LATEX("\noexpand\scriptsize\ang{"&decimal(k)&"} E"),(0,0)); else: label.bot(LATEX("\noexpand\scriptsize\ang{"&decimal(abs(k))&"} O"),(0,0)); fi; ); CodageDeux=image( if k>0: label.rt(LATEX("\noexpand\scriptsize\ang{"&decimal(l)&"} N"),(0,0)); else: label.lft(LATEX("\noexpand\scriptsize\ang{"&decimal(abs(l))&"} S"),(0,0)); fi; ); fill (polygone(llcorner CodageUn,lrcorner CodageUn,urcorner CodageUn,ulcorner CodageUn) shifted(point(0.5*length Codageun) of Codageun)) withcolor blanc; trace CodageUn shifted (point(0.5*length Codageun) of Codageun); fill (polygone(llcorner CodageDeux,lrcorner CodageDeux,urcorner CodageDeux,ulcorner CodageDeux) shifted(point(0.5*length Codagedeux) of Codagedeux)) withcolor blanc; trace CodageDeux shifted (point(0.5*length Codagedeux) of Codagedeux); fi; trace chemin(O,(cosd(k),sind(k),0)) dashed withdots scaled 0.5; trace chemin(O,M[n]) dashed withdots scaled 0.5; trace chemin(O,C) dashed withdots scaled 0.5; if AffichageNom: if l>0:dotlabel.top(p_,Projette(M[n])); else: dotlabel.bot(p_,Projette(M[n])); fi; fi; fi; n:=n+1; endfor; enddef; toto(#1); label.llft(btex \noexpand\tiny \ang{0} etex,Projette(C)); \end{mpost} \fi } \def\MPEspacePave#1#2#3#4#5#6#7#8#9{% \ifluatex \begin{mplibcode} typetrace:="3D"; typerepre:="persp"; Figure(-20u,-20u,20u,20u); Initialisation(1500,30,20,abs(#9)); %marque_r:=marque_r/2; marque_p:="plein"; color A,B,C,D,E,F,G,H,M[],N[]; draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5); if #9>0: drawarrow Projette(A)--Projette(1.5[D,A]); drawarrow Projette(C)--Projette(1.5[D,C]); drawarrow Projette(E)--Projette(1.5[D,E]); label.bot(btex $x$ etex,Projette(1.5[D,A])); label.top(btex $y$ etex,Projette(1.5[D,C])); label.top(btex $z$ etex,Projette(1.5[D,E])); label.ulft(btex 1 etex,Projette((1/#2)[D,A])); label.bot(btex 1 etex,Projette((1/#4)[D,C])); label.lft(btex 1 etex,Projette((1/#6)[D,E])); for k=1 upto (#2): pointe((k/#2)[D,A]); endfor; for k=1 upto (#4): pointe((k/#4)[D,C]); endfor; for k=1 upto (#6): pointe((k/#6)[D,E]); endfor; else: drawarrow Projette(D)--Projette(1.5[A,D]) dashed evenly; drawarrow Projette(B)--Projette(1.5[A,B]); drawarrow Projette(F)--Projette(1.5[A,F]); label.lrt(btex $x$ etex,Projette(1.5[A,D])); label.top(btex $y$ etex,Projette(1.5[A,B])); label.top(btex $z$ etex,Projette(1.5[A,F])); label.ulft(btex 1 etex,Projette((1/#2)[A,D])); label.bot(btex 1 etex,Projette((1/#4)[A,B])); label.lft(btex 1 etex,Projette((1/#6)[A,F])); for k=1 upto (#2): pointe((k/#2)[A,D]); endfor; for k=1 upto (#4): pointe((k/#4)[A,B]); endfor; for k=1 upto (#6): pointe((k/#6)[A,F]); endfor; fi; vardef tata(text t)= n:=1;%pour compter combien de points k:=0;%pour garder l'abscisse l:=0;%pour garder l'ordonn\'ee m:=0;%pour garder l'altitude if #8>0: for p_=t: if (n mod 4)=1: k:=p_; fi; if (n mod 4)=2: l:=p_; fi; if (n mod 4)=3: m:=p_; fi; if (n mod 4)=0: M[n]=(k/#2)[D,A]+(l/#4)*(C-D)+(m/#6)*(E-D); N[n]=(k/#2)[D,A]+(l/#4)*(C-D); if (#8>1): label.top(TEX(p_),Projette(M[n])); pointe(M[n]); fi; if (#8=1) or (#8=3) : drawoptions(dashed evenly withcolor gris); draw segment(M[n],(0,0,bluepart(M[n]))); draw segment(M[n],N[n]); draw segment(N[n],(redpart(M[n]),0,0)); draw segment(N[n],(0,greenpart(M[n]),0)); drawoptions(); fi; fi; n:=n+1; endfor; fi; enddef; vardef toto(text t)= n:=1;%pour compter combien de points k:=0;%pour garder l'abscisse l:=0;%pour garder l'ordonn\'ee m:=0;%pour garder l'altitude if #8>0: for p_=t: if (n mod 4)=1: k:=p_; fi; if (n mod 4)=2: l:=p_; fi; if (n mod 4)=3: m:=p_; fi; if (n mod 4)=0: % message("je suis ici : "&p_); M[n]=(k/#2)[A,D]+(l/#4)*(B-A)+(m/#6)*(F-A); N[n]=(k/#2)[A,D]+(l/#4)*(B-A); if (#8>1): label.top(TEX(p_),Projette(M[n])); pointe(M[n]); fi; if (#8=1) or (#8=3) : drawoptions(dashed evenly withcolor gris); draw segment(M[n],A+(0,0,bluepart(M[n]))); draw segment(M[n],N[n]); draw segment(N[n],A+(l/#4)*(B-A)); draw segment(N[n],A+(k/#2)*(D-A)); drawoptions(); fi; fi; n:=n+1; endfor; fi; enddef; if #9>0: tata(#7); else: toto(#7); fi; draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5); \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] typetrace:="3D"; typerepre:="persp"; Figure(-20u,-20u,20u,20u); Initialisation(1500,30,20,abs(#9)); %marque_r:=marque_r/2; marque_p:="plein"; color A,B,C,D,E,F,G,H,M[],N[]; draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5); if #9>0: drawarrow Projette(A)--Projette(1.5[D,A]); drawarrow Projette(C)--Projette(1.5[D,C]); drawarrow Projette(E)--Projette(1.5[D,E]); label.ulft(btex 1 etex,Projette((1/#2)[D,A])); label.bot(btex 1 etex,Projette((1/#4)[D,C])); label.lft(btex 1 etex,Projette((1/#6)[D,E])); for k=1 upto (#2): pointe((k/#2)[D,A]); endfor; for k=1 upto (#4): pointe((k/#4)[D,C]); endfor; for k=1 upto (#6): pointe((k/#6)[D,E]); endfor; else: drawarrow Projette(D)--Projette(1.5[A,D]) dashed evenly; drawarrow Projette(B)--Projette(1.5[A,B]); drawarrow Projette(F)--Projette(1.5[A,F]); label.ulft(btex 1 etex,Projette((1/#2)[A,D])); label.bot(btex 1 etex,Projette((1/#4)[A,B])); label.lft(btex 1 etex,Projette((1/#6)[A,F])); for k=1 upto (#2): pointe((k/#2)[A,D]); endfor; for k=1 upto (#4): pointe((k/#4)[A,B]); endfor; for k=1 upto (#6): pointe((k/#6)[A,F]); endfor; fi; vardef tata(text t)= n:=1;%pour compter combien de points k:=0;%pour garder l'abscisse l:=0;%pour garder l'ordonn\'ee m:=0;%pour garder l'altitude if #8>0: for p_=t: if (n mod 4)=1: k:=p_; fi; if (n mod 4)=2: l:=p_; fi; if (n mod 4)=3: m:=p_; fi; if (n mod 4)=0: M[n]=(k/#2)[D,A]+(l/#4)*(C-D)+(m/#6)*(E-D); N[n]=(k/#2)[D,A]+(l/#4)*(C-D); if (#8>1): label.top(LATEX(p_),Projette(M[n])); pointe(M[n]); fi; if (#8=1) or (#8=3) : drawoptions(dashed evenly withcolor gris); draw segment(M[n],(0,0,bluepart(M[n]))); draw segment(M[n],N[n]); draw segment(N[n],(redpart(M[n]),0,0)); draw segment(N[n],(0,greenpart(M[n]),0)); drawoptions(); fi; fi; n:=n+1; endfor; fi; enddef; vardef toto(text t)= n:=1;%pour compter combien de points k:=0;%pour garder l'abscisse l:=0;%pour garder l'ordonn\'ee m:=0;%pour garder l'altitude if #8>0: for p_=t: if (n mod 4)=1: k:=p_; fi; if (n mod 4)=2: l:=p_; fi; if (n mod 4)=3: m:=p_; fi; if (n mod 4)=0: % message("je suis ici : "&p_); M[n]=(k/#2)[A,D]+(l/#4)*(B-A)+(m/#6)*(F-A); N[n]=(k/#2)[A,D]+(l/#4)*(B-A); if (#8>1): label.top(LATEX(p_),Projette(M[n])); pointe(M[n]); fi; if (#8=1) or (#8=3) : drawoptions(dashed evenly withcolor gris); draw segment(M[n],A+(0,0,bluepart(M[n]))); draw segment(M[n],N[n]); draw segment(N[n],A+(l/#4)*(B-A)); draw segment(N[n],A+(k/#2)*(D-A)); drawoptions(); fi; fi; n:=n+1; endfor; fi; enddef; if #9>0: tata(#7); else: toto(#7); fi; draw Pave(A,B,C,D,E,F,G,H)(#1,#3,#5); \end{mpost} \fi }% % Pour construire le rep\`ere du plan \def\buildreperenew{% \toklistepointrepere{}% \foreachitem\compteur\in\ListePointRepere{\expandafter\Updatetoksrepere\compteur\nil}% \ifboolKV[ClesReperage]{Trace}{% \[\MPPlanTrace{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\the\toklistepointrepere}{2}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurUnitey}}{\useKV[ClesReperage]{ListeSegment}}\]% }{% \xdef\AfficheNom{0}\ifboolKV[ClesReperage]{AffichageNom}{\ifboolKV[ClesReperage]{LectureCoord}{\xdef\AfficheNom{3}}{\xdef\AfficheNom{2}}}{\ifboolKV[ClesReperage]{LectureCoord}{\xdef\AfficheNom{1}}{}}% \xdef\AfficheGrad{0}\ifboolKV[ClesReperage]{AffichageGrad}{\xdef\AfficheGrad{1}}{}% \xdef\AfficheCoord{\useKV[ClesReperage]{AffichageAbs}}% \MPPlannew{(\useKV[ClesReperage]{Unitex},\useKV[ClesReperage]{Pasx})}{(\useKV[ClesReperage]{Unitey},\useKV[ClesReperage]{Pasy})}{\the\toklistepointrepere}{\AfficheNom}{\AfficheCoord}{\AfficheGrad}{(\useKV[ClesReperage]{ValeurUnitex},\useKV[ClesReperage]{ValeurUnitey})}% }% } \def\MPPlannew#1#2#3#4#5#6#7{% %#1 : Unitex, pasx %#2 : unitey, pasy %#3 : liste de points %#4 : Affichage nom + lecture graphique %#5 : Affichage des (abscisses/ordonn\'ees) %#6 : Graduation compl\`ete ? %#7 : (unitex,unitey) \ifluatex \begin{mplibcode} maxx:=-4000; minx=4000; unitex:=(xpart(#1))*cm; pasx=ypart(#1); unitpx:=unitex/pasx; maxy:=-4000; miny:=4000; unitey:=(xpart(#2))*cm; pasy:=ypart(#2); unitpy:=unitey/pasy; n:=1; vardef toto(text t)= for p_=t: if (n mod 3)=1: if p_>maxx: maxx:=p_; fi; if p_maxy: maxy:=p_; fi; if p_(-ypart(#1)-1): minx:=-ypart(#1)-1; fi; maxy:=maxy+1; miny:=miny-1; if maxy<(ypart(#2)+1): maxy:=ypart(#2)+1; fi; if miny>(-ypart(#2)-1): miny:=-ypart(#2)-1; fi; enddef; toto(#3); Figure((minx-1)*unitpx,(miny-1)*unitpy,(maxx+1)*unitpx,(maxy+1)*unitpy); pair A,B,C,D,E; A=(0,0); B=(minx*unitpx,0); C=(maxx*unitpx,0); D=(0,miny*unitpy); E=(0,maxy*unitpy); for k=0 upto (maxx-minx): draw ((xpart(B),ypart(D)-0.75*unitpy)--(xpart(B),ypart(E)+0.75*unitpy)) shifted (k*unitpx,0) withcolor gris; endfor; for k=0 upto (maxy-miny): draw ((xpart(B)-0.75*unitpx,ypart(D))--(xpart(C)+0.75*unitpx,ypart(D))) shifted (0,k*unitpy) withcolor gris; endfor; drawarrow (B+(-0.75*unitpx,0))--(C+(0.75*unitpx,0)); drawarrow (D+(0,-0.75*unitpy))--(E+(0,0.75*unitpy)); % graduation compl\`ete ou pas ? label.llft(btex \footnotesize 0 etex,A); if #6>0: for k=minx upto maxx: if (xpart((k*unitex,0))>xpart(B+(-0.75*unitpx,0))) and (xpart((k*unitex,0))0: dotlabel.lrt(TEX("\footnotesize\num{"&decimal(k)&"}"),(k*unitex,0)); fi; fi; endfor; for k=miny upto maxy: if (ypart((0,k*unitey))>ypart(D+(0,-0.75*unitpy))) and (ypart((0,k*unitey))0: dotlabel.ulft(TEX("\footnotesize\num{"&decimal(k)&"}"),(0,k*unitey)); fi; fi; endfor; else: dotlabel.lrt(TEX("\footnotesize\num{"&decimal(xpart(#7))&"}"),(unitex,0)); dotlabel.ulft(TEX("\footnotesize\num{"&decimal(ypart(#7))&"}"),(0,unitey)); fi; % apparition du nom des points ou pas m_c:=m_c*3; marque_p:="croix"; vardef tata(text t)=%on place les points if #4>0: n:=1; k:=0;%pour retenir la coordonn\'ee en x l:=0;%pour retenir la coordonn\'ee en y for p_=t: if (n mod 3)=1: if numeric p_: k:=p_; fi; fi; if (n mod 3)=2: if numeric p_: l:=p_; fi; fi; if (n mod 3)=0: if #4>1: if p_<>"": if (k>0) and (l>0): label.urt(TEX(p_),(k*unitpx,l*unitpy)); fi; if (k=0) and (l>0): label.urt(TEX(p_),(k*unitpx,l*unitpy)); fi; if (k>0) and (l=0): label.urt(TEX(p_),(k*unitpx,l*unitpy)); fi; if (k<0) and (l>0): label.ulft(TEX(p_),(k*unitpx,l*unitpy)); fi; if (k=0) and (l<0): label.llft(TEX(p_),(k*unitpx,l*unitpy)); fi; if (k<0) and (l<0): label.llft(TEX(p_),(k*unitpx,l*unitpy)); fi; if (k<0) and (l=0): label.llft(TEX(p_),(k*unitpx,l*unitpy)); fi; if (k>0) and (l<0): label.lrt(TEX(p_),(k*unitpx,l*unitpy)); fi; pointe((k*unitpx,l*unitpy)); fi; fi; if (#4=1) or (#4=3): draw (0,l*unitpy)--(k*unitpx,l*unitpy)--(k*unitpx,0) dashed evenly; fi; fi; n:=n+1; endfor; fi; if #5=2: n:=1; k:=0;%pour retenir la coordonn\'ee en x l:=0;%pour retenir la coordonn\'ee en y for p_=t: if (n mod 3)=1: if numeric p_: k:=p_; fi; fi; if (n mod 3)=2: if numeric p_: l:=p_; fi; fi; if (n mod 3)=0: if p_<>"": if (k mod pasx)<>0: label.lrt(TEX("\footnotesize$\frac{\num{"&decimal(k)&"}}{\num{"&decimal(pasx)&"}}$"),(k*unitpx,0)); else: label.lrt(TEX("\footnotesize\num{\fpeval{"&decimal(k)&"/"&decimal(pasx)&"}}"),(k*unitpx,0)); fi; if (l mod pasy)<>0: label.ulft(TEX("\footnotesize$\frac{\num{"&decimal(l)&"}}{\num{"&decimal(pasy)&"}}$"),(0,l*unitpy)); else: label.ulft(TEX("\footnotesize\num{\fpeval{"&decimal(l)&"/"&decimal(pasy)&"}}"),(0,l*unitpy)); fi; pointe((k*unitpx,0),(0,l*unitpy)); fi; fi; n:=n+1; endfor; elseif #5=1: n:=1; k:=0;%pour retenir la coordonn\'ee en x l:=0;%pour retenir la coordonn\'ee en y for p_=t: if (n mod 3)=1: if numeric p_: k:=p_; fi; fi; if (n mod 3)=2: if numeric p_: l:=p_; fi; fi; if (n mod 3)=0: if p_<>"": label.lrt(TEX("\footnotesize\num{\fpeval{"&decimal(k)&"/"&decimal(pasx)&"}}"),(k*unitpx,0)); label.ulft(TEX("\footnotesize\num{\fpeval{"&decimal(l)&"/"&decimal(pasy)&"}}"),(0,l*unitpy)); pointe((k*unitpx,0),(0,l*unitpy)); fi; fi; n:=n+1; endfor; fi; enddef; tata(#3); \end{mplibcode} \else \begin{mpost} maxx:=-4000; minx=4000; unitex:=(xpart(#1))*cm; pasx=ypart(#1); unitpx:=unitex/pasx; maxy:=-4000; miny:=4000; unitey:=(xpart(#2))*cm; pasy:=ypart(#2); unitpy:=unitey/pasy; n:=1; vardef toto(text t)= for p_=t: if (n mod 3)=1: if p_>maxx: maxx:=p_; fi; if p_maxy: maxy:=p_; fi; if p_(-ypart(#1)-1): minx:=-ypart(#1)-1; fi; maxy:=maxy+1; miny:=miny-1; if maxy<(ypart(#2)+1): maxy:=ypart(#2)+1; fi; if miny>(-ypart(#2)-1): miny:=-ypart(#2)-1; fi; enddef; toto(#3); Figure((minx-1)*unitpx,(miny-1)*unitpy,(maxx+1)*unitpx,(maxy+1)*unitpy); pair A,B,C,D,E; A=(0,0); B=(minx*unitpx,0); C=(maxx*unitpx,0); D=(0,miny*unitpy); E=(0,maxy*unitpy); for k=0 upto (maxx-minx): draw ((xpart(B),ypart(D)-0.75*unitpy)--(xpart(B),ypart(E)+0.75*unitpy)) shifted (k*unitpx,0) withcolor gris; endfor; for k=0 upto (maxy-miny): draw ((xpart(B)-0.75*unitpx,ypart(D))--(xpart(C)+0.75*unitpx,ypart(D))) shifted (0,k*unitpy) withcolor gris; endfor; drawarrow (B+(-0.75*unitpx,0))--(C+(0.75*unitpx,0)); drawarrow (D+(0,-0.75*unitpy))--(E+(0,0.75*unitpy)); % graduation compl\`ete ou pas ? label.llft(btex \noexpand\footnotesize 0 etex,A); if #6>0: for k=minx upto maxx: if (xpart((k*unitex,0))>xpart(B+(-0.75*unitpx,0))) and (xpart((k*unitex,0))0: dotlabel.lrt(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(k)&"}"),(k*unitex,0)); fi; fi; endfor; for k=miny upto maxy: if (ypart((0,k*unitey))>ypart(D+(0,-0.75*unitpy))) and (ypart((0,k*unitey))0: dotlabel.ulft(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(k)&"}"),(0,k*unitey)); fi; fi; endfor; else: dotlabel.lrt(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(xpart(#7))&"}"),(unitex,0)); dotlabel.ulft(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(ypart(#7))&"}"),(0,unitey)); fi; % apparition du nom des points ou pas m_c:=m_c*3; marque_p:="croix"; vardef tata(text t)=%on place les points if #4>0: n:=1; k:=0;%pour retenir la coordonn\'ee en x l:=0;%pour retenir la coordonn\'ee en y for p_=t: if (n mod 3)=1: if numeric p_: k:=p_; fi; fi; if (n mod 3)=2: if numeric p_: l:=p_; fi; fi; if (n mod 3)=0: if #4>1: if p_<>"": if (k>0) and (l>0): label.urt(LATEX(p_),(k*unitpx,l*unitpy)); fi; if (k=0) and (l>0): label.urt(LATEX(p_),(k*unitpx,l*unitpy)); fi; if (k>0) and (l=0): label.urt(LATEX(p_),(k*unitpx,l*unitpy)); fi; if (k<0) and (l>0): label.ulft(LATEX(p_),(k*unitpx,l*unitpy)); fi; if (k=0) and (l<0): label.llft(LATEX(p_),(k*unitpx,l*unitpy)); fi; if (k<0) and (l<0): label.llft(LATEX(p_),(k*unitpx,l*unitpy)); fi; if (k<0) and (l=0): label.llft(LATEX(p_),(k*unitpx,l*unitpy)); fi; if (k>0) and (l<0): label.lrt(LATEX(p_),(k*unitpx,l*unitpy)); fi; pointe((k*unitpx,l*unitpy)); fi; fi; if (#4=1) or (#4=3): draw (0,l*unitpy)--(k*unitpx,l*unitpy)--(k*unitpx,0) dashed evenly; fi; fi; n:=n+1; endfor; fi; if #5=2: n:=1; k:=0;%pour retenir la coordonn\'ee en x l:=0;%pour retenir la coordonn\'ee en y for p_=t: if (n mod 3)=1: if numeric p_: k:=p_; fi; fi; if (n mod 3)=2: if numeric p_: l:=p_; fi; fi; if (n mod 3)=0: if p_<>"": if (k mod pasx)<>0: label.lrt(LATEX("\noexpand\footnotesize$\noexpand\frac{\noexpand\num{"&decimal(k)&"}}{\noexpand\num{"&decimal(pasx)&"}}$"),(k*unitpx,0)); else: label.lrt(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(k)&"/"&decimal(pasx)&"}}"),(k*unitpx,0)); fi; if (l mod pasy)<>0: label.ulft(LATEX("\noexpand\footnotesize$\noexpand\frac{\noexpand\num{"&decimal(l)&"}}{\noexpand\num{"&decimal(pasy)&"}}$"),(0,l*unitpy)); else: label.ulft(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(l)&"/"&decimal(pasy)&"}}"),(0,l*unitpy)); fi; pointe((k*unitpx,0),(0,l*unitpy)); fi; fi; n:=n+1; endfor; elseif #5=1: n:=1; k:=0;%pour retenir la coordonn\'ee en x l:=0;%pour retenir la coordonn\'ee en y for p_=t: if (n mod 3)=1: if numeric p_: k:=p_; fi; fi; if (n mod 3)=2: if numeric p_: l:=p_; fi; fi; if (n mod 3)=0: if p_<>"": label.lrt(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(k)&"/"&decimal(pasx)&"}}"),(k*unitpx,0)); label.ulft(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(l)&"/"&decimal(pasy)&"}}"),(0,l*unitpy)); pointe((k*unitpx,0),(0,l*unitpy)); fi; fi; n:=n+1; endfor; fi; enddef; tata(#3); \end{mpost} \fi } \def\MPPlanTrace#1#2#3#4#5#6#7#8#9{% \ifluatex \begin{mplibcode} maxx:=-4000; minx=4000; unitex:=#1*cm; pasx=#2; unitpx:=unitex/pasx; maxy:=-4000; miny:=4000; unitey:=#3*cm; pasy:=#4; unitpy:=unitey/pasy; n:=1; vardef toto(text t)= for p_=t: if (n mod 3)=1: if p_>maxx: maxx:=p_; fi; if p_maxy: maxy:=p_; fi; if p_(-#2-1): minx:=-#2-1; fi; maxy:=maxy+1; miny:=miny-1; if maxy<(#4+1): maxy:=#2+1; fi; if miny>(-#4-1): miny:=-#4-1; fi; enddef; toto(#5); Figure((minx-1)*unitpx,(miny-1)*unitpy,(maxx+1)*unitpx,(maxy+1)*unitpy); pair A,B,C,D,E; A=(0,0); B=(minx*unitpx,0); C=(maxx*unitpx,0); D=(0,miny*unitpy); E=(0,maxy*unitpy); for k=0 upto (maxx-minx): draw ((xpart(B),ypart(D)-0.75*unitpy)--(xpart(B),ypart(E)+0.75*unitpy)) shifted (k*unitpx,0) withcolor gris; endfor; for k=0 upto (maxy-miny): draw ((xpart(B)-0.75*unitpx,ypart(D))--(xpart(C)+0.75*unitpx,ypart(D))) shifted (0,k*unitpy) withcolor gris; endfor; drawarrow (B+(-0.75*unitpx,0))--(C+(0.75*unitpx,0)); drawarrow (D+(0,-0.75*unitpy))--(E+(0,0.75*unitpy)); dotlabel.bot(TEX("\footnotesize\num{"&decimal(#7)&"}"),(unitex,0)); dotlabel.lft(TEX("\footnotesize\num{"&decimal(#8)&"}"),(0,unitey)); label.llft(btex 0 etex,A); % apparition du nom des points ou pas m_c:=m_c*3; marque_p:="croix"; vardef tata(text t)=%on place les points if #6>0: n:=1; k:=0;%pour retenir la coordonn\'ee en x l:=0;%pour retenir la coordonn\'ee en y for p_=t: if (n mod 3)=1: if numeric p_: k:=p_; fi; fi; if (n mod 3)=2: if numeric p_: l:=p_; fi; fi; if (n mod 3)=0: if #6>1: if (k>0) and (l>0): label.urt(TEX(p_),(k*unitpx,l*unitpy)); fi; if (k=0) and (l>0): label.urt(TEX(p_),(k*unitpx,l*unitpy)); fi; if (k>0) and (l=0): label.urt(TEX(p_),(k*unitpx,l*unitpy)); fi; if (k<0) and (l>0): label.ulft(TEX(p_),(k*unitpx,l*unitpy)); fi; if (k=0) and (l<0): label.llft(TEX(p_),(k*unitpx,l*unitpy)); fi; if (k<0) and (l<0): label.llft(TEX(p_),(k*unitpx,l*unitpy)); fi; if (k<0) and (l=0): label.llft(TEX(p_),(k*unitpx,l*unitpy)); fi; if (k>0) and (l<0): label.lrt(TEX(p_),(k*unitpx,l*unitpy)); fi; pointe((k*unitpx,l*unitpy)); fi; if (#6=1) or (#6=3): draw (0,l*unitpy)--(k*unitpx,l*unitpy)--(k*unitpx,0) dashed evenly; fi; fi; n:=n+1; endfor; fi; enddef; vardef Tracage(text t)(text ls)=%on trace les segments pair A[]; n:=0;%pour parcourir la liste m:=0;%pour lister les points par leur nombre for p_=t: n:=n+1; if (n mod 3)=1: k:=p_; fi; if (n mod 3)=2: l:=p_; fi; if (n mod 3)=0: m:=m+1; A[m]=(k*unitpx,l*unitpy); fi; endfor; for p_=ls: draw segment(A[p_ div 10],A[p_ mod 10]); endfor; enddef; tata(#5); Tracage(#5)(#9); \end{mplibcode} \else \begin{mpost}[mpsettings={input PfCGeometrie;}] maxx:=-4000; minx=4000; unitex:=#1*cm; pasx=#2; unitpx:=unitex/pasx; maxy:=-4000; miny:=4000; unitey:=#3*cm; pasy:=#4; unitpy:=unitey/pasy; n:=1; vardef toto(text t)= for p_=t: if (n mod 3)=1: if p_>maxx: maxx:=p_; fi; if p_maxy: maxy:=p_; fi; if p_(-#2-1): minx:=-#2-1; fi; maxy:=maxy+1; miny:=miny-1; if maxy<(#4+1): maxy:=#2+1; fi; if miny>(-#4-1): miny:=-#4-1; fi; enddef; toto(#5); Figure((minx-1)*unitpx,(miny-1)*unitpy,(maxx+1)*unitpx,(maxy+1)*unitpy); pair A,B,C,D,E; A=(0,0); B=(minx*unitpx,0); C=(maxx*unitpx,0); D=(0,miny*unitpy); E=(0,maxy*unitpy); for k=0 upto (maxx-minx): draw ((xpart(B),ypart(D)-0.75*unitpy)--(xpart(B),ypart(E)+0.75*unitpy)) shifted (k*unitpx,0) withcolor gris; endfor; for k=0 upto (maxy-miny): draw ((xpart(B)-0.75*unitpx,ypart(D))--(xpart(C)+0.75*unitpx,ypart(D))) shifted (0,k*unitpy) withcolor gris; endfor; drawarrow (B+(-0.75*unitpx,0))--(C+(0.75*unitpx,0)); drawarrow (D+(0,-0.75*unitpy))--(E+(0,0.75*unitpy)); dotlabel.bot(LATEX("\noexpand\footnotesize\num{"&decimal(#7)&"}"),(unitex,0)); dotlabel.lft(LATEX("\noexpand\footnotesize\num{"&decimal(#8)&"}"),(0,unitey)); label.llft(btex 0 etex,A); % apparition du nom des points ou pas m_c:=m_c*3; marque_p:="croix"; vardef tata(text t)=%on place les points if #6>0: n:=1; k:=0;%pour retenir la coordonn\'ee en x l:=0;%pour retenir la coordonn\'ee en y for p_=t: if (n mod 3)=1: if numeric p_: k:=p_; fi; fi; if (n mod 3)=2: if numeric p_: l:=p_; fi; fi; if (n mod 3)=0: if #6>1: if (k>0) and (l>0): label.urt(LATEX(p_),(k*unitpx,l*unitpy)); fi; if (k=0) and (l>0): label.urt(LATEX(p_),(k*unitpx,l*unitpy)); fi; if (k>0) and (l=0): label.urt(LATEX(p_),(k*unitpx,l*unitpy)); fi; if (k<0) and (l>0): label.ulft(LATEX(p_),(k*unitpx,l*unitpy)); fi; if (k=0) and (l<0): label.llft(LATEX(p_),(k*unitpx,l*unitpy)); fi; if (k<0) and (l<0): label.llft(LATEX(p_),(k*unitpx,l*unitpy)); fi; if (k<0) and (l=0): label.llft(LATEX(p_),(k*unitpx,l*unitpy)); fi; if (k>0) and (l<0): label.lrt(LATEX(p_),(k*unitpx,l*unitpy)); fi; pointe((k*unitpx,l*unitpy)); fi; if (#6=1) or (#6=3): draw (0,l*unitpy)--(k*unitpx,l*unitpy)--(k*unitpx,0) dashed evenly; fi; fi; n:=n+1; endfor; fi; enddef; vardef Tracage(text t)(text ls)=%on trace les segments pair A[]; n:=0;%pour parcourir la liste m:=0;%pour lister les points par leur nombre for p_=t: n:=n+1; if (n mod 3)=1: k:=p_; fi; if (n mod 3)=2: l:=p_; fi; if (n mod 3)=0: m:=m+1; A[m]=(k*unitpx,l*unitpy); fi; endfor; for p_=ls: draw segment(A[p_ div 10],A[p_ mod 10]); endfor; enddef; tata(#5); Tracage(#5)(#9); \end{mpost} \fi } \def\MPDEMIGraduee#1#2#3#4#5#6#7#8{% % #1 : unite % #2 : pas % #3 : liste des points \`a placer en pas. pour g\'erer le cas des rep\'erages fractionnaires % #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 (ne sert \`a rien ici, mais en pr\'evision % de Droite) % #7 : on affiche les abscisses ou pas : 0 non, 1 oui, 2 fraction % #8 : on affiche tous les multiples de la graduation "principale" \ifluatex \mplibforcehmode \begin{mplibcode} maxx:=0; unitex:=#1*cm; pasx:=#2; unitp:=unitex/pasx;%unit\'e de d\'eplacement vardef toto(text t)=%On d\'etermine le nombre "d'unit\'es" \`a placer for p_=t: if numeric p_: if p_>maxx: maxx:=p_; fi; fi; endfor; maxx:=maxx+1; if maxx<(#2+1): maxx:=#2+1; fi; enddef; toto(#3); Figure(-u,-u,(maxx+0.75)*unitp,u); pair A,B; A=(0,0); B=unitp*(maxx,0); drawarrow A--(B+(0.75*unitp,0)); % marquage secondaire marque_s:=marque_s/3; for k=0 step 2 until (maxx): draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]); endfor; drawoptions(); % marquage primaire marque_s:=marque_s*3; for k=0 step pasx until (maxx-1): draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]); endfor; % marquage des points m_c:=m_c*3; marque_p:="croix"; labeloffset:=labeloffset*2; dotlabel.bot(TEX("\footnotesize\num{"&decimal(#5)&"}"),unitex*(1,0)); label.bot(TEX("\footnotesize\num{"&decimal(#6)&"}"),A); if #8>0: for k=2 upto maxx: dotlabel.bot(TEX("\footnotesize\num{\fpeval{"&decimal(#5)&"*"&decimal(k)&"}}"),unitex*(k,0)); endfor; fi; vardef tata(text t)=%on place les points if #4>0: for p_=t: if numeric p_: k:=p_; fi; if string p_: if p_<>"": label.top(TEX(p_),unitp*(k,0)); pointe(unitp*(k,0)); fi; fi; endfor; fi; 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_; fi; if string p_: if p_<>"": if ((#5*k) mod pasx)<>0: label.bot(TEX("\footnotesize$\frac{\num{\fpeval{"&decimal(#5)&"*"&decimal(k)&"}}}{\num{"&decimal(pasx)&"}}$"),unitp*(k,0)); else: label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(#5)&"*"&decimal(k)&"/"&decimal(pasx)&"}}"),unitp*(k,0)); fi; pointe(unitp*(k,0)); fi; fi; endfor; elseif #7=1: for p_=t: if numeric p_: k:=p_; fi; if string p_: if p_<>"": label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(#5)&"*"&decimal(k)&"/"&decimal(pasx)&"}}"),unitp*(k,0)); pointe(unitp*(k,0)); fi; fi; endfor; fi; enddef; tata(#3); \end{mplibcode} \else \begin{mpost} maxx:=0; unitex:=#1*cm; pasx:=#2; unitp:=unitex/pasx;%unit\'e de d\'eplacement vardef toto(text t)=%On d\'etermine le nombre "d'unit\'es" \`a placer for p_=t: if numeric p_: if p_>maxx: maxx:=p_; fi; fi; endfor; maxx:=maxx+1; if maxx<(#2+1): maxx:=#2+1; fi; enddef; toto(#3); Figure(-u,-u,(maxx+0.75)*unitp,u); pair A,B; A=(0,0); B=unitp*(maxx,0); drawarrow A--(B+(0.75*unitp,0)); % marquage secondaire marque_s:=marque_s/3; for k=0 step 2 until (maxx): draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]); endfor; drawoptions(); % marquage primaire marque_s:=marque_s*3; for k=0 step pasx until (maxx-1): draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]); endfor; % marquage des points m_c:=m_c*3; marque_p:="croix"; labeloffset:=labeloffset*2; dotlabel.bot(LATEX("\noexpand\footnotesize\num{"&decimal(#5)&"}"),unitex*(1,0)); label.bot(LATEX("\noexpand\footnotesize\num{"&decimal(#6)&"}"),A); if #8>0: for k=2 upto maxx: dotlabel.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(#5)&"*"&decimal(k)&"}}"),unitex*(k,0)); endfor; fi; vardef tata(text t)=%on place les points if #4>0: for p_=t: if numeric p_: k:=p_; fi; if string p_: if p_<>"": label.top(LATEX(p_),unitp*(k,0)); pointe(unitp*(k,0)); fi; fi; endfor; fi; 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_; fi; if string p_: if p_<>"": if ((#5*k) mod pasx)<>0: label.bot(LATEX("\noexpand\footnotesize$\noexpand\frac{\noexpand\num{\noexpand\fpeval{"&decimal(#5)&"*"&decimal(k)&"}}}{\noexpand\num{"&decimal(pasx)&"}}$"),unitp*(k,0)); else: label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(#5)&"*"&decimal(k)&"/"&decimal(pasx)&"}}"),unitp*(k,0)); fi; pointe(unitp*(k,0)); fi; fi; endfor; elseif #7=1: for p_=t: if numeric p_: k:=p_; fi; if string p_: if p_<>"": label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(#5)&"*"&decimal(k)&"/"&decimal(pasx)&"}}"),unitp*(k,0)); pointe(unitp*(k,0)); fi; fi; endfor; fi; enddef; tata(#3); \end{mpost} \fi } % Pour construire les droite/demi-droite gradu\'ee \def\builddemidroitenew{% \toklistepointdroite{}% \foreachitem\compteur\in\ListePointDroite{\expandafter\Updatetoksdroite\compteur\nil}% \xdef\AffichageNom{0}\ifboolKV[ClesReperage]{AffichageNom}{\xdef\AffichageNom{1}}{} \xdef\AffichageCoord{\useKV[ClesReperage]{AffichageAbs}} \xdef\AffichageGrad{0}\ifboolKV[ClesReperage]{AffichageGrad}{\xdef\AffichageGrad{1}}{} \ifboolKV[ClesReperage]{DemiDroite}{% \[\MPDEMIGraduee{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\the\toklistepointdroite}{\AffichageNom}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurOrigine}}{\AffichageCoord}{\AffichageGrad}\]% }{% \[\MPDROITEGraduee{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\the\toklistepointdroite}{\AffichageNom}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurOrigine}}{\AffichageCoord}{\AffichageGrad}\]% }% }% \def\MPDROITEGraduee#1#2#3#4#5#6#7#8{% % #1 : unite % #2 : pas % #3 : liste des points \`a placer en pas. pour g\'erer le cas des rep\'erages fractionnaires % #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, 3 Fleche dots % #8 : on affiche tous les multiples de la graduation "principale" \ifluatex \mplibforcehmode \begin{mplibcode} maxx:=0; minx:=4000; unitex:=#1*cm; pasx:=#2; unitp:=unitex/pasx;%unit\'e de d\'eplacement vardef toto(text t)=%On d\'etermine le nombre "d'unit\'es" \`a placer for p_=t: if numeric p_: if p_>maxx: maxx:=p_; fi; if p_(-#2-1): minx:=-#2-(pasx-1); fi; enddef; toto(#3); Figure((minx-1)*unitp,-2u,(maxx+1)*unitp,u); pair A,B,C; A=(0,0); B=unitp*(maxx,0); C=unitp*(minx,0); drawarrow (C+unitp*(-0.75,0))--(B+unitp*(0.75,0)); % marquage secondaire marque_s:=marque_s/3; labeloffset:=labeloffset*2; if ((maxx-minx) mod 2)=0: for k=(minx+1) step 2 until (maxx-1): draw marquedemidroite(C,B); draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]); endfor; else: for k=(minx) step 2 until (maxx-1): draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]); endfor; fi; % marquage primaire marque_s:=marque_s*3; for k=0 step pasx until (maxx-pasx): draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]); endfor; for k=0 step -pasx until (minx+pasx): draw marquesegment((k/maxx)[A,B],((k-pasx)/maxx)[A,B]); endfor; % marquage des points m_c:=m_c*3; marque_p:="croix"; labeloffset:=labeloffset*2; label.bot(TEX("\footnotesize\num{"&decimal(#5)&"}"),unitex*(1,0)); label.bot(TEX("\footnotesize\num{"&decimal(#6)&"}"),A); if #8>0: for k=2 upto maxx: label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(#6)&"+"&decimal(#5-(#6))&"*"&decimal(k)&"}}"),unitex*(k,0));%%% endfor; for k=minx upto -1: label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(#6)&"+"&decimal(#5-(#6))&"*"&decimal(k)&"}}"),unitex*(k,0));%%% endfor; fi; vardef tata(text t)=%on place les points if #4>0: for p_=t: if numeric p_: k:=p_; fi; if string p_: if p_<>"": label.top(TEX(p_),unitp*(k,0)); pointe(unitp*(k,0)); fi; fi; endfor; fi; 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_; fi; if string p_: if p_<>"": if ((#5*k) mod pasx)<>0: label.bot(TEX("\footnotesize$\frac{\num{\fpeval{"&decimal(#5)&"*"&decimal(k)&"}}}{\num{"&decimal(pasx)&"}}$"),unitp*(k,0)); else: label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(#5)&"*"&decimal(k)&"/"&decimal(pasx)&"}}"),unitp*(k,0)); fi; pointe(unitp*(k-#6,0)); fi; fi; endfor; elseif #7=1: for p_=t: if numeric p_: k:=p_; fi; if string p_: if p_<>"": label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(#6)&"+"&decimal(#5-(#6))&"*"&decimal(k)&"/"&decimal(pasx)&"}}"),unitp*(k,0)); pointe(unitp*(k,0)); fi; fi; endfor; fi; enddef; tata(#3); \end{mplibcode} \else \begin{mpost} maxx:=0; minx:=4000; unitex:=#1*cm; pasx:=#2; unitp:=unitex/pasx;%unit\'e de d\'eplacement vardef toto(text t)=%On d\'etermine le nombre "d'unit\'es" \`a placer for p_=t: if numeric p_: if p_>maxx: maxx:=p_; fi; if p_(-#2-1): minx:=-#2-(pasx-1); fi; enddef; toto(#3); Figure((minx-1)*unitp,-2u,(maxx+1)*unitp,u); pair A,B,C; A=(0,0); B=unitp*(maxx,0); C=unitp*(minx,0); drawarrow (C+unitp*(-0.75,0))--(B+unitp*(0.75,0)); % marquage secondaire marque_s:=marque_s/3; labeloffset:=labeloffset*2; if ((maxx-minx) mod 2)=0: for k=(minx+1) step 2 until (maxx-1): draw marquedemidroite(C,B); draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]); endfor; else: for k=(minx) step 2 until (maxx-1): draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]); endfor; fi; % marquage primaire marque_s:=marque_s*3; for k=0 step pasx until (maxx-pasx): draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]); endfor; for k=0 step -pasx until (minx+pasx): draw marquesegment((k/maxx)[A,B],((k-pasx)/maxx)[A,B]); endfor; % marquage des points m_c:=m_c*3; marque_p:="croix"; labeloffset:=labeloffset*2; label.bot(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(#5)&"}"),unitex*(1,0)); label.bot(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(#6)&"}"),A); if #8>0: for k=2 upto maxx: label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(#6)&"+"&decimal(#5-(#6))&"*"&decimal(k)&"}}"),unitex*(k,0));%%% endfor; for k=minx upto -1: label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(#6)&"+"&decimal(#5-(#6))&"*"&decimal(k)&"}}"),unitex*(k,0));%%% endfor; fi; vardef tata(text t)=%on place les points if #4>0: for p_=t: if numeric p_: k:=p_; fi; if string p_: if p_<>"": label.top(LATEX(p_),unitp*(k,0)); pointe(unitp*(k,0)); fi; fi; endfor; fi; 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_; fi; if string p_: if p_<>"": if ((#5*k) mod pasx)<>0: label.bot(LATEX("\noexpand\footnotesize$\noexpand\frac{\noexpand\num{\noexpand\fpeval{"&decimal(#5)&"*"&decimal(k)&"}}}{\noexpand\num{"&decimal(pasx)&"}}$"),unitp*(k,0)); else: label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(#5)&"*"&decimal(k)&"/"&decimal(pasx)&"}}"),unitp*(k,0)); fi; pointe(unitp*(k-#6,0)); fi; fi; endfor; elseif #7=1: for p_=t: if numeric p_: k:=p_; fi; if string p_: if p_<>"": label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(#6)&"+"&decimal(#5-(#6))&"*"&decimal(k)&"/"&decimal(pasx)&"}}"),unitp*(k,0)); pointe(unitp*(k,0)); fi; fi; endfor; fi; enddef; tata(#3); \end{mpost} \fi } \newcommand\Reperage[2][]{% \useKVdefault[ClesReperage]% \setKV[ClesReperage]{#1}% \ifboolKV[ClesReperage]{Espace}{% \setKV[ClesReperage]{Unitex=2,Unitey=2.5,Unitez=1.5}% \ifboolKV[ClesReperage]{Sphere}{\setKV[ClesReperage]{EchelleEspace=75}}{}% \setKV[ClesReperage]{#1}% \setsepchar[*]{,*/}\ignoreemptyitems% \readlist*\ListePointEspace{#2}% \buildespace% }{\ifboolKV[ClesReperage]{Plan}{% \setsepchar[*]{,*/}\ignoreemptyitems% \readlist*\ListePointRepere{#2}% \buildreperenew% }{% \setsepchar[*]{,*/}\ignoreemptyitems% \readlist*\ListePointDroite{#2}% \builddemidroitenew% }% }% }% %%% % Puissances %%% \newcommand\Puissances[2]{% \ensuremath{% \xintifboolexpr{#2==0}{1}{\xintifboolexpr{#2>0}{\xdef\total{\fpeval{#2-1}}#1\multido{\i=1+1}{\total}{\times#1}}{\xdef\total{\fpeval{-#2-1}}\frac{1}{#1\multido{\i=1+1}{\total}{\times#1}}}}% }% } %%% % Ecritures d'unit\'es %%% \setKVdefault[Unites]{m=false,km=false,hm=false,ha=false,dam=false,a=false,dm=false,cm=true,mm=false,um=false,nm=false,g=true,t=false,q=false,kg=false,hg=false,dag=false,dg=false,cg=false,mg=false,ug=false,ng=false,kmh=true,kms=false,ms=false,mh=false,kgm=false,gcm=true,L=true,kL=false,hL=false,daL=false,dL=false,cL=false,mL=false,l=true,kl=false,hl=false,dal=false,dl=false,cl=false,ml=false,Go=true,Mo=false,ko=false,To=false,o=false,kWh=true,C=true,K=false,F=false} %D'apres https://tex.stackexchange.com/questions/38905/time-of-the-day-or-time-period-using-the-package-siunitx \ExplSyntaxOn \NewDocumentCommand \Temps { o > { \SplitArgument { 5 } { ; } } m } { \group_begin: \IfNoValueF {#1} { \keys_set:nn { siunitx } {#1} } \siunitx_hms_output:nnn #2 \group_end: } \cs_new_protected:Npn \siunitx_hms_output:nnn #1#2#3#4#5#6 { \IfNoValueF {#1} { \tl_if_blank:nF {#1} { \SI {#1} { \annee\xintifboolexpr{#1>1}{s}{} } \IfNoValueF {#2} { ~ } } } \IfNoValueF {#2} { \tl_if_blank:nF {#2} { \SI {#2} { \mois } \IfNoValueF {#3} { ~ } } } \IfNoValueF {#3} { \tl_if_blank:nF {#3} { \SI {#3} { \jour } \IfNoValueF {#4} { ~ } } } \IfNoValueF {#4} { \tl_if_blank:nF {#4} { \SI {#4} { \hour } \IfNoValueF {#5} { ~ } } } \IfNoValueF {#5} { \tl_if_blank:nF {#5} { \SI {#5} { \minute } \IfNoValueF {#6} { ~ } } } \IfNoValueF {#6} { \tl_if_blank:nF {#6} { \SI {#6} { \second } } } } \ExplSyntaxOff \newcommand\Temp[2][]{% \useKVdefault[Unites]% \setKV[Unites]{#1}% \ifboolKV[Unites]{F}{% \SI{#2}{\fahrenheit}% }{% \ifboolKV[Unites]{K}{% \SI{#2}{\kelvin}% }{% \SI{#2}{\celsius}% }% }% }% \newcommand\Conso[2][]{% \SI{#2}{\kWh}% } \newcommand\Prix[2][2]{% \SI[round-mode=places,round-precision=#1]{#2}{\EuRo}% } \newcommand\Octet[2][]{% \useKVdefault[Unites]% \setKV[Unites]{#1}% \ifboolKV[Unites]{o}{% \SI{#2}{\octet}% }{% \ifboolKV[Unites]{ko}{% \SI{#2}{\kilo\octet}% }{\ifboolKV[Unites]{Mo}{% \SI{#2}{\mega\octet}% }{\ifboolKV[Unites]{To}{% \SI{#2}{\tera\octet}% }{% \SI{#2}{\giga\octet}% }% }% }% }% }% \newcommand\Lg[2][]{% \useKVdefault[Unites]% \setKV[Unites]{#1}% \ifboolKV[Unites]{nm}{% \SI{#2}{\nm}% }{\ifboolKV[Unites]{um}{% \SI{#2}{\um}% }{\ifboolKV[Unites]{km}{% \SI{#2}{\km}% }{\ifboolKV[Unites]{hm}{% \SI{#2}{\hecto\metre}% }{\ifboolKV[Unites]{dam}{% \SI{#2}{\deca\metre}% }{\ifboolKV[Unites]{dm}{% \SI{#2}{\dm}% }{\ifboolKV[Unites]{m}{% \SI{#2}{\m}% }{\ifboolKV[Unites]{mm}{% \SI{#2}{\mm}% }{\SI{#2}{\cm}% }% }% }% }% }% }% }% }% }% \newcommand\Masse[2][]{% \useKVdefault[Unites]% \setKV[Unites]{#1}% \ifboolKV[Unites]{ng}{% \SI{#2}{\ng}% }{\ifboolKV[Unites]{ug}{% \SI{#2}{\ug}% }{\ifboolKV[Unites]{t}{% \SI{#2}{\tonne}% }{\ifboolKV[Unites]{q}{% \SI{#2}{\quintal}% }{% \ifboolKV[Unites]{kg}{% \SI{#2}{\kg}% }{\ifboolKV[Unites]{hg}{% \SI{#2}{\hecto\gram}% }{\ifboolKV[Unites]{dag}{% \SI{#2}{\deca\gram}% }{\ifboolKV[Unites]{dg}{% \SI{#2}{\deci\gram}% }{\ifboolKV[Unites]{cg}{% \SI{#2}{\centi\gram}% }{\ifboolKV[Unites]{mg}{% \SI{#2}{\milli\gram}% }{\SI{#2}{\gram}% }% }% }% }% }% }% }% }% }% }% }% \newcommand\Capa[2][]{% \useKVdefault[Unites]% \setKV[Unites]{#1}% \ifboolKV[Unites]{kL}{% \SI{#2}{\kilo\liter}% }{\ifboolKV[Unites]{hL}{% \SI{#2}{\hecto\liter}% }{\ifboolKV[Unites]{daL}{% \SI{#2}{\deca\liter}% }{\ifboolKV[Unites]{dL}{% \SI{#2}{\deci\liter}% }{\ifboolKV[Unites]{cL}{% \SI{#2}{\centi\liter}% }{\ifboolKV[Unites]{mL}{% \SI{#2}{\milli\liter}% }{\SI{#2}{\liter}% }% }% }% }% }% }% }% \newcommand\Aire[2][]{% \useKVdefault[Unites]% \setKV[Unites]{#1}% \ifboolKV[Unites]{km}{% \SI{#2}{\square\km}% }{\ifboolKV[Unites]{hm}{% \SI{#2}{\square\hecto\metre}% }{\ifboolKV[Unites]{ha}{% \SI{#2}{\hectare}% }{\ifboolKV[Unites]{dam}{% \SI{#2}{\square\deca\metre}% }{\ifboolKV[Unites]{a}{% \SI{#2}{\are}% }{\ifboolKV[Unites]{dm}{% \SI{#2}{\square\dm}% }{\ifboolKV[Unites]{m}{% \SI{#2}{\square\metre}% }{\ifboolKV[Unites]{mm}{% \SI{#2}{\square\mm}% }{\SI{#2}{\square\cm}% }% }% }% }% }% }% }% }% }% \newcommand\Vol[2][]{% \useKVdefault[Unites]% \setKV[Unites]{#1}% \ifboolKV[Unites]{km}{% \SI{#2}{\cubic\km}% }{\ifboolKV[Unites]{hm}{% \SI{#2}{\cubic\hecto\metre}% }{\ifboolKV[Unites]{dam}{% \SI{#2}{\cubic\deca\metre}% }{\ifboolKV[Unites]{dm}{% \SI{#2}{\cubic\dm}% }{\ifboolKV[Unites]{m}{% \SI{#2}{\cubic\metre}% }{\ifboolKV[Unites]{mm}{% \SI{#2}{\cubic\mm}% }{\SI{#2}{\cubic\cm}% }% }% }% }% }% }% }% \newcommand\Vitesse[2][]{% \useKVdefault[Unites]% \setKV[Unites]{#1}% \ifboolKV[Unites]{mh}{% \SI[per-mode=symbol]{#2}{\meter\per\hour}% }{% \ifboolKV[Unites]{ms}{% \SI[per-mode=symbol]{#2}{\meter\per\second}% }{% \ifboolKV[Unites]{kms}{% \SI[per-mode=symbol]{#2}{\kilo\meter\per\second}% }{% \SI[per-mode=symbol]{#2}{\kilo\meter\per\hour}% }% }% }% }% \newcommand\MasseVol[2][]{% \useKVdefault[Unites]% \setKV[Unites]{#1}% \ifboolKV[Unites]{kgm}{% \SI[per-mode=symbol]{#2}{\kilo\gram\per\cubic\metre}% }{% \SI[per-mode=symbol]{#2}{\gram\per\cubic\centi\metre}% }% }% %%% % Tableaux d'unit\'es %%% \setKVdefault[ClesTableaux]{Virgule=true,Entiers=false,Decimaux=false,Milliards=false,Millions=false,Micro=false,Nano=false,Partie=false,CouleurG=gray!15,CouleurM=gray!15,Couleurm=gray!15,Couleuru=gray!15,Classes=false,Nombres=false,Puissances=false,NbLignes=2,Metre=false,Are=false,Capacite=false,Carre=false,Cube=false,Litre=false,Gramme=false,Fleches=false,FlechesB=false,FlechesH=false,Colonnes=false,Prefixes=false} \newcommand\Tableau[1][]{% \useKVdefault[ClesTableaux]% \setKV[ClesTableaux]{#1}% % %%% Cl\'e Prefixes % \ifboolKV[ClesTableaux]{Prefixes}{% \setlength{\tabcolsep}{0.01\tabcolsep}% \begin{center}% % %%% Definition du tableau % \begin{tabular}{|*{\ifboolKV[ClesTableaux]{Milliards}{12}{% \ifboolKV[ClesTableaux]{Millions}{9}{6}% }}{>{\centering\arraybackslash}m{3.25em}|}>{\columncolor{gray!15}}{c}|*{% \ifboolKV[ClesTableaux]{Micro}{6}{% \ifboolKV[ClesTableaux]{Nano}{9}{3}% }}% {>{\centering\arraybackslash}m{3.25em}|}}% % %%% Prise en compte de la cl\'e Partie % \ifboolKV[ClesTableaux]{Partie}{% \multicolumn{% \ifboolKV[ClesTableaux]{Milliards}{12}{% \ifboolKV[ClesTableaux]{Millions}{9}{6}% }}{c}{\bfseries Partie enti\`ere} &\multicolumn{1}{c}{\cellcolor{gray!15}\ifboolKV[ClesTableaux]{Virgule}{,}{}}% &\multicolumn{% \ifboolKV[ClesTableaux]{Micro}{6}{% \ifboolKV[ClesTableaux]{Nano}{9}{3}% }}% {c}{\bfseries Partie d\'ecimale}\\}{}% % %%% Prise en compte de la cl\'e Classes % \ifboolKV[ClesTableaux]{Classes}{% \hline \ifboolKV[ClesTableaux]{Milliards}{% \cline{1-12}\multicolumn{3}{|c|}{\cellcolor{\useKV[ClesTableaux]{CouleurG}}Classe des milliards}% &\multicolumn{3}{c|}{\cellcolor{\useKV[ClesTableaux]{CouleurM}}Classe des millions}% &}{% \ifboolKV[ClesTableaux]{Millions}{% \cline{1-9}\multicolumn{3}{|c|}{\cellcolor{\useKV[ClesTableaux]{CouleurM}}Classe des millions}% &}{% \cline{1-6}}}% \ifboolKV[ClesTableaux]{Milliards}{% \multicolumn{3}{c|}}{% \ifboolKV[ClesTableaux]{Millions}{% \multicolumn{3}{c|}}{\multicolumn{3}{|c|}}}% {\cellcolor{\useKV[ClesTableaux]{Couleurm}}Classe des milliers}% &\multicolumn{3}{c|}{\cellcolor{\useKV[ClesTableaux]{Couleuru}}Classe des unit\'es}% &\ifboolKV[ClesTableaux]{Virgule}{,}{}% &\multicolumn{% \ifboolKV[ClesTableaux]{Micro}{6}{% \ifboolKV[ClesTableaux]{Nano}{9}{3}% }}% {c|}{}\\}{}% % %%% Valeurs par d\'efaut % \hline% \ifboolKV[ClesTableaux]{Milliards}{% &% &\fontsize{8.5}{8.5}\selectfont giga% &% &% &\fontsize{8.5}{8.5}\selectfont m\'ega% &% }{% \ifboolKV[ClesTableaux]{Millions}{% &% &\fontsize{8.5}{8.5}\selectfont m\'ega% &% }{% }}% &% &\fontsize{8.5}{8.5}\selectfont kilo% &\fontsize{8.5}{8.5}\selectfont hecto% &\fontsize{8.5}{8.5}\selectfont d\'eca% &\fontsize{8.5}{8.5}\selectfont unit\'es% &\ifboolKV[ClesTableaux]{Virgule}{,}{}% &\fontsize{8.5}{8.5}\selectfont deci% &\fontsize{8.5}{8.5}\selectfont centi% &\fontsize{8.5}{8.5}\selectfont milli% \ifboolKV[ClesTableaux]{Micro}{&% &% &\fontsize{8.5}{8.5}\selectfont micro\\}{% \ifboolKV[ClesTableaux]{Nano}{&% &% &\fontsize{8.5}{8.5}\selectfont micro% &% &% &\fontsize{8.5}{8.5}\selectfont nano\\}{\\}% }% % %%% Prise en compte de la cl\'e Nombres % \ifboolKV[ClesTableaux]{Nombres}{% \ifboolKV[ClesTableaux]{Milliards}{% \fontsize{4.5}{4.5}\selectfont\num{100000000000}% &\fontsize{4.5}{4.5}\selectfont\num{10000000000}% &\fontsize{4.5}{4.5}\selectfont\num{1000000000}% &\fontsize{4.5}{4.5}\selectfont \num{100000000}% &\fontsize{4.5}{4.5}\selectfont \num{10000000}% &\fontsize{4.5}{4.5}\selectfont \num{1000000}% &% }{} \ifboolKV[ClesTableaux]{Millions}{% \fontsize{4.5}{4.5}\selectfont \num{100000000}% &\fontsize{4.5}{4.5}\selectfont \num{10000000}% &\fontsize{4.5}{4.5}\selectfont \num{1000000}% &% }{} \fontsize{4.5}{4.5}\selectfont \num{100000}% &\fontsize{4.5}{4.5}\selectfont \num{10000}% &\fontsize{4.5}{4.5}\selectfont \num{1000}% &\fontsize{4.5}{4.5}\selectfont \num{100}% &\fontsize{4.5}{4.5}\selectfont \num{10}% &\fontsize{4.5}{4.5}\selectfont \num{1}% &\ifboolKV[ClesTableaux]{Virgule}{,}{}% &\fontsize{4.5}{4.5}\selectfont \num{0,1} ou $\dfrac{\strut1}{\strut10}$% &\fontsize{4.5}{4.5}\selectfont \num{0,01} ou $\dfrac{\strut1}{\strut100}$% &\fontsize{4.5}{4.5}\selectfont \num{0,001} ou $\dfrac{\strut1}{\strut\num{1000}}$% \ifboolKV[ClesTableaux]{Micro}{% &\fontsize{4.5}{4.5}\selectfont \num{0,0001} ou $\dfrac{\strut1}{\strut\num{10000}}$% &\fontsize{4.5}{4.5}\selectfont \num{0,00001} ou $\dfrac{\strut1}{\strut\num{100000}}$% &\fontsize{4.5}{4.5}\selectfont \num{0,000001} ou $\dfrac{\strut1}{\strut\num{1000000}}$% }{% \ifboolKV[ClesTableaux]{Nano}{% &\fontsize{4.5}{4.5}\selectfont \num{0,0001} ou $\dfrac{\strut1}{\strut\num{10000}}$% &\fontsize{4.5}{4.5}\selectfont \num{0,00001} ou $\dfrac{\strut1}{\strut\num{100000}}$% &\fontsize{4.5}{4.5}\selectfont \num{0,000001} ou $\dfrac{\strut1}{\strut\num{1000000}}$% &\fontsize{4.5}{4.5}\selectfont \num{0,0000001} ou $\dfrac{\strut1}{\strut\num{10000000}}$% &\fontsize{4.5}{4.5}\selectfont \num{0,00000001} ou $\dfrac{\strut1}{\strut\num{100000000}}$% &\fontsize{4.5}{4.5}\selectfont \num{0,000000001} ou $\dfrac{\strut1}{\strut\num{1000000000}}$% }{}% }{}\\}{}% % %%% Prise en compte de la cl\'e Puissances % \ifboolKV[ClesTableaux]{Puissances}{% \ifboolKV[ClesTableaux]{Milliards}{% &% &\fontsize{4.5}{4.5}\selectfont $\times10^{9}$% &% &% &\fontsize{4.5}{4.5}\selectfont $\times10^{6}$% & }{% \ifboolKV[ClesTableaux]{Millions}{% &% &\fontsize{4.5}{4.5}\selectfont $\times10^{6}$% & }{% }}% &% &\fontsize{4.5}{4.5}\selectfont $\times10^3$% &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^2$% &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^1$% &\fontsize{4.5}{4.5}\selectfont $\times\num{1}$% &\ifboolKV[ClesTableaux]{Virgule}{,}{}% &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^{-1}$% &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^{-2}$% &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^{-3}$% \ifboolKV[ClesTableaux]{Micro}{&% &% &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^{-6}$}{% \ifboolKV[ClesTableaux]{Nano}{&% &% &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^{-6}$% &% &% &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^{-9}$}{}% }% \\% }{}% % %%% Lignes vierges % \hline% \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}}}\do{% \ifboolKV[ClesTableaux]{Milliards}{% &&&&&&% }{% \ifboolKV[ClesTableaux]{Millions}{% &&&% }{% }}% &&&&&&,&&&% \ifboolKV[ClesTableaux]{Micro}{&&&}{% \ifboolKV[ClesTableaux]{Nano}{&&&&&&}{}% } \\}% \end{tabular}% \end{center}% \setlength{\tabcolsep}{100\tabcolsep}% }{}% % %%% Cl\'e Entiers % \ifboolKV[ClesTableaux]{Entiers}{% \setlength{\tabcolsep}{0.01\tabcolsep}% \begin{center}% % %%% Definition du tableau % \begin{tabular}{|*{% \ifboolKV[ClesTableaux]{Milliards}{12}{% \ifboolKV[ClesTableaux]{Millions}{9}{6}% }% }{>{\centering\arraybackslash}m{4.75em}|}}% \ifboolKV[ClesTableaux]{Classes}{% \hline \ifboolKV[ClesTableaux]{Milliards}{\multicolumn{3}{|c}{\cellcolor{\useKV[ClesTableaux]{CouleurG}}Classe des milliards}&\multicolumn{3}{|c}{\cellcolor{\useKV[ClesTableaux]{CouleurM}}Classe des millions}&}{} \ifboolKV[ClesTableaux]{Millions}{\multicolumn{3}{|c}{\cellcolor{\useKV[ClesTableaux]{CouleurM}}Classe des millions}&}{} \multicolumn{3}{|c|}{\cellcolor{\useKV[ClesTableaux]{Couleurm}}Classe des milliers}% &\multicolumn{3}{c|}{\cellcolor{\useKV[ClesTableaux]{Couleuru}}Classe des unit\'es}\\}{} \hline \ifboolKV[ClesTableaux]{Milliards}{% \fontsize{4.5}{4.5}\selectfont centaines de milliards% &\fontsize{4.5}{4.5}\selectfont dizaines de milliards% &\fontsize{4.5}{4.5}\selectfont unit\'es de milliards% &\fontsize{4.5}{4.5}\selectfont centaines de millions% &\fontsize{4.5}{4.5}\selectfont dizaines de millions% &\fontsize{4.5}{4.5}\selectfont unit\'es de millions% & }{} \ifboolKV[ClesTableaux]{Millions}{% \fontsize{4.5}{4.5}\selectfont centaines de millions% &\fontsize{4.5}{4.5}\selectfont dizaines de millions% &\fontsize{4.5}{4.5}\selectfont unit\'es de millions% & }{} \fontsize{4.5}{4.5}\selectfont centaines de milliers% &\fontsize{4.5}{4.5}\selectfont dizaines de milliers% &\fontsize{4.5}{4.5}\selectfont unit\'es de milliers% &\fontsize{4.5}{4.5}\selectfont centaines% &\fontsize{4.5}{4.5}\selectfont dizaines% &\fontsize{4.5}{4.5}\selectfont unit\'es\\% \ifboolKV[ClesTableaux]{Nombres}{% \ifboolKV[ClesTableaux]{Milliards}{% \fontsize{4.5}{4.5}\selectfont\num{100000000000}% &\fontsize{4.5}{4.5}\selectfont\num{10000000000}% &\fontsize{4.5}{4.5}\selectfont\num{1000000000}% &\fontsize{4.5}{4.5}\selectfont \num{100000000}% &\fontsize{4.5}{4.5}\selectfont \num{10000000}% &\fontsize{4.5}{4.5}\selectfont \num{1000000}% &% }{} \ifboolKV[ClesTableaux]{Millions}{% \fontsize{4.5}{4.5}\selectfont \num{100000000}% &\fontsize{4.5}{4.5}\selectfont \num{10000000}% &\fontsize{4.5}{4.5}\selectfont \num{1000000}% &% }{} \fontsize{4.5}{4.5}\selectfont \num{100000}% &\fontsize{4.5}{4.5}\selectfont \num{10000}% &\fontsize{4.5}{4.5}\selectfont \num{1000}% &\fontsize{4.5}{4.5}\selectfont \num{100}% &\fontsize{4.5}{4.5}\selectfont \num{10}% &\fontsize{4.5}{4.5}\selectfont \num{1}% \\ }{} % %%% Prise en compte de la cl\'e Puissances % \ifboolKV[ClesTableaux]{Puissances}{% \ifboolKV[ClesTableaux]{Milliards}{% &% &\fontsize{4.5}{4.5}\selectfont $\times10^{9}$% &% &% &\fontsize{4.5}{4.5}\selectfont $\times10^{6}$% & }{% \ifboolKV[ClesTableaux]{Millions}{% &% &\fontsize{4.5}{4.5}\selectfont $\times10^{6}$% & }{% }}% &% &\fontsize{4.5}{4.5}\selectfont $\times10^3$% &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^2$% &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^1$% &\fontsize{4.5}{4.5}\selectfont $\times\num{1}$% \\% }{}% % %%% Lignes vierges % \hline% \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}}}\do{% \ifboolKV[ClesTableaux]{Milliards}{% &&&&&&}{}% \ifboolKV[ClesTableaux]{Millions}{% &&&}{} &&&&&\\}% \end{tabular}% \end{center}% \setlength{\tabcolsep}{100\tabcolsep}% }{}% % %%% Cl\'e Decimaux % \ifboolKV[ClesTableaux]{Decimaux}{% \setlength{\tabcolsep}{0.01\tabcolsep}% \begin{center}% % %%% Definition du tableau % \begin{tabular}{|*{\ifboolKV[ClesTableaux]{Milliards}{12}{% \ifboolKV[ClesTableaux]{Millions}{9}{6}% }}{>{\centering\arraybackslash}m{4.75em}|}>{\columncolor{gray!15}}{c}|*{3}% {>{\centering\arraybackslash}m{4.75em}|}}% % %%% Prise en compte de la cl\'e Partie % \ifboolKV[ClesTableaux]{Partie}{% \ifboolKV[ClesTableaux]{Milliards}{% \multicolumn{12}{c}{\bfseries Partie enti\`ere}}{% \ifboolKV[ClesTableaux]{Millions}{% \multicolumn{9}{c}{\bfseries Partie enti\`ere}}{% \multicolumn{6}{c}{\bfseries Partie enti\`ere}}}% &\multicolumn{1}{c}{\cellcolor{gray!15}\ifboolKV[ClesTableaux]{Virgule}{,}{}}% &\multicolumn{3}{c}{\bfseries Partie d\'ecimale}\\}{} % %%% Prise en compte de la cl\'e Classes % \ifboolKV[ClesTableaux]{Classes}{% \hline% \ifboolKV[ClesTableaux]{Milliards}{% \multicolumn{3}{|c|}{\cellcolor{\useKV[ClesTableaux]{CouleurG}}Classe des milliards}&\multicolumn{3}{c|}{\cellcolor{\useKV[ClesTableaux]{CouleurM}}Classe des millions}&}{}% \ifboolKV[ClesTableaux]{Millions}{% \multicolumn{3}{|c|}{\cellcolor{\useKV[ClesTableaux]{CouleurM}}Classe des millions}&}{}% \ifboolKV[ClesTableaux]{Milliards}{% \multicolumn{3}{c|}}{% \ifboolKV[ClesTableaux]{Millions}{% \multicolumn{3}{c|}}{\multicolumn{3}{|c|}}}% {\cellcolor{\useKV[ClesTableaux]{Couleurm}}Classe des milliers}% &\multicolumn{3}{c|}{\cellcolor{\useKV[ClesTableaux]{Couleuru}}Classe des unit\'es}% &\ifboolKV[ClesTableaux]{Virgule}{,}{}&\multicolumn{3}{c|}{}\\}{} % %%% Valeurs ci-dessous par d\'efaut % \hline \ifboolKV[ClesTableaux]{Milliards}{% \fontsize{4.5}{4.5}\selectfont centaines de milliards% &\fontsize{4.5}{4.5}\selectfont dizaines de milliards% &\fontsize{4.5}{4.5}\selectfont unit\'es de milliards% &\fontsize{4.5}{4.5}\selectfont centaines de millions% &\fontsize{4.5}{4.5}\selectfont dizaines de millions% &\fontsize{4.5}{4.5}\selectfont unit\'es de millions% & }{} \ifboolKV[ClesTableaux]{Millions}{% \fontsize{4.5}{4.5}\selectfont centaines de millions% &\fontsize{4.5}{4.5}\selectfont dizaines de millions% &\fontsize{4.5}{4.5}\selectfont unit\'es de millions% & }{} \fontsize{4.5}{4.5}\selectfont centaines de milliers% &\fontsize{4.5}{4.5}\selectfont dizaines de milliers% &\fontsize{4.5}{4.5}\selectfont unit\'es de milliers% &\fontsize{4.5}{4.5}\selectfont centaines% &\fontsize{4.5}{4.5}\selectfont dizaines% &\fontsize{4.5}{4.5}\selectfont unit\'es% &\ifboolKV[ClesTableaux]{Virgule}{,}{}% &\fontsize{4.5}{4.5}\selectfont dixi\`emes% &\fontsize{4.5}{4.5}\selectfont centi\`emes% &\fontsize{4.5}{4.5}\selectfont milli\`emes\\ \ifboolKV[ClesTableaux]{Nombres}{% \ifboolKV[ClesTableaux]{Milliards}{% \fontsize{4.5}{4.5}\selectfont\num{100000000000}% &\fontsize{4.5}{4.5}\selectfont\num{10000000000}% &\fontsize{4.5}{4.5}\selectfont\num{1000000000}% &\fontsize{4.5}{4.5}\selectfont \num{100000000}% &\fontsize{4.5}{4.5}\selectfont \num{10000000}% &\fontsize{4.5}{4.5}\selectfont \num{1000000}% &% }{} \ifboolKV[ClesTableaux]{Millions}{% \fontsize{4.5}{4.5}\selectfont \num{100000000}% &\fontsize{4.5}{4.5}\selectfont \num{10000000}% &\fontsize{4.5}{4.5}\selectfont \num{1000000}% &% }{} \fontsize{4.5}{4.5}\selectfont \num{100000}% &\fontsize{4.5}{4.5}\selectfont \num{10000}% &\fontsize{4.5}{4.5}\selectfont \num{1000}% &\fontsize{4.5}{4.5}\selectfont \num{100}% &\fontsize{4.5}{4.5}\selectfont \num{10}% &\fontsize{4.5}{4.5}\selectfont \num{1}% &\ifboolKV[ClesTableaux]{Virgule}{,}{}% &\fontsize{4.5}{4.5}\selectfont \num{0,1} ou $\dfrac{\strut1}{\strut10}$% &\fontsize{4.5}{4.5}\selectfont \num{0,01} ou $\dfrac{\strut1}{\strut100}$% &\fontsize{4.5}{4.5}\selectfont \num{0,001} ou $\dfrac{\strut1}{\strut\num{1000}}$% \\ }{}% % %%% Prise en compte de la cl\'e Puissances % \ifboolKV[ClesTableaux]{Puissances}{% \ifboolKV[ClesTableaux]{Milliards}{% &% &\fontsize{4.5}{4.5}\selectfont $\times10^{9}$% &% &% &\fontsize{4.5}{4.5}\selectfont $\times10^{6}$% & }{% \ifboolKV[ClesTableaux]{Millions}{% &% &\fontsize{4.5}{4.5}\selectfont $\times10^{6}$% & }{% }}% &% &\fontsize{4.5}{4.5}\selectfont $\times10^3$% &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^2$% &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^1$% &\fontsize{4.5}{4.5}\selectfont $\times\num{1}$% &\ifboolKV[ClesTableaux]{Virgule}{,}{}% &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^{-1}$% &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^{-2}$% &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^{-3}$% \\% }{} \hline% % %%% Lignes vierges % \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}}}\do{% \ifboolKV[ClesTableaux]{Milliards}{% &&&&&&}{}% \ifboolKV[ClesTableaux]{Millions}{% &&&}{} &&&&&&,&&&\\} \end{tabular} \end{center}% \setlength{\tabcolsep}{100\tabcolsep}% }{}% % %%% Prise en compte de la cl\'e Metre % \ifboolKV[ClesTableaux]{Metre}{% \[\renewcommand{\arraystretch}{1.15}% \begin{tabular}{|*{7}{p{7.5mm}|}}% \multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (A);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (B);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (C);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (D);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (E);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (F);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (G);}}\\% \hline \multicolumn{1}{|c|}{km}&\multicolumn{1}{c|}{hm}&\multicolumn{1}{c|}{dam}&\multicolumn{1}{c|}{m}&\multicolumn{1}{c|}{dm}&\multicolumn{1}{c|}{cm}&\multicolumn{1}{c|}{mm}\\ \hline \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}}}\do{% &&&&&&\\} \multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (G1);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (F1);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (E1);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (D1);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (C1);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (B1);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (A1);}}\\% \end{tabular}% \]% \Conversion{10}% }% {}% % %%% Prise en compte de la cl\'e Carre % \ifboolKV[ClesTableaux]{Carre}{% \[\renewcommand{\arraystretch}{1.15}% \ifboolKV[ClesTableaux]{Colonnes}{% \newcolumntype{X}{|*{7}{>{\centering\arraybackslash}p{3.5mm}!{\color{gray!50}\vrule}>{\centering\arraybackslash}p{3.5mm}|}}% }{% \ifboolKV[ClesTableaux]{Are}{% \newcolumntype{X}{|*{7}{>{\centering\arraybackslash}p{3.5mm}!{\color{gray!50}\vrule}>{\centering\arraybackslash}p{3.5mm}|}}% }{ \newcolumntype{X}{|*{7}{p{3.5mm}p{3.5mm}|}}% }}% \begin{tabular}{X}% \multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate (A);}}% &\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate (B);}}% &\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate (C);}}% &\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate (D);}}% &\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate (E);}}% &\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate (F);}}% &\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate (G);}}\\% \hline \multicolumn{2}{|c|}{km$^2$}&\multicolumn{2}{c|}{hm$^2$}&\multicolumn{2}{c|}{dam$^2$}&\multicolumn{2}{c|}{m$^2$}&\multicolumn{2}{c|}{dm$^2$}&\multicolumn{2}{c|}{cm$^2$}&\multicolumn{2}{c|}{mm$^2$}\\% \ifboolKV[ClesTableaux]{Are}{% \cline{3-6} \multicolumn{2}{|c|}{}&&{\scriptsize ha}&&{\scriptsize a}&\multicolumn{2}{c|}{}&\multicolumn{2}{c|}{}&\multicolumn{2}{c|}{}&\multicolumn{2}{c|}{}\\ }{} \hline \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}}}\do{% &&&&&&&&&&&&&\\} \multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=0.6em] (G1);}}% &\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=0.6em] (F1);}}% &\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=0.6em] (E1);}}% &\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=0.6em] (D1);}}% &\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=0.6em] (C1);}}% &\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=0.6em] (B1);}}% &\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=0.6em] (A1);}}\\% \end{tabular} \]% \Conversion{100}% }{}% % %%% Prise en compte de la cl\'e Cube % \ifboolKV[ClesTableaux]{Cube}{% \setlength{\tabcolsep}{0.625\tabcolsep}% \ifboolKV[ClesTableaux]{Colonnes}{% \newcolumntype{X}{|*{7}{>{\centering\arraybackslash}p{3.5mm}!{\color{gray!50}\vrule}>{\centering\arraybackslash}p{3.5mm}!{\color{gray!50}\vrule}>{\centering\arraybackslash}p{3.5mm}|}}% }{% \ifboolKV[ClesTableaux]{Capacite}{% \newcolumntype{X}{|*{7}{>{\centering\arraybackslash}p{3.5mm}!{\color{gray!50}\vrule}>{\centering\arraybackslash}p{3.5mm}!{\color{gray!50}\vrule}>{\centering\arraybackslash}p{3.5mm}|}}% }{% \newcolumntype{X}{|*{7}{p{3.5mm}p{3.5mm}p{3.5mm}|}}% }}% \[\renewcommand{\arraystretch}{1.15}% \begin{tabular}{X} \multicolumn{3}{c}{\tikz[remember picture,overlay]{\coordinate (A);}}% &\multicolumn{3}{c}{\tikz[remember picture,overlay]{\coordinate (B);}}% &\multicolumn{3}{c}{\tikz[remember picture,overlay]{\coordinate (C);}}% &\multicolumn{3}{c}{\tikz[remember picture,overlay]{\coordinate (D);}}% &\multicolumn{3}{c}{\tikz[remember picture,overlay]{\coordinate (E);}}% &\multicolumn{3}{c}{\tikz[remember picture,overlay]{\coordinate (F);}}% &\multicolumn{3}{c}{\tikz[remember picture,overlay]{\coordinate (G);}}\\% \hline \multicolumn{3}{|c|}{km$^3$}&\multicolumn{3}{c|}{hm$^3$}&\multicolumn{3}{c|}{dam$^3$}&\multicolumn{3}{c|}{m$^3$}&\multicolumn{3}{c|}{dm$^3$}&\multicolumn{3}{c|}{cm$^3$}&\multicolumn{3}{c|}{mm$^3$}\\ \ifboolKV[ClesTableaux]{Capacite}{% \cline{13-18} \multicolumn{3}{|c|}{}&\multicolumn{3}{c|}{}&\multicolumn{3}{c|}{}&\multicolumn{3}{c|}{}&{\scriptsize hL}&{\scriptsize daL}&{\scriptsize L}&{\scriptsize dL}&{\scriptsize cL}&{\scriptsize mL}&\multicolumn{3}{c|}{}\\ }{}% \hline \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}}}\do{% &&&&&&&&&&&&&&&&&&&&\\ }% \multicolumn{3}{c}{\tikz[remember picture,overlay,yshift=\ht\strutbox]{\coordinate (G1);}}% &\multicolumn{3}{c}{\tikz[remember picture,overlay,yshift=\ht\strutbox]{\coordinate (F1);}}% &\multicolumn{3}{c}{\tikz[remember picture,overlay,yshift=\ht\strutbox]{\coordinate (E1);}}% &\multicolumn{3}{c}{\tikz[remember picture,overlay,yshift=\ht\strutbox]{\coordinate (D1);}}% &\multicolumn{3}{c}{\tikz[remember picture,overlay,yshift=\ht\strutbox]{\coordinate (C1);}}% &\multicolumn{3}{c}{\tikz[remember picture,overlay,yshift=\ht\strutbox]{\coordinate (B1);}}% &\multicolumn{3}{c}{\tikz[remember picture,overlay,yshift=\ht\strutbox]{\coordinate (A1);}}\\% \end{tabular} \]% \setlength{\tabcolsep}{1.6\tabcolsep}% \Conversion{1000}% }{}% % %%% Prise en compte de la cl\'e Litre % \ifboolKV[ClesTableaux]{Litre}{% \[\renewcommand{\arraystretch}{1.15}% \begin{tabular}{|*{6}{p{7.5mm}|}} \multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (A);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (B);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (C);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (D);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (E);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (F);}}\\% \hline \multicolumn{1}{|c|}{hL}&\multicolumn{1}{c|}{daL}&\multicolumn{1}{c|}{L}&\multicolumn{1}{c|}{dL}&\multicolumn{1}{c|}{cL}&\multicolumn{1}{c|}{mL}\\ \hline \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}-1}}\do{% &&&&&\\}% &&&&&\\% \multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (F1);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (E1);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (D1);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (C1);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (B1);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (A1);}}\\% \end{tabular} \]% \Conversion{10}% }{}% % %%% Prise en compte de la cl\'e Gramme % \ifboolKV[ClesTableaux]{Gramme}{% \[\renewcommand{\arraystretch}{1.15}% \begin{tabular}{|*{7}{p{7.5mm}|}} \multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (A);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (B);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (C);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (D);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (E);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (F);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (G);}}\\% \hline \multicolumn{1}{|c|}{kg}&\multicolumn{1}{c|}{hg}&\multicolumn{1}{c|}{dag}&\multicolumn{1}{c|}{g}&\multicolumn{1}{c|}{dg}&\multicolumn{1}{c|}{cg}&\multicolumn{1}{c|}{mg}\\ \hline \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}-1}}\do{% &&&&&&\\}% &&&&&&\\ \multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (G1);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (F1);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (E1);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (D1);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (C1);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (B1);}}% &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (A1);}}\\% \end{tabular} \]% \Conversion{10}% }{}% }% \newcommand\Conversion[1]{% \ifboolKV[ClesTableaux]{Fleches}{\setKV[ClesTableaux]{FlechesH,FlechesB}}{}% \ifboolKV[ClesTableaux]{FlechesH}{% \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (A) to node[above, midway]{\small$\times\num{#1}$}(B);}% \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (B) to node[above, midway]{\small$\times\num{#1}$}(C);}% \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (C) to node[above, midway]{\small$\times\num{#1}$}(D);}% \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (D) to node[above, midway]{\small$\times\num{#1}$}(E);}% \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (E) to node[above, midway]{\small$\times\num{#1}$}(F);}% \ifboolKV[ClesTableaux]{Litre}{}{\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (F) to node[above, midway]{\small$\times\num{#1}$}(G);}% }% }{}% \ifboolKV[ClesTableaux]{FlechesB}{% \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (A1) to node[below, midway]{\small$\div\num{#1}$}(B1);}% \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (B1) to node[below, midway]{\small$\div\num{#1}$}(C1);}% \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (C1) to node[below, midway]{\small$\div\num{#1}$}(D1);}% \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (D1) to node[below, midway]{\small$\div\num{#1}$}(E1);}% \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (E1) to node[below, midway]{\small$\div\num{#1}$}(F1);}% \ifboolKV[ClesTableaux]{Litre}{}{\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (F1) to node[below, midway]{\small$\div\num{#1}$}(G1);}}% }{}% }% %%% % Cards %%% \newtcolorbox{Mybox}[3]{% enhanced, nobeforeafter, left=0pt,right=0pt,top=0pt, text fill, width=\largeurcarte, height=\hauteurcarte, arc=5pt, overlay unbroken and first={% \coordinate[yshift=-0.5\hauteurtitre] (A1) at (frame.north west); \coordinate[yshift=-0.5\hauteurtitre] (B1) at (frame.north east); \coordinate[yshift=-\hauteurtitre] (A) at (frame.north west); \coordinate[yshift=-\hauteurtitre] (B) at (frame.north east); \coordinate[xshift=1.5pt,yshift=8mm] (S1) at (frame.south west); \coordinate[xshift=-1.5pt,yshift=8mm] (S2) at (frame.south east); \coordinate[xshift=3mm+(\largeurtitre/2)] (A2) at (A1); \coordinate[xshift=-3mm-(\largeurtitre/2)] (B2) at (B1); \node[rounded corners, draw=black, rectangle,minimum height=1cm,text width=\largeurtitre,fill=TrameCouleur] (T1) at (A2){}; \node[TexteCouleur] (T1a) at (T1){\Large #1}; \node[yshift=-0.65cm] (T1b) at (T1){\tiny r\'eponse pr\'ec\'edente}; \node[inner sep=0pt,rounded corners, rectangle, draw=black,minimum height=1cm,text width=\largeurtitre,fill=TrameCouleur] (T2) at (B2){}; \node[inner sep=0pt,TexteCouleur] (T2a) at (T2){ \begin{minipage}{\largeurtitre} \begin{center} #2 \end{center} \end{minipage} }; \node[yshift=-0.65cm] (T2b) at (T2){}; \ifboolKV[Cards]{Titre}{\node[] at (T2b) {\tiny\useKV[Cards]{NomTitre}};}{}, \node[rectangle,xshift=5pt,yshift=4.25mm,minimum width=2em,rounded corners,fill=TrameCouleur,draw=black,anchor=west] (R) at (frame.south west) {\color{black}\Large\bfseries #3}; \draw[dashed] (S1) -- (S2); }, colback=white, colbacktitle=TrameCouleur, } \newtcolorbox{MyboxJQ}[2]{% enhanced, nobeforeafter, left=0pt,right=0pt,top=0pt, text fill, width=\largeurcarte, height=\hauteurcarte, arc=5pt, overlay unbroken and first={% \coordinate[yshift=-0.5\hauteurtitre] (A1) at (frame.north west); \coordinate[yshift=0\hauteurtitre] (S3) at (frame.center); \coordinate[yshift=3mm] (C3) at (frame.south); \coordinate[xshift=\largeurcarte/2] (A3) at (A1); \node[rounded corners, draw=black, rectangle,minimum height=1cm,text width=\largeurcarte-6mm,fill=TrameCouleur] (T1) at (A3){}; \node[TexteCouleur] (T1a) at (T1){\Large J'ai}; \node[rounded corners, draw=black, rectangle,minimum height=1cm,text width=\largeurcarte-6mm,fill=TrameCouleur] (T2) at (S3){}; \node[TexteCouleur] (T2a) at (T2){\Large Qui a ?}; \node[minimum height=1cm,text width=\largeurcarte-6mm] (PointTexte1) at ($(A3)!0.5!(S3)$) {\begin{minipage}{\largeurcarte-6mm}% \begin{center}% #1% \end{center}% \end{minipage}}; \node[minimum height=1cm,text width=\largeurcarte-6mm] (PointTexte2) at ($(C3)!0.5!(S3)$) {\begin{minipage}{\largeurcarte-6mm}% \begin{center}% #2% \end{center}% \end{minipage}}; }, colback=white, } \usetikzlibrary{backgrounds} \makeatletter %https://tex.stackexchange.com/questions/347434/clip-background-image-inside-tcolorbox \newtcolorbox{MyboxSimpleAv}[1]{% enhanced,% nobeforeafter,% left=0pt,right=0pt,top=\hauteurtitre,bottom=0pt,% text fill,% width=\largeurcarte,% height=\hauteurcarte,% arc=5pt,% colback=white,% underlay={% \ifboolKV[Cards]{BackgroundAv}{% \begin{tcbclipinterior} \node[anchor=center,opacity=1] at (interior.center) {% \includegraphics[% height=\tcb@height, width=\tcb@width, ]{\useKV[Cards]{ImageAv}}};% \end{tcbclipinterior},% }{}% },% overlay unbroken and first={% \coordinate[yshift=-0.5\hauteurtitre] (A) at (frame.north);% \node[rounded corners, draw=black, rectangle,minimum height=1cm,text width=\largeurcarte-6mm,fill=TrameCouleur] (T1) at (A){\begin{minipage}{\largeurcarte-6mm}% \begin{center}% #1% \end{center}% \end{minipage}};% \node[yshift=-0.5em-0.5\hauteurtitre] (B) at (A){};% \ifboolKV[Cards]{Titre}{\node[fill=white] at (B) {\useKV[Cards]{NomTitre}};}{},% }% }% \newtcolorbox{MyboxSimpleAr}[1]{% enhanced,% nobeforeafter,% left=0pt,right=0pt,top=\hauteurtitre,bottom=0pt,% text fill,% width=\largeurcarte,% height=\hauteurcarte,% arc=5pt,% colback=white,% underlay={% \ifboolKV[Cards]{BackgroundAr}{% \begin{tcbclipinterior} \node[anchor=center,opacity=1] at (interior.center) {% \includegraphics[% height=\tcb@height, width=\tcb@width, ]{\useKV[Cards]{ImageAr}}}; \end{tcbclipinterior},% }{} },% overlay unbroken and first={% \coordinate[yshift=-0.5\hauteurtitre] (A) at (frame.north);% \node[rounded corners, draw=black, rectangle,minimum height=1cm,text width=\largeurcarte-6mm,fill=TrameCouleur] (T1) at (A){\begin{minipage}{\largeurcarte-6mm}% \begin{center}% #1% \end{center}% \end{minipage}};% % \node[yshift=-1em] (B) at (A){}; % \ifboolKV[Cards]{Titre}{\node[fill=white] at (B) {\useKV[Cards]{NomTitre}};}{}, }% }% \makeatother \newlength{\largeurcards}% \newlength{\hauteurcards}% \newlength{\largeurcarte}% \newlength{\hauteurcarte}% \newlength{\hauteurtitre}% \newlength{\largeurtitre}% \newlength{\margeh}% \newlength{\margev}% \NewEnviron{Trame}{% \begin{tikzpicture}[remember picture,overlay] % quadrillages horizontal et vertical \coordinate[yshift=-\margev] (A) at (current page.north west);% \coordinate[yshift=-\margev] (B) at (current page.north east);% \coordinate[yshift=-\hauteurcards] (A1) at (A);% \coordinate[yshift=-\hauteurcards] (B1) at (B);% \coordinate[yshift=-\hauteurcards] (A2) at (A1);% \coordinate[yshift=-\hauteurcards] (B2) at (B1);% \coordinate[yshift=-\hauteurcards] (A3) at (A2);% \coordinate[yshift=-\hauteurcards] (B3) at (B2);% \coordinate[yshift=-\hauteurcards] (A4) at (A3);% \coordinate[yshift=-\hauteurcards] (B4) at (B3);% \coordinate[xshift=\margeh] (C) at (current page.north west);% \coordinate[xshift=\margeh] (D) at (current page.south west);% \coordinate[xshift=\largeurcards] (C1) at (C);% \coordinate[xshift=\largeurcards] (D1) at (D);% \coordinate[xshift=\largeurcards] (C2) at (C1);% \coordinate[xshift=\largeurcards] (D2) at (D1);% \coordinate[xshift=\largeurcards] (C3) at (C2);% \coordinate[xshift=\largeurcards] (D3) at (D2);% \draw (A) -- (B);% \draw (A1) -- (B1);% \draw (A2) -- (B2);% \draw (A3) -- (B3);% \draw (A4) -- (B4);% \draw (C)--(D);% \draw (C1)--(D1);% \draw (C2)--(D2);% \draw (C3)--(D3);% % point pour placer les cartes \coordinate[xshift=\margeh+0.5\largeurcards,yshift=-0.5\hauteurcards] (Carte1) at (A);% \coordinate[xshift=\largeurcards,yshift=0mm] (Carte2) at (Carte1);% \coordinate[xshift=2\largeurcards,yshift=0mm] (Carte3) at (Carte1);% \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte4) at (Carte1);% \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte5) at (Carte2);% \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte6) at (Carte3);% \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte7) at (Carte4);% \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte8) at (Carte5);% \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte9) at (Carte6);% \BODY% \end{tikzpicture}% }% \setKVdefault[Cards]{Largeur=59,Hauteur=89,HauteurTheme=15,Marge=4,Landscape=false,Couleur=Cornsilk,Theme=Th\'eor\`eme\\de Pythagore,ThemeSol=Solution,Trame=false,Titre=false,NomTitre=Jeu 1,Loop,JaiQuia=false,BackgroundAv=false,BackgroundAr=false,ImageAv=4813762.jpg,ImageAr=4813762.jpg,AffichageSolution=true}% \newcommand\Cartes[2][]{% \useKVdefault[Cards]% \setKV[Cards]{#1}% \setsepchar[*]{§*/}% \readlist*\ListeCards{#2}% \ifboolKV[Cards]{Landscape}{% \setlength{\hauteurcarte}{\fpeval{\useKV[Cards]{Largeur}-\useKV[Cards]{Marge}}mm}% \setlength{\largeurcarte}{\fpeval{\useKV[Cards]{Hauteur}-\useKV[Cards]{Marge}}mm}% \setlength{\largeurcards}{95mm}% \setlength{\hauteurcards}{65mm}% \setlength{\margeh}{(297mm-3\largeurcards)/2}% \setlength{\margev}{(210mm-3\hauteurcards)/2}% }{% \setlength{\hauteurcarte}{\fpeval{\useKV[Cards]{Hauteur}-\useKV[Cards]{Marge}}mm}% \setlength{\largeurcarte}{\fpeval{\useKV[Cards]{Largeur}-\useKV[Cards]{Marge}}mm}% \setlength{\largeurcards}{65mm}% \setlength{\hauteurcards}{95mm}% \setlength{\margeh}{(210mm-3\largeurcards)/2}% \setlength{\margev}{(297mm-3\hauteurcards)/2}% }% \setlength{\hauteurtitre}{\fpeval{\useKV[Cards]{HauteurTheme}}mm}% \setlength{\largeurtitre}{\fpeval{(\useKV[Cards]{Largeur}-\useKV[Cards]{Marge}-9)/2}mm}% \colorlet{TexteCouleur}{black}% \colorlet{TrameCouleur}{\useKV[Cards]{Couleur}}% \ifboolKV[Cards]{JaiQuia}{% \ifboolKV[Cards]{Trame}{% \clearpage% \thispagestyle{empty}% \begin{Trame} \multido{\i=1+1}{9}{% \node at (Carte\i) {% \begin{MyboxJQ}{\ListeCards[\i,1]}{\ListeCards[\i,2]}% %% \end{MyboxJQ}% };% }% \end{Trame}% \clearpage% }{% \begin{MyboxJQ}{\ListeCards[1,1]}{\ListeCards[1,2]}% %% \end{MyboxJQ}% }% }{% \ifboolKV[Cards]{Loop}{% \ifboolKV[Cards]{Trame}{% \clearpage% \thispagestyle{empty}% \begin{Trame} \multido{\i=1+1}{9}{% \node at (Carte\i) {% \begin{Mybox}{\ListeCards[\i,1]}{\useKV[Cards]{Theme}}{\ListeCards[\i,2]}% \ListeCards[\i,3]% \end{Mybox}% };% }% \end{Trame}% \clearpage% }{% \begin{Mybox}{\ListeCards[1,1]}{\useKV[Cards]{Theme}}{\ListeCards[1,2]}% \ListeCards[1,3]% \end{Mybox}% }% }{% \ifboolKV[Cards]{Trame}{% \clearpage% \thispagestyle{empty}% \begin{Trame} \multido{\i=1+1}{9}{% \node[] at (Carte\i) {% \begin{MyboxSimpleAv}{\useKV[Cards]{Theme}}% \ListeCards[\i,1]% \end{MyboxSimpleAv}% };% }% \end{Trame}% \ifboolKV[Cards]{AffichageSolution}{% \clearpage% \thispagestyle{empty}% \begin{Trame} \multido{\i=1+1}{3}{% \node at (Carte\i) {% \begin{MyboxSimpleAr}{\useKV[Cards]{ThemeSol}}% \ListeCards[\fpeval{4-\i},2]% \end{MyboxSimpleAr}% };% }% \multido{\i=4+1}{3}{% \node at (Carte\i) {% \begin{MyboxSimpleAr}{\useKV[Cards]{ThemeSol}}% \ListeCards[\fpeval{10-\i},2]% \end{MyboxSimpleAr}% };% }% \multido{\i=7+1}{3}{% \node at (Carte\i) {% \begin{MyboxSimpleAr}{\useKV[Cards]{ThemeSol}}% \ListeCards[\fpeval{16-\i},2]% \end{MyboxSimpleAr}% };% }% \end{Trame}% \clearpage% }{}% }{% \begin{MyboxSimpleAv}{\useKV[Cards]{Theme}}% \ListeCards[1,1]% \end{MyboxSimpleAv}% \ifboolKV[Cards]{AffichageSolution}{% \begin{MyboxSimpleAr}{\useKV[Cards]{ThemeSol}}% \ListeCards[1,2]% \end{MyboxSimpleAr}% }{}% }% }% }% }% \newcommand\SolutionCarte[2]{% \begin{center} \bfseries#1 \end{center} #2 } %%% % Tableur %%% \setKVdefault[Tableur]{Colonnes=4,Largeur=3,LargeurUn=3,Bandeau=true,Formule={},Cellule=A1,Ligne=0,Colonne=0,PasL=1,PasC=1} %Bas\'e sur un code de Christian T\'ell\'ech\'ea. \makeatletter \newcount\cntlin \newcount\cntcol \newtoks\t@b \long\def\ifremain@lines#1\\#2\@nil{% \csname @\ifx\@empty#2\@empty second\else first\fi oftwo\endcsname} \long\def\subst@eol#1\\#2\@nil{\addtot@b{#1\\}% \ifremain@lines#2\\\@nil{\addtot@b&\subst@eol#2\@nil}{\addtot@b{#2\CodeAfter\xintifboolexpr{\useKV[Tableur]{Ligne}==0 || \useKV[Tableur]{Colonne}==0}{}{\tikz\draw[line width=2pt](row-\fpeval{\useKV[Tableur]{Ligne}+1}-|col-\fpeval{\useKV[Tableur]{Colonne}+1}) rectangle (row-\fpeval{\useKV[Tableur]{Ligne}+1+\useKV[Tableur]{PasL}}-|col-\fpeval{\useKV[Tableur]{Colonne}+1+\useKV[Tableur]{PasC}});}\end{NiceTabular}}}} \long\def\collectcp@body#1\end{\subst@eol#1\@nil\end} \newcommand\addtot@b[1]{\t@b\expandafter{\the\t@b#1}} \newcommand\edftot@b[1]{\edef\temp@{#1}\expandafter\addtot@b\expandafter{\temp@}} \newlength\LongInter \newlength\TotalInter \newenvironment{Tableur}[1][]{% \useKVdefault[Tableur]% \setKV[Tableur]{#1}% \ttfamily% \newcolumntype Y{>{\centering\arraybackslash}p{\useKV[Tableur]{LargeurUn}em}}% \newcolumntype X{>{\centering\arraybackslash}p{\useKV[Tableur]{Largeur}em}}% \ifboolKV[Tableur]{Bandeau}{% \setlength{\LongInter}{\fpeval{\useKV[Tableur]{LargeurUn}+(\useKV[Tableur]{Colonnes}-2)*\useKV[Tableur]{Largeur}-4}em+\fpeval{\useKV[Tableur]{Colonnes}*2-6}\tabcolsep+\fpeval{\useKV[Tableur]{Colonnes}+1}\arrayrulewidth}% \begin{NiceTabular}{p{\useKV[Tableur]{Largeur}em}p{1em}p{5em}p{\LongInter}}% \Block[draw]{}{}\useKV[Tableur]{Cellule}&\Block[draw]{}{}\centering\arraybackslash\scriptsize$\blacktriangledown$&$f_x$\hfill$\sum$~\scriptsize$\blacktriangledown$\hfill$=$&\Block[draw]{}{}\useKV[Tableur]{Formule}\hfill\scriptsize$\blacktriangledown$\\ %\cline{1-2}\cline{4-4}% \end{NiceTabular}% \nopagebreak \\ }{} \cntlin\z@ \t@b{% \begin{NiceTabular}{% >{% \columncolor{gray!15} \global\cntcol\z@\global\advance\cntlin\@ne \centering\arraybackslash \ifnum\cntlin>\@ne\number\numexpr\cntlin-1\relax\fi} p{2em}Y*{\fpeval{\useKV[Tableur]{Colonnes}-1}}{X}}[hvlines]% \rowcolor{gray!15}}% \loop \ifnum\cntcol<\useKV[Tableur]{Colonnes} \advance\cntcol\@ne \addtot@b{&}% \edftot@b{{\noexpand\@Alph{\the\cntcol}}}% \repeat \addtot@b{\\&}% \collectcp@body}{\the\t@b} \makeatother %%% % Domino %%% \newtcolorbox{MyDominoMini}[1][]{% enhanced, nobeforeafter, left skip=0pt, right skip=0pt, left=0pt,right=0pt,top=0pt,bottom=0pt, width=\textwidth/\ColonneDomino, height=\textheight/\LigneDomino, segmentation style={solid, line width=1.5pt}, colback=\CouleurDomino, center upper, valign upper=center, center lower, valign lower=center, arc=2pt, #1 } \newtcolorbox{MyDominoLogo}[1][]{% enhanced, nobeforeafter, left skip=0pt, right skip=0pt, left=0pt,right=0pt,top=0pt,bottom=0pt, width=\textwidth/\ColonneDomino, height=\textheight/\LigneDomino, valign=center, halign=center, arc=2pt, colback=white, #1 } \NewEnviron{TrameDomino}{% \setlength{\margev}{1cm} \setlength{\margeh}{1cm} \begin{tikzpicture}[remember picture,overlay] % quadrillages horizontal et vertical \coordinate[yshift=-\margev] (A0) at (current page.north west); \coordinate[yshift=-\margev] (B0) at (current page.north east); \foreach \i in {1,...,\useKV[Domino]{Lignes}}{% \coordinate[yshift=-\i*\textheight/\LigneDomino] (A\i) at (A0); \coordinate[yshift=-\i*\textheight/\LigneDomino] (B\i) at (B0); } \coordinate[xshift=\margeh] (C0) at (current page.north west); \coordinate[xshift=\margeh] (D0) at (current page.south west); \foreach \i in {1,...,\useKV[Domino]{Colonnes}}{ \coordinate[xshift=\i*\textwidth/\ColonneDomino] (C\i) at (C0); \coordinate[xshift=\i*\textwidth/\ColonneDomino] (D\i) at (D0); } \foreach \i in {0,...,\LigneDomino}{% \draw (A\i) -- (B\i); } \foreach \i in {0,...,\ColonneDomino}{% \draw (C\i) -- (D\i); } \draw[blue, line width=3pt] (A0)--(B0); \draw[blue, line width=3pt] (A\LigneDomino)--(B\LigneDomino); \draw[blue, line width=3pt] (C0)--(D0); \draw[blue, line width=3pt] (C\ColonneDomino)--(D\ColonneDomino); % point pour placer les cartes \foreach \i in {0,...,\fpeval{\ColonneDomino-1}}{% \foreach \j in {0,...,\fpeval{\LigneDomino-1}}{% \coordinate[xshift=\margeh+(0.5\textwidth/\ColonneDomino)+\i*\textwidth/\ColonneDomino,yshift=-0.5\textheight/\LigneDomino-\j*\textheight/\LigneDomino] (Domino\fpeval{\i+\ColonneDomino*\j+1}) at (A0); } } \BODY \end{tikzpicture} } \setKVdefault[Domino]{Couleur=white,Trame,Ratio=0.5,Lignes=7,Colonnes=5,Superieur=false,Logo=false,Image=tiger.pdf} \newcommand\Dominos[2][]{% \useKVdefault[Domino]% \setKV[Domino]{#1}% \setsepchar[*]{§*/}% \readlist*\ListeDominos{#2}% \xdef\CouleurDomino{\useKV[Domino]{Couleur}}% \xdef\ratiodomino{\useKV[Domino]{Ratio}}% \xdef\LigneDomino{\useKV[Domino]{Lignes}}% \xdef\ColonneDomino{\useKV[Domino]{Colonnes}}% \ifboolKV[Domino]{Trame}{% \clearpage \begin{TrameDomino} \foreach\i in {1,...,\fpeval{\LigneDomino*\ColonneDomino}}{% \node[] at (Domino\i){% \ifboolKV[Domino]{Superieur}{% \begin{MyDominoMini}[space=\ratiodomino]% \ListeDominos[\i,1]\tcblower\ListeDominos[\i,2]% \end{MyDominoMini}% }{% \begin{MyDominoMini}[sidebyside,sidebyside gap=4mm,righthand ratio=\ratiodomino]% \ListeDominos[\i,1]\tcblower\ListeDominos[\i,2]% \end{MyDominoMini}% }% }; }% \end{TrameDomino}% \ifboolKV[Domino]{Logo}{% \clearpage \begin{TrameDomino} \foreach\i in {1,...,\fpeval{\LigneDomino*\ColonneDomino}}{% \node at (Domino\i){% \begin{MyDominoLogo}% \includegraphics[height=\tcbtextheight]{\useKV[Domino]{Image}} \end{MyDominoLogo}% }; }% \end{TrameDomino}% }{}% }{% \ifboolKV[Domino]{Superieur}{% \begin{MyDominoMini}[space=\ratiodomino]% \ListeDominos[1,1]\tcblower\ListeDominos[1,2]% \end{MyDominoMini}% }{% \begin{MyDominoMini}[sidebyside,sidebyside gap=4mm,righthand ratio=\ratiodomino]% \ListeDominos[1,1]\tcblower% \ListeDominos[1,2]% \end{MyDominoMini}% }% }% }% %%%% % Prog de calculs "simples" %%%% \setKVdefault[ClesProg]{% Ecart=2em,% Direct,% SansCalcul=false,% Application=false, Details=false, Enonce=false, Nom={}, CouleurCadre=black,% CouleurFond=gray!10,% Largeur={.95\linewidth},% Epaisseur=.75pt,% Pointilles=0, ThemePerso=false, } \newcounter{NBprog}% \setcounter{NBprog}{0}% \newlength{\PointillesClesProg}% \newcommand\ProgCalcul[2][]{% % #1 : cl\'es % #2 : \'etapes \useKVdefault[ClesProg]% \setKV[ClesProg]{#1}% \ifboolKV[ClesProg]{ThemePerso}{}{% \tcbset{ProgCalcul/.style={% boxsep=1mm, bottom=.75mm, middle=2mm, boxrule={\useKV[ClesProg]{Epaisseur}}, text width={\useKV[ClesProg]{Largeur}}, colframe={\useKV[ClesProg]{CouleurCadre}}, colback={\useKV[ClesProg]{CouleurFond}}, halign upper=center }% }% }% \ifboolKV[ClesProg]{Application}{% % % by Thomas Dehon and cp \setsepchar[*]{§*,} % \setsepchar[*]{,* }% \ignoreemptyitems% \readlist*\ListeTotale{#2}% \xdef\foo{\ListeTotale[1]}% \xdef\faa{\ListeTotale[2]}% %% \setsepchar{,}% \ignoreemptyitems% \readlist*\ListeEtapes{\foo}% \setsepchar[*]{,* }\ignoreemptyitems% \readlist*\ListeProg{\faa}% \begin{tcolorbox}[% ProgCalcul,% ] \ifthenelse{\equal{\useKV[ClesProg]{Nom}}{}}% {}% {% {\color{\useKV[ClesProg]{CouleurCadre}}{\bfseries\useKV[ClesProg]{Nom}}}% \tcblower }% \ifboolKV[ClesProg]{SansCalcul}{% \begin{enumerate} \item Choisir un nombre~\pointilles[]~$\ListeProg[1]$% \foreachitem\etape\in\ListeEtapes{% \item \etape~\pointilles[]~$\ListeProg[3,\etapecnt]$ }% \end{enumerate} }{\begin{enumerate} \item Choisir un nombre~\pointilles[]~\xdef\NbDepart{\ListeProg[1]}\num{\NbDepart} \foreachitem\etape\in\ListeEtapes{% \item \etape~\pointilles[]~\edef\Test{\ListeProg[2,\etapecnt]}% \expandarg% \StrSubstitute{\Test}{^}{\empty\dots{}^}[\tempa]% \StrSubstitute{\tempa}{**}{^}[\tempab]% \StrSubstitute{\tempab}{*}{\times}[\tempac]% \StrSubstitute{\tempac}{/}{\div}[\tempad]% $\ifboolKV[ClesProg]{Details}{\num{\NbDepart}\tempad=}{}\xdef\NbDepart{\fpeval{(\NbDepart)\ListeProg[2,\etapecnt]}}\num{\NbDepart}$% }% \end{enumerate} } \end{tcolorbox} }{% \ifboolKV[ClesProg]{Enonce}{% % by Thomas Dehon \setsepchar[*]{,* }% \ignoreemptyitems% \readlist*\ListeEtapes{#2}% \begin{tcolorbox}[% ProgCalcul,% ] \ifthenelse{\equal{\useKV[ClesProg]{Nom}}{}}% {}% {% {\color{\useKV[ClesProg]{CouleurCadre}}{\bfseries\useKV[ClesProg]{Nom}}}% \tcblower }% \begin{enumerate} \foreachitem\etape\in\ListeEtapes{% \item \etape \ifthenelse{\equal{\useKV[ClesProg]{Pointilles}}{0}}% {}% {% \setlength{\PointillesClesProg}{\useKV[ClesProg]{Pointilles}} \hfill \pointilles[\PointillesClesProg]% }% } \end{enumerate} \end{tcolorbox} }{% \setsepchar[*]{,* }\ignoreemptyitems% \readlist*\ListeProg{#2}% \stepcounter{NBprog}% \xdef\NbDepart{\ListeProg[1]}% \ifboolKV[ClesProg]{SansCalcul}{% $\NbDepart$\foreachitem\compteur\in\ListeProg[2]{% \hspace{0.2em}\tikzmark{A-\theNBprog-\compteurcnt}\hspace{\useKV[ClesProg]{Ecart}}\tikzmark{B-\theNBprog-\compteurcnt}\hspace{0.2em}$\ListeProg[3,\compteurcnt]$% }% \begin{tikzpicture}[remember picture, overlay] \foreachitem\compteur\in\ListeProg[2]{% \edef\Test{\ListeProg[2,\compteurcnt]} \expandarg% \StrSubstitute{\Test}{^}{\empty\dots{}^}[\tempa]% \StrSubstitute{\tempa}{**}{^}[\tempab]% \StrSubstitute{\tempab}{*}{\times}[\tempac]% \StrSubstitute{\tempac}{/}{\div}[\tempad]% \draw[-stealth,transform canvas={yshift=0.25em}] (pic cs:A-\theNBprog-\compteurcnt) -- node[above]{\scriptsize$\tempad$}(pic cs:B-\theNBprog-\compteurcnt); } \end{tikzpicture} }{% \num{\NbDepart}\foreachitem\compteur\in\ListeProg[2]{% \hspace{0.2em}\tikzmark{A-\theNBprog-\compteurcnt}\hspace{\useKV[ClesProg]{Ecart}}\tikzmark{B-\theNBprog-\compteurcnt}\xdef\NbDepart{\fpeval{(\NbDepart)\ListeProg[2,\compteurcnt]}}\hspace{0.2em}\num{\NbDepart}% }% \ifboolKV[ClesProg]{Direct}{% \begin{tikzpicture}[remember picture, overlay] \foreachitem\compteur\in\ListeProg[2]{% \edef\Test{\ListeProg[2,\compteurcnt]} \expandarg% \StrSubstitute{\Test}{^}{\empty\dots{}^}[\tempa]% \StrSubstitute{\tempa}{**}{^}[\tempab]% \StrSubstitute{\tempab}{*}{\times}[\tempac]% \StrSubstitute{\tempac}{/}{\div}[\tempad]% \draw[-stealth,transform canvas={yshift=0.25em}] (pic cs:A-\theNBprog-\compteurcnt) -- node[above]{\scriptsize$\tempad$}(pic cs:B-\theNBprog-\compteurcnt); } \end{tikzpicture} }{% \begin{tikzpicture}[remember picture, overlay] \foreachitem\compteur\in\ListeProg[2]{% \edef\Test{\ListeProg[2,\compteurcnt]} \expandarg% \StrSubstitute{\Test}{^2}{\empty\sqrt{\dots{}}}[\tempa]% \StrSubstitute{\tempa}{**}{^}[\tempab]% \StrSubstitute{\tempab}{*}{\div}[\tempac]% \StrSubstitute{\tempac}{/}{\times}[\tempad]% \StrSubstitute{\tempad}{-}{+}[\tempae]% \StrSubstitute{\tempae}{++}{-}[\tempaf]% \draw[-stealth,transform canvas={yshift=0.25em}] (pic cs:B-\theNBprog-\compteurcnt) -- node[above]{\scriptsize$\tempaf$}(pic cs:A-\theNBprog-\compteurcnt); } \end{tikzpicture} }% }% }% }% }% %%% % Papiers %%% \setKVdefault[Papiers]{Cinq=true,Seyes=false,Isometrique=false,Millimetre=false,Triangle=false,Largeur=5,Hauteur=4,Couleur=black,Grille=-1,PageEntiere=false,ZoneTexte=false,Baseline=false}% %\def\MPBaseLineSkip#1#2#3{%à retravailler : ne fonctionne pas :( % % % \ifluatex % \mplibforcehmode % \begin{mplibcode} % path horizon,verticon; % horizon=(0,0)--(#1*cm,0); % %verticon=(0,0)--(0,#2*cm); % drawoptions(withcolor #3); % %for k=0 step 0.5 until #1: % %draw verticon shifted((k*cm,0)); % %endfor; % for k=(#2-(\mpdim{1.6ex}/1cm)) step (-\mpdim{\baselineskip}/1cm) until 0: % draw horizon shifted((0,k*cm)); % endfor; % drawoptions(withcolor blue); % for k=#2 step (-\mpdim{\baselineskip}/1cm) until 0: % draw horizon shifted((0,k*cm)); % endfor; % \end{mplibcode} % \fi %} \def\MPGrille#1#2#3#4{% \ifluatex% %\mplibcodeinherit{enable}% \mplibforcehmode% \begin{mplibcode}% path horizon,verticon; horizon=(0,0)--(#1*cm,0); verticon=(0,0)--(0,#2*cm); drawoptions(withcolor #3); for k=0 step (#4*100) until (#1*100): draw verticon shifted(((k/100)*cm,0)); endfor; for k=0 step (#4*100) until (#2*100): draw horizon shifted((0,(k/100)*cm)); endfor; \end{mplibcode}% %\mplibcodeinherit{disable}% \else% \begin{mpost}% path horizon,verticon; horizon=(0,0)--(#1*cm,0); verticon=(0,0)--(0,#2*cm); drawoptions(withcolor #3); for k=0 step 0.5 until #1: draw verticon shifted((k*cm,0)); endfor; for k=0 step 0.5 until #2: draw horizon shifted((0,k*cm)); endfor; \end{mpost}% \fi% }% \def\MPCinq#1#2#3{% \ifluatex% %\mplibcodeinherit{enable}% \mplibforcehmode% \begin{mplibcode}% path horizon,verticon; horizon=(0,0)--(#1*cm,0); verticon=(0,0)--(0,#2*cm); drawoptions(withcolor #3); for k=0 step 0.5 until #1: draw verticon shifted((k*cm,0)); endfor; for k=0 step 0.5 until #2: draw horizon shifted((0,k*cm)); endfor; \end{mplibcode}% %\mplibcodeinherit{disable}% \else% \begin{mpost} path horizon,verticon; horizon=(0,0)--(#1*cm,0); verticon=(0,0)--(0,#2*cm); drawoptions(withcolor #3); for k=0 step 0.5 until #1: draw verticon shifted((k*cm,0)); endfor; for k=0 step 0.5 until #2: draw horizon shifted((0,k*cm)); endfor; \end{mpost}% \fi% }% \def\MPSeyes#1#2#3{% \ifluatex% %\mplibcodeinherit{enable}% \mplibforcehmode% \begin{mplibcode}% path horizon,verticon; horizon=(0,0)--(#1*cm,0); verticon=(0,0)--(0,#2*cm); drawoptions(withcolor #3); for k=0 step 8 until (#1*10): draw verticon shifted(((k/10)*cm,0)); endfor; for k=0 step 2 until (#2*10): draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.5; endfor; for k=0 step 8 until (#2*10): draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 1.25; endfor; \end{mplibcode}% %\mplibcodeinherit{disable}% \else% \begin{mpost}% path horizon,verticon; horizon=(0,0)--(#1*cm,0); verticon=(0,0)--(0,#2*cm); drawoptions(withcolor #3); for k=0 step 8 until (#1*10): draw verticon shifted(((k/10)*cm,0)); endfor; for k=0 step 2 until (#2*10): draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.5; endfor; for k=0 step 8 until (#2*10): draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 1.25; endfor; \end{mpost} \fi% }% \def\MPMillimetre#1#2#3{% \ifluatex% %\mplibcodeinherit{enable}% \mplibforcehmode% \begin{mplibcode}% path horizon,verticon; horizon=(0,0)--(#1*cm,0); verticon=(0,0)--(0,#2*cm); drawoptions(withcolor #3); for k=0 step 1 until (#1*10): draw verticon shifted(((k/10)*cm,0)) withpen pencircle scaled 0.2; endfor; for k=0 step 5 until (#1*10): draw verticon shifted(((k/10)*cm,0)) withpen pencircle scaled 0.5; endfor; for k=0 step 1 until (#1): draw verticon shifted((k*cm,0)) withpen pencircle scaled 1.25; endfor; for k=0 step 1 until (#2*10): draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.2; endfor; for k=0 step 5 until (#2*10): draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.5; endfor; for k=0 step 1 until (#2): draw horizon shifted((0,k*cm)) withpen pencircle scaled 1.25; endfor; \end{mplibcode}% %\mplibcodeinherit{disable}% \else% \begin{mpost}% path horizon,verticon; horizon=(0,0)--(#1*cm,0); verticon=(0,0)--(0,#2*cm); drawoptions(withcolor #3); for k=0 step 1 until (#1*10): draw verticon shifted(((k/10)*cm,0)) withpen pencircle scaled 0.2; endfor; for k=0 step 5 until (#1*10): draw verticon shifted(((k/10)*cm,0)) withpen pencircle scaled 0.5; endfor; for k=0 step 1 until (#1): draw verticon shifted((k*cm,0)) withpen pencircle scaled 1.25; endfor; for k=0 step 1 until (#2*10): draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.2; endfor; for k=0 step 5 until (#2*10): draw horizon shifted((0,(k/10)*cm)) withpen pencircle scaled 0.5; endfor; for k=0 step 1 until (#2): draw horizon shifted((0,k*cm)) withpen pencircle scaled 1.25; endfor; \end{mpost}% \fi% }% \def\MPIsometrique#1#2#3{% \ifluatex% %\mplibcodeinherit{enable}% \mplibforcehmode% \begin{mplibcode}% path diagon,antidiagon; diagon=(0,0)--#2*(sqrt(3)*cm,1*cm); antidiagon=(0,0)--#2*(-sqrt(3)*cm,1*cm); drawoptions(withcolor #3); for k=0 step 1 until #1: draw diagon shifted((k*cm,0)); endfor; for k=0 step (sqrt(3)/3) until (#2): draw diagon shifted((0,k*cm)); endfor; for k=0 step 1 until (#1): draw antidiagon shifted((k*cm,0)); endfor; for k=0 step (sqrt(3)/3) until (#2): draw antidiagon shifted((#1*cm,k*cm)); endfor; clip currentpicture to polygone((0,0),(#1*cm,0),(#1*cm,#2*cm),(0,#2*cm)); \end{mplibcode}% %\mplibcodeinherit{disable}% \else% \begin{mpost}% path diagon,antidiagon; diagon=(0,0)--#2*(sqrt(3)*cm,1*cm); antidiagon=(0,0)--#2*(-sqrt(3)*cm,1*cm); drawoptions(withcolor #3); for k=0 step 1 until #1: draw diagon shifted((k*cm,0)); endfor; for k=0 step (sqrt(3)/3) until (#2): draw diagon shifted((0,k*cm)); endfor; for k=0 step 1 until (#1): draw antidiagon shifted((k*cm,0)); endfor; for k=0 step (sqrt(3)/3) until (#2): draw antidiagon shifted((#1*cm,k*cm)); endfor; clip currentpicture to polygone((0,0),(#1*cm,0),(#1*cm,#2*cm),(0,#2*cm)); \end{mpost}% \fi% }% \def\MPTriangulaire#1#2#3{% \ifluatex% %\mplibcodeinherit{enable}% \mplibforcehmode% \begin{mplibcode}% path horizon,diagon,antidiagon; horizon=(0,0)--(#1*cm,0); diagon=(0,0)--#2*(sqrt(3)*cm/3,1*cm); antidiagon=(0,0)--#2*(-sqrt(3)*cm/3,1*cm); drawoptions(withcolor #3); for k=0 step 1 until #1: draw diagon shifted((k*cm,0)); endfor; for k=0 step (sqrt(3)) until (#2): draw diagon shifted((0,k*cm)); endfor; for k=0 step 1 until (#1): draw antidiagon shifted((k*cm,0)); endfor; for k=0 step (sqrt(3)) until (#2): draw antidiagon shifted((#1*cm,k*cm)); endfor; for k=0 step (sqrt(3)/2) until (#2): draw horizon shifted((0,k*cm)); endfor; clip currentpicture to polygone((0,0),(#1*cm,0),(#1*cm,#2*cm),(0,#2*cm)); \end{mplibcode}% %\mplibcodeinherit{disable}% \else% \begin{mpost}% path horizon,diagon,antidiagon; horizon=(0,0)--(#1*cm,0); diagon=(0,0)--#2*(sqrt(3)*cm/3,1*cm); antidiagon=(0,0)--#2*(-sqrt(3)*cm/3,1*cm); drawoptions(withcolor #3); for k=0 step 1 until #1: draw diagon shifted((k*cm,0)); endfor; for k=0 step (sqrt(3)) until (#2): draw diagon shifted((0,k*cm)); endfor; for k=0 step 1 until (#1): draw antidiagon shifted((k*cm,0)); endfor; for k=0 step (sqrt(3)) until (#2): draw antidiagon shifted((#1*cm,k*cm)); endfor; for k=0 step (sqrt(3)/2) until (#2): draw horizon shifted((0,k*cm)); endfor; clip currentpicture to polygone((0,0),(#1*cm,0),(#1*cm,#2*cm),(0,#2*cm)); \end{mpost}% \fi% }% \RequirePackage{ifoddpage} \newcommand\Papiers[1][]{% \useKVdefault[Papiers]% \setKV[Papiers]{#1}% \xdef\PapierLargeur{\useKV[Papiers]{Largeur}}% \xdef\PapierHauteur{\useKV[Papiers]{Hauteur}}% \xdef\PapierCouleur{\useKV[Papiers]{Couleur}}% \xdef\PapierGrille{\useKV[Papiers]{Grille}}% \xdef\PapierLeftCurrent{\ifoddpageoroneside\oddsidemargin\else\evensidemargin\fi}% \xdef\PapierLeft{\the\dimexpr1in+\PapierLeftCurrent}% \xdef\PapierBottom{\fpeval{\paperheight-\textheight-\voffset-\headheight-\topmargin-\headsep-1in}}% \ifboolKV[Papiers]{ZoneTexte}{% \xdef\PapierHauteur{\fpeval{\textheight/1cm}}% \xdef\PapierLargeur{\fpeval{\textwidth/1cm}}% \begin{tikzpicture}[remember picture,overlay]% \node[anchor=south west,inner sep=0pt,transform canvas={xshift=\PapierLeft,yshift=\PapierBottom}] at (current page.south west) {% \xintifboolexpr{\useKV[Papiers]{Grille}>0}{% \MPGrille{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}{\PapierGrille}% }{\ifboolKV[Papiers]{Baseline}{% \MPBaseLineSkip{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% }{% \ifboolKV[Papiers]{Triangle}{% \MPTriangulaire{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% }{\ifboolKV[Papiers]{Millimetre}{% \MPMillimetre{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% }{\ifboolKV[Papiers]{Isometrique}{% \MPIsometrique{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% }{\ifboolKV[Papiers]{Seyes}{% \MPSeyes{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% }{\MPCinq{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% }% }% }% }% }% }% };% \end{tikzpicture}% }{% \ifboolKV[Papiers]{PageEntiere}{% \xdef\PapierHauteur{\fpeval{\paperheight/1cm}}% \xdef\PapierLargeur{\fpeval{\paperwidth/1cm}}% \begin{tikzpicture}[remember picture,overlay]% \node[anchor=south west,inner sep=0pt] at (current page.south west) {% \xintifboolexpr{\useKV[Papiers]{Grille}>0}{% \MPGrille{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}{\PapierGrille}% }{\ifboolKV[Papiers]{Triangle}{% \MPTriangulaire{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% }{\ifboolKV[Papiers]{Millimetre}{% \MPMillimetre{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% }{\ifboolKV[Papiers]{Isometrique}{% \MPIsometrique{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% }{\ifboolKV[Papiers]{Seyes}{% \MPSeyes{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% }{\MPCinq{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% }% }% }% }% }% };% \end{tikzpicture}% }{% \xintifboolexpr{\useKV[Papiers]{Grille}>0}{% \MPGrille{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}{\PapierGrille}% }{\ifboolKV[Papiers]{Baseline}{% \MPBaseLineSkip{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% }{% \ifboolKV[Papiers]{Triangle}{% \MPTriangulaire{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% }{\ifboolKV[Papiers]{Millimetre}{% \MPMillimetre{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% }{\ifboolKV[Papiers]{Isometrique}{% \MPIsometrique{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% }{\ifboolKV[Papiers]{Seyes}{% \MPSeyes{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% }{\MPCinq{\PapierLargeur}{\PapierHauteur}{\PapierCouleur}% }% }% }% }% }% }% }% }% }% %%%% % Scratch %%%% \newlength{\longbarreheight} \setlength{\longbarreheight}{2.1ex+3pt} \newlength{\longbarredepth} \setlength{\longbarredepth}{0.9ex+3pt} \def\longbarre{\vrule height\longbarreheight depth\longbarredepth width0pt}% \def\barre{\vrule height2.1ex depth.9ex width0pt}% \def\demibarre{\vrule height1.4ex depth.6ex width0pt}% \setKVdefault[Scratch]{Impression=false,Numerotation=false,Echelle=1} \ifluatex \NewEnviron{Scratch}[1][]{% \useKVdefault[Scratch]% \setKV[Scratch]{#1}% \mplibforcehmode% \myfontScratch% \begin{mplibcode}% input PfCScratch;% print:=\useKV[Scratch]{Impression};% NumeroteLignes:=\useKV[Scratch]{Numerotation};% \BODY picture recap;% recap:=currentpicture scaled \useKV[Scratch]{Echelle};% currentpicture:=nullpicture; draw recap; \end{mplibcode} }% \else \NewEnviron{Scratch}[1][]{% \setKV[Scratch]{#1}% \begin{mpost}[mpsettings={input PfCScratchpdf;print:=\useKV[Scratch]{Impression};NumeroteLignes:=\useKV[Scratch]{Numerotation};Echelle:=\useKV[Scratch]{Echelle};}]% \BODY picture recap;% recap:=currentpicture scaled Echelle;% currentpicture:=nullpicture; draw recap; \end{mpost} }% \fi