1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
%%%
% 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}%
}%
|