summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/profcollege/latex/PfCRepresenterEntier.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCRepresenterEntier.tex')
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCRepresenterEntier.tex118
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