%%% % Multiplication par jalousie %%% \def\filedateMulJal{2024/08/04}% \def\fileversionMulJal{0.1}% \message{-- \filedateMulJal\space v\fileversionMulJal}% % \setKVdefault[MulJal]{Solution=false,CouleurTab=gray!15}% \defKV[MulJal]{CouleurSolution=\setKV[MulJal]{Solution}}% % \NewDocumentCommand\MulJalousie{om}{% \useKVdefault[MulJal]% \setKV[MulJal]{#1}% \setsepchar{x}\ignoreemptyitems% \readlist*\PfCMulJal{#2}% \ifboolKV[MulJal]{Solution}{\colorlet{CouleurSolution}{\useKV[MulJal]{CouleurSolution}}}{\colorlet{CouleurSolution}{black}}% % Les facteurs sont \showitems\PfCMulJal[]. \BuildTabMulJal% }% \NewDocumentCommand\BuildTabMulJal{}{% \StrLen{\PfCMulJal[1]}[\PremierFacteurlen]% \StrLen{\PfCMulJal[2]}[\DeuxiemeFacteurlen]% \xdef\PfCMulJalPdt{\fpeval{\PfCMulJal[1]*\PfCMulJal[2]}}% \StrLen{\PfCMulJalPdt}[\Produitlen]% \StrChar{\PfCMulJal[1]}{1}[\PfCMulA]% \StrChar{\PfCMulJal[2]}{1}[\PfCMulB]% \xdef\PfCMulC{\fpeval{\PfCMulA*\PfCMulB}}% \quotient{\PfCMulC}{10}\relax% \xdef\Report{\the\intquotient/}% \xintFor* ##1 in{\xintSeq{2}{\fpeval{\PremierFacteurlen+\DeuxiemeFacteurlen}}}\do{% \xintFor* ##2 in{\xintSeq{1}{\DeuxiemeFacteurlen}}\do{% \xintFor* ##3 in{\xintSeq{1}{\PremierFacteurlen}}\do{% \xintifboolexpr{##2+##3==##1}{% \ifnum##2=1% \ifnum##3<\PremierFacteurlen% \StrChar{\PfCMulJal[1]}{\fpeval{##3+1}}[\PfCMulA]% \StrChar{\PfCMulJal[2]}{##2}[\PfCMulB]% \xdef\PfCMulC{\fpeval{\PfCMulA*\PfCMulB}}% \quotient{\PfCMulC}{10}\relax% \xdef\Report{\Report \the\intquotient}% \fi% \fi% \StrChar{\PfCMulJal[1]}{##3}[\PfCMulA]% \StrChar{\PfCMulJal[2]}{##2}[\PfCMulB]% \xdef\PfCMulC{\fpeval{\PfCMulA*\PfCMulB}}% \modulo{\PfCMulC}{10}\relax% \ifnum##3=\PremierFacteurlen% \xdef\Report{\Report \the\remainder}% \else% \xdef\Report{\Report,\the\remainder}% \fi% \ifnum##2<\DeuxiemeFacteurlen% \StrChar{\PfCMulJal[1]}{##3}[\PfCMulA]% \StrChar{\PfCMulJal[2]}{\fpeval{##2+1}}[\PfCMulB]% \xdef\PfCMulC{\fpeval{\PfCMulA*\PfCMulB}}% \quotient{\PfCMulC}{10}\relax% \xdef\Report{\Report,\the\intquotient}% \fi% }{}% }% }% \xdef\Report{\Report/}% }% \setsepchar[*]{/*,}\ignoreemptyitems% \readlist*\Lesdiagonales{\Report}% %Calculs les sommes en diagonales. \xintFor* ##1 in{\xintSeq{1}{\fpeval{\PremierFacteurlen+\DeuxiemeFacteurlen}}}\do{% \xdef\PfCFoo{\Lesdiagonales[##1]}% \setsepchar{,}\ignoreemptyitems% \readlist*\LaDiagonale{\PfCFoo}% \xdef\LaSomme{0}% \foreachitem\compteur\in\LaDiagonale{\xdef\LaSomme{\fpeval{\LaSomme+\LaDiagonale[\compteurcnt]}}}% }% % \colorlet{PfCFondTab}{\useKV[MulJal]{CouleurTab}}% \begin{NiceTabular}{*{1}{p{25pt}}*{\PremierFacteurlen}{p{25pt}}c}% \rule{0pt}{25pt}\xintFor* ##1 in{\xintSeq{1}{1}}\do{% &}\xintFor* ##1 in{\xintSeq{1}{\PremierFacteurlen}}\do{% \Block[fill=PfCFondTab,draw,v-center]{}{\StrChar{\PfCMulJal[1]}{##1}}&% }\Block[fill=PfCFondTab,draw,v-center]{}{$\times$}\\% \xintFor* ##1 in{\xintSeq{1}{\DeuxiemeFacteurlen}}\do{% \rule{0pt}{25pt}% \xintFor* ##3 in{\xintSeq{1}{1}}\do{% &}\xintFor* ##2 in{\xintSeq{1}{\PremierFacteurlen}}\do{% &}\Block[fill=PfCFondTab,draw,v-center]{}{\StrChar{\PfCMulJal[2]}{##1}}\\% }% \xintFor* ##1 in{\xintSeq{1}{\fpeval{\PremierFacteurlen+2}}}\do{% \rule{0pt}{25pt}\xintifForLast{}{&}% }\\% \CodeAfter% \ifboolKV[MulJal]{Solution}{% \xintFor* ##1 in{\xintSeq{1}{\DeuxiemeFacteurlen}}\do{% \xintFor* ##2 in{\xintSeq{1}{\PremierFacteurlen}}\do{% \StrChar{\PfCMulJal[1]}{##2}[\PfCMulA]% \StrChar{\PfCMulJal[2]}{##1}[\PfCMulB]% \xdef\PfCMulC{\fpeval{\PfCMulA*\PfCMulB}}% \xintifboolexpr{\PfCMulC>9}{% \tikz{\node[anchor=north west] at (\fpeval{##1+1}-|\fpeval{##2+1}) {\StrChar{\PfCMulC}{1}};}% \tikz{\node[anchor=south east] at (\fpeval{##1+2}-|\fpeval{##2+2}) {\StrChar{\PfCMulC}{2}};}% }{% \tikz{\node[anchor=north west] at (\fpeval{##1+1}-|\fpeval{##2+1}) {0};}% \tikz{\node[anchor=south east] at (\fpeval{##1+2}-|\fpeval{##2+2}) {\PfCMulC};}% }% }% }% }{}% % Affichage des diagonales \xintFor* ##1 in{\xintSeq{1}{\fpeval{\DeuxiemeFacteurlen+1}}}\do{% \xintFor* ##2 in {\xintSeq{1}{\fpeval{\PremierFacteurlen+1}}}\do{% \tikz{\draw (\fpeval{##1+1}-|\fpeval{##2+1})--(\fpeval{##1+2}-|##2);}% }% }% % affichage du quadrillage interieur \xintFor* ##1 in {\xintSeq{1}{\PremierFacteurlen}}\do{% \tikz{\draw (2-|\fpeval{##1+1}) -- (\fpeval{\DeuxiemeFacteurlen+2}-|\fpeval{##1+1});}% }% \xintFor* ##1 in {\xintSeq{1}{\fpeval{\DeuxiemeFacteurlen+1}}}\do{% \tikz{\draw (\fpeval{##1+1}-|2)--(\fpeval{##1+1}-|last);}% }% % Affichage du produit \ifboolKV[MulJal]{Solution}{% \xintFor* ##1 in{\xintSeq{1}{\PremierFacteurlen}}\do{% \StrChar{\PfCMulJalPdt}{\fpeval{\Produitlen+1-##1}}[\PfCMulJalChiffre]% \tikz{\node[CouleurSolution] at (\fpeval{\DeuxiemeFacteurlen+2+0.5}-|\fpeval{\PremierFacteurlen+2-##1}) {\PfCMulJalChiffre};}% }% \xintFor* ##1 in{\xintSeq{1}{\DeuxiemeFacteurlen}}\do{% \StrChar{\PfCMulJalPdt}{\fpeval{\Produitlen+1-\PremierFacteurlen-##1}}[\PfCMulJalChiffre]% \tikz{\node[CouleurSolution] at (\fpeval{\DeuxiemeFacteurlen+3-##1}-|\fpeval{1.5}) {\PfCMulJalChiffre};}% }% % Affichage des retenues \xdef\Retenue{0}% \xintFor* ##1 in{\xintSeq{2}{\fpeval{\DeuxiemeFacteurlen+\PremierFacteurlen}}}\do{% \xdef\PfCFoo{\Lesdiagonales[\fpeval{\DeuxiemeFacteurlen+\PremierFacteurlen+1-##1}]}% \setsepchar{,}\ignoreemptyitems% \readlist*\LaDiagonale{\PfCFoo}% \xdef\LaSomme{0}% \foreachitem\compteur\in\LaDiagonale{\xdef\LaSomme{\fpeval{\LaSomme+\LaDiagonale[\compteurcnt]}}}% \xdef\LaSomme{\fpeval{\LaSomme+\Retenue}}% \ifnum\LaSomme>9% \quotient{\LaSomme}{10}% \xdef\Retenue{\the\intquotient}% \ifnum##1<\PremierFacteurlen% \tikz{\node[anchor=north,inner sep=1pt] at (\fpeval{\DeuxiemeFacteurlen+2}-|\fpeval{\PremierFacteurlen+1.5-##1}) {\tiny$+\the\intquotient$};}% \else% \tikz{\node[anchor=east,inner sep=1pt] at (\fpeval{\DeuxiemeFacteurlen+1.5-(##1-\PremierFacteurlen)}-|2) {\tiny$\the\intquotient+$};}% \fi% \fi% }% }{}% \end{NiceTabular}% }%