Modifications (couleurs, chanfreins...) pour un rapprochement vers Scratch
[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{C.Poulain}
23 \date{Janvier 2017}
24 \begin{document}
25 \maketitle
26 \begin{abstract}
27 Utiliser \MP\ pour produire des algorithmes \og papier\fg\ avec les conventions de Scratch.
28 \end{abstract}
29 \vspace{2em}
30 \setcounter{tocdepth}{1}
31 \tableofcontents
32 \vspace{2em}
33 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
34 \\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.
35 \begin{figure}[h]
36 \centering
37 \includegraphics[scale=0.85]{Scratch1.png}\kern0.05\linewidth\includegraphics{Algo1.1}
38 \caption{Algorithme de création d'un carré - Versions Scratch et \MP\protect\footnotemark}
39 \label{fig:1}
40 \end{figure}
41 \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.}
42 \section{Installation}
43 Le package {\sffamily mp-scratch} est indépendant d'autres packages personnels tels \lstinline!geometriesyr16!, \lstinline!mp-geo! ou \lstinline!mp-solid!.
44 \\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
45 \begin{center}
46 \url{http://melusine.eu.org/syracuse/G/mp-scratch/}
47 \end{center}
48 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.}.
49 \section{Utilisation}
50 \begin{figure}[h]
51 \centering
52 \begin{minipage}{0.4\linewidth}
53 \includegraphics{Algo1.1}
54 \end{minipage}
55 \hfill
56 \begin{minipage}{0.5\linewidth}
57 \small
58 \begin{lstlisting}[firstnumber=1,frame=tb]
59 input mp-scratch;
60
61 beginfig(1);
62 draw Drapeau;
63 draw Repeter1(4);
64 draw Avancer(50);
65 draw Tournerd(90);
66 draw FinBlocRepeter1(10);
67 endfig;
68 end
69 \end{lstlisting}
70 \end{minipage}
71 \caption{Un carré - Code et résultat sous \MP}
72 \label{fig:carre}
73 \end{figure}
74 %\par\vspace{1em}\par
75 Reprenons l'exemple de l'algorithme du carré pour faire les premières constatations suivantes :
76 \begin{Enumerate}
77 \item la syntaxe est très proche du vocabulaire utilisé par Scratch; donc très peu de nouvelles commandes à apprendre\ldots
78 \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};
79 \item le bloc {\sffamily Répéter} est un peu 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.
80 %\par\vspace{1em}\par
81 \begin{figure}[h]
82 \centering
83 \begin{minipage}{0.3\linewidth}
84 \includegraphics{Algo2.1}
85 \end{minipage}
86 \hspace{7.5em}
87 \begin{minipage}{0.35\linewidth}
88 \small
89 \begin{lstlisting}[firstnumber=1,frame=tb]
90 input mp-scratch;
91
92 beginfig(1);
93 draw Drapeau;
94 draw Repeter2(10);
95 draw Repeter1(4);
96 draw Avancer(50);
97 draw Tournerd(90);
98 draw FinBlocRepeter1(10);
99 draw Avancer(60);
100 draw FinBlocRepeter2(10);
101 endfig;
102 end
103 \end{lstlisting}
104 \end{minipage}
105 \caption{Un carré se déplace - Code et résultat sous \MP}
106 \label{fig:carredep}
107 \end{figure}
108 \end{Enumerate}
109 \begin{bclogo}[arrondi=0.1,logo=\bcattention,noborder=true,cadreTitre=false,barre=none]{}
110 Pour les codes \MP\ suivants, on omettra volontairement \lstinline!input mp-scratch! et \lstinline!end!.\footnotemark
111 \end{bclogo}
112 \footnotetext{Chacun aura reconnu le package \lstinline!bclogo! de Maxime Chupin.}
113 \subsection{Commandes Scratch}
114 \begin{description}
115 \item[Groupe {\sffamily Mouvement}]\hfil\newline
116 \begin{itemize}
117 \item[\textbullet]\lstinline!draw Avancer(10);!
118 \par\hfill\includegraphics{CommandeMouvement.1}
119 \item[\textbullet]\lstinline!draw Tournerd(90);!
120 \par\hfill\includegraphics{CommandeMouvement.2}
121 \item[\textbullet]\lstinline!draw Tournerg(90)!
122 \par\hfill\includegraphics{CommandeMouvement.3}
123 \item[\textbullet]\lstinline!draw Orienter(90);!
124 \par\hfill\includegraphics{CommandeMouvement.4}
125 \item[\textbullet]\lstinline!draw Orienterdirection("pointeur de souris");!
126 \par\hfill\includegraphics{CommandeMouvement.5}
127 \item[\textbullet]\lstinline!draw Aller(50,100);!
128 \par\hfill\includegraphics{CommandeMouvement.6}
129 \item[\textbullet]\lstinline!draw Allera("pointeur de souris");!
130 \par\hfill\includegraphics{CommandeMouvement.7}
131 \item[\textbullet]\lstinline!draw Glisser(2,50,100);!
132 \par\hfill\includegraphics{CommandeMouvement.8}
133 \item[\textbullet]\lstinline!draw Ajouter(10,"x");!
134 \par\hfill\includegraphics{CommandeMouvement.9}
135 \item[\textbullet]\lstinline!draw Mettre(10,"x");!
136 \par\hfill\includegraphics{CommandeMouvement.10}
137 \item[\textbullet]\lstinline!draw Ajouter(50,"y");!
138 \par\hfill\includegraphics{CommandeMouvement.11}
139 \item[\textbullet]\lstinline!draw Mettre(10,"y");!
140 \par\hfill\includegraphics{CommandeMouvement.12}
141 \item[\textbullet]\lstinline!draw Rebondir;!
142 \par\hfill\includegraphics{CommandeMouvement.13}
143 \item[\textbullet]\lstinline!draw FixerSensRotation("position \`a gauche ou \`a droite"';!
144 \par\hfill\includegraphics{CommandeMouvement.14}
145 \end{itemize}
146 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\
147 \[\includegraphics{CommandeMouvement.18}\kern0.1\linewidth\includegraphics{CommandeMouvement.19}\kern0.1\linewidth\includegraphics{CommandeMouvement.20}\]
148 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 :
149 \begin{itemize}
150 \item[\textbullet]\lstinline!draw Avancer("\opOp{$\opMouv{abscisse x}\bm{+}\opSimple{10}$}");!
151 \par\hfill\includegraphics{CommandeMouvement.15}
152 \item[\textbullet]\lstinline!draw Mettre("\opMouv{abscisse x}","y");!
153 \par\hfill\includegraphics{CommandeMouvement.16}
154 \item[\textbullet]\lstinline!draw Ajouter("\opMouv{direction}","y");!
155 \par\hfill\includegraphics{CommandeMouvement.17}
156 \end{itemize}
157 \vspace*{2em}\par
158 \item[Groupe {\sffamily Apparence}]\hfil\newline
159 \begin{itemize}
160 \item[\textbullet]\lstinline!draw DireT("Hello",2);!
161 \par\hfill\includegraphics{CommandeApparence.1}
162 \item[\textbullet]\lstinline!draw Dire("Hello");!
163 \par\hfill\includegraphics{CommandeApparence.2}
164 \item[\textbullet]\lstinline!draw PenserT("Hmm...",2);!
165 \par\hfill\includegraphics{CommandeApparence.3}
166 \item[\textbullet]\lstinline!draw Penser("Hmm...");!
167 \par\hfill\includegraphics{CommandeApparence.4}
168 \item[\textbullet]\lstinline!draw Montrer;!
169 \par\hfill\includegraphics{CommandeApparence.5}
170 \item[\textbullet]\lstinline!draw Cacher;!
171 \par\hfill\includegraphics{CommandeApparence.6}
172 \item[\textbullet]\lstinline!draw Basculer("\opAp{costume2}");!
173 \par\hfill\includegraphics{CommandeApparence.7}
174 \item[\textbullet]\lstinline!draw CostumeSuivant;!
175 \par\hfill\includegraphics{CommandeApparence.8}
176 \item[\textbullet]\lstinline!draw BasculerAR("\opAp{arriere-plan2}");!
177 \par\hfill\includegraphics{CommandeApparence.9}
178 \item[\textbullet]\lstinline!draw AjouterEffet("\opAp{couleur}",10);!
179 \par\hfill\includegraphics{CommandeApparence.10}
180 \item[\textbullet]\lstinline!draw MettreEffet("\opAp{couleur}",10);!
181 \par\hfill\includegraphics{CommandeApparence.11}
182 \item[\textbullet]\lstinline!draw AnnulerEffet;!
183 \par\hfill\includegraphics{CommandeApparence.12}
184 \item[\textbullet]\lstinline!draw AjouterTaille(10);!
185 \par\hfill\includegraphics{CommandeApparence.13}
186 \item[\textbullet]\lstinline!draw MettreA("\opOp{$\opSimple{10}\bm{+}\opSimple{5}$}");!
187 \par\hfill\includegraphics{CommandeApparence.14}
188 \item[\textbullet]\lstinline!draw AllerPPlan;!
189 \par\hfill\includegraphics{CommandeApparence.15}
190 \item[\textbullet]\lstinline!draw DeplacerAP("\opOp{$\opMouv{abscisse x}\bm{+}\opSimple{10}$}");!
191 \par\hfill\includegraphics{CommandeApparence.16}
192 \end{itemize}
193 \par\vspace*{2em}\par Les \og opérateurs\fg\
194 \[\includegraphics{CommandeApparence.17}\kern0.1\linewidth\includegraphics{CommandeApparence.18}\kern0.1\linewidth\includegraphics{CommandeApparence.19}\]
195 s'obtiennent avec la commande \LaTeX\ \lstinline!\opAp{}!.
196 %\par\vspace*{2em}\par
197 \item[Groupe {\sffamily Son}]\hfil\newline
198 \begin{itemize}
199 \item[\textbullet]\lstinline!draw Jouer("miaou");!
200 \par\hfill\includegraphics{CommandeSon.1}
201 \item[\textbullet]\lstinline!draw JouerT("miaou");!
202 \par\hfill\includegraphics{CommandeSon.2}
203 \item[\textbullet]\lstinline!draw ArreterSon;!
204 \par\hfill\includegraphics{CommandeSon.3}
205 \item[\textbullet]\lstinline!draw Tambour(2,0.25);!
206 \par\hfill\includegraphics{CommandeSon.4}
207 \item[\textbullet]\lstinline!draw Pause(0.25);!
208 \par\hfill\includegraphics{CommandeSon.5}
209 \item[\textbullet]\lstinline!draw JouerNote(50,0.25);!
210 \par\hfill\includegraphics{CommandeSon.6}
211 \item[\textbullet]\lstinline!draw ChoisirInstrument(17);!
212 \par\hfill\includegraphics{CommandeSon.7}
213 \item[\textbullet]\lstinline!draw AjouterVol(-10);!
214 \par\hfill\includegraphics{CommandeSon.8}
215 \item[\textbullet]\lstinline!draw MettreVol(15);!
216 \par\hfill\includegraphics{CommandeSon.9}
217 \item[\textbullet]\lstinline!draw AjouterTempo(20);!
218 \par\hfill\includegraphics{CommandeSon.10}
219 \item[\textbullet]\lstinline!draw MettreTempo(15);!
220 \par\hfill\includegraphics{CommandeSon.11}
221 \end{itemize}
222 Les \og opérateurs\fg
223 \[\includegraphics{CommandeSon.12}\kern0.1\linewidth\includegraphics{CommandeSon.13}\]
224 s'obtiennent par la commande \LaTeX\ \lstinline!\opSon{}!.
225 \par\vspace*{2em}\par
226 \item[Groupe {\sffamily Stylo}]\hfil\newline
227 \begin{itemize}
228 \item[\textbullet]\lstinline!draw Effacer;!
229 \par\hfill\includegraphics{CommandeStylo.1}
230 \item[\textbullet]\lstinline!draw Estampiller;!
231 \par\hfill\includegraphics{CommandeStylo.2}
232 \item[\textbullet]\lstinline!draw PoserStylo;!
233 \par\hfill\includegraphics{CommandeStylo.3}
234 \item[\textbullet]\lstinline!draw ReleverStylo;!
235 \par\hfill\includegraphics{CommandeStylo.4}
236 \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}.}
237 \par\hfill\includegraphics{CommandeStylo.5}
238 \item[\textbullet]\lstinline!draw AjouterCS("\opOp{$\opSimple{15}\bm{+}\opSimple{10}$}");!
239 \par\hfill\includegraphics{CommandeStylo.6}
240 \item[\textbullet]\lstinline!draw MettreCS(25);!
241 \par\hfill\includegraphics{CommandeStylo.7}
242 \item[\textbullet]\lstinline!draw AjouterIS("\opOp{$\opSimple{25}\bm{-}\opSimple{10}$}");!
243 \par\hfill\includegraphics{CommandeStylo.8}
244 \item[\textbullet]\lstinline!draw MettreIS(15);!
245 \par\hfill\includegraphics{CommandeStylo.9}
246 \item[\textbullet]\lstinline!draw AjouterTS(12);!
247 \par\hfill\includegraphics{CommandeStylo.10}
248 \item[\textbullet]\lstinline!draw MettreTS("\opOp{$\opSimple{15}\bm{\times}\opSimple{10}$}");!
249 \par\hfill\includegraphics{CommandeStylo.11}
250 \end{itemize}
251 \vspace*{2em}\par
252 \item[Groupe {\sffamily Données}]\hfil\newline
253 \begin{itemize}
254 \item[\textbullet]\lstinline!draw MettreVar("pi",0);!
255 \par\hfill\includegraphics{CommandeVariable.1}
256 \item[\textbullet]\lstinline!draw AjouterVar("pi","\opOp{$\opSimple{15}\bm{+}\opSimple{10}$}");!
257 \par\hfill\includegraphics{CommandeVariable.2}
258 \item[\textbullet]\lstinline!draw MontrerVar("pi");!
259 \par\hfill\includegraphics{CommandeVariable.3}
260 \item[\textbullet]\lstinline!draw CacherVar("pi");!
261 \par\hfill\includegraphics{CommandeVariable.4}
262 \item[\textbullet]\lstinline!draw AjouterList("\opSimple{\LaTeX}","Listepi");!
263 \par\hfill\includegraphics{CommandeVariable.5}
264 \item[\textbullet]\lstinline!draw SupprimerList("\opSimple{\LaTeX}","Listepi");!
265 \par\hfill\includegraphics{CommandeVariable.6}
266 \item[\textbullet]\lstinline!draw InsererList("\opSimple{\MP}",1,"Listepi");!
267 \par\hfill\includegraphics{CommandeVariable.7}
268 \item[\textbullet]\lstinline!draw RemplacerList(3,"Listepi","\opOp{$\opSimple{4}\bm{+}\opSimple{5}$}");!
269 \par\hfill\includegraphics{CommandeVariable.8}
270 \item[\textbullet]\lstinline!draw MontrerList("Listepi");!
271 \par\hfill\includegraphics{CommandeVariable.9}
272 \item[\textbullet]\lstinline!draw CacherList("Listepi");!
273 \par\hfill\includegraphics{CommandeVariable.10}
274 \end{itemize}
275 \par\vspace*{2em}\par Les \og opérateurs\fg
276 \begin{center}
277 \begin{minipage}{0.8\linewidth}
278 \includegraphics{CommandeVariable.11}\hfill\includegraphics{CommandeVariable.12}\hfill \includegraphics{CommandeVariable.13}\par
279 \includegraphics{CommandeVariable.14}\hfill \includegraphics{CommandeVariable.15}
280 \end{minipage}
281 \end{center}
282 s'obtiennent par les commandes \LaTeX\ \lstinline!\opVar{}!, \lstinline!\opList{}! et \lstinline!\opSousList{}!.
283 \par\vspace*{2em}\par
284 \item[Groupe {\sffamily \'Evènement}]\hfil\newline
285 \begin{itemize}
286 \item[\textbullet]\lstinline!draw Drapeau;!
287 \par\hfill\includegraphics{CommandeEvenements.1}
288 \item[\textbullet]\lstinline!draw QPresse("espace");!
289 \par\hfill\includegraphics{CommandeEvenements.2}
290 \item[\textbullet]\lstinline!draw QLutinPresse;!
291 \par\hfill\includegraphics{CommandeEvenements.3}
292 \item[\textbullet]\lstinline!draw QBasculeAR("arriere-plan1");!
293 \par\hfill\includegraphics{CommandeEvenements.4}
294 \item[\textbullet]\lstinline!draw QVolumeSup("Volume sonore",10);!
295 \par\hfill\includegraphics{CommandeEvenements.5}
296 \item[\textbullet]\lstinline!draw QRecevoirMessage("message1");!
297 \par\hfill\includegraphics{CommandeEvenements.6}
298 \item[\textbullet]\lstinline!draw EnvoyerMessage("message1");!
299 \par\hfill\includegraphics{CommandeEvenements.7}
300 \item[\textbullet]\lstinline!draw EnvoyerMessageA("message1");!
301 \par\hfill\includegraphics{CommandeEvenements.8}
302 \end{itemize}
303 \vspace*{2em}\par
304 \item[Groupe {\sffamily Contrôle}]\hfil\newline
305 \begin{itemize}
306 \item[\textbullet]\lstinline!draw Attendre("\opOp{$\opSimple{10}\bm{+}\opSimple{40}$}");!
307 \par\hfill\includegraphics{CommandeControle.1}
308 \item[\textbullet]\lstinline!draw AttendreJ("\opOp{$\opSimple{10}\bm{+}\opMouv{Abscisse x}\bm{=}\opSimple{20}$}");!
309 \par\hfill\includegraphics{CommandeControle.6}
310 \item[\textbullet]\lstinline!draw Stop("ce script");!
311 \par\hfill\includegraphics{CommandeControle.8}
312 \item[\textbullet]\lstinline!draw CommencerClone;!
313 \par\hfill\includegraphics{CommandeControle.9}
314 \item[\textbullet]\lstinline!draw CreerClone("Lutin1");!
315 \par\hfill\includegraphics{CommandeControle.10}
316 \item[\textbullet]\lstinline!draw SupprimerClone;!
317 \par\hfill\includegraphics{CommandeControle.11}
318 \item[\textbullet]
319 \begin{lstlisting}[frame=tb]
320 draw Repeter1("\opOp{$\opSimple{10}\bm{+}\opSimple{40}$}");
321 draw LigneVide("Bonjour");
322 draw FinBlocRepeter1(10);
323 \end{lstlisting}
324 \par\hfill\includegraphics{CommandeControle.2}
325 \item[\textbullet]
326 \begin{lstlisting}[frame=tb]
327 draw RepeterI1;
328 draw LigneVide("Bonjour");
329 draw FinBlocRepeterI1(10);
330 \end{lstlisting}
331 \par\hfill\includegraphics{CommandeControle.3}
332 \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.
333 \\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).
334 \begin{figure}[h!]
335 \centering
336 \includegraphics[width=0.5\linewidth]{Scratchpbsortiebloc-1}\hfill\includegraphics{SortieBloc.1}
337 \caption{Comparaison Scratch / \MP\ pour l'affichage des \og sorties\fg\ de boucles et tests.}
338 \label{fig:pbsortiebloc}
339 \end{figure}
340
341 \`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.
342 \begin{lstlisting}[frame=tb]
343 ...
344 draw FinBlocRepeter1(10);
345 _coinprec:=_coinprec+(0,-1cm);
346 draw Si2("\opOp{$\opVar{i}\bm{<}10$}");
347 ...
348 \end{lstlisting}%
349
350 \item[\textbullet]
351 \begin{lstlisting}[frame=tb]
352 draw Si1("\opOp{$\opSimple{10}\bm{+}\opMouv{Abscisse x}%
353 \bm{=}\opSimple{20}$}");
354 draw LigneVide("Bonjour");
355 draw FinBlocSi1;
356 \end{lstlisting}
357 \par\hfill\includegraphics{CommandeControle.4}
358 \item[\textbullet]
359 \begin{lstlisting}[frame=tb]
360 draw Si1("\opOp{$\opSimple{10}\bm{+}\opMouv{Abscisse x}%
361 \bm{=}\opSimple{20}$}");
362 draw LigneVide("Bonjour");
363 draw Sinon1;
364 draw LigneVide("Bonjour");
365 draw FinBlocSi1;
366 \end{lstlisting}
367 \par\hfill\includegraphics{CommandeControle.5}
368 \item[\textbullet]
369 \begin{lstlisting}[frame=tb]
370 draw RepeterJ1("\opOp{$\opSimple{10}\bm{+}\opMouv{Abscisse x}%
371 \bm{=}\opSimple{20}$}");
372 draw LigneVide("Bonjour");
373 draw FinBlocRepeter1(10);
374 \end{lstlisting}
375 \par\hfill\includegraphics{CommandeControle.7}
376 \end{itemize}
377 \vspace*{2em}\par
378 \item[Groupe {\sffamily Capteurs}]\hfil\newline
379 \begin{itemize}
380 \item[\textbullet]\begin{filecontents*}{capteur1.txt}
381 draw Demander("Quel est votre prénom ?");
382 \end{filecontents*}
383 \lstinputlisting[inputencoding=utf8/latin1]{capteur1.txt}
384 \par\hfill\includegraphics{CommandeCapteurs.1}
385 \item[\textbullet]\lstinline!draw ActiverVideo("active");!
386 \par\hfill\includegraphics{CommandeCapteurs.2}
387 \item[\textbullet]\lstinline!draw TransparenceVideo("\opOp{$\opSimple{17}\bm{+}\opSimple{25}$}");!
388 \par\hfill\includegraphics{CommandeCapteurs.3}
389 \item[\textbullet]\lstinline!draw ReinitChrono;!
390 \par\hfill\includegraphics{CommandeCapteurs.4}
391 \end{itemize}
392 Les \og opérateurs\fg
393 \begin{center}
394 \begin{minipage}{0.8\linewidth}
395 \includegraphics{CommandeCapteurs.5}\par
396 \includegraphics{CommandeCapteurs.6}\hfill \includegraphics{CommandeCapteurs.7}\par
397 \includegraphics{CommandeCapteurs.19}\par
398 \includegraphics{CommandeCapteurs.20}\hfill\includegraphics{CommandeCapteurs.8}
399 \par\includegraphics{CommandeCapteurs.9}\hfill \includegraphics{CommandeCapteurs.10}\hfill\includegraphics{CommandeCapteurs.11}
400 \par\includegraphics{CommandeCapteurs.12}\hfill \includegraphics{CommandeCapteurs.13}\par
401 \includegraphics{CommandeCapteurs.14}\hfill\includegraphics{CommandeCapteurs.15}
402 \par\includegraphics{CommandeCapteurs.16}\hfill
403 \includegraphics{CommandeCapteurs.17}\hfill\includegraphics{CommandeCapteurs.18}
404 \end{minipage}
405 \end{center}
406 s'obtiennent par les commandes \LaTeX\ \lstinline!\opCap{}! et \lstinline!\opCapCap{}!.
407 Néanmoins, il faut parfois un codage conséquent. Par exemple, voici un capteur et son code.
408 \par\begin{minipage}{0.2\linewidth}
409 \includegraphics{CommandeCapteurs.7}
410 \end{minipage}
411 \hfill
412 \begin{minipage}{0.75\linewidth}
413 \small
414 \begin{lstlisting}[frame=tb]
415 \opCap{couleur %
416 \definecolor{Magenta}{rgb}{1,0,1}%
417 \colorbox{Magenta}{\textcolor{white}{\phantom{t}}}%
418 touche%
419 \definecolor{LGray}{gray}{0.85}%
420 \colorbox{LGray}{\textcolor{white}{\phantom{t}}} ?%
421 }
422 \end{lstlisting}
423 \end{minipage}
424 \\Un peu barbare, non ? Mais, cela ne nécessitera qu'un simple copier-coller pour les autres utilisations\ldots%}
425 \par\vspace*{2em}\par
426 \item[Groupe {\sffamily Opérateurs}]\hfil\newline
427 Les éléments%
428 \begin{center}
429 \begin{minipage}{0.8\linewidth}
430 \includegraphics{CommandeOperateurs.1}\hfill\includegraphics{CommandeOperateurs.2}\hfill\includegraphics{CommandeOperateurs.3}\hfill
431 \includegraphics{CommandeOperateurs.4}\par
432 \includegraphics{CommandeOperateurs.5}\par
433 \includegraphics{CommandeOperateurs.6}\hfill \includegraphics{CommandeOperateurs.7}\hfill\includegraphics{CommandeOperateurs.8}
434 \par\includegraphics{CommandeOperateurs.9}\hfill \includegraphics{CommandeOperateurs.10}\hfill\includegraphics{CommandeOperateurs.11}
435 \par\includegraphics{CommandeOperateurs.12}\hfill \includegraphics{CommandeOperateurs.13}\par
436 \includegraphics{CommandeOperateurs.14}
437 \par\includegraphics{CommandeOperateurs.15}\hfill\includegraphics{CommandeOperateurs.16}\hfill\includegraphics{CommandeOperateurs.17}
438 \end{minipage}
439 \end{center}
440 s'obtiennent par les commandes \LaTeX\ \lstinline!\opOp{}! et \lstinline!\opSousOp{}!.
441 \vspace*{2em}\par
442 \item[Groupe {\sffamily Ajouter blocs}]\hfil\newline
443 \begin{itemize}
444 \item[\textbullet]\lstinline!draw NouveauBloc("Pentagone");!
445 \par\hfill\includegraphics{CommandeBloc.1}
446 \item[\textbullet]\lstinline!draw NouveauBloc("Pentagone \opBloc{cote}");!
447 \par\hfill\includegraphics{CommandeBloc.3}
448 \item[\textbullet]\lstinline!draw Bloc("Pentagone");!
449 \par\hfill\includegraphics{CommandeBloc.2}
450 \end{itemize}
451 \item[Groupe {\sffamily Divers}]\hfil\newline
452 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.}
453 \\On aura également à disposition \lstinline!CommandeVide("Bonjour!")! afin de faire compléter un algorithme par les élèves.
454 \begin{figure}[h]
455 \centering
456 \begin{minipage}{0.4\linewidth}
457 \includegraphics{ExCommandeVide.1}
458 \end{minipage}
459 \hfill
460 \begin{minipage}{0.5\linewidth}
461 \begin{filecontents*}{CommandeVide.txt}
462 beginfig(1);
463 draw Drapeau;
464 draw Repeter1(4);
465 draw Avancer(50);
466 draw CommandeVide("Tourner à droite%
467 de 90 degrés");
468 draw FinBlocRepeter1(10);
469 endfig;
470 \end{filecontents*}
471 \lstinputlisting[inputencoding=utf8/latin1,frame=tb]{CommandeVide.txt}
472 \end{minipage}
473 \caption{Utilisation de \lstinline!CommandeVide!}
474 \label{fig:CommandeVide}
475 \end{figure}
476 \end{description}
477 Terminons cette liste de commandes par un algorithme associé à la suite de Syracuse :)
478 \[\includegraphics[scale=0.8]{Syracuse.1}\]
479 \begin{filecontents*}{Syracuse.txt}
480 beginfig(1);
481 draw Drapeau;
482 draw SupprimerList("\opSimple{tout}","Suite");
483 draw Demander("\opSimple{Quel est le nombre choisi ?}");
484 draw AjouterList("\opCap{réponse}","Suite");
485 draw MettreVar("pas",1);
486 draw RepeterI1;
487 draw Si2("\opOp{\opList{élément \opVar{pas} de \opSousList{Suite}} modulo \opSimple{2}%
488 \,$\bm{=}$\,\opSimple{0}}");
489 draw MettreVar("résultat","\opOp{\opList{élément \opVar{pas} de \opSousList{Suite}}%
490 \,$\bm{/}$\,\opSimple{2}}");
491 draw Sinon2;
492 draw MettreVar("résultat","\opOp{\opSimple{3}\,$\bm{\times}$\,\opList{élément \opVar{pas}%
493 de \opSousList{Suite}}\,$\bm{+}$\,\opSimple{1}}");
494 draw FinBlocSi2;
495 draw Si3("\opList{\opSousList{Suite} contient \opVar{résultat} ?}");
496 draw Stop("tout");
497 draw Sinon3;
498 draw AjouterList("\opVar{résultat}","Suite");
499 draw AjouterVar("pas",1);
500 draw FinBlocSi3;
501 draw FinBlocRepeter1(10);
502 endfig;
503
504 end
505 \end{filecontents*}
506 {\footnotesize
507 \lstinputlisting[inputencoding=utf8/latin1,frame=tb]{Syracuse.txt}
508 }
509 \newpage
510 \section{Quelques exemples}
511 \subsection{Sujet de Brevet des collèges}
512 \vspace{-2em}
513 % \begin{figure}[h]
514 % \centering
515 % \includegraphics{Scratch2-2}
516 %\caption{Figure du Sujet 0 de mathématiques du Brevet des Collèges}
517 %\label{fig:4}
518 %\end{figure}
519 \begin{figure}[h]
520 \centering
521 \includegraphics{Scratch2-2}\par
522 \includegraphics[scale=0.85]{Scratch2-3}\kern0.05\linewidth\includegraphics{Algo3.1}
523 \caption{Figure du Sujet 0 - versions Scratch et \MP}
524 \label{fig:3}
525 \end{figure}
526 %\begin{minipage}{0.5\linewidth}
527 {\small
528 \begin{lstlisting}[firstnumber=1,frame=tb]
529 beginfig(1);
530 draw Drapeau;
531 draw Effacer;
532 draw MettreTS(1);
533 draw Repeter2(6);
534 draw PoserStylo;
535 draw Repeter1(4);
536 draw Avancer(50);
537 draw Tournerd(90);
538 draw FinBlocRepeter1(10);
539 draw ReleverStylo;
540 draw AjouterTS(1);
541 draw Avancer(60);
542 draw FinBlocRepeter2(10);
543 endfig;
544 \end{lstlisting}
545 }
546 \newpage
547 \subsection{\OE uvre d'art}
548 \begin{figure}[h]
549 \centering
550 \includegraphics[width=0.7\linewidth]{Morellet}
551 \label{fig:5}
552 \caption{François Morellet - Oeuvre Pi piquant, 1=1°, 38 décimales}
553 \end{figure}
554 \[\includegraphics[width=0.7\linewidth]{Ex-Morellet.1}\]
555 \begin{filecontents*}{Morellet.txt}
556 beginfig(1)%François Morellet - Oeuvre Pi piquant, 1=1°, 38 décimales
557 draw Drapeau;
558 draw Effacer;
559 draw Aller(-50,0);
560 draw Orienter(180);
561 draw PoserStylo;
562 draw Tournerg("\opList{élément \opSimple{1} de \opSousList{Pi}}");
563 draw Avancer(150);
564 draw MettreVar("varpi","\opSimple{2}");
565 draw RepeterJ1("\opOp{\opVar{varpi}\,$\bm{>}$\,38}");
566 draw Si2("$\opOp{\opVar{varpi}\mbox{ modulo }\opSimple{2}\,=\,\opSimple{0}}$");
567 draw Tournerg("$\opOp{\opSimple{180}}\bm{-}\opList{élément \opVar{varpi} de \opSousList{pi}}$");
568 draw Sinon2;
569 draw Tournerd("$\opOp{\opSimple{180}}-\opList{élément \opVar{varpi} de \opSousList{pi}}$");
570 draw FinBlocSi2;
571 draw Avancer(150);
572 draw AjouterVar("varpi","\opSimple{1}");
573 draw FinBlocRepeter1(10);
574 draw ReleverStylo;
575 endfig;
576 \end{filecontents*}
577 {\footnotesize
578 \lstinputlisting[inputencoding=utf8/latin1,frame=tb]{Morellet.txt}
579 }
580 \newpage
581 \subsection{Une \og spirale\fg}
582 \begin{figure}[h!]
583 \centering
584 \begin{minipage}{0.4\linewidth}
585 \[\includegraphics[scale=0.8]{ex-tice74.1}\]
586 {\tiny Source : \url{http://www.ac-grenoble.fr/tice74/spip.php?article1219}}
587 \end{minipage}
588 \hfill
589 \begin{minipage}{0.55\linewidth}
590 \begin{lstlisting}[frame=tb]
591 beginfig(1);
592 draw Drapeau;
593 draw ReleverStylo;
594 draw Aller(0,0);
595 draw Orienter(90);
596 draw PoserStylo;
597 draw MettreVar("i",1);
598 draw RepeterJ1("\opOp{$\opVar{i}\bm{=}%
599 \opSimple{200}$}");
600 draw Avancer("\opVar{i}");
601 draw AjouterVar("i",1);
602 draw Tournerd(121);
603 draw FinBlocRepeter1(10);
604 endfig;
605 \end{lstlisting}
606 \end{minipage}
607 \caption{Figure géométrique - Code Scratch}
608 \label{fig:10}
609 \end{figure}
610 \[\includegraphics[scale=1]{ex-tice74-scratch.1}\]
611 \newpage
612 \subsection{Triangle de Sierpinski}
613 \begin{figure}[h]
614 \centering
615 \includegraphics[scale=0.5]{Ex-Serpinski.1}\par
616 \includegraphics{Ex-Serpinski-scratch.1}
617 \caption{Triangle de Sierpinski - Code Scratch et \MP}
618 \label{fig:11}
619 \end{figure}
620 %\begin{lstlisting}[frame=tb]
621 \begin{filecontents*}{Sierpinski.txt}
622 beginfig(1);%https://sites.google.com/site/stjomaths/scratch
623 draw Drapeau;
624 draw Aller(-200,-150);
625 draw Orienter(0);
626 draw Effacer;
627 draw PoserStylo;
628 draw Demander("\opSimple{rang ?}");
629 draw MettreVar("rang","\opCap{réponse}");
630 draw Demander("\opSimple{dimension du motif ?}");
631 draw MettreVar("rang","\opCap{réponse}");
632 draw Bloc("Sierpinski \opBloc{rang} \opBloc{triangles}");
633 _coinprec:=(10cm,0);
634 draw NouveauBloc("Sierpinski \opBloc{rang} \opBloc{triangles}");
635 draw Si1("\opOp{non $\opBloc{rang}\bm{=}0$}");
636 draw Repeter2(3);
637 draw Bloc("Sierpinski \opOp{$\opBloc{rang}\bm{-}\opSimple{1}$}%
638 \opOp{$\opBloc{triangles}\,\bm{/}\,\opSimple{2}$}");
639 draw Avancer("\opBloc{triangles}");
640 draw Tournerd(120);
641 draw FinBlocRepeter2(10);
642 draw FinBlocSi1;
643 endfig;
644 \end{filecontents*}
645 %\end{lstlisting}
646 {\footnotesize
647 \lstinputlisting[inputencoding=utf8/latin1,frame=tb]{Sierpinski.txt}
648 }
649 \newpage
650 \section{Historique}
651 \begin{description}
652 \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.
653 \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.
654 \item[21/01/2017] {\bfseries Version 0.5} - Publication sur \url{www.melusine.eu.org/syracuse/}
655 \item[19/01/2017] {\bfseries Version 0.32} - Ajout d'éléments de présentation ($\blacktriangledown$).
656 \item[18/01/2017] {\bfseries Version 0.31} - Ajout du groupe {\sffamily Son}.
657 \item[15/01/2017] {\bfseries Version 0.3} - Modification du code. Conception de la documentation.
658 \item[08/01/2017] {\bfseries Version 0.2} - Ajout des commandes des groupes {\sffamily Données} et {\sffamily Capteurs}.
659 \item[06/01/2017] {\bfseries Version 0.15} - Ajout des commandes du groupe {\sffamily Ajouter blocs}.
660 \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}.
661 \end{description}
662 \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.