c813cba1f2d92f302204fdf6e5703aa61aa3f497
[mp-scratch.git] / doc / mp-scratch.tex
1 \documentclass[12pt]{article}
2 \usepackage[utf8]{inputenc}
3 \usepackage[T1]{fontenc}
4 \usepackage[a4paper,margin=2cm,nohead,includefoot]{geometry}
5 \usepackage{fourier}
6 \usepackage[scaled=0.875]{helvet}
7 \pagestyle{empty}
8 \usepackage[frenchb]{babel}
9 \input{Christ5}
10 \usepackage{graphicx}
11 \graphicspath{{figures/}}
12 \DeclareGraphicsRule{*}{mps}{*}{}
13 \usepackage{mflogo}
14 \usepackage{url}
15 \usepackage{multicol}
16 \usepackage{listingsutf8}
17 \usepackage{filecontents}
18 \lstset{language=MetaPost,inputencoding=utf8,basicstyle=\sffamily}
19 \usepackage[tikz]{bclogo}
20 %\renewcommand\bcStyleTitre[1]{}
21 \title{\includegraphics[scale=0.05]{Scratch_cat.png}\kern0.05\linewidth Scratch et \MP\kern0.05\linewidth\includegraphics{Carre.1}}
22 \author{
23 \begin{tabular}{c}
24 C.Poulain\\
25 \url{chrpoulain@gmail.com}\\
26 \end{tabular}
27 }
28 \date{Janvier 2017}
29 \begin{document}
30 \maketitle
31 \begin{abstract}
32 Comment utiliser \MP\ pour produire des algorithmes \og papier\fg\ avec les conventions de Scratch.
33 \end{abstract}
34 \vspace{2em}
35 \setcounter{tocdepth}{1}
36 \tableofcontents
37 \vspace{2em}
38 Avec les nouveaux programmes 2016 du Cycle 4 (Classes de 5\ieme\ à 3\ieme\ de collège) est apparu l'enseignement de l'algorithmique et l'utilisation de Scratch. Développé par le laboratoire Média du MIT, il permet de mettre en \oe uvre des algorithmes sous forme {\em ludique}. Sans rentrer dans un débat \og pour ou contre\fg, son emploi doit donc être enseigné aux élèves aux travers de différentes activités : questions {\em flash}\footnote{Sans aucun lien avec le langage informatique. Il s'agit de questions rapides posées en début de séance.}, questions de compréhension, modification, correction d'algorithmes\ldots\ Il fallait donc trouver une solution me permettant de proposer des algorithmes Scratch dans mes devoirs.\par La première solution envisagée a été, bien évidemment, la capture d'écran. Simple, facile, rapide\ldots\ ses avantages sont nombreux. Cependant, la qualité d'impression est parfois \og moyenne\fg\ldots
39 \\Soucieux de proposer quelque chose de plus {\em cohérent} avec le \og monde\fg\ \LaTeX, je me suis lancé dans la création de {\sffamily mp-scratch} avec pour objectif principal de proposer une syntaxe et une présentation très proche de celles utilisées par Scratch.
40 \begin{figure}[h]
41 \centering
42 \includegraphics[scale=0.85]{Scratch1.png}\kern0.05\linewidth\includegraphics{Algo1.1}
43 \caption{Algorithme de création d'un carré - Versions Scratch et \MP\protect\footnotemark}
44 \label{fig:1}
45 \end{figure}
46 \footnotetext{Ce premier algorithme me permet de remercier Maxime Chupin et son package {\sffamily bclogo} : le drapeau vert a été créé à partir des sources de son package et notamment la construction, en \MP, de ses drapeaux.}
47 \section{Installation}
48 {\sffamily mp-scratch} est indépendant des autres packages personnels déjà produits tels \lstinline!geometriesyr16!, \lstinline!mp-geo! ou \lstinline!mp-solid!.
49 \\Au travers d'un dépôt \lstinline!git!\footnote{Tous les contributeurs sont donc les bienvenus pour développer le package.}, on trouvera l'archive à l'adresse
50 \begin{center}
51 \url{http://melusine.eu.org/syracuse/G/mp-scratch/}
52 \end{center}
53 et l'ensemble des fichiers sera à placer correctement dans une arborescence \TeX\footnote{Arborescence locale de préférence, par exemple dans {\sffamily /home/christophe/texmf/metapost/} sous Linux.}.
54 \section{Utilisation}
55 \begin{figure}[h]
56 \centering
57 \begin{minipage}{0.4\linewidth}
58 \includegraphics{Algo1.1}
59 \end{minipage}
60 \hspace{4em}
61 \begin{minipage}{0.4\linewidth}
62 \small
63 \begin{lstlisting}[firstnumber=1,frame=tb]
64 input mp-scratch;
65
66 beginfig(1);
67 draw Drapeau;
68 draw Repeter1(4);
69 draw Avancer(50);
70 draw Tournerd(90);
71 draw FinBlocRepeter1(10);
72 endfig;
73 end
74 \end{lstlisting}
75 \end{minipage}
76 \caption{Un carré - Code et résultat sous \MP}
77 \label{fig:carre}
78 \end{figure}
79 %\par\vspace{1em}\par
80 Reprenons l'exemple de l'algorithme du carré pour faire les premières constatations suivantes :
81 \begin{Enumerate}
82 \item la syntaxe est très proche du vocabulaire utilisé par Scratch; donc très peu de nouvelles commandes à apprendre\ldots
83 \item les couleurs\footnote{Cela reste, bien évidemment, paramétrable. Les paramètres disponibles pour personnaliser les couleurs sont \lstinline!colMouv!, \lstinline!colAp!, \lstinline!colSon!, \lstinline!colStylo!, \lstinline!colEvenements!, \lstinline!colControle!, \lstinline!colCapteur!, \lstinline!colBloc!, \lstinline!colVar!, \lstinline!colList!.} sont celles utilisées par Scratch\footnote{Une nouvelle fois, merci à Maxime Chupin pour m'avoir fait découvrir l'utilitaire \lstinline!gcolor2! sous Linux};
84 \item le bloc {\sffamily Répéter} est particulier car il nécessite l'ajout {\em manuel} d'un nombre (ou chiffre)\footnote{{\sffamily Repeter2}, {\sffamily Repeter5}\ldots} qui permettra à \MP\ de faire la liaison correcte lors de la présence de multiples blocs {\sffamily Répéter} comme le montre l'exemple ci-dessous.
85 %\par\vspace{1em}\par
86 \begin{figure}[h]
87 \centering
88 \begin{minipage}{0.45\linewidth}
89 \includegraphics{Algo2.1}
90 \end{minipage}
91 \hspace{2em}
92 \begin{minipage}{0.35\linewidth}
93 \small
94 \begin{lstlisting}[firstnumber=1,frame=tb]
95 input mp-scratch;
96
97 beginfig(1);
98 draw Drapeau;
99 draw Repeter2(10);
100 draw Repeter1(4);
101 draw Avancer(50);
102 draw Tournerd(90);
103 draw FinBlocRepeter1(10);
104 draw Avancer(60);
105 draw FinBlocRepeter2(10);
106 endfig;
107 end
108 \end{lstlisting}
109 \end{minipage}
110 \caption{Un carré se déplace - Code et résultat sous \MP}
111 \label{fig:carredep}
112 \end{figure}
113 \end{Enumerate}
114 \begin{bclogo}[arrondi=0.1,logo=\bcattention,noborder=true,cadreTitre=false,barre=none]{}
115 Pour les codes \MP\ suivants, on omettra volontairement \lstinline!input mp-scratch! et \lstinline!end!.\footnotemark
116 \end{bclogo}
117 \footnotetext{Chacun aura reconnu le package \lstinline!bclogo! de Maxime Chupin.}
118 \subsection{Commandes Scratch}
119 \begin{description}
120 \item[Groupe {\sffamily Mouvement}]\hfil\newline
121 \begin{itemize}
122 \item[\textbullet]\lstinline!draw Avancer(10);!
123 \par\hfill\includegraphics{CommandeMouvement.1}
124 \item[\textbullet]\lstinline!draw Tournerd(90);!
125 \par\hfill\includegraphics{CommandeMouvement.2}
126 \item[\textbullet]\lstinline!draw Tournerg(90)!
127 \par\hfill\includegraphics{CommandeMouvement.3}
128 \item[\textbullet]\lstinline!draw Orienter(90);!
129 \par\hfill\includegraphics{CommandeMouvement.4}
130 \item[\textbullet]\lstinline!draw Orienterdirection("pointeur de souris");!
131 \par\hfill\includegraphics{CommandeMouvement.5}
132 \item[\textbullet]\lstinline!draw Aller(50,100);!
133 \par\hfill\includegraphics{CommandeMouvement.6}
134 \item[\textbullet]\lstinline!draw Allera("pointeur de souris");!
135 \par\hfill\includegraphics{CommandeMouvement.7}
136 \item[\textbullet]\lstinline!draw Glisser(2,50,100);!
137 \par\hfill\includegraphics{CommandeMouvement.8}
138 \item[\textbullet]\lstinline!draw Ajouter(10,"x");!
139 \par\hfill\includegraphics{CommandeMouvement.9}
140 \item[\textbullet]\lstinline!draw Mettre(10,"x");!
141 \par\hfill\includegraphics{CommandeMouvement.10}
142 \item[\textbullet]\lstinline!draw Ajouter(50,"y");!
143 \par\hfill\includegraphics{CommandeMouvement.11}
144 \item[\textbullet]\lstinline!draw Mettre(10,"y");!
145 \par\hfill\includegraphics{CommandeMouvement.12}
146 \item[\textbullet]\lstinline!draw Rebondir;!
147 \par\hfill\includegraphics{CommandeMouvement.13}
148 \item[\textbullet]\lstinline!draw FixerSensRotation("position \`a gauche ou \`a droite"';!
149 \par\hfill\includegraphics{CommandeMouvement.14}
150 \end{itemize}
151 Les \og opérateurs\footnote{Je nomme \og opérateurs\fg\ les variables ou commandes Scratch pouvant s'inclure dans les blocs-commande. Je me demande si je suis assez clair\ldots}\fg\
152 \[\includegraphics{CommandeMouvement.18}\kern0.1\linewidth\includegraphics{CommandeMouvement.19}\kern0.1\linewidth\includegraphics{CommandeMouvement.20}\]
153 s'obtiennent avec la commande \LaTeX\footnote{Oui, une commande \LaTeX. Cela signifie donc que cette commande sera passée comme un élément de type {\sffamily string} de \MP.} \lstinline!\opMouv{}! comme le montrent les exemples ci-dessous :
154 \begin{itemize}
155 \item[\textbullet]\lstinline!draw Avancer("\opOp{$\opMouv{abscisse x}\bm{+}\opSimple{10}$}");!
156 \par\hfill\includegraphics{CommandeMouvement.15}
157 \item[\textbullet]\lstinline!draw Mettre("\opMouv{abscisse x}","y");!
158 \par\hfill\includegraphics{CommandeMouvement.16}
159 \item[\textbullet]\lstinline!draw Ajouter("\opMouv{direction}","y");!
160 \par\hfill\includegraphics{CommandeMouvement.17}
161 \end{itemize}
162 \vspace*{2em}\par
163 \item[Groupe {\sffamily Apparence}]\hfil\newline
164 \begin{itemize}
165 \item[\textbullet]\lstinline!draw DireT("Hello",2);!
166 \par\hfill\includegraphics{CommandeApparence.1}
167 \item[\textbullet]\lstinline!draw Dire("Hello");!
168 \par\hfill\includegraphics{CommandeApparence.2}
169 \item[\textbullet]\lstinline!draw PenserT("Hmm...",2);!
170 \par\hfill\includegraphics{CommandeApparence.3}
171 \item[\textbullet]\lstinline!draw Penser("Hmm...");!
172 \par\hfill\includegraphics{CommandeApparence.4}
173 \item[\textbullet]\lstinline!draw Montrer;!
174 \par\hfill\includegraphics{CommandeApparence.5}
175 \item[\textbullet]\lstinline!draw Cacher;!
176 \par\hfill\includegraphics{CommandeApparence.6}
177 \item[\textbullet]\lstinline!draw Basculer("\opAp{costume2}");!
178 \par\hfill\includegraphics{CommandeApparence.7}
179 \item[\textbullet]\lstinline!draw CostumeSuivant;!
180 \par\hfill\includegraphics{CommandeApparence.8}
181 \item[\textbullet]\lstinline!draw BasculerAR("\opAp{arriere-plan2}");!
182 \par\hfill\includegraphics{CommandeApparence.9}
183 \item[\textbullet]\lstinline!draw AjouterEffet("\opAp{couleur}",10);!
184 \par\hfill\includegraphics{CommandeApparence.10}
185 \item[\textbullet]\lstinline!draw MettreEffet("\opAp{couleur}",10);!
186 \par\hfill\includegraphics{CommandeApparence.11}
187 \item[\textbullet]\lstinline!draw AnnulerEffet;!
188 \par\hfill\includegraphics{CommandeApparence.12}
189 \item[\textbullet]\lstinline!draw AjouterTaille(10);!
190 \par\hfill\includegraphics{CommandeApparence.13}
191 \item[\textbullet]\lstinline!draw MettreA("\opOp{$\opSimple{10}\bm{+}\opSimple{5}$}");!
192 \par\hfill\includegraphics{CommandeApparence.14}
193 \item[\textbullet]\lstinline!draw AllerPPlan;!
194 \par\hfill\includegraphics{CommandeApparence.15}
195 \item[\textbullet]\lstinline!draw DeplacerAP("\opOp{$\opMouv{abscisse x}\bm{+}\opSimple{10}$}");!
196 \par\hfill\includegraphics{CommandeApparence.16}
197 \end{itemize}
198 \par\vspace*{2em}\par Les \og opérateurs\fg\
199 \[\includegraphics{CommandeApparence.17}\kern0.1\linewidth\includegraphics{CommandeApparence.18}\kern0.1\linewidth\includegraphics{CommandeApparence.19}\]
200 s'obtiennent avec la commande \LaTeX\ \lstinline!\opAp{}!.
201 %\par\vspace*{2em}\par
202 \item[Groupe {\sffamily Son}]\hfil\newline
203 \begin{itemize}
204 \item[\textbullet]\lstinline!draw Jouer("miaou");!
205 \par\hfill\includegraphics{CommandeSon.1}
206 \item[\textbullet]\lstinline!draw JouerT("miaou");!
207 \par\hfill\includegraphics{CommandeSon.2}
208 \item[\textbullet]\lstinline!draw ArreterSon;!
209 \par\hfill\includegraphics{CommandeSon.3}
210 \item[\textbullet]\lstinline!draw Tambour(2,0.25);!
211 \par\hfill\includegraphics{CommandeSon.4}
212 \item[\textbullet]\lstinline!draw Pause(0.25);!
213 \par\hfill\includegraphics{CommandeSon.5}
214 \item[\textbullet]\lstinline!draw JouerNote(50,0.25);!
215 \par\hfill\includegraphics{CommandeSon.6}
216 \item[\textbullet]\lstinline!draw ChoisirInstrument(17);!
217 \par\hfill\includegraphics{CommandeSon.7}
218 \item[\textbullet]\lstinline!draw AjouterVol(-10);!
219 \par\hfill\includegraphics{CommandeSon.8}
220 \item[\textbullet]\lstinline!draw MettreVol(15);!
221 \par\hfill\includegraphics{CommandeSon.9}
222 \item[\textbullet]\lstinline!draw AjouterTempo(20);!
223 \par\hfill\includegraphics{CommandeSon.10}
224 \item[\textbullet]\lstinline!draw MettreTempo(15);!
225 \par\hfill\includegraphics{CommandeSon.11}
226 \end{itemize}
227 Les \og opérateurs\fg
228 \[\includegraphics{CommandeSon.12}\kern0.1\linewidth\includegraphics{CommandeSon.13}\]
229 s'obtiennent par la commande \LaTeX\ \lstinline!\opSon{}!.
230 \par\vspace*{2em}\par
231 \item[Groupe {\sffamily Stylo}]\hfil\newline
232 \begin{itemize}
233 \item[\textbullet]\lstinline!draw Effacer;!
234 \par\hfill\includegraphics{CommandeStylo.1}
235 \item[\textbullet]\lstinline!draw Estampiller;!
236 \par\hfill\includegraphics{CommandeStylo.2}
237 \item[\textbullet]\lstinline!draw PoserStylo;!
238 \par\hfill\includegraphics{CommandeStylo.3}
239 \item[\textbullet]\lstinline!draw ReleverStylo;!
240 \par\hfill\includegraphics{CommandeStylo.4}
241 \item[\textbullet]\lstinline!draw MettreCouleur("Magenta",1,0,1);!\footnote{La couleur est définie par son triplet {\sffamily rgb}. Le nom de la couleur est libre mais ne doit pas rentrer en conflit avec les couleurs déjà définies dans le sous-package {\sffamily LATEXScratch.mp}.}
242 \par\hfill\includegraphics{CommandeStylo.5}
243 \item[\textbullet]\lstinline!draw AjouterCS("\opOp{$\opSimple{15}\bm{+}\opSimple{10}$}");!
244 \par\hfill\includegraphics{CommandeStylo.6}
245 \item[\textbullet]\lstinline!draw MettreCS(25);!
246 \par\hfill\includegraphics{CommandeStylo.7}
247 \item[\textbullet]\lstinline!draw AjouterIS("\opOp{$\opSimple{25}\bm{-}\opSimple{10}$}");!
248 \par\hfill\includegraphics{CommandeStylo.8}
249 \item[\textbullet]\lstinline!draw MettreIS(15);!
250 \par\hfill\includegraphics{CommandeStylo.9}
251 \item[\textbullet]\lstinline!draw AjouterTS(12);!
252 \par\hfill\includegraphics{CommandeStylo.10}
253 \item[\textbullet]\lstinline!draw MettreTS("\opOp{$\opSimple{15}\bm{\times}\opSimple{10}$}");!
254 \par\hfill\includegraphics{CommandeStylo.11}
255 \end{itemize}
256 \vspace*{2em}\par
257 \item[Groupe {\sffamily Données}]\hfil\newline
258 \begin{itemize}
259 \item[\textbullet]\lstinline!draw MettreVar("pi",0);!
260 \par\hfill\includegraphics{CommandeVariable.1}
261 \item[\textbullet]\lstinline!draw AjouterVar("pi","\opOp{$\opSimple{15}\bm{+}\opSimple{10}$}");!
262 \par\hfill\includegraphics{CommandeVariable.2}
263 \item[\textbullet]\lstinline!draw MontrerVar("pi");!
264 \par\hfill\includegraphics{CommandeVariable.3}
265 \item[\textbullet]\lstinline!draw CacherVar("pi");!
266 \par\hfill\includegraphics{CommandeVariable.4}
267 \item[\textbullet]\lstinline!draw AjouterList("\opSimple{\LaTeX}","Listepi");!
268 \par\hfill\includegraphics{CommandeVariable.5}
269 \item[\textbullet]\lstinline!draw SupprimerList("\opSimple{\LaTeX}","Listepi");!
270 \par\hfill\includegraphics{CommandeVariable.6}
271 \item[\textbullet]\lstinline!draw InsererList("\opSimple{\MP}",1,"Listepi");!
272 \par\hfill\includegraphics{CommandeVariable.7}
273 \item[\textbullet]\lstinline!draw RemplacerList(3,"Listepi","\opOp{$\opSimple{4}\bm{+}\opSimple{5}$}");!
274 \par\hfill\includegraphics{CommandeVariable.8}
275 \item[\textbullet]\lstinline!draw MontrerList("Listepi");!
276 \par\hfill\includegraphics{CommandeVariable.9}
277 \item[\textbullet]\lstinline!draw CacherList("Listepi");!
278 \par\hfill\includegraphics{CommandeVariable.10}
279 \end{itemize}
280 \par\vspace*{2em}\par Les \og opérateurs\fg
281 \begin{center}
282 \begin{minipage}{0.8\linewidth}
283 \includegraphics{CommandeVariable.11}\hfill\includegraphics{CommandeVariable.12}\hfill \includegraphics{CommandeVariable.13}\par
284 \includegraphics{CommandeVariable.14}\hfill \includegraphics{CommandeVariable.15}
285 \end{minipage}
286 \end{center}
287 s'obtiennent par les commandes \LaTeX\ \lstinline!\opVar{}!, \lstinline!\opList{}! et \lstinline!\opSousList{}!.
288 \par\vspace*{2em}\par
289 \item[Groupe {\sffamily \'Evènement}]\hfil\newline
290 \begin{itemize}
291 \item[\textbullet]\lstinline!draw Drapeau;!
292 \par\hfill\includegraphics{CommandeEvenements.1}
293 \item[\textbullet]\lstinline!draw QPresse("espace");!
294 \par\hfill\includegraphics{CommandeEvenements.2}
295 \item[\textbullet]\lstinline!draw QLutinPresse;!
296 \par\hfill\includegraphics{CommandeEvenements.3}
297 \item[\textbullet]\lstinline!draw QBasculeAR("arriere-plan1");!
298 \par\hfill\includegraphics{CommandeEvenements.4}
299 \item[\textbullet]\lstinline!draw QVolumeSup("Volume sonore",10);!
300 \par\hfill\includegraphics{CommandeEvenements.5}
301 \item[\textbullet]\lstinline!draw QRecevoirMessage("message1");!
302 \par\hfill\includegraphics{CommandeEvenements.6}
303 \item[\textbullet]\lstinline!draw EnvoyerMessage("message1");!
304 \par\hfill\includegraphics{CommandeEvenements.7}
305 \item[\textbullet]\lstinline!draw EnvoyerMessageA("message1");!
306 \par\hfill\includegraphics{CommandeEvenements.8}
307 \end{itemize}
308 \vspace*{2em}\par
309 \item[Groupe {\sffamily Contrôle}]\hfil\newline
310 \begin{itemize}
311 \item[\textbullet]\lstinline!draw Attendre("\opOp{$\opSimple{10}\bm{+}\opSimple{40}$}");!
312 \par\hfill\includegraphics{CommandeControle.1}
313 \item[\textbullet]\lstinline!draw AttendreJ("\opOp{$\opSimple{10}\bm{+}\opMouv{Abscisse x}\bm{=}\opSimple{20}$}");!
314 \par\hfill\includegraphics{CommandeControle.6}
315 \item[\textbullet]\lstinline!draw Stop("ce script");!
316 \par\hfill\includegraphics{CommandeControle.8}
317 \item[\textbullet]\lstinline!draw CommencerClone;!
318 \par\hfill\includegraphics{CommandeControle.9}
319 \item[\textbullet]\lstinline!draw CreerClone("Lutin1");!
320 \par\hfill\includegraphics{CommandeControle.10}
321 \item[\textbullet]\lstinline!draw SupprimerClone;!
322 \par\hfill\includegraphics{CommandeControle.11}
323 \item[\textbullet]
324 \begin{lstlisting}[frame=tb]
325 draw Repeter1("\opOp{$\opSimple{10}\bm{+}\opSimple{40}$}");
326 draw LigneVide("Bonjour");
327 draw FinBlocRepeter1(10);
328 \end{lstlisting}
329 \par\hfill\includegraphics{CommandeControle.2}
330 \item[\textbullet]
331 \begin{lstlisting}[frame=tb]
332 draw RepeterI1;
333 draw LigneVide("Bonjour");
334 draw FinBlocRepeterI1(10);
335 \end{lstlisting}
336 \par\hfill\includegraphics{CommandeControle.3}
337 \par On remarquera ici la distinction \lstinline!FinBlocRepeter1! et \lstinline!FinBlocRepeterI1!. Le premier autorise une suite à l'algorithme (par la présence du cadre \og puzzle\fg), le deuxième non.
338 \\Une deuxième remarque concerne la \og sortie\fg\ des blocs \lstinline!Repeter! (elle est aussi valable pour les blocs \lstinline!Si!\ldots\lstinline!alors!). Comme l'indique la figure \ref{fig:pbsortiebloc} et contrairement à \lstinline!Scratch!, j'ai {\em choisi}\footnote{Par commodité de programmation, par esthétique et aussi par conception de la sortie d'un tel bloc.} de ne pas faire de distinction \og puzzle / non puzzle\fg\ en fin de boucle (ou test).
339 \begin{figure}[h!]
340 \centering
341 \includegraphics[width=0.5\linewidth]{Scratchpbsortiebloc-1}\hfill\includegraphics{SortieBloc.1}
342 \caption{Comparaison Scratch / \MP\ pour l'affichage des \og sorties\fg\ de boucles et tests.}
343 \label{fig:pbsortiebloc}
344 \end{figure}
345
346 \`A noter dans le code \MP\ de cet exemple, l'utilisation du paramètre \lstinline! _coinprec ! afin de placer différentes partie d'un algorithme au sein d'une même figure \MP.
347 \begin{lstlisting}[frame=tb]
348 ...
349 draw FinBlocRepeter1(10);
350 _coinprec:=_coinprec+(0,-1cm);
351 draw Si2("\opOp{$\opVar{i}\bm{<}10$}");
352 ...
353 \end{lstlisting}%
354
355 \item[\textbullet]
356 \begin{lstlisting}[frame=tb]
357 draw Si1("\opOp{$\opSimple{10}\bm{+}\opMouv{Abscisse x}%
358 \bm{=}\opSimple{20}$}");
359 draw LigneVide("Bonjour");
360 draw FinBlocSi1;
361 \end{lstlisting}
362 \par\hfill\includegraphics{CommandeControle.4}
363 \item[\textbullet]
364 \begin{lstlisting}[frame=tb]
365 draw Si1("\opOp{$\opSimple{10}\bm{+}\opMouv{Abscisse x}%
366 \bm{=}\opSimple{20}$}");
367 draw LigneVide("Bonjour");
368 draw Sinon1;
369 draw LigneVide("Bonjour");
370 draw FinBlocSi1;
371 \end{lstlisting}
372 \par\hfill\includegraphics{CommandeControle.5}
373 \item[\textbullet]
374 \begin{lstlisting}[frame=tb]
375 draw RepeterJ1("\opOp{$\opSimple{10}\bm{+}\opMouv{Abscisse x}%
376 \bm{=}\opSimple{20}$}");
377 draw LigneVide("Bonjour");
378 draw FinBlocRepeter1(10);
379 \end{lstlisting}
380 \par\hfill\includegraphics{CommandeControle.7}
381 \end{itemize}
382 \vspace*{2em}\par
383 \item[Groupe {\sffamily Capteurs}]\hfil\newline
384 \begin{itemize}
385 \item[\textbullet]\begin{filecontents*}{capteur1.txt}
386 draw Demander("Quel est votre prénom ?");
387 \end{filecontents*}
388 \lstinputlisting[inputencoding=utf8/latin1]{capteur1.txt}
389 \par\hfill\includegraphics{CommandeCapteurs.1}
390 \item[\textbullet]\lstinline!draw ActiverVideo("active");!
391 \par\hfill\includegraphics{CommandeCapteurs.2}
392 \item[\textbullet]\lstinline!draw TransparenceVideo("\opOp{$\opSimple{17}\bm{+}\opSimple{25}$}");!
393 \par\hfill\includegraphics{CommandeCapteurs.3}
394 \item[\textbullet]\lstinline!draw ReinitChrono;!
395 \par\hfill\includegraphics{CommandeCapteurs.4}
396 \end{itemize}
397 Les \og opérateurs\fg
398 \begin{center}
399 \begin{minipage}{0.8\linewidth}
400 \includegraphics{CommandeCapteurs.5}\par
401 \includegraphics{CommandeCapteurs.6}\hfill \includegraphics{CommandeCapteurs.7}\par
402 \includegraphics{CommandeCapteurs.19}\par
403 \includegraphics{CommandeCapteurs.20}\hfill\includegraphics{CommandeCapteurs.8}
404 \par\includegraphics{CommandeCapteurs.9}\hfill \includegraphics{CommandeCapteurs.10}\hfill\includegraphics{CommandeCapteurs.11}
405 \par\includegraphics{CommandeCapteurs.12}\hfill \includegraphics{CommandeCapteurs.13}\par
406 \includegraphics{CommandeCapteurs.14}\hfill\includegraphics{CommandeCapteurs.15}
407 \par\includegraphics{CommandeCapteurs.16}\hfill
408 \includegraphics{CommandeCapteurs.17}\hfill\includegraphics{CommandeCapteurs.18}
409 \end{minipage}
410 \end{center}
411 s'obtiennent par les commandes \LaTeX\ \lstinline!\opCap{}! et \lstinline!\opCapCap{}!.
412 Néanmoins, il faut parfois un codage conséquent. Par exemple, voici un capteur et son code.
413 \par\begin{minipage}{0.3\linewidth}
414 \includegraphics{CommandeCapteurs.7}
415 \end{minipage}
416 \hfill
417 \begin{minipage}{0.65\linewidth}
418 \small
419 \begin{lstlisting}[frame=tb]
420 \opCap{couleur %
421 \definecolor{Magenta}{rgb}{1,0,1}%
422 \colorbox{Magenta}{\textcolor{white}{%
423 \phantom{t}}}touche%
424 \definecolor{LGray}{gray}{0.85}%
425 \colorbox{LGray}{\textcolor{white}{%
426 \phantom{t}}} ?%
427 }
428 \end{lstlisting}
429 \end{minipage}
430 \\Un peu barbare, non ? Mais, cela ne nécessitera qu'un simple copier-coller pour les autres utilisations\ldots%}
431 \par\vspace*{2em}\par
432 \item[Groupe {\sffamily Opérateurs}]\hfil\newline
433 Les éléments%
434 \begin{center}
435 \begin{minipage}{0.8\linewidth}
436 \includegraphics{CommandeOperateurs.1}\hfill\includegraphics{CommandeOperateurs.2}\hfill\includegraphics{CommandeOperateurs.3}\hfill
437 \includegraphics{CommandeOperateurs.4}\par
438 \includegraphics{CommandeOperateurs.5}\par
439 \includegraphics{CommandeOperateurs.6}\hfill \includegraphics{CommandeOperateurs.7}\hfill\includegraphics{CommandeOperateurs.8}
440 \par\includegraphics{CommandeOperateurs.9}\hfill \includegraphics{CommandeOperateurs.10}\hfill\includegraphics{CommandeOperateurs.11}
441 \par\includegraphics{CommandeOperateurs.12}\hfill \includegraphics{CommandeOperateurs.13}\par
442 \includegraphics{CommandeOperateurs.14}
443 \par\includegraphics{CommandeOperateurs.15}\hfill\includegraphics{CommandeOperateurs.16}\hfill\includegraphics{CommandeOperateurs.17}
444 \end{minipage}
445 \end{center}
446 s'obtiennent par les commandes \LaTeX\ \lstinline!\opOp{}! et \lstinline!\opSousOp{}!.
447 \vspace*{2em}\par
448 \item[Groupe {\sffamily Ajouter blocs}]\hfil\newline
449 \begin{itemize}
450 \item[\textbullet]\lstinline!draw NouveauBloc("Pentagone");!
451 \par\hfill\includegraphics{CommandeBloc.1}
452 \item[\textbullet]\lstinline!draw NouveauBloc("Pentagone \opBloc{cote}");!
453 \par\hfill\includegraphics{CommandeBloc.3}
454 \item[\textbullet]\lstinline!draw Bloc("Pentagone");!
455 \par\hfill\includegraphics{CommandeBloc.2}
456 \end{itemize}
457 \item[Groupe {\sffamily Divers}]\hfil\newline
458 D'un point de vue pédagogique, il m'est apparu nécessaire d'ajouter la possibilité de donner l'illusion d'un algorithme \og vide\fg. J'ai donc créé la commande \lstinline!LigneVide! qui demande un argument simple (on pourra se reporter aux exemples du groupe {\sffamily Contrôle}\footnote{On peut obtenir le même résultat avec le paramètre \lstinline! _coinprec ! mais la précision de placement me semble plus délicate à obtenir.}).
459 \\On aura également à disposition \lstinline!CommandeVide("Bonjour!")! afin de faire compléter un algorithme par les élèves.
460 \begin{figure}[h]
461 \centering
462 \begin{minipage}{0.4\linewidth}
463 \includegraphics{ExCommandeVide.1}
464 \end{minipage}
465 \hfill
466 \begin{minipage}{0.5\linewidth}
467 \begin{filecontents*}{CommandeVide.txt}
468 beginfig(1);
469 draw Drapeau;
470 draw Repeter1(4);
471 draw Avancer(50);
472 draw CommandeVide("Tourner à droite%
473 de 90 degrés");
474 draw FinBlocRepeter1(10);
475 endfig;
476 \end{filecontents*}
477 \lstinputlisting[inputencoding=utf8/latin1,frame=tb]{CommandeVide.txt}
478 \end{minipage}
479 \caption{Utilisation de \lstinline!CommandeVide!}
480 \label{fig:CommandeVide}
481 \end{figure}
482 \end{description}
483 Terminons cette liste de commandes par un algorithme associé à la suite de Syracuse :)
484 \[\includegraphics[scale=0.8]{Syracuse.1}\]
485 \begin{filecontents*}{Syracuse.txt}
486 beginfig(1);
487 draw Drapeau;
488 draw SupprimerList("\opSimple{tout}","Suite");
489 draw Demander("\opSimple{Quel est le nombre choisi ?}");
490 draw AjouterList("\opCap{réponse}","Suite");
491 draw MettreVar("pas",1);
492 draw RepeterI1;
493 draw Si2("\opOp{\opList{élément \opVar{pas} de \opSousList{Suite}} modulo \opSimple{2}%
494 \,$\bm{=}$\,\opSimple{0}}");
495 draw MettreVar("résultat","\opOp{\opList{élément \opVar{pas} de \opSousList{Suite}}%
496 \,$\bm{/}$\,\opSimple{2}}");
497 draw Sinon2;
498 draw MettreVar("résultat","\opOp{\opSimple{3}\,$\bm{\times}$\,\opList{élément \opVar{pas}%
499 de \opSousList{Suite}}\,$\bm{+}$\,\opSimple{1}}");
500 draw FinBlocSi2;
501 draw Si3("\opList{\opSousList{Suite} contient \opVar{résultat} ?}");
502 draw Stop("tout");
503 draw Sinon3;
504 draw AjouterList("\opVar{résultat}","Suite");
505 draw AjouterVar("pas",1);
506 draw FinBlocSi3;
507 draw FinBlocRepeter1(10);
508 endfig;
509 \end{filecontents*}
510 {\footnotesize
511 \lstinputlisting[inputencoding=utf8/latin1,frame=tb]{Syracuse.txt}
512 }
513 \newpage
514 \section{Quelques exemples}
515 \subsection{Sujet de Brevet des collèges}
516 \vspace{-2em}
517 % \begin{figure}[h]
518 % \centering
519 % \includegraphics{Scratch2-2}
520 %\caption{Figure du Sujet 0 de mathématiques du Brevet des Collèges}
521 %\label{fig:4}
522 %\end{figure}
523 \begin{figure}[h]
524 \centering
525 \includegraphics{Scratch2-2}\par
526 \includegraphics[scale=0.85]{Scratch2-3}\kern0.05\linewidth\includegraphics{Algo3.1}
527 \caption{Figure du Sujet 0 - versions Scratch et \MP}
528 \label{fig:3}
529 \end{figure}
530 %\begin{minipage}{0.5\linewidth}
531 {\small
532 \begin{lstlisting}[firstnumber=1,frame=tb]
533 beginfig(1);
534 draw Drapeau;
535 draw Effacer;
536 draw MettreTS(1);
537 draw Repeter2(6);
538 draw PoserStylo;
539 draw Repeter1(4);
540 draw Avancer(50);
541 draw Tournerd(90);
542 draw FinBlocRepeter1(10);
543 draw ReleverStylo;
544 draw AjouterTS(1);
545 draw Avancer(60);
546 draw FinBlocRepeter2(10);
547 endfig;
548 \end{lstlisting}
549 }
550 \newpage
551 \subsection{\OE uvre d'art}
552 \begin{figure}[h]
553 \centering
554 \includegraphics[width=0.7\linewidth]{Morellet}
555 \label{fig:5}
556 \caption{François Morellet - Oeuvre Pi piquant, 1=1°, 38 décimales}
557 \end{figure}
558 \[\includegraphics[width=0.7\linewidth]{Ex-Morellet.1}\]
559 \begin{filecontents*}{Morellet.txt}
560 beginfig(1)%François Morellet - Oeuvre Pi piquant, 1=1°, 38 décimales
561 draw Drapeau;
562 draw Effacer;
563 draw Aller(-50,0);
564 draw Orienter(180);
565 draw PoserStylo;
566 draw Tournerg("\opList{élément \opSimple{1} de \opSousList{Pi}}");
567 draw Avancer(150);
568 draw MettreVar("varpi","\opSimple{2}");
569 draw RepeterJ1("\opOp{\opVar{varpi}\,$\bm{>}$\,38}");
570 draw Si2("$\opOp{\opVar{varpi}\mbox{ modulo }\opSimple{2}\,=\,\opSimple{0}}$");
571 draw Tournerg("$\opOp{\opSimple{180}}\bm{-}\opList{élément \opVar{varpi}
572 de \opSousList{pi}}$");
573 draw Sinon2;
574 draw Tournerd("$\opOp{\opSimple{180}}-\opList{élément \opVar{varpi} de \opSousList{pi}}$");
575 draw FinBlocSi2;
576 draw Avancer(150);
577 draw AjouterVar("varpi","\opSimple{1}");
578 draw FinBlocRepeter1(10);
579 draw ReleverStylo;
580 endfig;
581 \end{filecontents*}
582 {\footnotesize
583 \lstinputlisting[inputencoding=utf8/latin1,frame=tb]{Morellet.txt}
584 }
585 \newpage
586 \subsection{Une \og spirale\fg}
587 \begin{figure}[h!]
588 \centering
589 \begin{minipage}{0.4\linewidth}
590 \[\includegraphics[scale=0.8]{ex-tice74.1}\]
591 {\tiny Source : \url{http://www.ac-grenoble.fr/tice74/spip.php?article1219}}
592 \end{minipage}
593 \hfill
594 \begin{minipage}{0.55\linewidth}
595 \begin{lstlisting}[frame=tb]
596 beginfig(1);
597 draw Drapeau;
598 draw ReleverStylo;
599 draw Aller(0,0);
600 draw Orienter(90);
601 draw PoserStylo;
602 draw MettreVar("i",1);
603 draw RepeterJ1("\opOp{$\opVar{i}\bm{=}%
604 \opSimple{200}$}");
605 draw Avancer("\opVar{i}");
606 draw AjouterVar("i",1);
607 draw Tournerd(121);
608 draw FinBlocRepeter1(10);
609 endfig;
610 \end{lstlisting}
611 \end{minipage}
612 \caption{Figure géométrique - Code Scratch}
613 \label{fig:10}
614 \end{figure}
615 \[\includegraphics[scale=1]{ex-tice74-scratch.1}\]
616 \newpage
617 \subsection{Triangle de Sierpinski}
618 \begin{figure}[h]
619 \centering
620 \includegraphics[scale=0.5]{Ex-Serpinski.1}\par
621 \includegraphics{Ex-Serpinski-scratch.1}
622 \caption{Triangle de Sierpinski - Code Scratch et \MP}
623 \label{fig:11}
624 \end{figure}
625 %\begin{lstlisting}[frame=tb]
626 \begin{filecontents*}{Sierpinski.txt}
627 beginfig(1);%https://sites.google.com/site/stjomaths/scratch
628 draw Drapeau;
629 draw Aller(-200,-150);
630 draw Orienter(0);
631 draw Effacer;
632 draw PoserStylo;
633 draw Demander("\opSimple{rang ?}");
634 draw MettreVar("rang","\opCap{réponse}");
635 draw Demander("\opSimple{dimension du motif ?}");
636 draw MettreVar("rang","\opCap{réponse}");
637 draw Bloc("Sierpinski \opBloc{rang} \opBloc{triangles}");
638 _coinprec:=(8.5cm,0);
639 draw NouveauBloc("Sierpinski \opBloc{rang} \opBloc{triangles}");
640 draw Si1("\opOp{non $\opBloc{rang}\bm{=}0$}");
641 draw Repeter2(3);
642 draw Bloc("Sierpinski \opOp{$\opBloc{rang}\bm{-}\opSimple{1}$}%
643 \opOp{$\opBloc{triangles}\,\bm{/}\,\opSimple{2}$}");
644 draw Avancer("\opBloc{triangles}");
645 draw Tournerd(120);
646 draw FinBlocRepeter2(10);
647 draw FinBlocSi1;
648 endfig;
649 \end{filecontents*}
650 %\end{lstlisting}
651 {\footnotesize
652 \lstinputlisting[inputencoding=utf8/latin1,frame=tb]{Sierpinski.txt}
653 }
654 \newpage
655 \section{Historique}
656 \begin{description}
657 \item[15/02/2017] {\bfseries Version 0.57} - Correction de problèmes mineurs d'affichage. Correction de la documentation.
658 \item[14/02/2017] {\bfseries Version 0.55} - Mise à jour de la documentation.
659 \item[13/02/2017] {\bfseries Version 0.53} - Ajout des chanfreins sur les blocs. Correction de \og doublons\fg\ de commandes. Mise à jour de la documentation.
660 \item[05/02/2017] {\bfseries Version 0.51} - Sur les conseils de Maxime Chupin et Thierry Pasquier, travail sur les couleurs (mise en accord avec celles de Scratch et personnalisation possible). Passage des majuscules aux minuscules pour les blocs.
661 \item[21/01/2017] {\bfseries Version 0.5} - Publication sur \url{www.melusine.eu.org/syracuse/}
662 \item[19/01/2017] {\bfseries Version 0.32} - Ajout d'éléments de présentation ($\blacktriangledown$).
663 \item[18/01/2017] {\bfseries Version 0.31} - Ajout du groupe {\sffamily Son}.
664 \item[15/01/2017] {\bfseries Version 0.3} - Modification du code. Conception de la documentation.
665 \item[08/01/2017] {\bfseries Version 0.2} - Ajout des commandes des groupes {\sffamily Données} et {\sffamily Capteurs}.
666 \item[06/01/2017] {\bfseries Version 0.15} - Ajout des commandes du groupe {\sffamily Ajouter blocs}.
667 \item[05/01/2017] {\bfseries Version 0.1} - Sont disponibles les commandes des groupes {\sffamily Mouvement}, {\sffamily Apparence}, {\sffamily Stylo}, {\sffamily Évènements}, {\sffamily Contrôle}.
668 \end{description}
669 \end{document}

Licence Creative Commons Les fichiers de Syracuse sont mis à disposition (sauf mention contraire) selon les termes de la
Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.