diff options
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCRepresenterEntier.tex')
-rw-r--r-- | macros/latex/contrib/profcollege/latex/PfCRepresenterEntier.tex | 118 |
1 files changed, 67 insertions, 51 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCRepresenterEntier.tex b/macros/latex/contrib/profcollege/latex/PfCRepresenterEntier.tex index 714405a534..9ab7b24341 100644 --- a/macros/latex/contrib/profcollege/latex/PfCRepresenterEntier.tex +++ b/macros/latex/contrib/profcollege/latex/PfCRepresenterEntier.tex @@ -1,14 +1,15 @@ %%% -% Représenter un entier +% Représenter un entier dans une base %%% -\setKVdefault[ClesREntier]{Echelle=1,Unite=false,Compact=false,Impression=false,ListeCouleurs={Tomato,LightSteelBlue,LightGreen,Cornsilk}}% +\setKVdefault[ClesRBase]{Base=10,Echelle=1,Unite=false,Compact=false,Impression=false,ListeCouleurs={Tomato,LightSteelBlue,LightGreen,Cornsilk}}% \newcommand\RepresenterEntier[2][]{% - \useKVdefault[ClesREntier]% - \setKV[ClesREntier]{#1}% - \ifboolKV[ClesREntier]{Unite}{% - \begin{Geometrie}[TypeTrace="Espace",CoinBG={u*(-10,-10)}] - Echelle=\useKV[ClesREntier]{Echelle}; + \useKVdefault[ClesRBase]% + \setKV[ClesRBase]{#1}% + \ifboolKV[ClesRBase]{Unite}{% + \begin{Geometrie}[TypeTrace="Espace",CoinBG={u*(-10,-10)}]%,CoinHD={u*(30,10)}] + Base=\useKV[ClesRBase]{Base}; + Echelle=\useKV[ClesRBase]{Echelle}; Initialisation(5,30,15,50*Echelle); color A,B,C,D,E,F,G,H; pointilles:="non"; @@ -16,15 +17,29 @@ \end{Geometrie} }{% % On décompose le nombre - \StrLen{#2}[\LongueurNombreEntier]% - \xdef\FooListeEntier{} - \xintFor* ##1 in{\xintSeq{1}{\LongueurNombreEntier}}\do{% - \StrChar{#2}{##1}[\ChiffreAAjouter] - \xdef\FooListeEntier{\FooListeEntier \ChiffreAAjouter,} - } + \xintifboolexpr{#2>\fpeval{\useKV[ClesRBase]{Base}**4-1}}{Le nombre est trop grand pour être représenté.}{% + \xdef\PfCRetiensDecomp{}% + \xdef\PfCResteConversion{#2}% +% \#2 vaut #2 et $Base+1$ vaut \fpeval{\useKV[ClesRBase]{Base}-1}\\ + \whiledo{\PfCResteConversion>\fpeval{\useKV[ClesRBase]{Base}-1}}{% + \quotient{\PfCResteConversion}{\useKV[ClesRBase]{Base}} +% Le quotient de \PfCResteConversion{} par \useKV[ClesRBase]{Base} est \the\intquotient\\ + \modulo{\PfCResteConversion}{\useKV[ClesRBase]{Base}} +% Le reste de \PfCResteConversion{} par \useKV[ClesRBase]{Base} est \the\remainder\\ + \xdef\PfCRetiensDecomp{\the\remainder,\PfCRetiensDecomp} +% Je retiens le reste : \the\remainder\\ + \xdef\PfCResteConversion{\the\intquotient} +% Je recommence avec \PfCResteConversion\\ + }% +% Je retiens le dernier reste (ou quotient) : + \xdef\PfCRetiensDecomp{\PfCResteConversion,\PfCRetiensDecomp}% + }% +% On obtient la décomposition de #2 sous la forme \PfCRetiensDecomp\\ + % transformation en liste \setsepchar{,}\ignoreemptyitems - \readlist*\ListeDesChiffres{\FooListeEntier}% - \xdef\ListeAvantCouleurs{\useKV[ClesREntier]{ListeCouleurs}}% + \readlist*\ListeDesChiffres{\PfCRetiensDecomp}% + \xdef\LongueurNombreEntier{\ListeDesChiffreslen}% + \xdef\ListeAvantCouleurs{\useKV[ClesRBase]{ListeCouleurs}}% \readlist*\ListeCouleurEntier{\ListeAvantCouleurs}% \xintifboolexpr{\LongueurNombreEntier==4}{% \xdef\NombreMilliers{\ListeDesChiffres[1]}% @@ -52,64 +67,65 @@ }% }% \begin{Geometrie}[TypeTrace="Espace",CoinBG={u*(-10,-10)},CoinHD={u*(20,20)}] - Echelle=\useKV[ClesREntier]{Echelle}; + Echelle=\useKV[ClesRBase]{Echelle}; NM=\NombreMilliers; NC=\NombreCentaines; ND=\NombreDizaines; NU=\NombreUnites; + Base=\useKV[ClesRBase]{Base}; color ColorEntier[]; ColorEntier1=\ListeCouleurEntier[1]; ColorEntier2=\ListeCouleurEntier[2]; ColorEntier3=\ListeCouleurEntier[3]; ColorEntier4=\ListeCouleurEntier[4]; boolean Compact,Print; - Compact=\useKV[ClesREntier]{Compact}; - Print=\useKV[ClesREntier]{Impression}; - Initialisation(5,30,15,50*Echelle); + Compact=\useKV[ClesRBase]{Compact}; + Print=\useKV[ClesRBase]{Impression}; + Initialisation(5,30,20,50*Echelle); color A,B,C,D,E,F,G,H; picture TypePave[]; TypePave0=image( trace Pave(A,B,C,D,E,F,G,H)(1,1,1); currentpicture:=nullpicture; remplis polygone(A,B,C,H,E,F) withcolor if Print : blanc else: ColorEntier1 fi; - for k=0 upto 10: - trace chemin((k/10)[A,B],(k/10)[F,G],(k/10)[E,H]); + for k=0 upto Base: + trace chemin((k/Base)[A,B],(k/Base)[F,G],(k/Base)[E,H]); endfor; - for k=0 upto 10: - trace chemin((k/10)[B,C],(k/10)[G,H],(k/10)[F,E]); + for k=0 upto Base: + trace chemin((k/Base)[B,C],(k/Base)[G,H],(k/Base)[F,E]); endfor; - for k=0 upto 10: - trace chemin((k/10)[A,F],(k/10)[B,G],(k/10)[C,H]); + for k=0 upto Base: + trace chemin((k/Base)[A,F],(k/Base)[B,G],(k/Base)[C,H]); endfor; ); color A,B,C,D,E,F,G,H; TypePave1=image( - trace Pave(A,B,C,D,E,F,G,H)(0.1,1,1); + trace Pave(A,B,C,D,E,F,G,H)(1/Base,1,1); currentpicture:=nullpicture; remplis polygone(A,B,C,H,E,F) withcolor if Print : blanc else: ColorEntier2 fi; trace chemin(C,H,E); - for k=0 upto 10: - trace chemin((k/10)[A,B],(k/10)[F,G],(k/10)[E,H]); + for k=0 upto Base: + trace chemin((k/Base)[A,B],(k/Base)[F,G],(k/Base)[E,H]); endfor; - for k=0 upto 10: - trace chemin((k/10)[A,F],(k/10)[B,G],(k/10)[C,H]); + for k=0 upto Base: + trace chemin((k/Base)[A,F],(k/Base)[B,G],(k/Base)[C,H]); endfor; ); color A,B,C,D,E,F,G,H; TypePave2=image( - trace Pave(A,B,C,D,E,F,G,H)(0.1,0.1,1); + trace Pave(A,B,C,D,E,F,G,H)(1/Base,1/Base,1); currentpicture:=nullpicture; remplis polygone(A,B,C,H,E,F) withcolor if Print : blanc else: ColorEntier3 fi; trace chemin(C,H,E); trace chemin(A,F,E); trace chemin(B,G,F); - for k=0 upto 10: - trace chemin((k/10)[A,F],(k/10)[B,G],(k/10)[C,H]); + for k=0 upto Base: + trace chemin((k/Base)[A,F],(k/Base)[B,G],(k/Base)[C,H]); endfor; ); color A,B,C,D,E,F,G,H; TypePave3=image( - trace Pave(A,B,C,D,E,F,G,H)(0.1,0.1,0.1); + trace Pave(A,B,C,D,E,F,G,H)(1/Base,1/Base,1/Base); currentpicture:=nullpicture; remplis polygone(A,B,C,H,E,F) withcolor if Print : blanc else: ColorEntier4 fi; trace chemin(C,H,E); @@ -119,32 +135,32 @@ trace chemin(B,G); ); if Compact: - for k=0 upto (\NombreMilliers-1): - trace TypePave0 shifted ((Projette((k,0,0))-Projette((0,0,0)))); + for k=0 upto (NM-1): + trace TypePave0 shifted ((Projette((k/Base,0,0))-Projette((0,0,0)))); endfor; - for k=0 upto (\NombreCentaines-1): - trace TypePave1 shifted ((Projette((0.1*k,1.5,0))-Projette((0,0,0)))); + for k=0 upto (NC-1): + trace TypePave1 shifted ((Projette((k/Base,1+1/Base,0))-Projette((0,0,0)))); endfor; - for k=0 upto (\NombreDizaines-1): - trace TypePave2 shifted ((Projette((0.1*k,3,0))-Projette((0,0,0)))); + for k=0 upto (ND-1): + trace TypePave2 shifted ((Projette((k/Base,2+2/Base,0))-Projette((0,0,0)))); endfor; - for k=0 upto (\NombreUnites-1): - trace TypePave3 shifted ((Projette((0,3.6,0.1*k))-Projette((0,0,0)))); + for k=0 upto (NU-1): + trace TypePave3 shifted ((Projette((k/Base,2+4/Base,0))-Projette((0,0,0)))); endfor; else: - for k=0 upto (\NombreMilliers-1): - trace TypePave0 shifted ((Projette((0,1.1*(k-1),0))-Projette((0,0,0)))); + for k=0 upto (NM-1): + trace TypePave0 shifted ((Projette((0,(1+1/Base)*(k-1),0))-Projette((0,0,0)))); endfor; - for k=0 upto (\NombreCentaines-1): - trace TypePave1 shifted ((Projette((0,1.1*\NombreMilliers+1.1*(k-1),0))-Projette((0,0,0)))); + for k=0 upto (NC-1): + trace TypePave1 shifted ((Projette((0,(1+1/Base)*NM+(1+1/Base)*(k-1),0))-Projette((0,0,0)))); endfor; - for k=0 upto (\NombreDizaines-1): - trace TypePave2 shifted ((Projette((0,1.1*\NombreMilliers+1.1*(\NombreCentaines-1)+0.2+0.2*(k-1),0))-Projette((0,0,0)))); + for k=0 upto (ND-1): + trace TypePave2 shifted ((Projette((0,(1+1/Base)*NM+(1+1/Base)*(NC-1)+(2/Base)+(2/Base)*(k-1),0))-Projette((0,0,0)))); endfor; for k=0 upto (\NombreUnites-1): - trace TypePave3 shifted ((Projette((0,1.1*\NombreMilliers+1.1*(\NombreCentaines-1)+0.2+0.2*(\NombreDizaines-1),0.2*(k)))-Projette((0,0,0)))); + trace TypePave3 shifted ((Projette((0,(1+1/Base)*NM+(1+1/Base)*(NC-1)+(2/Base)+(2/Base)*(ND-1),(2/Base)*(k)))-Projette((0,0,0)))); endfor; fi; \end{Geometrie} - } -}
\ No newline at end of file + }% +}%
\ No newline at end of file |