\documentclass[a4paper,11pt]{book}
\textheight 23 cm
%HEVEA\@def@charset{US-ASCII}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\usepackage{latexsym}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{makeidx}
\usepackage{times}
%\usepackage{graphics}
\usepackage{ifpdf}
\ifpdf
\usepackage[pdftex,colorlinks]{hyperref}
\else
%\usepackage[ps2pdf,breaklinks=true,colorlinks=true,linkcolor=red,citecolor=green]{hyperref}
\usepackage{pst-plot}
\fi
\usepackage{pst-plot}
\usepackage{graphicx}
\title{La tortue et la g\'eom\'etrie avec {\tt Xcas}}
\makeindex
\author{Ren\'ee De Graeve}
\begin{document}
\maketitle
\chapter*{Introduction}
La partie {\tt Tortue} de {\tt Xcas} contient des commandes permettant de faire
des dessins comme en {\tt Logo} en donnant des ordres \`a une tortue
poss\'edant un crayon.\\
Ces dessins sont faits dans l'\'ecran graphique {\tt Tortue} qui est
obtenu avec le raccourci clavier : {\tt Alt+d}.\\
La tortue est un curseur graphique repr\'esent\'e par un triangle :
c'est un robot orient\'e qui peut avancer, reculer, tourner sur place \`a
droite ou \`a gauche et tracer ses d\'eplacements.\\
Contrairement \`a {\tt Logo} il n'y a pas de commandes g\'erant des changements
d'\'echelles mais il y a la possibilit\'e de d\'eplacer l'\'ecran du dessin
avec la souris (par exemple, pour centrer le dessin) et aussi de r\'eduire
ou d'augmenter la taille du dessin en agissant sur la molette de la souris.\\
Par rapport \`a Logo, on a ajout\'e :
\begin{itemize}
\item les commandes :
\begin{itemize}
\item{\tt saute} qui fait faire \`a la tortue des bonds en avant ou en arri\`ere et
\item {\tt pas\_de\_cote} qui fait faire \`a la
tortue des bonds sur le c\^ot\'e \`a gauche ou \`a droite,
\item {\tt rond} qui fait faire \`a la tortue des cercles et des arcs de cercle,
\item {\tt disque}, {\tt disque\_centre}, {\tt rectangle\_plein},
{\tt triangle\_plein}
qui font faire \`a la tortue des figures pleines comme des disques, des
rectangles pleins (mais aussi des carr\'es pleins, des losanges pleins ou des parall\'elogramme pleins), des triangles pleins,
\end{itemize}
\item les instructions de programmation comme {\tt pour, tantque, repeter} que
l'on peut utiliser pour faire des boucles sans \^etre oblig\'e d' utiliser la
r\'ecursivit\'e !
\end{itemize}
\section{Pour avoir l'\'ecran dessin tortue}
Choisir le menu {\tt Tortue}, sous menu {\tt Dessin tortue} ou
utiliser le raccourci clavier {\tt Alt+d}.
{\bf Attention} Une session de {\tt Xcas} ne peut avoir qu'un seul \'ecran de
dessin tortue. Si on veut faire un nouveau dessin tortue, tout en gardant le
dessin pr\'ec\'edent, il faut ouvrir une nouvelle session.
On obtient :
\begin{itemize}
\item Au centre, un \'ecran {\tt dessin tortue} et on voit au d\'ebut de la
session, la tortue sous la forme d'un petit triangle $ABC$ isoc\`ele de sommet
$A$. Le milieu $M$ de $BC$ donne la
position de la tortue et la mesure en degr\'es de l'angle
$\overrightarrow Ox,\overrightarrow MA$ donne
le cap de la tortue. Au d\'epart ou apr\`es la commande {\tt efface}, la tortue
a comme coordonn\'ees 100,100 et a comme cap 0 c'est \`a dire que sa t\^ete est
dirig\'ee selon l'axe {\tt Ox}. On travaille en degr\'es pour toutes les
commandes concernant la tortue.
Mais si vous utiliser dans une proc\'edure tortue des fonctions
trigonom\'etriques il faut tenir compte de la configuration du {\tt cas} et
savoir si on travaille en radian ou en degr\'e....Il est donc pr\'ef\'erable
lorsqu'on travaille avec la tortue de
choisir les degr\'es en d\'ecochant {\tt radian} dans la configuration du
{\tt cas}.
\item sous cet \'ecran {\tt dessin tortue}, une barre de bouton o\`u l'on
trouve les abr\'eviations de certaines commandes.
\item \`A droite, une ligne d'entr\'ee pour taper les commandes pilotant la
tortue.\\
{\bf Attention} les sorties de la ligne d'entr\'ee de la tortue sont prevues
pour afficher une seule ligne.
\item \`A gauche un enregistreur qui est un \'editeur de programmes qui garde
la trace de toutes les commandes effectu\'ees et qui commence par l'instruction
{\tt efface;}. On peut gr\^ace \`a cet enregistreur corriger une commande puis
r\'eex\'ecuter toutes les commandes qui s'y trouve en appuyant sur {\tt F7}.
\end{itemize}
\section{Pour changer la fen\^etre visible}
Si vous avez fait un dessin trop petit ou trop gros vous pouvez zoomer
en tournant la molette de la souris dans un sens ou dans l'autre celon que vous
voulez agrandir ou diminuer le dessin.\\
On peut aussi utiliser le menu {\tt M} avec {\tt Voir->Zoom avant} ou
{\tt Voir->Zoom arriere}.
Si vous avez fait un dessin qui sort de l'\'ecran, vous pouvez translater
l'origine du rep\`ere en cliquant sans relacher dans l'\'ecran puis en
d\'epla\c{c}ant la souris avec le bouton enfonc\'e.\\
On peut aussi utiliser le menu {\tt M} avec {\tt Voir->droite},
{\tt Voir->gauche}, {\tt Voir->haut} ou {\tt Voir->bas}
\section{Pour utiliser les lignes de commande et l'enregistreur}\label{sec:enregis}
\subsection{Comment remplir une ligne de commande}
On peut remplir la ligne des commandes de diff\'erentes fa\c{c}ons :
\begin{itemize}
\item on tape la commande en toutes lettres,
\item on s\'electionne la commande se trouvant dans l'un des items du menu
{\tt Tortue},
\item on clique sur l'abr\'eviation de la commande si elle se trouve sur
la barre des boutons,
\item on tape le d\'ebut de la commande (par exemple {\tt ba}), puis on
appuie sur la touche {\tt tabulation} du clavier ($\leftrightarrows$). Cela
ouvre l'index de l'aide ce qui donne les diff\'erentes compl\'etions possibles
(par exemple {\tt backquote, baisse\_crayon,....}), et il reste \`a
cliquer sur la commande voulue dans le choix propos\'e (par exemple
{\tt baisse\_crayon}) et d'appuyer sur {\tt OK} ou sur un des exemples.
\end{itemize}
Il faut savoir qu'en appuyant \`a la fois sur {\tt Ctrl} et sur
la fl\`eche vers le haut du clavier, on remet dans la ligne des commandes,
la commande pr\'ec\'edente. On peut faire cela \'eventuellement plusieurs
fois pour remonter dans l'historique des commandes et si on appuie \`a la fois
sur {\tt Ctrl} et sur la fl\`eche vers le bas du clavier, on descend dans
l'historique des commandes. Il faut savoir aussi que {\tt esc} efface la ligne
des commandes.
\subsection{Comment utiliser l'enregistreur situ\'e \`a droite et un \'editeur}
{\bf Un exemple}\\
Vous voulez faire un carr\'e de c\^ot\'e 10 au pas \`a pas. \\
Vous mettez en ligne 1 : {\tt avance} et vous validez en tapant sur
{\tt entr\'ee}\\
Vous mettez en ligne 2 : {\tt tourne\_gauche} et vous validez en tapant sur
{\tt entr\'ee}\\
Vous pouvez vous contenter de ces 2 lignes car vous pouvez revalider la ligne 1,
puis revalider la ligne 2 et cela plusieurs fois de suite.\\
Vous n'aurez alors que 2 lignes d'ent\'ee mais dans l'\'editeur de programme
situ\'e \`a droite, lorsque on aura dessiner le carr\'e, il y aura :
\begin{verbatim}
efface;
avance;
tourne_gauche;
avance;
tourne_gauche;
avance;
tourne_gauche;
avance;
tourne_gauche;
\end{verbatim}
Vous voulez maintenant faire un autre carr\'e de c\^ot\'e 10 \`a c\^ot\'e de
ce carr\'e. \\
Vous mettez par exemple en ligne 3 : {\tt saute} et vous validez en tapant sur
{\tt entr\'ee}\\
Au lieu de revalider la ligne 1, puis la ligne 2, etc..., vous pouvez recopier
d'un coup de souris les lignes qui correspondent au carr\'e puis ex\'ecuter
toutes les commandes depuis le d\'ebut en appuyant sur {\tt F7}.\\
Supposer maintenant que vous voulez modifier la place du 2-i\`eme carr\'e.
Vous pouvez remplacer par exemple {\tt saute} par {\tt pas\_de\_cote}
directement dans l'\'editeur, puis ex\'ecuter toutes
les commandes depuis le d\'ebut en appuyant sur {\tt F7}.\\
Cette fa\c{c}on de travailler peut amener les \'el\`eves \`a la notion de
proc\'edure : on peut ouvrir un \'editeur de programme sur un autre niveau et
recopier d'un coup de souris les lignes qui correspondent au carr\'e. Il suffit
alors de rajouter sur la premi\`ere ligne le nom de la proc\'edure, des
parenth\`eses, {\tt :=\{} et de rajouter \`a la fin {\tt \}:;} puis d'appuyer
sur {\tt OK} ou {\tt F9} pour d\'efinir une proc\'edure. \\
Pour l'exemple pr\'ec\'edent on aura :
\begin{verbatim}
C():={
avance;
tourne_gauche;
avance;
tourne_gauche;
avance;
tourne_gauche;
avance;
tourne_gauche;
}:;
\end{verbatim}
Si on tape maintenat dans une ligne de commande :\\
{\tt C()} puis entree\\
la tortue dessine un carr\'e direct de c\^ot\'e 10.
\section{Pour avoir l'\'ecran tortue en ouvrant {\tt Xcas}}
Il suffit la premi\`ere fois de donner comme niveau {\tt tortue}.\\
Si vous ne l'avez pas fait, il faut s\'electionner {\tt tortue}
dans le menu {\tt Configuration} sous-menu {\tt Mode}. Ensuite, il suffit de
s\'electionner {\tt Sauver pr\'ef\'erences} dans le menu {\tt Configuration} :
ainsi, au prochain d\'emarrage de {\tt Xcas}, vous verrez la tortue au niveau 1
et un \'editeur de programmes au niveau 2.
\section{Le menu {\tt Tortue}}
Toutes les primitives se trouvent dans le menu {\tt Tortue} :
\begin{itemize}
\item {\tt Dessin tortue} ou {\tt Alt+d} fait appara\^{\i}tre l'\'ecran
{\tt dessin tortue},
\item {\tt Deplacements} contient les primitives de d\'eplacements et
d'orientation qui g\`erent la {\tt Tortue} avec des coordonn\'ees relatives :
{\tt avance}, {\tt recule}, {\tt saute}, {\tt pas\_de\_cote},
{\tt tourne\_droite}, {\tt tourne\_gauche}, {\tt efface} (qui permet
d'effacer l'\'ecran ou un trait),
\item {\tt Positionner} contient les primitives de d\'eplacements et
d'orientation qui g\`erent la {\tt Tortue} avec des coordonn\'ees absolues :
{\tt cap}, {\tt position}, {\tt vers},
\item {\tt Formes} contient les primitives dessinant des figures
g\'eom\'etriques : {\tt rond}, {\tt disque}, {\tt rectangle\_plein},
{\tt triangle\_plein} et aussi {\tt polygone\_rempli} qui permet de remplir un
polygone quelconque et la commande
{\tt dessine\_tortue 1} qui dessine la tortue ou {\tt dessine\_tortue 0}
qui dessine la tortue selon une forme pleine,
\item {\tt Crayon} contient les primitives g\'erant le crayon et sa couleur :
{\tt leve\_crayon}, {\tt baisse\_crayon}, {\tt crayon}, {\tt crayon blanc},
{\tt crayon noir}, {\tt crayon rouge}, {\tt crayon vert}, {\tt crayon bleu},
{\tt crayon jaune}, {\tt crayon magenta}, {\tt crayon cyan}, {\tt crayon gomme},
\item {\tt Tortue} contient les primitives qui permettent de rendre la tortue
visible ou invisible : {\tt cache\_tortue}, {\tt montre\_tortue},
\item {\tt Programme} contient les primitives de programmation propres \`a la
{\tt Tortue} : {\tt repete}, {\tt si...fsi}, {\tt pour...fpour},
{\tt tantque...ftantque}, et aussi des
commandes g\'erant les fichiers {\tt sauve} et {\tt ramene},
\item {\tt Autres} contient les primitives {\tt ecris} pour \'ecrire sur
l'\'ecran \`a un endroit donn\'e, {\tt hasard} pour avoir des nombres
al\'eatoires, {\tt signe} pour \'ecrire sur l'\'ecran au point (10,10) avec la
fonte 20 et les commandes qui permettent d'\'ecrire des proc\'edures en faisant
du pas \`a pas :{\tt debut\_enregistrement} et
{\tt fin\_enregistrement}.
\end{itemize}
\section{L'\'ecriture des param\`etres}
Les param\`etres des primitives et des proc\'edures doivent \^etre mis entre
des parenth\`eses {\tt ()} et doivent \^etre s\'epar\'es par des virgules.\\
Pour les primitives ayant 0 ou 1 param\`etre on peut se dispenser des
parenth\`eses {\tt ()} mais pour les proc\'edures \'ecrites par l'utilisateur,
les parenth\`eses {\tt ()} sont obligatoires m\^eme si il n'y a pas de
param\`etre.\\
Une primitive de d\'eplacement, ayant 1 param\`etre, a
comme param\`etre par d\'efaut 10 et une primitive de pivotement, ayant 1
param\`etre, a comme param\`etre par d\'efaut 90.\\
Une exception : {\tt efface} efface tout l'\'ecran alors que {\tt efface 10},
la tortue recule de 10 en effacant.\\
On \'ecrira par exemple :\\
{\tt avance; tourne\_droite; avance; leve\_crayon}\\
ou\\
{\tt avance(10);tourne\_droite(90);avance(10);leve\_crayon()}\\
Pour les proc\'edures \'ecrites par l'utilisateur, il faut
mettre des parenth\`eses {\tt ()} m\^eme si il n'y a pas de param\`etre.\\
On \'ecrira par exemple :\\
{\tt avtd():=\{avance;tourne\_droite\}}\\
puis par exemple pour dessiner un carr\'e de c\^ot\'e 10 : \\
{\tt avtd();avtd();avtd();avtd();}\\
ou\\
{\tt repete(4,avtd())}\\
et pour dessiner un carr\'e plein de c\^ot\'e 10 : \\
{\tt avtd();avtd();avtd();avtd();polygone\_rempli(-8)}
ou\\
{\tt repete(4,avtd());polygone\_rempli -8}
ou \\
{\tt rectangle\_plein}
\chapter{Les commandes primitives de la Tortue}
\section{Pour commencer}\label{sec:init}
{\tt Alt+d} fait appara\^{\i}tre l'\'ecran {\tt dessin tortue}, de positionner
la tortue au pixel de coordonn\'ees [100,100], de la diriger selon le cap 0 et
de travailler en degr\'es pour toutes les commandes concernant la tortue et
cela m\^eme si on a coch\'e {\tt radian} dans la configuration du {\tt cas}
(bouton qui rappelle la cofiguration choisie {\tt Config : exact...}).
Le point [0,0] se trouve en bas \`a gauche, l'axe des $y$ est dirig\'e vers le
haut et le cap 0 est dirig\'e selon l'axe des $x$.\\
Les unit\'es sont les pixels et la dimension de l'\'ecran d\'epend de
votre ordinateur (en plein \'ecran le mien est de $270 \times 240$).\\
Le cap de la tortue est exprim\'e en degr\'es et ses valeurs sont celles du
cercle trigonom\'etrique : ces valeurs sont interpr\'et\'ees modulo 360.\\
On tape :
\begin{center}{\tt Alt+d}\end{center}
On obtient :
\begin{center}{\tt l'\'ecran de dessin avec la tortue au pixel de coordonn\'ees
[100,100], avec le cap 0}\end{center}
On utilise ensuite les primitives qui permettent de d\'eplacer la tortue et
qui g\'erent son crayon.
\section{La tortue et sa repr\'esentation}
Apr\`es chaque commande la position d'arriv\'ee de la tortue est
repr\'esent\'ee par un petit triangle isoc\`ele de base 10 et de hauteur 17.
Ce petit triangle ne fait pas partie du dessin, il bouge selon les
instructions et peut \^etre cach\'e avec la commande {\tt cache\_tortue}
ou rendu visible avec la commande {\tt montre\_tortue}.
Si on veut dessiner la tortue pour montrer les positions interm\'ediaires
ocup\'ees par la tortue sur le dessin on tape :
\begin{verbatim}
des_tor():={
cache_tortue;
tourne_gauche;
avance 5;
tourne_droite(180-180/pi*atan(3.4));
avance(sqrt(25+17^2));
tourne_droite(180-2*180/pi*atan(1/3.4));
avance(sqrt(25+17^2));
tourne_droite(180-180/pi*atan(3.4));
avance 5;tourne_droite;
montre_tortue;
}:;
\end{verbatim}
\subsection{Pour voir la tortue : {\tt montre\_tortue}}\index{montre\_tortue}
\noindent {\tt montre\_tortue} n'a pas d'argument.\\
{\tt montre\_tortue} montre la tortue.\\
On tape :
\begin{center}{\tt montre\_tortue}\end{center}
Ou on tape :
\begin{center}{\tt montre\_tortue()}\end{center}
On obtient :
\begin{center}{\tt On voit la tortue}\end{center}
\subsection{Pour cacher la tortue : {\tt cache\_tortue}}\index{cache\_tortue}
\noindent {\tt cache\_tortue} n'a pas d'argument.\\
{\tt cache\_tortue} cache la tortue.\\
On tape :
\begin{center}{\tt cache\_tortue}\end{center}
Ou on tape :
\begin{center}{\tt cache\_tortue()}\end{center}
On obtient :
\begin{center}{\tt On ne voit plus la tortue}\end{center}
\subsection{Pour repr\'esenter la tortue selon un triangle vide ou plein :\\ {\tt dessine\_tortue}}\index{dessine\_tortue}
\noindent {\tt dessine\_tortue} a comme argument 0 ou 1 (par d\'efaut 1).\\
{\tt dessine\_tortue 0} permet de dessiner le petit triangle repr\'esentant la
tortue.\\
{\tt dessine\_tortue } ou {\tt dessine\_tortue 1} permet de dessiner le petit triangle repr\'esentant la
tortue en forme pleine.\\
{\tt dessine\_tortue} peut permettre de mat\'erialiser les positions
interm\'ediaires ocup\'ees par la tortue, en particulier de marquer sur le
dessin la position de d\'epart de la tortue avec {\tt dessine\_tortue 1} et sa
position d'arriv\'ee avec {\tt dessine\_tortue 0}.\\
En effet lorsqu'on \'ecrit une proc\'edure qui r\'ealise un dessin tortue,
il est important de noter sur le dessin la position de d\'epart et la position
d'arriv\'ee de la tortue pour pouvoir r\'eutiliser correctement cette
proc\'edure. C'est pourquoi lorsqu'on traduit par un dessin ce que fait une
proc\'edure graphique, on
repr\'esente la position de d\'epart de la tortue par un triangle plein et
la position d'arriv\'ee de la tortue par un triangle non plein.\\
On tape :
\begin{center}{\tt dessine\_tortue}\end{center}
Ou on tape :
\begin{center}{\tt dessine\_tortue 1}\end{center}
On obtient :
\begin{center}{\tt On voit la tortue sous la forme d'un petit triangle plein}\end{center}
On tape :
\begin{center}{\tt dessine\_tortue 0}\end{center}
On obtient :
\begin{center}{\tt On dessine la tortue sous la forme d'un petit triangle}\end{center}{\bf Remarque}\\
Les dessins associ\'es \`a une proc\'edure seront faits en utilisant un
{\tt dessine\_tortue} au d\'epart : ainsi le triangle plein repr\'esente la
position de la tortue au d\'epart et
le triangle "vide" repr\'esente la tortue \`a l'arriv\'ee.
Si la tortue revient \`a son point de d\'epart, on dit que la proc\'edure est
transparente : sur le dessin on ne verra donc que le triangle plein
repr\'esentant la position de la tortue au d\'epart et \`a l'arriv\'ee.
\section{La barre de boutons de l'\'ecran {\tt Tortue}}
On trouve dans la barre de boutons de l'\'ecran {\tt Tortue} les principales
primitives existantes de la tortue et un Menu {\tt M}.\\
\begin{itemize}
\item Le Menu {\tt M} permet d'avoir un maillage c'est \`a dire d'avoir un
\'ecran dont le fond est soit quadrill\'e \`a points ({\tt quadrillage}), soit
triangul\'e \`a points ({\tt triangle}), soit sans maillage ({\tt aucun}).\\
Ce menu permet aussi d'imprimer l'\'ecran {\tt Tortue}
et de le transformer soit en un fichier {\tt .eps, .jpg, .pdf, .png}
({\tt Previsualisation avec EPS et PNG}), soit
en un fichier LaTex ({\tt Previsualiser avec Latex}).
\item Les primitives sont d\'esign\'ees soit
par leurs deux premi\`eres lettres, soit par les initiales des mots composant
les primitives comportant un soulign\'e ({\tt \_}).\\
On trouve :\\
{\tt av} pour {\tt avance}\\
{\tt re} pour {\tt recule}\\
{\tt td} pour {\tt tourne\_droite}\\
{\tt tg} pour {\tt tourne\_gauche}\\
{\tt pc} pour {\tt pas\_de\_cote}\\
{\tt sa} pour {\tt saute}\\
{\tt cr} pour {\tt crayon}\\
{\tt ro} pour {\tt rond}\\
{\tt di} pour {\tt disque}\\
{\tt rp} pour {\tt rectangle\_plein}\\
{\tt tp} pour {\tt triangle\_plein}\\
{\tt ec} pour {\tt ecris}\\
{\tt sg} pour {\tt signe}\\
{\tt ef} pour {\tt efface}\\
Lorsqu'on appuie sur {\tt av}, la commande {\tt avance} s'inscrit dans la
ligne de commandes : cette barre de boutons permet donc de saisir les
commandes plus facilement. On appuie sue {\tt Entree} et la tortue avance de 10 pas.\\
Lorsqu'on appuie sur {\tt cr}, on fait apparaitre la palette des couleurs
lorsqu'on clique par exemple sur la couleur 123, la commande {\tt crayon 123}
s'inscrit dans la ligne de commandes puis, on appuie sur {\tt Entree} et la
tortue change sa couleur.\\
Si on veut juste avoir le code d'une couleur, on peut aussi utiliser le menu
{\tt M->Couleur}.
\end{itemize}
Il faut aussi savoir que la touche tabulation de votre clavier
($\leftrightarrows$) permet de compl\'eter ce qui se trouve dans la
ligne de commandes en les diff\'erentes instructions de {\tt Xcas}.\\
Par exemple on tape :\\
\begin{center}{\tt pas $\leftrightarrows$}\end{center}
On obtient :
%\begin{center}{\tt Un petit \'ecran s'ouvre sur lequel on vous propose {\tt pas\_de\_cote}}\end{center}
\begin{center}{\tt L'index de l'aide s'ouvre \`a pas. On s\'electionne {\tt pas\_de\_cote} et on appuie sur entree}\end{center}
\section{Les primitives de d\'eplacement}
Les commandes de cette section permettent de manipuler la tortue et son crayon.
\subsection{Pour avancer : {\tt avance}}\index{avance}
\noindent {\tt avance} a comme argument un r\'eel {\tt a}
(ou aucun argument).\\
{\tt avance a} fait avancer la tortue de {\tt a} pas (par d\'efaut
{\tt a=10}).\\
On tape :
\begin{center}{\tt avance}\end{center}
Ou on tape :
\begin{center}{\tt avance 10}\end{center}
Ou on tape :
\begin{center}{\tt avance(10)}\end{center}
On obtient :
\begin{center}{\tt La tortue avance de 10 pas}\end{center}
On tape :
\begin{center}{\tt avance 30}\end{center}
Ou on tape :
\begin{center}{\tt avance(30)}\end{center}
On obtient :
\begin{center}{\tt La tortue avance de 30 pas}\end{center}
{\bf Remarque}\\
{\tt avance -30} est identique \`a {\tt recule 30}.
\subsection{Pour reculer : {\tt recule}}\index{recule}
\noindent {\tt recule} a comme argument un r\'eel {\tt a} (ou aucun argument).\\
{\tt recule a} fait reculer la tortue de {\tt a} pas (par d\'efaut {\tt a=10}).\\
On tape :
\begin{center}{\tt recule}\end{center}
Ou on tape :
\begin{center}{\tt recule 10}\end{center}
Ou on tape :
\begin{center}{\tt recule(10)}\end{center}
On obtient :
\begin{center}{\tt La tortue recule de 10 pas}\end{center}
On tape :
\begin{center}{\tt recule 30}\end{center}
Ou on tape :
\begin{center}{\tt recule(30)}\end{center}
On obtient :
\begin{center}{\tt La tortue recule de 30 pas}\end{center}
{\bf Remarque}\\
{\tt recule -30} est identique \`a {\tt avance 30}.
\subsection{Pour effacer un trait ou pour revenir au d\'ebut : {\tt efface}}\index{efface}
\noindent {\tt efface} admet un ou aucun argument.\\
Lorsque {\tt efface} n'a pas d'argument.\\
{\tt efface} efface l'\'ecran et remet la tortue dans la position qu'elle avait
lorsque on a d\'emarr\'e :la tortue a un crayon noir baiss\'e est au pixel de
coordonn\'ees [100,100], avec un cap 0.\\
On tape :
\begin{center}{\tt efface}\end{center}
Ou on tape :
\begin{center}{\tt efface()}\end{center}
On obtient :
\begin{center}{\tt la tortue au pixel de coordonn\'ees [100,100], avec le cap 0}\end{center}
Lorsque {\tt efface} a un argument, {\tt efface} fait reculer la tortue en
effa\c{c}ant, puis remet le crayon en noir.
On tape :
\begin{center}{\tt avance 50}\end{center}
Ou on tape :
\begin{center}{\tt efface 20}\end{center}
On obtient :
\begin{center}{\tt la tortue a un crayon noir et n'a avanc\'e que de 30 pas}\end{center}
{\bf Remarque}\\
{\tt efface(a)} r\'ealise la suite d'instructions :\\
{\tt crayon(gomme);recule(a);crayon(noir)}
\subsection{Pour tourner \`a droite : {\tt tourne\_droite}}\index{tourne\_droite}
\noindent {\tt tourne\_droite} a comme argument un r\'eel {\tt a} (ou aucun
argument).\\
{\tt tourne\_droite a} fait tourner (sans d\'eplacement) la tortue \`a droite
de {\tt a} degr\'es (par d\'efaut {\tt a=90}).\\
On tape :
\begin{center}{\tt tourne\_droite}\end{center}
Ou on tape :
\begin{center}{\tt tourne\_droite 90}\end{center}
Ou on tape :
\begin{center}{\tt tourne\_droite(90)}\end{center}
On obtient :
\begin{center}{\tt La tortue a tourn\'e \`a droite de 90 degr\'es}\end{center}
On tape :
\begin{center}{\tt tourne\_droite 30}\end{center}
Ou on tape :
\begin{center}{\tt tourne\_droite(30)}\end{center}
On obtient :
\begin{center}{\tt La tortue a tourn\'e \`a droite de 30 degr\'es}\end{center}
{\bf Remarque}\\
{\tt tourne\_droite -30} est identique \`a {\tt tourne\_gauche 30}.
\subsection{Pour tourner \`a gauche : {\tt tourne\_gauche}}\index{tourne\_gauche}
\noindent {\tt tourne\_gauche} a comme argument un r\'eel {\tt a}
(ou aucun argument).\\
{\tt tourne\_gauche a} fait tourner (sans d\'eplacement) la tortue \`a gauche
de {\tt a} degr\'es (par d\'efaut {\tt a=90}).\\
On tape :
\begin{center}{\tt tourne\_gauche}\end{center}
Ou on tape :
\begin{center}{\tt tourne\_gauche 90}\end{center}
Ou on tape :
\begin{center}{\tt tourne\_gauche(90)}\end{center}
On obtient :
\begin{center}{\tt La tortue a tourn\'e \`a gauche de 90 degr\'es}\end{center}
On tape :
\begin{center}{\tt tourne\_gauche 30}\end{center}
Ou on tape :
\begin{center}{\tt tourne\_gauche(30)}\end{center}
On obtient :
\begin{center}{\tt La tortue a tourn\'e \`a gauche de 30 degr\'es}\end{center}
{\bf Remarque}\\
{\tt tourne\_gauche -30} est identique \`a {\tt tourne\_droite 30}.
\subsection{Pour avancer ou reculer sans tracer : {\tt saute}}\index{saute}
\noindent {\tt saute} a comme argument un r\'eel {\tt a} (ou aucun argument).\\
{\tt saute a} fait avancer la tortue de {\tt a} pas, sans laisser de traces et
sans changer de cap (par d\'efaut {\tt a=10}).\\
Si {\tt a} est n\'egatif la tortue recule de {\tt -a} pas, sans laisser de
traces.\\
{\tt saute 20} est identique \`a :\\
{\tt leve\_crayon,avance 20; baisse\_crayon;}.\\
{\tt saute -20} est identique \`a :\\
{\tt leve\_crayon,recule 20; baisse\_crayon;}.\\
{\bf Remarque} \\
Apr\`es un {\tt saute} on est en {\tt baisse\_crayon}.\\
On tape :
\begin{center}{\tt saute}\end{center}
Ou on tape :
\begin{center}{\tt saute 10}\end{center}
Ou on tape :
\begin{center}{\tt saute(10)}\end{center}
On obtient :
\begin{center}{\tt La tortue a avanc\'e de 10 pas sans laisser de traces et sa position est marqu\'ee par un point}\end{center}
On tape :
\begin{center}{\tt saute 20}\end{center}
Ou on tape :
\begin{center}{\tt saute(20)}\end{center}
On obtient :
\begin{center}{\tt La tortue a avanc\'e de 20 pas sans laisser de traces et sa position est marqu\'ee par un point}\end{center}
{\bf Attention}\\
{\tt saute 20; saute 20; saute 20;} n'est pas identique \`a {\tt saute 60} car
\`a chaque saut la tortue laisse une trace !
\subsection{Pour faire un bond \`a droite ou \`a gauche sans tracer : {\tt pas\_de\_cote}}\index{pas\_de\_cote}
\noindent {\tt pas\_de\_cote} a comme argument un r\'eel {\tt a}
(ou aucun argument).\\
Si {\tt a} est positif {\tt pas\_de\_cote a} fait faire un bond de {\tt a} pas
\`a gauche de la tortue sans laisser de traces et sans changer de cap
(par d\'efaut {\tt a=10}).\\
Si {\tt a} est n\'egatif {\tt pas\_de\_cote a} fait faire un bond de {\tt -a}
pas \`a droite de la tortue sans laisser de traces et sans changer de cap.\\
{\tt pas\_de\_cote 20} est identique \`a :\\
{\tt leve\_crayon,tourne\_gauche,avance 20,baisse\_crayon,tourne\_droite}.\\
{\bf Remarque} \\
Apr\`es un {\tt pas\_de\_cote} on est en {\tt baisse\_crayon}.\\
On tape :
\begin{center}{\tt pas\_de\_cote}\end{center}
Ou on tape :
\begin{center}{\tt pas\_de\_cote 10}\end{center}
Ou on tape :
\begin{center}{\tt pas\_de\_cote(10)}\end{center}
On obtient :
\begin{center}{\tt La tortue a fait 10 pas sur le cot\'e gauche sans laisser de
traces et sa position est marqu\'ee par un point}\end{center}
On tape :
\begin{center}{\tt pas\_de\_cote -20}\end{center}
Ou on tape :
\begin{center}{\tt pas\_de\_cote(-20)}\end{center}
On obtient :
\begin{center}{\tt La tortue a fait 20 pas sur le cot\'e droit sans laisser de
traces mais sa position est marqu\'ee par un point}\end{center}
{\bf Attention}\\
{\tt pas\_de\_cote 20; pas\_de\_cote 20; pas\_de\_cote 20;} n'est pas identique
\`a {\tt pas\_de\_cote 60} car \`a chaque bond la tortue laisse une trace !
\subsection{Pour faire un point}\index{baisse\_crayon}
Il n'y a pas de commande sp\'ecifique pour faire un point,
il suffit d'\^etre en {\tt baisse\_crayon}.\\
Ainsi, {\tt baisse\_crayon} dessine un point l\`a o\`u se trouve la tortue.
\subsection{Pour faire un cercle ou un arc de cercle: {\tt rond}}\index{rond}
\noindent {\tt rond} a comme argument 1,2 ou 3 arguments.\\
Si {\tt rond} a 1 argument : un nombre r\'eel {\tt r} (+/- le rayon).\\
{\tt rond r} dessine le cercle de rayon {\tt |r|} tangent \`a la tortue :
la tortue trace le cercle :\\
si {\tt r>0} en le parcourant dans le sens direct et\\
si {\tt r<0} en le parcourant dans le sens indirect.\\
La position d'arriv\'ee de la tortue est la m\^eme que sa postion de d\'epart.\\
On tape :
\begin{center}{\tt rond 20}\end{center}
Ou on tape :
\begin{center}{\tt rond(20)}\end{center}
On obtient :
\begin{center}{\tt Le dessin du cercle de rayon 20, tangent \`a la tortue qui indique le sens +}\end{center}
On tape :
\begin{center}{\tt rond -20}\end{center}
Ou on tape :
\begin{center}{\tt rond(-20)}\end{center}
On obtient :
\begin{center}{\tt Le dessin du cercle de rayon 20, tangent \`a la tortue qui indique le sens -}\end{center}
Si {\tt rond} a 2 arguments : un nombre r\'eel {\tt r} (+/- le rayon) et la
mesure d'un angle en degr\'es {\tt a}.\\
{\tt rond(r,a)} dessine l'arc de cercle tangent \`a la tortue, de rayon
{\tt |r|} et de mesure {\tt signe(r)*a} modulo 360 degr\'es compris entre la
postion de d\'epart et la position d'arriv\'ee de la tortue.\\
\`A l'arriv\'ee :\\
si {\tt r>0} la tortue a tourn\'e \`a gauche de {\tt a} modulo 360
degr\'es c'est \`a dire ~: si
{\tt 360>a>0} la tortue a tourn\'e \`a gauche de {\tt a} degr\'es ou \`a gauche
de {\tt a+360} degr\'es si {\tt -360a>0} la tortue a tourn\'e \`a droite de {\tt a} degr\'es ou a
tourn\'e \`a droite de {\tt a+360} degr\'es si {\tt -3600} (ou \`a droite si {\tt r<0} ) de {\tt a1} modulo 360 (resp {\tt a2}
modulo 360) degr\'es par rapport \`a sa postion de d\'epart.\\
On tape :
\begin{center}{\tt rond(20,10,100)}\end{center}
Ou on tape :
\begin{center}{\tt rond(20,-350,-260)}\end{center}
On obtient :
\begin{center}{\tt Le dessin d'un quart de cercle tangent \`a la tortue et de rayon 20 et d\'ecal\'e de 10 degr\'es par rapport \`a la position-d\'epart de la tortue et la tortue a tourn\'e \`a gauche de 100 degr\'es.}\end{center}
On tape :
\begin{center}{\tt rond(-20,10,100)}\end{center}
Ou on tape :
\begin{center}{\tt rond(-20,10,-260)}\end{center}
On obtient :
\begin{center}{\tt Le dessin d'un quart de cercle tangent \`a la tortue et de rayon 20 et d\'ecal\'e de 10 degr\'es par rapport \`a la position-d\'epart de la tortue et la tortue a tourn\'e \`a droite de 100 degr\'es.}\end{center}
{\bf Remarque}\\
{\tt rond(20,10,100)} est \'equivalent \`a :\\
{\tt leve\_crayon;}{\tt rond(20,10);}{\tt baisse\_crayon;}{\tt rond(20,(100-10))}
\section{La gestion du crayon}
Les commandes de cette section permettent de manipuler le crayon.
\subsection{Les couleurs du crayon : {\tt crayon}}\index{crayon}
Les couleurs sont cod\'ees par un entier allant de 0 \`a 255 (au del\`a de 255
la couleur est noire) mais cela peut d\'ependre de votre configuration...\\
Les principales couleurs se trouvent dans le sous\_menu {\tt Crayon},
par exemple {\tt crayon rouge}.\\
Les codes des diff\'erentes couleurs sont :\\
{\tt noir} a pour code 0,\\
{\tt rouge} a pour code 1,\\
{\tt vert} a pour code 2,\\
{\tt jaune} a pour code 3,\\
{\tt bleu} a pour code 4,\\
{\tt magenta} a pour code 5,\\
{\tt cyan} a pour code 6,\\
{\tt blanc} a pour code 7,\\
puis on a les d\'egrad\'es des couleurs pr\'ec\'edentes.\\
Il faut savoir que le fond de l'\'ecran graphique est blanc de code 7 et que
cette couleur est appel\'ee {\tt gomme}. Donc {\tt gomme} (la couleur du le
fond de l'\'ecran) a pour code 7.\\
On peut voir les diff\'erentes couleurs disponibles en appuyant sur {\tt cr} de
la barre des boutons, il suffit alors cliquer sur la couleur desir\'ee de code
{\tt n} pour que {\tt crayon n} s'inscrive dans la ligne de commande.\\
Ou bien on tape :
\begin{verbatim}
efface;
cache_tortue;
pour n de 0 jusque 88 faire
rectangle_plein(3,10);
avance(3);
crayon(n);
fpour;
saute(-267);pas_de_cote(-20);
pour n de 89 jusque 177 faire
rectangle_plein(3,10);
avance(3);
crayon(n);
fpour;
saute(-267);pas_de_cote(-20);
pour n de 178 jusque 255 faire
rectangle_plein(3,10);
avance(3);
crayon(n);
fpour;
\end{verbatim}
ou encore en une seule ligne avec un {\tt pour} :\\
\begin{verbatim}
efface;
cache\_tortue;
pour n de 0 jusque 256 faire
rectangle_plein(1,10);
avance(1);
crayon(n);
fpour;
\end{verbatim}
On obtient ainsi la palette des couleurs.
\subsection{Pour changer la couleur du crayon : {\tt crayon}}\index{crayon}\label{sec:fcrayon}
\noindent {\tt crayon} a comme argument une couleur ou un entier repr\'esentant
cette couleur ou aucun argument.\\
Quand {\tt crayon} n'a pas d'argument, {\tt crayon} renvoie la couleur du
crayon (cf \ref{sec:crayon}).\\
Quand {\tt crayon} a un argument, {\tt crayon} change la couleur du crayon.\\
On tape :
\begin{center}{\tt crayon rouge}\end{center}
Ou on tape :
\begin{center}{\tt crayon(rouge)}\end{center}
Ou on tape :
\begin{center}{\tt crayon 1}\end{center}
Ou on tape :
\begin{center}{\tt crayon(1)}\end{center}
On obtient :
\begin{center}{\tt le trac\'e suivant sera en rouge}\end{center}
On tape :
\begin{center}{\tt crayon vert}\end{center}
Ou on tape :
\begin{center}{\tt crayon 2}\end{center}
On obtient :
\begin{center}{\tt le trac\'e suivant sera en vert}\end{center}
On tape :
\begin{center}{\tt crayon gomme}\end{center}
Ou on tape :
\begin{center}{\tt crayon 7}\end{center}
On obtient :
\begin{center}{\tt le trac\'e suivant sera selon la couleur du fond donc, en baisse\_crayon, la tortue gomme les traits qui sont sur son passage}\end{center}
\subsection{Pour ne pas laisser de traces : {\tt leve\_crayon}}\index{leve\_crayon}
\noindent {\tt leve\_crayon} n'a pas d'argument.\\
{\tt leve\_crayon} permet de faire bouger la tortue sans qu'elle laisse des
traces lors de ses d\'eplacements.\\
On tape :
\begin{center}{\tt leve\_crayon}\end{center}
Ou on tape :
\begin{center}{\tt leve\_crayon()}\end{center}
On obtient :
\begin{center}{\tt La tortue a 2 couleurs et se d\'eplace sans traces}\end{center}
\subsection{Pour dessiner : {\tt baisse\_crayon}}\index{baisse\_crayon}
\noindent {\tt baisse\_crayon} n'a pas d'argument.\\
{\tt baisse\_crayon} permet de faire bouger la tortue pour qu'elle laisse des
traces lors de ses d\'eplacements.\\
On tape :
\begin{center}{\tt baisse\_crayon}\end{center}
Ou on tape :
\begin{center}{\tt baisse\_crayon()}\end{center}
On obtient :
\begin{center}{\tt La tortue a la couleur du crayon et se d\'eplacera en laissant des traces}\end{center}
\begin{center}{\tt Un point sera dessin\'e \`a l'endroit de la tortue}\end{center}
\section{Les \'etats de la tortue}
\subsection{Pour connaitre la couleur du crayon : {\tt crayon}}\index{crayon}\label{sec:crayon}
\noindent {\tt crayon} n'a pas d'argument ou a comme argument une couleur.\\
Lorsque {\tt crayon} a un argument, {\tt crayon} fixe la couleur du crayon de la tortue selon l'argument (cf \ref{sec:fcrayon}).\\
Lorsque {\tt crayon} n'a pas d'argument, {\tt crayon} renvoie la
couleur du crayon m\^eme si celui-ci est lev\'e.\\
On tape :
\begin{center}{\tt crayon}\end{center}
On obtient :
\begin{center}{\tt rouge}\end{center}
\subsection{Pour connaitre la position de la tortue : {\tt position}}\index{position}\label{sec:position}
\noindent {\tt position} n'a pas d'argument ou a comme argument un vecteur de
coordonn\'ees.\\
Lorsque {\tt position} a un argument, {\tt position} fixe la position de la
tortue selon l'argument (cf \ref{sec:fposition}).\\
Lorsque {\tt position} n'a pas d'argument, {\tt position} renvoie la position
de la tortue.\\
%{\bf Attention}\\{\tt position} renvoie la liste des coordonnees de la tortue alors que {\tt position()} renvoie la liste des coordonnees de la tortue, de son cap, de l'\'etat du crayon, de la taille de la fonte et du message que l'on a \'eventuellement \'ecrit.\\
On tape :
\begin{center}{\tt position}\end{center}
Ou on tape :
\begin{center}{\tt position()}\end{center}
On obtient par exemple comme r\'eponse :
\begin{center}{\tt [180.0,150.0]}\end{center}
%On obtient par exemple comme r\'eponse :
%\begin{center}{\tt [150.0,150.0,0.0,4179,12,"aaaa"]}\end{center}
\subsection{Pour connaitre le cap de la tortue : {\tt cap}}\index{cap}\label{sec:cap}
\noindent {\tt cap} n'a pas d'argument ou a comme argument un r\'eel.\\
Lorsque {\tt cap} a un argument, {\tt cap} fixe le cap de la tortue selon
l'argument (cf \ref{sec:fcap}).\\
Lorsque {\tt cap} n'a pas d'argument, {\tt cap} renvoie le cap de la tortue
c'est \`a dire la mesure en degr\'es de de l'angle
$\overrightarrow Ox,\overrightarrow MA$ (la tortue est sous la forme d'un petit
triangle $ABC$ isoc\`ele de sommet $A$ et $M$ est le milieu de $BC$).\\
On tape :
\begin{center}{\tt cap}\end{center}
On obtient par exemple comme r\'eponse :
\begin{center}{\tt 180.0}\end{center}
\section{Pour d\'eplacer la tortue \`a l'aide des coordonn\'ees}
Les commandes de cette section permettent de mettre la tortue selon des
coordonn\'ees et un cap.\\
L'origine [0,0] du syst\`eme de coordonn\'ees cart\'esiennes se trouve en bas
et \`a gauche de l'\'ecran, et l'axe des $y$ est dirig\'e vers le haut.
L'unit\'e est le pixel et la dimension de l'\'ecran d\'epend de votre
ordinateur.\\
Le cap de la tortue est exprim\'e en degr\'es et ses valeurs sont celles du
cercle trigonom\'etrique : ces valeurs sont interpr\'et\'ees modulo 360.
Le cap 0 est dirig\'e selon l'axe des x.
\subsection{Pour fixer sa position : {\tt position}}\index{position}\label{sec:fposition}
\noindent {\tt position} n'a pas d'argument ou a comme argument un vecteur de
coordonn\'ees.\\
Lorsque {\tt position} n'a pas d'argument, {\tt position} renvoie la position
de la tortue (cf \ref{sec:position}).\\
Lorsque {\tt position} a un argument, {\tt position} fixe la position de la tortue selon l'argument.\\
On tape :
\begin{center}{\tt position [180,150]}\end{center}
Ou on tape :
\begin{center}{\tt position([180,150])}\end{center}
On obtient :
\begin{center}{\tt la tortue a la position [180,150], sans changer son cap}\end{center}
\subsection{Pour fixer son cap : {\tt cap}}\index{cap}\label{sec:fcap}
\noindent {\tt cap} n'a pas d'argument ou a comme argument un r\'eel.\\
Lorsque {\tt cap} n'a pas d'argument, {\tt cap} renvoie le cap de la tortue
(cf \ref{sec:cap}).\\
Lorsque {\tt cap} a un argument, {\tt cap} fixe le cap de la tortue selon
l'argument.\\
On tape :
\begin{center}{\tt cap 180}\end{center}
Ou on tape :
\begin{center}{\tt cap(180)}\end{center}
On obtient :
\begin{center}{\tt la tortue est dirig\'ee selon l'axe des x n\'egatifs, sans changer sa position}\end{center}
\subsection{Pour diriger la t\^ete de la tortue vers un point : {\tt vers}}\index{vers}
\noindent {\tt vers} a 1 argument qui est la liste form\'ee par les
coordonn\'ees du point ou 2 arguments qui sont les coordonn\'ees du point.\\
{\tt vers} fixe le cap de la tortue selon la direction donn\'ee par
l'argument.\\
On tape :
\begin{center}{\tt vers(0,0)}\end{center}
Ou on tape :
\begin{center}{\tt vers [0,0]}\end{center}
Ou on tape :
\begin{center}{\tt vers([0,0])}\end{center}
On obtient :
\begin{center}{\tt la tortue est dirig\'ee selon le point [0,0] qui est le point en bas et \`a gauche de l'\'ecran}\end{center}
\section{Les figures pleines}
Les commandes de cette section permettent de dessiner des figures pleines.
\subsection{Pour dessiner un disque ou un secteur angulaire : {\tt disque}}\index{disque}
\noindent {\tt disque} a 1,2 ou 3 arguments.\\
{\tt disque} a les m\^emes arguments que {\tt rond} mais dessine le cercle
plein.\\
Si {\tt disque} a comme argument un nombre r\'eel {\tt r}.\\
{\tt disque(r)} dessine un disque tangent \`a la position de la tortue, de
rayon {\tt |r|} et de couleur la couleur du crayon. La tortue indique le
sens de parcours du bord du disque : ce sens est positif si {\tt r>0} et
n\'egatif si {\tt r<0}.\\
On tape :
\begin{center}{\tt disque 20}\end{center}
Ou on tape :
\begin{center}{\tt disque(20)}\end{center}
On obtient :
\begin{center}{\tt On obtient un disque de rayon 20, tangent \`a la position de la tortue et situ\'e \`a gauche de la position de la tortue.}\end{center}
Si {\tt disque} a 2 arguments un nombre r\'eel {\tt r} et la
mesure d'un angle en degr\'es {\tt a}.\\
{\tt disque(r,a)} dessine de la couleur du crayon, un secteur angulaire
tangent \`a la position de la tortue, de rayon {\tt |r|}, d'angle {\tt a},
compris entre la postion de d\'epart et la position d'arriv\'ee de la tortue.\\
La tortue au d\'epart indique le
sens de parcours du bord du disque : ce sens est positif si {\tt r>0} et
n\'egatif si {\tt r<0}.\\
\`A l'arriv\'ee la tortue a tourn\'e de {\tt a} degr\'es par rapport \`a sa
postion de d\'epart, \`a gauche, si {\tt r>0} et, \`a droite, si {\tt r<0}.\\
On tape :
\begin{center}{\tt disque(20,90)}\end{center}
On obtient :
\begin{center}{\tt On obtient un quart de disque situ\'e\`a gauche de la tortue, tangent \`a la tortue, de rayon 20 et la tortue a tourn\'e \`a gauche de 90 degr\'es}\end{center}
On tape :
\begin{center}{\tt disque(-20,90)}\end{center}
On obtient :
\begin{center}{\tt On obtient un quart de disque situ\'e\`a droite de la tortue, tangent \`a la tortue, de rayon 20 et la tortue a tourn\'e \`a droite de 90 degr\'es}\end{center}
Si {\tt disque} a 3 arguments un nombre r\'eel {\tt r} (le rayon) et les
mesures {\tt a1} et {\tt a2} de 2 angles en degr\'es .\\
{\tt disque(r,a1,a2)} dessine un secteur angulaire tangent \`a la
tortue, de rayon {\tt |r|} et d'angle {\tt a2-a1} commen\c{c}ant \`a {\tt a1}
degr\'es par rapport \`a la position de la tortue.\\
La tortue au d\'epart indique le
sens de parcours du bord du disque : ce sens est positif si {\tt r>0} et
n\'egatif si {\tt r<0}.\\
\`A l'arriv\'ee la tortue a tourn\'e de {\tt a2} degr\'es par rapport \`a sa
postion de d\'epart, \`a gauche, si {\tt r>0} et, \`a droite, si {\tt r<0}.\\
On tape :
\begin{center}{\tt disque(20,10,100)}\end{center}
On obtient :
\begin{center}{\tt On obtient un quart de disque situ\'e\`a gauche de la tortue, tangent \`a la position de la tortue, de rayon 20 et commencant \`a 10
degr\'es par rapport \`a la position de d\'epart de la tortue.}\end{center}
{\bf Remarque}
Pour dessiner un disque de rayon {\tt r} et de centre la tortue on peut d\'efinir :\\
{\tt disque\_centre(r):=\\
avance(r);tourne\_gauche; disque(r);tourne\_droite; recule(r)}
Pour dessiner un secteur d'angle {\tt a} de rayon {\tt r} et de centre la tortue on peut d\'efinir :\\
{\tt secteur\_centre(r,a):=\\
avance(r);tourne\_gauche; disque(r,a);tourne\_droite; recule(r)}
Pour dessiner un secteur d'angle {\tt a1} et {\tt a2}, de rayon {\tt r} et
de centre la tortue on peut d\'efinir :\\
{\tt secteurs\_centre(r,a1,a2):=\\
avance(r);tourne\_gauche; disque(r,a1,a2);tourne\_droite; recule(r)}
\subsection{Pour dessiner un rectangle plein : {\tt rectangle\_plein}}\index{rectangle\_plein}
\noindent {\tt rectangle\_plein} a comme argument 1 ou 2 nombres r\'eels.\\
Si il n'y a qu'un argument {\tt a} {\tt rectangle\_plein(a)} dessine un carr\'e
plein de cot\'e {\tt a} et si il y a 2 arguments {\tt a} et {\tt b},
{\tt rectangle\_plein(a,b)}
dessine un rectangle plein de cot\'es {\tt a} et {\tt b}.\\
Le carr\'e ou le rectangle sont situ\'es \`a gauche de la tortue : la tortue
d\'ecrit le contour dans le sens direct et remplit la figure d\'ecrite.\\
On tape :
\begin{center}{\tt rectangle\_plein 20}\end{center}
Ou on tape :
\begin{center}{\tt rectangle\_plein(20)}\end{center}
On obtient :
\begin{center}{\tt dessine un carr\'e plein de cot\'e 20 \`a gauche de la tortue}\end{center}
On tape :
\begin{center}{\tt rectangle\_plein(20,20,50)}\end{center}
On obtient :
\begin{center}{\tt dessine un losange plein de c\^ot\'es 20,
d\'elimitant un angle de 50 degr\'es \`a gauche de la tortue}\end{center}
On tape :
\begin{center}{\tt rectangle\_plein(20,40)}\end{center}
On obtient :
\begin{center}{\tt dessine un rectangle plein de cot\'es 20 et 40 \`a gauche de la tortue}\end{center}
On tape :
\begin{center}{\tt rectangle\_plein(20,40,-50)}\end{center}
On obtient :
\begin{center}{\tt dessine un parall\'elogramme plein de c\^ot\'es 20 et 40, d\'elimitant un angle de 50 degr\'es, \`a droite de la tortue}\end{center}
\subsection{Pour dessiner un triangle plein : {\tt triangle\_plein}}\index{triangle\_plein}
\noindent {\tt triangle\_plein} a comme argument 1 2 ou 3 nombres r\'eels.\\
Si il y a un seul argument {\tt a}, {\tt triangle\_plein} dessine un triangle
\'equilat\'eral plein de cot\'e {\tt a}.\\
Si il y a deux arguments {\tt a} et {\tt b}, {\tt triangle\_plein} dessine
un triangle rectangle plein de cot\'es {\tt a} et {\tt b}.\\
Si il y a trois arguments {\tt a}, {\tt b} et {\tt t}, {\tt triangle\_plein}
dessine un triangle plein de cot\'es {\tt a} et {\tt b} et formant un angle
de {\tt t} degr\'es.\\
On tape :
\begin{center}{\tt triangle\_plein 20}\end{center}
Ou on tape :
\begin{center}{\tt triangle\_plein(20)}\end{center}
On obtient :
\begin{center}{\tt Un triangle \'equilat\'eral plein de cot\'es 20 \`a gauche de la tortue}\end{center}
On tape :
\begin{center}{\tt triangle\_plein(20,40)}\end{center}
On obtient :
\begin{center}{\tt Un triangle rectangle plein de cot\'es 20 et 40 \`a gauche de la tortue}\end{center}
On tape :
\begin{center}{\tt triangle\_plein(20,40,60)}\end{center}
On obtient :
\begin{center}{\tt Un triangle plein de cot\'es 20 et 40 formant un angle de 60 degr\'es \`a gauche de la tortue}\end{center}
On tape :
\begin{center}{\tt tortue():=\{\\
triangle\_plein(17,5);tourne\_droite;\\
triangle\_plein(5,17);
tourne\_gauche;\}}
\end{center}
On obtient :
\begin{center}{\tt Un triangle plein qui dessine la tortue}\end{center}
\subsection{Pour remplir un polygone que l'on vient de tracer : {\tt polygone\_rempli}}\index{polygone\_rempli}
\noindent {\tt polygone\_rempli} a comme argument un entier n\'egatif {\tt -n}
strictement inf\'erieur \`a -1.\\
{\tt polygone\_rempli -n} recherche les {\tt n} positions pr\'ec\'edentes de
la tortue qui doivent former un polygone qui sera ensuite rempli.\\
Dans la pratique, on fait tracer \`a la tortue un polygone puis on compte le
nombre d'instructions {\tt n} utilis\'ees pour faire ce polygone, puis on tape :\\
{\tt polygone\_rempli -n}.\\
{\bf Attention} \\
{\tt tourne\_droite} ou {\tt tourne\_gauche} compte pour une position.\\
On tape :
\begin{center}{\tt avance 40; tourne\_gauche 120; avance 40; tourne\_gauche 120; avance 40; polygone\_rempli -5}\end{center}
On obtient :
\begin{center}{\tt Le dessin d'un triangle \'equilat\'eral plein de cot\'es 40}\end{center}
{\bf Attention} La tortue ici n'est pas revenue \`a sa position initiale.\\
On tape :
\begin{center}{\tt repete(3,avance 50,tourne\_gauche 120);\\
polygone\_rempli -6}\end{center}
On obtient :
\begin{center}{\tt Le dessin d'un triangle \'equilat\'eral plein de cot\'es 50}\end{center}
{\bf Attention} La tortue ici est revenue \`a sa position initiale.
\section{Pour \'ecrire sur l'\'ecran dessin tortue}
\subsection{Pour \'ecrire une cha\^{\i}ne de caract\`eres sur l'\'ecran dessin tortue : {\tt ecris}}\index{ecris}
\noindent {\tt ecris} a 1,2 ou 4 arguments qui sont :\\
une cha\^{\i}ne de caract\`eres, la taille de la fonte (par d\'efaut 14), et
les coordonn\'ees du point o\`u l'on veut \'ecrire (par d\'efaut ce sera l\`a
o\`u se trouve la tortue).\\
Il faut noter que la cha\^{\i}ne de caract\`eres peut s'\'ecrire avec ou sans
les {\tt "}.\\
{\bf Attention} \\
La commande {\tt ecris} ne change pas la position de la tortue.\\
On tape :\\
\begin{center}{\tt ecris("bonjour")}\end{center}
Ou on tape :\\
\begin{center}{\tt ecris(bonjour)}\end{center}
On obtient :
\begin{center}{\tt bonjour s'\'ecrit l\`a o\`u se trouve la tortue avec la fonte 14}\end{center}
On tape :\\
\begin{center}{\tt ecris("bonjour",20)}\end{center}
Ou on tape :\\
\begin{center}{\tt ecris(bonjour,20)}\end{center}
On obtient :
\begin{center}{\tt bonjour s'\'ecrit l\`a o\`u se trouve la tortue avec la fonte 20}\end{center}
On tape :\\
\begin{center}{\tt ecris("bonjour",20,30,10)}\end{center}
Ou on tape :\\
\begin{center}{\tt ecris(bonjour,20,30,10)}\end{center}
On obtient :
\begin{center}{\tt bonjour s'\'ecrit \`a la place du point [30,10] avec la fonte 20 et la tortue l\`a o\`u elle \'etait avant {\tt ecris}.}\end{center}
\subsection{Pour signer un dessin sur l'\'ecran dessin tortue : {\tt signe}}\index{signe}
\noindent {\tt signe} a un argument qui une cha\^{\i}ne de caract\`eres.\\
{\tt signe} \'ecris la cha\^{\i}ne de caract\`eres \`a la place du point
[10,10] avec la fonte 20.\\
Il faut noter que la cha\^{\i}ne de caract\`eres peut s'\'ecrire avec ou sans
les {\tt "}.\\
On a donc :\\
{\tt signe("Thomas")}={\tt ecris("Thomas",20,10,10)}.\\
On tape :\\
\begin{center}{\tt signe("Thomas")}\end{center}
Ou on tape
\begin{center}{\tt signe(Thomas)}\end{center}
On obtient :
\begin{center}{\tt Thomas s'\'ecrit en [10,-10] avec la fonte 20 et la tortue l\`a o\`u elle \'etait avant {\tt signe}.}\end{center}
\chapter{Les instructions de programmation}
\subsection{G\'en\'eralit\'es}\index{non}\index{ou}\index{et}\index{;}\index{==}\index{:=}\index{<=}\index{>=}\index{>}\index{<}\index{!=}
Il faut savoir que :\\
{\tt ;} termine une instruction,\\
{\tt :=} permet d'affecter une variable ou de d\'efinir une fonction ou une
proc\'edure.\\
On tape pour affecter une variable:
\begin{center}{\tt a:=1}\end{center}
On tape pour d\'efinir la fonction ${\tt f(x)=2*x+\sqrt x}$ :
\begin{center}{\tt f(x):=2*x+sqrt(x)}\end{center}
On tape pour d\'efinir la proc\'edure {\tt Carre} :
\begin{center}{\tt Carre(x):=\{repete(4,avance(x),tourne\_gauche)\}}\end{center}
Un bool\'een a comme valeur 0 (faux) ou 1 (vrai),\\
les bool\'eens (ie les conditions) peuvent \^etre obtenus avec les signes
\begin{description}
\item[$\bullet$] {\tt ==} qui teste l'\'egalit\'e (toutefois on admet {\tt =} pour tester
l'\'egalit\'e dans les instructions {\tt si} et {\tt tantque}),
\item[$\bullet$] {\tt < > <= >=} qui testent les in\'egalit\'es,
\item[$\bullet$] {\tt !=} qui teste la diff\'erence.
\end{description}
%Les bool\'eens doivent toujours \^etre entour\'ees de parenth\`eses {\tt ()} dans les instructions {\tt si} et {\tt tantque},\\
Les op\'erateurs sur les bool\'eens sont {\tt ou, et, non}.\\
On tape :
\begin{center}{\tt 0 et 1}\end{center}
Ou on tape :
\begin{center}{\tt 0 and 1}\end{center}
On obtient :
\begin{center}{\tt 0}\end{center}
On tape :
\begin{center}{\tt 0 ou 1}\end{center}
Ou on tape :
\begin{center}{\tt 0 or 1}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}
On tape :
\begin{center}{\tt 0 > 1}\end{center}
On obtient :
\begin{center}{\tt 0}\end{center}
On tape :
\begin{center}{\tt non(0 <1)}\end{center}
Ou on tape :
\begin{center}{\tt not(0 <1)}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}
\subsection{Pour choisir : {\tt si...alors...sinon...fsi}}\index{si}\index{sinon}\index{alors}\index{fsi}
\noindent{\tt si alors sinon fsi}
permet d'effectuer les {\tt } lorsque la condition est
satisfaite et d'effectuer les {\tt } lorsque la condition n'est
pas satisfaite.\\
On tape :
\begin{center}{\tt a:=3; si a==3 alors avance 10*a; sinon avance; fsi }\end{center}
Ou on tape :
\begin{center}{\tt a:=3; if (a==3) \{avance(10*a);\} else \{avance;\}}\end{center}
On obtient :
\begin{center}{\tt La tortue avance de 30 pas}\end{center}
\subsection{Pour r\'ep\'eter les m\^emes instructions: {\tt repete}}\index{repete}
Pour faire plusieurs fois de suite plusieurs instructions on utilise
{\tt repete}.\\
{\tt repete} a comme argument un entier (le nombre de fois) et la suite
d'instructions s\'epar\'ees par une virgule.\\
On tape :
\begin{center}{\tt repete 3,avance 40,tourne\_droite 120 }\end{center}
Ou on tape :
\begin{center}{\tt repete 3,avance(30),tourne\_droite(120)}\end{center}
Ou on tape :
\begin{center}{\tt repete(3,avance 30,tourne\_droite 120)}\end{center}
Ou on tape :
\begin{center}{\tt repete(3,avance(30),tourne\_droite(120))}\end{center}
On obtient :
\begin{center}{\tt Un triangle \'equilat\'eral de cot\'es 30}\end{center}
{\bf Attention}
Si on veut utiliser un {\tt repete} dans un autre {\tt repete} il faut le
parenth\'eser c'est \`a dire mettre \`a l'ext\'erieur de {\tt repete} soit
{\tt ()} soit {\tt []} : {\tt (repete....)} ou {\tt [repete....]}.\\
On tape par exemple :\\
{\tt repete(2,(repete(3,avance(20),tourne\_gauche(30))),tourne\_droite)}\\
ou\\
{\tt repete(2,[repete(3,avance(20),tourne\_gauche(30))],tourne\_droite)}\\
qui dessine 2 arcs "hexagonaux", ce qui est diff\'erent de :\\
{\tt repete(2,repete(3,avance(20),tourne\_gauche(30)),tourne\_droite)}\\
qui \'equivaut \`a :\\
{\tt repete(2,repete(3,avance(20),tourne\_gauche(30),tourne\_droite))}\\
et qui dessine l'hexagone :\\
{\tt repete(6,avance(20),tourne\_droite(60))}
\subsection{Pour faire $n$ fois une boucle : {\tt pour...de ...jusque... pas...faire...fpour}}\index{pour}\index{fpour}\index{de}\index{jusque}\index{pas}
\noindent {\tt pour $k$ de $k1$ jusque $k2$ pas $p$ faire fpour} permet de faire les instructions en faisant varier $k$ de $k1$ jusqu'\`a
$k2$ en faisant des pas de $p$ (si $p$=1 {\tt pas $p$} peut \^etre omis).\\
Bien s\^ur $k$ peut \^etre remplac\'e par un autre nom de variable et en
g\'en\'eral les instructions \`a faire d\'ependent de cette variable car sinon
on utilise {\tt repete}
On tape :
\begin{center}{\tt pour n de 1 jusque 10 faire avance 10*n;tourne\_gauche;fpour}\end{center}
Ou on tape :\\
\begin{center}{\tt for (n:=1;n<=10;n:=n+1)\{avance 10*n;tourne\_gauche;\}}\end{center}
On obtient :
\begin{center}{\tt La tortue dessine un morceau de frise grecque en partant du centre}\end{center}
On tape :
\begin{center}{\tt pour n de 10 jusque 1 pas -1 faire avance 10*n;tourne\_gauche;fpour}\end{center}
Ou on tape :\\
\begin{center}{\tt for (n:=10;n>=1;n:=n-1)\{avance 10*n;tourne\_gauche;\}}\end{center}
On obtient :
\begin{center}{\tt La tortue dessine un morceau de frise grecque mais en partant de l'ext\'erieur}\end{center}
\subsection{Pour faire une boucle : {\tt tantque...faire...ftantque}}\index{tantque}\index{ftantque}\index{faire}
\noindent {\tt tantque faire ftantque} permet de
faire les instructions tant que la condition est satisfaite.\\
On ouvre un \'editeur de programme ({\tt Alt+p} et on tape :
\begin{verbatim}
dessine_tortue;
n:=100;
tantque (n>0) faire
avance n;
tourne_gauche;
n:=n-10;
ftantque;
\end{verbatim}
Ou on tape :\\
\begin{verbatim}
dessine_tortue;
n:=100;
while (n>0) {
avance n;
tourne_gauche;
n:=n-10;
}:;
\end{verbatim}
Puis on compile en appuyant sur {\tt OK} ou sur {\tt F9} et on obtient :
\begin{center}{\tt La tortue dessine un morceau de frise grecque}\end{center}
\begin{center}\includegraphics[width=8cm]{tortue0}\end{center}
\subsection{Pour faire une boucle en utilisant la r\'ecursivit\'e}
Une proc\'edure r\'ecursive est une proc\'edure qui s'appelle elle-m\^eme mais
avec des param\`etres diff\'erents et comporte un test d'arr\^et qui permet
d'interrompre cet appel.\\
On tape dans un \'editeur de programmes puis on compile en appuyant sur {\tt OK}
ou sur {\tt F9} :
\begin{verbatim}
polygo(n,p,a):={
si p!=0 alors
avance(a);
tourne_gauche(360/n);
polygo(n,p-1,a);
fsi;
}:;
\end{verbatim}
Ou on tape en utilisant {\tt si...alors...fsi} au lieu de {\tt if...\{...\}} :
\begin{verbatim}
polygo(n,p,a):={
si (p!=0) alors
avance(a);
tourne_gauche(360/n);
polygo(n,p-1,a);
fsi;
};
\end{verbatim}
Ou on tape une proc\'edure non r\'ecursive en utilisant {\tt repete} :
\begin{center}{\tt polygo(n,p,a):=repete(p,avance(a),tourne\_gauche(360/n))}\end{center}
Puis on tape dans un niveau de l'\'ecran tortue :
\begin{center}{\tt efface;dessine\_tortue;polygo(6,5,50)}\end{center}
On obtient :
\begin{center}{\tt Les 5 cot\'es d'un hexagone de c\^ot\'es 50}\end{center}
\begin{center}\includegraphics[width=6cm]{tortueh}\end{center}
On veut faire une suite de $n$ triangles \'equilat\`eraux : le premier a pour
c\^ot\'es $a$, le deuxi\`eme a pour sommet les milieux des cot\'es du premier
triangle etc ...
On suppose que la tortue a comme position de d\'epart :
un sommet du premier triangle et est dirig\'ee selon un cot\'e et que
les triangles sont situ\'es sur sa gauche (si vous choisissez les triangles
sont situ\'es sur sa droite, il suffira de changer les {\tt tourne\_droite} en
{\tt tourne\_gauche} et vice-versa). On choisit la m\^eme position comme
position d'arriv\'ee.\\
Voici deux proc\'edures r\'ecursives.\\
On dessine le premier triangle, puis on place la tortue \`a l'endroit o\`u il
faut \^etre pour faire l'appel r\'ecursif, on fait l'appel r\'ecursif,
et on ramene la tortue \`a sa position de d\'epart.\\
On tape par exemple dans un \'editeur de programmes puis on compile en appuyant
sur {\tt OK} ou sur {\tt F9} :
\begin{verbatim}
tria(n,a):={
si n!=0 alors
repete(3,avance(a),tourne_gauche(120));
avance(a/2);
tourne_gauche(60);
tria(n-1,a/2);
tourne_droite(60);
avance(-a/2);
fsi;
}:;
\end{verbatim}
On tape :\\
{\tt efface;dessine\_tortue;tria(5,100)}\\
On obtient :
\begin{center}\includegraphics[width=10cm]{tortuet}\end{center}
Ou pour ne pas repasser sur le m\^eme trait, on commence \`a dessiner le
d\'ebut du premier triangle, puis on place la tortue \`a l'endroit o\`u il faut
\^etre pour faire l'appel r\'ecursif, on fait l'appel r\'ecursif, puis on
finit de dessiner le premier triangle et on ram\`ene la tortue \`a sa position
de d\'epart.\\
On tape :
\begin{verbatim}
tria1(n,a):={
si n!=0 alors
avance(a/2);
tourne_droite(60);
tria1(n-1,a/2);
tourne_gauche(60);
avance(a/2);
tourne_droite(120);
repete(2,avance(a),tourne_droite(120));
fsi;
}:;
\end{verbatim}
Puis on tape :
\begin{center}{\tt efface;dessine\_tortue;tria1(5,100)}\end{center}
On obtient :
\begin{center}{\tt 5 triangles \'equilat\`eraux, le deuxi\`eme triangle a pour sommet les milieux des cot\'es du premier triangle etc ...}\end{center}
c'est \`a dire le m\^eme dessin que pr\'ec\'edemment.
\subsection{Pour d\'efinir une fonction : {\tt retourne}}\index{retourne}
\noindent {\tt retourne} a un argument qui est la valeur que l'on veut donner
\`a la fonction.\\
{\tt retourne} permet d'interrompre le programme et de renvoyer l'argument
de {\tt retourne} comme \'etant la valeur de la fonction que l'on d\'efinit.\\
On tape pour avoir une fonction bool\'eenne qui nous dit si il y a un terme nul dans une liste {\tt l} :
\begin{verbatim}
zerodansl(l):={
pour k de 0 jusque size(l)-1 faire
si l[k]==0 alors
retourne(1);
fsi;
fpour;
retourne(0);
}:;
\end{verbatim}
Ou on tape :\\
\begin{verbatim}
zeroinl(l):={
for (k:=0;k Executer tout} de l'enregistreur
ou d'appuyer sur {\tt F7} (voir aussi \ref{sec:enregis}).
On peut aussi d\'efinir des proc\'edures en enregistrant les commandes quand on
fait du pas \`a pas en utilisant {\tt debut\_enregistrement} et
{\tt fin\_enregistrement} : ainsi de jeunes enfants peuvent d\'efinir
facilement des proc\'edures.
\section{Pour utiliser des proc\'edures sauv\'ees pr\'ec\'edement}
\noindent Pour utiliser des proc\'edures sauv\'ees pr\'ec\'edement il faut
utiliser la commande {\tt ramene}.\\
On tape, pour valider les proc\'edures se trouvant dans le fichier
{\tt "toto.cxx"}:\\
\begin{center}{\tt ramene("toto.cxx")}\end{center}
On obtient \'ecrit en bleu :
\begin{center}{\tt //Parsing toto //Success compiling toto etc...}\end{center}
On obtient en noir :
\begin{center}{\tt la d\'efinition des proc\'edures contenues dans toto.cxx}\end{center}
\section{Pour connaitre les noms des proc\'edures utilisables}\index{VARS}\index{sommet}\index{'program'}
Pour connaitre les noms des proc\'edures pr\'esentes dans votre espace de
travail il faut taper {\tt VARS} : cela donne les noms des proc\'edures
valides et des variables affect\'ees.
0n tape :
\begin{center}{\tt a:=30;c(b):=\{avance(b);tourne\_droite;\}}\end{center}
Puis on tape :
\begin{center}{\tt VARS}\end{center}
On obtient :
\begin{center}{\tt [a,c]}\end{center}
On peut tester si c'est un programme en utilisant :\\
{\tt sommet(c)=='program'}
0n tape :
\begin{center}{\tt sommet(c)=='program'}\end{center}
On obtient :
\begin{center}{\tt 1}\end{center}
0n tape :
\begin{center}{\tt sommet(a)=='program'}\end{center}
On obtient :
\begin{center}{\tt 0}\end{center}
\section{Pour voir les instructions d\'efinissant une proc\'edure}
Pour connaitre les instructions d\'efinissant une proc\'edure, il suffit de
taper le nom de cette proc\'eduredans une ligne d'entr\'ee de commandes : la
d\'efinition de la proc\'edure s'affiche alors dans la zone des r\'eponses.\\
Pour connaitre la valeur d'une variable, il suffit de
taper son nom dans une ligne d'entr\'ee de commandes : la valeur de la
variable s'affiche alors dans la zone des r\'eponses.\\
Puisque les sorties de la ligne d'entr\'ee de la tortue ne sont prevues que
pour afficher une seule ligne, il est pr\'ef\'erable de taper le nom d'une
proc\'edure dans une ligne d'entr\'ee de commandes de {\tt Xcas}.
\section{Pour effacer des fichiers}
Il faut effacer les fichiers depuis l'\'ecran {\tt xterm} (sous Linux) et
employer la commande {\tt rm}.
0n tape par exemple :
\begin{center}{\tt rm titi.tor}\end{center}
On obtient :
\begin{center}{\tt rm: d\'etruire fichier r\'egulier `titi.tor'?}\end{center}
Le fichier sera d\'etruit si on tape sur {\tt enter} et non d\'etruit si on
r\'epond {\tt n enter}.
\section{Pour imprimer vos dessins}
{\tt Imprimer} du menu de {\tt Menu} de la barre de boutons de l'\'ecran
{\tt Tortue} imprime le dessin situ\'e sur cet \'ecran ou transforme cet
\'ecran en un fichier LaTex ({\tt Pr\'evisualiser avec LaTex}).\\
Vous pouvez ainsi obtenir deux fichiers :\\
- un fichier LaTex d'extension {\tt .tex} (que vous pouvez compiler et
imprimer ou encore ins\'erer en enlevant l'en t\^ete et la
derni\`ere ligne dans un autre fichier LaTex),\\
- un fichier postscript d'extension {\tt .ps} (que vous pouvez imprimer)
\section{Pour arr\^eter}
V\'erifier que vous avez sauv\'e ce que vous voulez conserver.\\
Cliquer sur le menu {\tt Session}, selectionner {\tt Quitter}.
\chapter{Des activit\'es en CP, CE1 et CE2}
Le CP est le cours pr\'eparatoire destin\'e aux enfants de 6 ans environ.\\
Le CE1 et le CE2 sont les cours elementaires premi\`ere et deuxi\`eme ann\'ee
destin\'es aux enfants de 7-8 ans environ.
\section{Des dessins en pas \`a pas}
On utilise ici les commandes {\tt avance}, {\tt tourne\_droite} et
{\tt tourne\_gauche}. \\
L'enfant utilise les boutons de la barre des boutons :\\
{\tt av} ou {\tt td} ou {\tt tg} qui \'ecrivent {\tt avance} ou
{\tt tourne\_droite} ou {\tt tourne\_gauche} dans la ligne de commande.\\
Dans les dessins de cette section, il s'agit de reconnaitre la gauche de la
droite de la tortue. Pour les enfants qui sont en dificult\'e on peut tracer
sur un morceau de papier calque une fl\`eche, o\`u l'on marque {\tt D} sur le
cot\'e droit et {\tt G} sur le cot\'e gauche, par exemple :
%\input figtortue/fleche.tex
\begin{center}\includegraphics[width=10cm]{tortuef}\end{center}
On explique que la fl\`eche c'est la t\^ete de la tortue et que le point c'est
l\`a o\`u elle se trouve, et quand elle tourne, elle reste \`a la m\^eme place
et seule sa t\^ete change de direction.
\subsection{Faire un escalier en pas \`a pas}
Sur un papier quadrill\'e ou sur du papier point\'e, l'enfant dessine
l'escalier de 4 marches ci-dessous :
%file escalier
% Generated by xcas
%segment(-3-3*i,-3-2*i);segment(-3-2*i,-2-2*i);
%segment(-2-2*i,-2-i);segment(-2-i,-1-i);segment(-1-i,-1);
%segment(-1,0);segment(0,1);segment(1,1+i);
%\input figtortue/escalier.tex
\begin{center}\includegraphics[width=10cm]{tortuee}\end{center}
Puis il doit reproduire ce dessin sur l'\'ecran de l'ordinateur.\\
L'enfant utilise les boutons {\tt av} ou {\tt td} ou {\tt tg}, puis appuie
sur {\tt entree} : il ne pr\'evoit pas \`a l'avance les commandes mais il
travaille au pas \`a pas.\\
Dans un deuxi\`eme temps on pourra ex\'ecuter plusieurs commandes en
les s\'eparant par {\tt ;} par exemple :
{\tt avance;tourne\_droite; avance;tourne\_gauche;}
\subsection{Faire descendre l'escalier \`a la tortue}
Une fois l'escalier termin\'e on peut lui demander de faire revenir la tortue
\`a son point de d\'epart en passant sur les traits : ce dessin se fera en
utilisant une autre couleur.\\
L'enfant utilise les boutons {\tt cr} puis {\tt av} ou {\tt td} ou {\tt tg},
puis appuie sur {\tt entree}.\\
{\tt cr} est l'abreviation de la commande {\tt crayon} qui permet de changer
la couleur du crayon par exemple : {\tt crayon rouge} ou {\tt crayon gomme}.
\subsection{Faire deux escaliers sym\'etriques}
L'enfant peut utiliser les boutons {\tt av}, {\tt re}, {\tt td} et {\tt tg},
abreviations des commandes
{\tt avance, recule, tourne\_gauche, tourne\_droite}.\\
Ici, on remarquera que le symetrique s'obtient avec la m\^eme suite de
commandes que celle utilis\'ee pour faire le premier escalier.\\
\begin{center}\includegraphics[width=\textwidth]{tortuee2}\end{center}
\subsection{Faire une tour et un chateau fort}
Sur un papier point\'e, l'enfant dessine la tour et le chateau fort suivants :\\
%\input figtortue/tour.tex
\includegraphics[width=\textwidth]{tortuetch}
Puis il doit reproduire ce dessin sur l'\'ecran de l'ordinateur.
\subsection{Faire un chateau et deux tours}
Durant cette s\'eance, il faut faire comprendre que les commandes pour
r\'ealiser la deuxi\`eme tour seront les m\^emes que celles de la premi\`ere
tour \`a condition de mettre la tortue au bon endroit au demarrage du trac\'e
de la deuxi\`eme tour.
\begin{center}\includegraphics[width=\textwidth]{tortuech}\end{center}
\section{Cr\'eation de nouvelles commandes}
On explique que l'on peut donner un nom \`a une suite de commandes en
utilisant les commandes {\tt debut\_enregistrement} et
{\tt fin\_enregistrement}
\subsection{M pour faire une marche d'escalier}
La proc\'edure {\tt M} va r\'ealiser le dessin ci-dessous sur lequel on a
not\'e \`a l'aide d'un triangle plein la position de d\'epart de la tortue et
par un triangle la position d'arriv\'ee de la tortue.
% Generated by xcas marche.tex
%\input figtortue/marche.tex\end{center}
\begin{center}\includegraphics[width=\textwidth]{tortuem}\end{center}
On tape par exemple :\\
{\tt debut\_enregistrement "M"} puis,\\
{\tt avance entr\'ee}\\
{\tt tourne\_droite entr\'ee}\\
{\tt avance entr\'ee}\\
{\tt tourne\_gauche entr\'ee} puis,\\
{\tt fin\_enregistrement "M.cxx"}\\
On vient ainsi de cr\'eer deux choses :\\
la commande {\tt M()} qui dessine une marche et le fichier {\tt M.cxx} qui
contient cette commande : on pourra ainsi retrouver la commande {\tt M} lors des s\'eances suivantes en tapant :\\
{\tt ramene "M.cxx"}.\\
{\bf Attention} \\
- les noms des fichiers sont entour\'es de {\tt "} mais pas
le nom de la commande.
- pour ex\'ecuter la commande il est obligatoire de faire suivre le nom par des
parenth\`eses comme : {\tt M()}.
- une commande r\'ealise un dessin d\'ependant de la position de la tortue
avant son ex\'ecution (position de d\'epart) et qui laisse la tortue en
g\'en\'eral \`a un autre endroit (position finale).\\
Il faut comprendre que les deux dessins ci-dessous sont le r\'esultat de
l'ex\'ecution de la m\^eme proc\'edure {\tt M()} car les dessins sont
superposables et se font selon la position de la tortue au d\'epart.
\begin{center}\includegraphics[width=\textwidth]{tortuem2}\end{center}
{\bf Exemple : l'escalier sym\'etrique}\\
On tape :\\
{\tt M();M();M();M(); entr\'ee} puis,\\
{\tt tourne\_droite; entr\'ee}\\
{\tt M();M();M();M(); entr\'ee}\\
Avec des \'el\`eves plus ag\'es on peut \'ecrire directement :\\
{\tt M():=\{avance;tourne\_droite;avance;tourne\_gauche;\}},
puis pour avoir le dessin de l'escalier :\\
{\tt tourne\_gauche;repete(4,M())}
On peut aussi \'ecrire la proc\'edure {\tt escalier} ayant comme param\`etre
{\tt n}, le nombre de marches :\\
{\tt escalier(n):=repete(n,M())}.\\
On a alors :\\
{\tt escalier2(n):=\{escalier(n); tourne\_droite;escalier(n)\}}
puis pour avoir le dessin de l'escalier sym\'etrique ayant 7 marches:\\
{\tt tourne\_gauche; escalier2(7)}
\subsection{T pour faire une tour}
La proc\'edure {\tt T} va r\'ealiser le dessin ci-dessous sur lequel on a
not\'e \`a l'aide d'un triangle plein la position de d\'epart de la tortue et
par un triangle la position d'arriv\'ee de la tortue : ici on ne voit qu'un
triangle plein car la position d'arriv\'ee de la tortue est la m\^eme que sa
position de d\'epart.
% Generated by xcas tour2.tex
%\input figtortue/tour2.tex\\
\begin{center}\includegraphics[width=\textwidth]{tortuett}\end{center}
{\bf Remarque}\\
Il faut bien voir que l'\'ecriture de la proc\'edure {\tt T} d\'epend du choix
de la position de d\'epart et d'arriv\'ee de la tortue et que pour un m\^eme
dessin il y a plusieurs choix possibles.\\
On tape :\\
{\tt debut\_enregistrement "T"} puis,\\
{\tt avance(60) entr\'ee}\\
{\tt tourne\_droite entr\'ee}\\
{\tt avance entr\'ee}\\
{\tt tourne\_droite entr\'ee}\\
{\tt avance entr\'ee}\\
{\tt tourne\_gauche entr\'ee}\\
{\tt avance entr\'ee}\\
{\tt tourne\_gauche entr\'ee}\\
{\tt avance entr\'ee}\\
{\tt tourne\_droite entr\'ee}\\
{\tt avance entr\'ee}\\
{\tt tourne\_droite entr\'ee}\\
{\tt avance(60) entr\'ee}\\
{\tt tourne\_droite entr\'ee}\\
{\tt avance(30) entr\'ee}\\
{\tt tourne\_droite entr\'ee}\\
{\tt fin\_enregistrement "M.cxx"}\\
Puis on tape :\\
{\tt tourne\_gauche entr\'ee}\\
{\tt T() entr\'ee}
\subsection{Pour faire plusieurs tours}
Pour faire plusieurs tours, on tape :\\
{\tt tourne\_gauche entr\'ee}\\
{\tt T() entr\'ee}
{\tt pas\_de\_cote -30 entr\'ee}
{\tt T() entr\'ee}
{\tt pas\_de\_cote -30 entr\'ee}
{\tt T() entr\'ee} etc...
\section{Le dessin d'un train}
Ce train est compos\'e d'une locomotive {\tt L}, de wagons de voyageurs
{\tt V} et de wagons de marchandises {\tt W}.\\
Pour faire {\tt L},{\tt V} et {\tt W} on a besoin de savoir faire un carr\' e
{\tt C}.
Les proc\'edures {\tt C}, {\tt L}, {\tt V} et {\tt W} vont r\'ealiser le dessin
ci-dessous sur lequel on a
not\'e \`a l'aide d'un triangle plein la position de d\'epart de la tortue et
\`a l'aide d'un triangle sa position d'arriv\'ee.\\
\includegraphics[width=\textwidth]{tortuew}\\
On tape :
\begin{verbatim}
C():={
repete(4,avance,tourne_droite);
}:;
W():={
avance ;C();
avance 40;C();
avance 20;
tourne_gauche ;
avance 40;
tourne_gauche ;
avance 70;
tourne_gauche ;
avance 40;
tourne_gauche ;
avance 80;
}:;
V():={
W();
recule 70;
pas_de_cote 30;
repete(3,C(),saute 20);
pas_de_cote -30;
avance;
}:;
L():={
avance 10;C();
avance 40;C();
avance 20;
tourne_gauche ;
avance 50;
tourne_gauche ;
avance 30;
tourne_droite ;
recule 20;
pas_de_cote -10;
C();pas_de_cote ;
tourne_gauche ;
avance 40;
tourne_gauche ;
avance 30;
tourne_gauche ;
avance 70;
}
:;
\end{verbatim}
Un train peut alors se former en tapant :
{\tt W();V();L()}\\
\includegraphics[width=\textwidth]{tortuetrain}
\section{Les frises}
Nous allons apprendre dans cette s\'eance \`a se servir des commandes :\\
{\tt rectangle\_plein, triangle\_plein, disque} et utiliser aussi les commandes
{\tt repete} pour r\'ep\'eter et {\tt crayon} pour changer la couleur.\\
Nous allons mettre c\^ote \`a cote plusieurs fois le m\^eme motif.\\
Nous choisissons des motifs simples comme par exemple :
un carr\'e, un saut etc...\\
un carr\'e rouge, un carr\'e noir etc...\\
un triangle isoc\`ele rectangle plein, un saut etc...\\
un triangle isoc\`ele rectangle plein rouge, un isoc\`ele rectangle plein noir etc...\\
un disque, un saut etc...\\
un disque rouge, un disque noir etc...\\
un quart de disque, un saut etc...\\
un quart de disque rouge, un quart de disque noir etc...\\
On pourra \'ecrire dans la ligne des commandes :\\
{\tt rectangle\_plein 20;saute 40}\\
que l'on peut valider plusieurs fois (il faut savoir aussi que {\tt Ctrl}+
la fl\`eche vers le haut du clavier met dans la ligne des commandes, les
commandes pr\'ec\'edentes et que {\tt esc} efface la ligne des commandes).\\
On explique que :\\
{\tt rectangle\_plein 20;saute 40;rectangle\_plein 20;saute 40;}\\
produit la m\^eme chose que :\\
{\tt repete(2,rectangle\_plein 20,saute 40)}\\
Il faut bien faire attention \`a la syntaxe :\\
{\tt ;} s\'epare deux instructions et\\
{\tt ,} s\'epare les param\`etres d'une instruction.\\
On tape par exemple :
\begin{verbatim}
des_tor():={
cache_tortue;
tourne_gauche;
avance 5;
tourne_droite(180-180/pi*atan(3.4));
avance(sqrt(25+17^2));
tourne_droite(180-2*180/pi*atan(1/3.4));
avance(sqrt(25+17^2));
tourne_droite(180-180/pi*atan(3.4));
avance 5;tourne_droite;
montre_tortue;
}:;
motif0():={
crayon vert;
rectangle_plein 20;
crayon jaune;
dessine_tortue;
saute(20);
crayon rouge;
tourne_droite ;
rectangle_plein 20;
tourne_gauche;
saute(20);
}:;
motif():={
crayon vert;
rectangle_plein 20;
saute(20);
crayon rouge;
tourne_droite ;
rectangle_plein 20;
tourne_gauche;
saute(20);
}:;
\end{verbatim}
Puis on tape :
\begin{verbatim}
pas_de_cote -60;
saute -40;
repete(5,motif());
cache_tortue;
\end{verbatim}
On obtient :\\
\includegraphics[width=\textwidth]{tortfrise}
\section{Le dessin d'un bonhomme et d'une ribambelle de bonhommes}
Ici on utilise la commande {\tt rectangle\_plein} qui dessine un carr\'e ou
un rectangle plein :\\
{\tt rectangle\_plein} dessine un carr\'e plein de c\^ot\'es 10 dans le sens
trigonom\'etrique.\\
{\tt rectangle\_plein 20} ou {\tt rectangle\_plein(20)} dessine un carr\'e
plein de c\^ot\'es 20 dans le sens trigonom\'etrique.\\
{\tt rectangle\_plein(20,50)} dessine un rectangle plein de
c\^ot\'es 20 et 50 dans le sens trigonom\'etrique.\\
{\bf Attention}
Les parenth\`eses sont onligatoires pour les primitives ayant plus d'un
param\`etre.\\
Voici la ribambelle de bonhommes que l'on veut dessiner :\\
% Generated by xcas bonhom.tex
%\input figtortue/bonhom.tex
\includegraphics[width=\textwidth]{tortbon}
On va \'ecrire une proc\'edure {\tt bonhomme}. Il faut bien comprendre que les
choix du d\'epart et d'arriv\'ee de la tortue ne sont pas uniques et dependent
de ce que l'on veut faire par
exemple, pour faire une ribambelle il
peut \^etre judicieux de d\'emarrer le bonhomme au
bout du bras gauche et de terminer au bout du bras droit pour \^etre pr\^et
\`a un nouveau d\'epart. Pour cela,
on d\'ecompose ce bonhomme en :\\
- une t\^ete form\'ee par une croix compos\'ee de 5 carr\'es de c\^ot\'es 10
pas.\\
- deux bras form\'es chacun par 2 carr\'es,\\
- un corps form\'e par un carr\'e de c\^ot\'es 30 pas.\\
- deux jambes form\'ees chacune par un rectangle de c\^ot\'es 10 et 30 pas
On d\'efinit alors les proc\'edures {\tt tete} et {\tt bras} correspondant aux
dessins o\`u la position de d\'epart de la tortue est une forme pleine et
sa position d'arriv\'ee une forme vide.\\
\includegraphics[width=\textwidth]{tortbras}\\
On tape
\begin{verbatim}
tete():={
rectangle_plein;
repete(4,saute,rectangle_plein,tourne_gauche);
}:;
\end{verbatim}
% Generated by xcas tete.tex
%\input figtortue/tete.tex
On d\'efinit la proc\'edure {\tt bras} en tapant :
\begin{verbatim}
bras():={
rectangle_plein ;
saute ;
pas_de_cote ;
rectangle_plein ;
saute ;
pas_de_cote ;
}:;
\end{verbatim}
% Generated by xcas bras.tex
%\input figtortue/bras.tex
Puis on tape :\\
\begin{verbatim}
bonhomme():={
bras();
tourne_droite ;
rectangle_plein 30;
tourne_gauche ;
saute ;
pas_de_cote ;
tete();
pas_de_cote -40;
tourne_gauche 180;
rectangle_plein(10,30);
recule 20;
rectangle_plein(10,30);
pas_de_cote -30;
tourne_gauche ;
bras();
tourne_gauche ;
}:;
\end{verbatim}
Ensuite on peut faire des variantes en r\'ealisant des bonhommes avec les deux
bras lev\'es ou avec un bras lev\'e et l'autre baiss\'e...puis faire une
ribambelle.
On tape par exemple {\tt bonhomme1} qui a le bras gauche baiss\'e et le bras
droit lev\'e et {\tt bonhomme2} qui a le bras gauche lev\'e et le bras
droit baiss\'e :\\
On tape :
\begin{verbatim}
bonhomme1():={
bras();
tourne_droite ;
rectangle_plein 30;
tourne_gauche ;
saute ;
pas_de_cote ;
tete();
pas_de_cote -40;
tourne_gauche 180;
rectangle_plein(10,30);
recule 20;
rectangle_plein(10,30);
pas_de_cote -20;
tourne_gauche 180;
bras();
tourne_droite ;
}:;
bonhomme2():={
bras();
recule ;
rectangle_plein 30;
tourne_gauche ;
saute ;
pas_de_cote ;
tete();
pas_de_cote -40;
tourne_gauche 180;
rectangle_plein(10,30);
recule 20;
rectangle_plein(10,30);
pas_de_cote -30;
tourne_gauche ;
bras();
tourne_gauche ;
}:;
\end{verbatim}
On tape :
\begin{verbatim}
efface ;
bonhomme1();
crayon rouge;
bonhomme2();
crayon vert;
bonhomme1();
cache_tortue;
\end{verbatim}
\includegraphics[width=\textwidth]{tortribam}
\section{La maison et le bateau}
Ici on utilise les commandes {\tt rectangle\_plein} ou {\tt triangle\_plein}
qui dessine un rectangle plein ou un triangle plein,
\`a gauche de la position de d\'epart de la tortue, la tortue \'etant
dirig\'ee au d\'epart selon un c\^ot\'e.\\
Voici les dessins du toit, de la maison et du bateau sur lesquels on a not\'e
\`a l'aide d'un triangle plein la position de d\'epart de la tortue et
par un triangle la position d'arriv\'ee de la tortue, lorsqu'on ne voit qu'un
triangle plein c'est que la position d'arriv\'ee de la tortue est la m\^eme
que sa position de d\'epart.\\
On remarquera que le bateau et la maison se font avec la m\^eme proc\'edure.\\
% Generated by xcas bateau.tex
%\input figtortue/bateau.tex
\includegraphics[width=\textwidth]{tortbat}
\begin{verbatim}
toit():={
rectangle_plein(60,20);
tourne_gauche;
triangle_plein(20,20);
pas_de_cote -60;
tourne_droite;
triangle_plein(20,20);
}:;
\end{verbatim}
\begin{verbatim}
maison():={
tourne_gauche;
avance 40;
tourne_droite;
toit();
tourne_droite;
avance 40;
tourne_droite;
avance 60;
tourne_droite 180;
}:;
\end{verbatim}
On tape :\\
{\tt maison()}\\
Ou on tape :\\
{\tt tourne\_droite 180;bateau()}
\section{Le toit et deux autres bateaux}
Voici les dessins des bateaux que l'on veut r\'ealiser :\\
% Generated by xcas bateaux.tex
%\input figtortue/bateaux.tex
\includegraphics[width=\textwidth]{tortbateau}\\
Il s'agit de r\'eutiliser la proc\'edure {\tt toit} cr\'eer pr\'ec\'edemment.\\
Pour cela on tape, par exemple les proc\'edure {\tt bateau1} et {\tt bateau2}
dans lesquelles la position d'arriv\'ee de la tortue est aussi sa position de
d\'epart :
\begin{verbatim}
bateau1():={
tourne_droite 180;
toit();
tourne_droite 180;
triangle_plein(60,60);
saute 60;
}:;
bateau2():={
tourne_droite 180;
toit();
tourne_droite 180;
avance 30;
triangle_plein(30,30);
tourne_gauche;
triangle_plein(30,30);
tourne_droite;
saute 30;
}:;
\end{verbatim}
Puis on demande de faire une frise faite de 2 lignes compos\'ees chacune de
trois {\tt bateau2}, on veut obtenir :\\
% Generated by xcas frise.tex
%\input figtortue/frise.tex
\includegraphics[width=\textwidth]{tortbatfr}\\
On remarque alors qu'il apparait un troisi\`eme bateau que l'on demande de
d\'efinir.\\
On tape par exemple :
\begin{verbatim}
bateau3():={
tourne_droite;
triangle_plein(30,30);
tourne_droite;
rectangle_plein(40,30);
saute 40;
triangle_plein(30,30);
tourne_droite 180;
saute 20;
triangle_plein(20,20);
tourne_gauche;
triangle_plein(20,20);
tourne_droite ;
saute 20;
}:;
\end{verbatim}
\section{Cr\'eer un pavage}
Comment faire pour que le bateau qui apparait soit le m\^eme ?\\
Autrement trouver un pavage fait avec un seul bateau.\\
Pour avoir un pavage, il faut que les voiles aient la m\^eme
dimensions que les triangles formant les bords de la coque. Les voiles peuvent
alors \^etre plac\'ees n'importe o\`u sur la coque.
On peut donc d\'efinir une proc\'edure param\'etr\'ee avec {\tt n}
({\tt 00 alors
saute n*r;
tourne_gauche 90+180/k;
crayon rouge;
polyg(n*p,k);
tourne_droite 90+180/k;
saute -n*r;
araigneer(k,p,n-1)
fsi;}
:;
\end{verbatim}
\section{Le drapeau anglais}
L'activit\'e consiste \`a tracer un carr\'e avec ses diagonales et ses
m\'edianes.\\
Au d\'ebut, les dimensions du carr\'e ne sont pas impos\'ees.\\
On fait ensuite varier le cot\'e du carr\'e.
Cette activit\'e est double :\\
-travail sur les valeurs approch\'ees (quelle est la longueur de la diagonale
d'un carr\'e ?),\\
-travail sur les proc\'edures param\'etr\'ees.\\
On choisit de faire partir la tortue en bas et \`a gauche du drapeau, on tape :
\begin{verbatim}
drapeau(a):={
repete(4,avance(a),tourne_gauche);
leve_crayon;
avance(a/2);tourne_gauche;avance(a/2);
baisse_crayon;
repete(4,avance(a/2),saute(-a/2),tourne_gauche);
tourne_gauche(45);
repete(4,avance(a*sqrt(2)/2),saute(-a*sqrt(2)/2),tourne_gauche);
tourne_droite(45);
leve_crayon;
recule(a/2);tourne_droite;recule(a/2);
baisse_crayon;
}:;
\end{verbatim}
Ou encore, on choisit de faire partir la tortue au centre du drapeau, on tape :
\begin{verbatim}
carre_diag(a):={
repete(4,avance(a),tourne_gauche);
tourne_gauche(45);
avance(a*sqrt(2));
saute(-a*sqrt(2));
tourne_droite(45);
}:;
\end{verbatim}
\begin{verbatim}
drapeau_centre(a):={
repete(4,carre_diag(a/2),tourne_gauche);
}:;
\end{verbatim}
On tape :\\
{\tt drapeau(80);saute 160;}
{\tt pas\_de\_cote 40;}
{\tt drapeau\_centre(80);}
On obtient :\\
\includegraphics[width=\textwidth]{tortdrap}
ou encore
\begin{verbatim}
triang(a):={
repete(2,avance(a),tourne_gauche);
avance(a);
saute(-a);
tourne_gauche(45);
avance(a*sqrt(2));
tourne_gauche(135);
}:;
\end{verbatim}
\begin{verbatim}
drapeaut(a):={
repete(4,triang(a/2),tourne_gauche);
}:;
\end{verbatim}
\section{La famille des sapins et la proportionali\'e}
{\bf 1-i\`ere s\'eance}\\
On dessine un triangle rectangle isoc\`ele plein et direct $ABC$ avec comme
position de d\'epart et d'arriv\'ee de la tortue, le milieu de l'hypot\'enuse
$BC$ avec un cap dirig\'e selon le vecteur $BC$.
\begin{verbatim}
tri(a):={
triangle_plein(a,a);
tourne_droite;
triangle_plein(a,a);
tourne_gauche;
}:;
\end{verbatim}
On dessine un sapin form\'e de 2 triangles {\tt tri} de dimensions 50 et 40 pas
de tortue et d\'ecal\'es de 40 pas de tortue, avec comme position de d\'epart
et d'arriv\'ee de la tortue le milieu de l'hypot\'enuse avex un cap dirig\'e
selon la hauteur de {\tt tri(50)}.
% Generated by xcas sapin.tex
%\input figtortue/sapin.tex
\includegraphics[width=\textwidth]{tortsapin}
Pour faire le dessin dans l'\'ecran de {\tt g\'eom\'etrie} :
\begin{verbatim}
//dessin du triangle qui represente la tortue
tortue_g(a):={
[triangle_rectangle(a,a+0.1,2),triangle_rectangle(a,a+0.2*i,0.5)];
}
//dessin du triangle rectangle isocele d'hypothenuse 2a
tri_g(a,l):={
[triangle_rectangle(a,a+l,1),triangle_rectangle(a,a+i*l,1)];
}
sapin_g(a,l1,l2):={
[triangle_rectangle(a,a+l1,1),triangle_rectangle(a,a+i*l1,1),triangle_rectangle(a+i*l2,a+i*l2+l2,1),triangle_rectangle(a+i*l2,a+2*i*l2,1)];
}
\end{verbatim}
puis
\begin{verbatim}
tortue_g(-3);
tri_g(-3,1);
legende(-3.5-0.5*(i),"tri(50)");
tortue_g(0);
sapin_g(0,0.8,1);
legende(-0.5-0.5*(i),"sapin(50,40)");
\end{verbatim}
Revenons \`a la tortue, on \'ecrit la proc\'edure {\tt sapin} :
\begin{verbatim}
sapin():={
tri(50);
avance(40);
tri(40);
recule(40);
}:;
\end{verbatim}
{\bf 2-i\`eme s\'eance}\\
On demande d'\'ecrire \`a partir de sapin une proc\'edure param\'etr\'ee avec
2 param\`etres {\tt a} et {\tt b} : {\tt a} pour {\tt 50} et {\tt b} pour
{\tt 40}.\\
On \'ecrit en classe en expliquant :
\begin{verbatim}
sapin(a,b):={
tri(a);
avance(b);
tri(b);
recule(b);
}
\end{verbatim}
On a donc fait dessiner la derni\`ere fois {\tt sapin(50,40)}.\\
On demande maintenant de dessiner les sapins de la famille du
{\tt sapin(50,40)},
c'est \`a dire ceux qui ont la m\^eme forme
que lui \`a un agrandissement ou \`a une r\'educion pr\`es.\\
On demande aux enfants de remplir le tableau suivant :\\
\begin{tabular}{|l|l|}
\hline
a &b\\
\hline
5& \\
10& \\
15& \\
20& \\
25& \\
30& \\
35& \\
40& \\
45& \\
50&40 \\
55& \\
60& \\
70& \\
80& \\
90& \\
100& \\
\hline
\end{tabular}
Les enfants remplissent tous le tableau au d\'ebut en se servant
syst\'ematiquement de l'addition ils \'ecrivent :\\
\begin{tabular}{|l|l|}
\hline
a &b\\
\hline
15& 5\\
20& 10\\
25& 15\\
30& 20\\
35& 25\\
40& 30\\
45& 35\\
50& 40 \\
\hline
\end{tabular}
Mais lorsqu'il testent {\tt sapin(20,10)} ils n'obtiennent qu'un seul triangle
et s'apercoivent que'il y a une erreur....et ils sont alors oblig\'es de
proc\'eder par essais et erreurs ...mais cela est quelquefois difficile car il
n'y a gu\'ere de diff\'erence entre {\tt sapin(45,35)} et {\tt sapin(45,36)}.\\
Il faut donc demander :\\
si {\tt a=100} que vaut {\tt b} ?\\
si {\tt a=25} que vaut {\tt b} ?\\
si {\tt a=5} que vaut {\tt b} ?\\
si {\tt a=10} que vaut {\tt b} ?\\
si {\tt a=20} que vaut {\tt b} ?\\
Comment \'ecrire cette famille avec un seul param\`etre ?
On veut arriver \`a l'\'ecriture de la proc\'edure :
\begin{verbatim}
famille_sapin(k):={
sapin(5*k,4*k);
}
\end{verbatim}
Ainsi le {\tt sapin(50,40)} est le m\^eme que {\tt famille\_sapin(10)}.
\section{La sym\'etrie orthogonale}
Activit\'e r\'ealis\'ee dans une classe de CM2.\\
Les \'el\`eves viennent de faire des travaux pratiques de physique sur la r\'eflexion de la lumi\`ere : fabrication de p\'eriscope, boite noire et image r\'efl\'echie par un miroir.\\
Ils ont observ\'e comment un dessin trac\'e sur une feuille de papier se
r\'efl\'echit dans un miroir, lorsqu'on pose ce miroir perpendiculairement \`a
cette feuille.\\
Les sym\'etriques de dessins faits sur un tableau noir muni d'un quadrillage
sont r\'ealis\'es ais\'ement lorsque la droite symbolisant le miroir est
une horizontale ou une verticale ou encore est inclin\'ee de 45 ou de 135
degr\'es en passant par des n{\oe}ud du quadrillage, mais le quadrillage est
source d'erreur quand le sym\'etrique d'un n{\oe}ud n'est pas un n{\oe}ud.
\subsection{Premi\`ere s\'eance en informatique}
Je dessine au tableau les dessins suivants :\\
un drapeau, un k\'epi, une casserole :\\
%kepi.tex
%\input figtortue/kepi.tex
\includegraphics[width=\textwidth]{tortkepi}\\
Il faut que les enfants fasse dessiner \`a la tortue :
\begin{itemize}
\item le miroir qui doit avoir une position quelconque,
\item un des objets ci-dessus : l'objet doit avoir une position quelconque par
rapport au miroir,
\item l'image de l'objet cr\'ee par le miroir.
\end{itemize}
Voici ce que font la plupart des enfants :
le trac\'e d'une droite {\tt D} horizontale ou verticale puis le trac\'e d'un
drapeau et de son sym\'etrique. Il donne un nom \`a cette suite d'instruction par exemple {\tt exercice}. Puis pour r\'epondre \`a la consigne :\\
le miroir doit avoir une position quelconque, il tape :\\
{\tt efface; tourne\_droite(30);exercice}
\subsection{Deuxi\`eme s\'eance en informatique}
On demande de d\'efinir une fonction {\tt objet} qui dessine un objet avec au
plus 5 traits. Puis on demande de refaire le m\^eme travail que lors de la
premi\`ere s\'eance en dessinant le sym\'etrique de {\tt objet} par rapport
\`a $D$ mais la position de {\tt objet} par rapport \`a la droite ne doit pas
\^etre fig\'ee.\\
Il faut donc pr\'evoir une fonction {\tt place\_objet}
qui place l'objet par rapport \`a la droite ainsi qu'une fonction
{\tt place\_objetsym} qui place l'objet sym\'etrique par
rapport \`a la droite et une fonction {\tt objetsym} qui dessine le
sym\'etrique de {\tt objet}.
\begin{verbatim}
axe(c):={
pas_de_cote(100);
tourne_gauche(c);
avance(200);
recule(400);
avance(200);
};
objet():={
avance 30;
repete(2,avance 60,tourne_droite,avance 30,tourne_droite);
recule 30;
};
objetsym():={
avance(30);
repete(2,avance(60),tourne_gauche,avance(30),tourne_gauche);
recule(30);
};
place_objet(a,b):={
leve_crayon;
tourne_gauche;
avance a;
tourne_gauche b;
baisse_crayon;
};
replace_tortue(a,b):={
leve_crayon;
tourne_droite b;
recule a;
tourne_droite;
baisse_crayon;
};
place_objetsym(a,b):={
leve_crayon;
tourne_droite;
avance a;
tourne_droite b;
baisse_crayon;
};
retoursym(a,b):={
leve_crayon;
tourne_gauche b;
recule a;
tourne_gauche;
baisse_crayon;
};
exo(a,b,c):={
efface;
axe(c);
place_objet(a,b);
objet();
replace_tortue(a,b);
place_objetsym(a,b);
objetsym();
retoursym(a,b);
tourne_droite c;
pas_de_cote(-100);
};
\end{verbatim}
Puis on tape : {\tt exo(30,40,20)}
\section{Feuille de TP}
Voici la feuille d'un TP suivi d'une correction possible o\`u l'on a utilis\'e
{\tt pas\_de\_cote}.
\begin{center}{\bf La tortue et la sym\'etrie orthogonale par rapport \`a une droite}\end{center}
\subsection{Exercice I}
Voici les dessins d'un drapeau, d'un k\'epi, d'une casserole :\\
%\input figtortue/kepi.tex
\includegraphics[width=\textwidth]{tortkepi}\\
1/ \'Ecrire une proc\'edure {\tt objet} qui r\'ealise l'un de ces dessins : on
prendra soin de noter sur le dessin la position choisie pour
le d\'epart et l'arriv\'ee de la tortue.
2/ On veut dessiner l'image de {\tt objet} dans un miroir, pour cela :
\begin{itemize}
\item Dessiner une droite qui symbolise un miroir : le miroir doit avoir une position quelconque,
\item Dessiner l'objet ci-dessus : l'objet doit avoir une position quelconque
par rapport au miroir,
\item Dessiner l'image de l'objet cr\'ee par le miroir.
\end{itemize}
\subsection{Exercice II}
1/ Refaire l'exercice pr\'ec\'edent en \'ecrivant les proc\'edures suivantes :
\begin{itemize}
\item {\tt miroir} qui trace une droite,
\item {\tt place\_miroir} qui place et oriente le miroir,
\item {\tt objet} qui dessine l'objet de votre choix,
\item {\tt place\_objet} qui place et oriente l'objet par rapport au miroir,
%\item {\tt replace\_tortue} qui replace et r\'eoriente la tortue selon sa position avant d'avoir fait {\tt place\_objet}
\item {\tt objetsym} qui dessine l'objet sym\'etrique par rapport au miroir,
\item {\tt place\_objetsym} qui place et oriente {\tt objetsym} selon le
sym\'etrique de {\tt objet} par rapport au miroir,
\end{itemize}
2/ Comment peut-on \'ecrire de fa\c{c}on automatique la proc\'edure
{\tt objetsym} \`a partir de la proc\'edure {\tt objet} ?\\
Comment peut-on \'ecrire de fa\c{c}on automatique la proc\'edure
{\tt place\_objetsym} \`a partir de la proc\'edure {\tt place\_objet} ?
\subsection{Corrections}
Une solution pour l'exercice I peut \^etre :
\begin{verbatim}
objet(a):={
avance(a);
repete(2,avance(2*a),tourne_droite,avance(a),tourne_droite);
recule(a);
};
objetsym(a):={
avance(a);
repete(2,avance(2*a),tourne_gauche,avance(a),tourne_gauche);
recule(a);
};
exo1():={
pas_de_cote(200);
objet(40);
pas_de_cote(-100);
tourne_droite(20);
avance(200);
recule(400);
avance(200);
tourne_droite(110);
saute(100);
tourne_gauche;
objetsym(40);
}
\end{verbatim}
Les proc\'edures de l'exercice II :
\begin{verbatim}
miroir():={
avance(200);
recule(400);
avance(200);
};
place_miroir(d):={
pas_de_cote(100);
tourne_gauche(d);
miroir();
}
\end{verbatim}
Le param\`etre {\tt d} repr\'esente l'angle du miroir avec l'horizontale.\\
Le param\`etre {\tt b} repr\'esente la distance du d\'epart de l'objet avec le
miroir et le param\`etre {\tt c} repr\'esente son inclinaison par rapport au
miroir.
\begin{verbatim}
place_objet(b,c):={
pas_de_cote(-b);
tourne_gauche(c);
};
replace_tortue(b,c):={
tourne_droite(c);
pas_de_cote(b);
};
place_objetsym(b,c):={
pas_de_cote(b);
tourne_droite(c);
}
\end{verbatim}
On remarque que la proc\'edure {\tt place\_objetsym} est inutile puisque :\\
{\tt place\_objetsym(b,c)=place\_objet(-b,-c)}.\\
\`A la fin pour remettre la tortue sur le miroir on utilisera
{\tt replace\_tortue(-b,-c)}
On peut aussi \'ecrire la proc\'edure {\tt objet2} qui r\'ealise
{\tt objet} (resp {\tt objetsym}) quand la valeur du deuxi\`eme param\`etre
est 1 (resp -1).
\begin{verbatim}
objet2(a,s):={
avance(a);
repete(2,avance(2*a),tourne_droite s*90,avance(a),
tourne_droite s*90);
recule(a);
}
\end{verbatim}
et alors
{\tt objet(a):=objet2(a,1)}
et {\tt objetsym(a):=objet2(a,-1)}
On \'ecrit alors :
\begin{verbatim}
exo2(a,b,c,d):={
place_miroir(d);
miroir();
place_objet(b,c);
objet(a);
replace_tortue(b,c);
place_objetsym(b,c)
objetsym(a);
replace_tortue(-b,-c);
}
\end{verbatim}
ou encore, si on suppose que le miroir est dessin\'e et que la tortue est sur
le miroir, on peut utiliser la proc\'edure suivante :
\begin{verbatim}
finexo2(a,b,c):={
place_objet(b,c);
objet2(a,1);
replace_tortue(b,c);
place_objet(-b,-c)
objet2(a,-1);
replace_tortue(-b,-c);
};
exo2(a,b,c,d):={
place_miroir(d);
miroir();
finexo2(a,b,c);
}
\end{verbatim}
On tape par exemple :\\
{\tt exo2(40,100,20,-10)}
{\tt finexo2(-20,40,30)}
{\tt finexo2(...)}
\chapter{Pour avoir un fond quadrill\'e ou triangul\'e}
\section{Fond quadrill\'e}
On fait une proc\'edure {\tt maillage1(a,k)} qui trace avec la couleur {\tt k}
un \'ecran remplit de car\'es de c\^ot\'es {\tt a}.
\subsection{Le programme}
\begin{verbatim}
//a represente la longueur du carreau et k la couleur du maillage
maillage1(a,k):={
local p,c,cc;
p:= position;
c:=cap;
cc:=crayon;
leve_crayon;position([0,0]);cap 0;baisse_crayon;crayon k;
repete(ceil(260/a),avance(ceil(400/a)*a),pas_de_cote(a),
tourne_droite 180, avance(ceil(400/a)*a),pas_de_cote(-a),
tourne_droite 180);
leve_crayon;position([0,0]);cap 0;baisse_crayon;
tourne_gauche;
repete(ceil(200/a),avance(ceil(520/a)*a),pas_de_cote(-a),
tourne_droite 180, avance(ceil(520/a)*a),pas_de_cote(a),
tourne_droite 180);
crayon(cc);
leve_crayon;position(p);
cap(c);baisse_crayon;
}
\end{verbatim}
\subsection{Utilisation}
On tape :\\
{\tt maillage1(30,22)}\\
On obtient un fond quadrill\'e avec des carr\'es de c\^ot\'es 30 de couleur
gris p\^ale de code 22.
\section{Fond triangul\'e}
On fait une proc\'edure {\tt maillage2(a,k)} qui trace avec la couleur {\tt k}
un \'ecran form\'e d'un maillage dont les mailles sont des triangles
\'equilat\'eraux de c\^ot\'es {\tt a}.
\subsection{Le programme}
\begin{verbatim}
//a represente la longueur du triangle et k la couleur du maillage
//tricot fait un zig-zag a droite ou a gauche selon que s=-1 ou 1
tricot(a,s):={
repete(ceil(400/a),avance a,tourne_gauche s*120,avance a,
tourne_droite s*120)
};
maillage2(a,k):={
local p,c,cc;
p:= position;
c:=cap;
cc:=crayon;
leve_crayon;position([0,0]);cap 0;baisse_crayon;crayon k;
repete(ceil(200/a),avance(ceil(400/a)*a),tourne_gauche 120,
tricot(a,1),avance a,tourne_droite 120,avance(ceil(400/a)*a),
tourne_droite 120,avance -a,tricot(a,-1),tourne_gauche 120);
crayon(cc);
leve_crayon;position(p);
cap(c);baisse_crayon;
}
\end{verbatim}
\subsection{Utilisation}
On tape :\\
{\tt maillage2(30,22)}\\
On obtient un fond triangul\'e avec des triangles \'equilat\'eraux de c\^ot\'es
30 et de couleur gris p\^ale de code 22.
\chapter{La recursivit\'e sur des exemples}
\section{Des spirales}
\subsection{Une spirale}
Voici le d\'ebut du dessin d'une spirale(90) :\\
%\input figtortue/spirale.tex
\includegraphics[width=\textwidth]{tortspi}\\
On tape dans un \'editeur de programmes :
\begin{verbatim}
spirale(l):={
si (l>10) alors
avance(l);
tourne_gauche 90;
avance(l);
tourne_gauche 90;
spirale(l-10);
fsi;
}
\end{verbatim}
On tape dans une ligne de commande :\\
{\tt efface;spirale(100)}\\
On obtient :\\
\includegraphics[width=\textwidth]{tortspir}
\subsection{Une spirale plus g\'en\'erale}
On tape dans un \'editeur de programmes :
\begin{verbatim}
//chaque segment de la spirale est obtenu par similitude de rapport k
//k=rapport et t=angle de rotation (externe)
//n=nombre de segments a construire
spirales(l,k,t,n):={
pour j de 1 jusque n faire
avance(l);
tourne_gauche(t);
l:=k*l;
fpour;
};
\end{verbatim}
ou encore avec la recursivit\'e
\begin{verbatim}
//n=nombre de segments a construire=nombre d'appels recursifs
spiraler(l,k,t,n):={
si n>0 alors
avance(l);
tourne_gauche(t);
spiraler(l*k,k,t,n-1);
fsi;
}:;
\end{verbatim}
On tape par exemple dans une ligne de commande :\\
{\tt spirales(90,0.8,60,20)}\\
ou\\
{\tt efface;spiraler(90,0.8,60,20)}\\
On obtient :\\
\includegraphics[width=\textwidth]{tortspirr}
%\input figtortue/spiraler.tex
\section{Des arbres}
\subsection{Un arbre a deux branches}
Un arbre est compos\'e d'un tronc de hauteur $h$ et de deux branches
sym\'etriques faisant 45 degr\'es avec le tronc et que l'on d\'efinit comme
\'etant chacune un arbre de tronc $h/2$.\\
Pour le r\'ealiser, on tape dans un \'editeur de programmes :
\begin{verbatim}
//tourne_gauche;arbre1(60)
arbre1(h):={
si (h<5) alors
avance(h);
recule(h);
sinon
avance(h);
tourne_droite(45);
arbre1(h/2);
tourne_gauche(90);
arbre1(h/2):
tourne_droite(45);
recule(h);
fsi;
}:;
\end{verbatim}
On valide avec {\tt OK} ou avec {\tt F9}.\\
On tape par exemple dans une ligne de commande :\\
{\tt efface;tourne\_gauche;arbre1(60)}\\
On obtient :\\
\includegraphics[width=\textwidth]{tortarb1}\\
Ou bien, on rajoute un param\`etre $n$ (la profondeur) pour faire le test
d'arr\^et, on tape on tape dans un \'editeur de programmes :
\begin{verbatim}
//tourne_gauche;arbre2(60,3)
arbre2(h,n):={
si (n==0) alors
avance(h);
recule(h);
sinon
avance(h);
tourne_droite(45);
arbre2(h/2,n-1);
tourne_gauche(90);
arbre2(h/2,n-1):
tourne_droite(45);
recule(h);
fsi;
}:;
\end{verbatim}
On valide avec {\tt OK} ou avec {\tt F9}.\\
On tape par exemple dans une ligne de commande :\\
{\tt efface;tourne\_gauche;arbre2(60,5)}\\
On obtient :\\
\includegraphics[width=\textwidth]{tortarb2}\\
\subsection{Un arbre a $p$ branches}
Un arbre est compos\'e d'un tronc de hauteur $h$ et de $p$ branches
\'egalement r\'eparties et que l'on d\'efinit comme
\'etant chacune un arbre de tronc $h/2$.\\
On tape dans un \'editeur de programmes :
\begin{verbatim}
//tourne_gauche;arbre3(80,4)
arbre3(h,p):={
si (h<5) alors
avance(h);
recule(h);
sinon
avance(h);
tourne_droite(90*(p-1)/p);
repete(p,arbre3(h/2,p),tourne_gauche(180/p));
tourne_droite(90*(p+1)/p);
recule(h);
fsi;
}:;
\end{verbatim}
On valide avec {\tt OK} ou avec {\tt F9}.\\
On tape par exemple dans une ligne de commande :\\
{\tt efface;tourne\_gauche;arbre3(80,4)}\\
On obtient :\\
\includegraphics[width=\textwidth]{tortarb3}\\
Ou bien, on rajoute un param\`etre $n$ (la profondeur) pour faire le test
d'arr\^et, on tape dans un \'editeur de programmes :
\begin{verbatim}
//tourne_gauche;arbre4(60,5,3)
arbre4(h,p,n):={
si (n==0) alors
avance(h);
recule(h);
sinon
avance(h);
tourne_droite(90*(p-1)/p);
repete(p,arbre4(h/2,p,n-1),tourne_gauche(180/p));
tourne_droite(90*(p+1)/p);
recule(h);
fsi;
}:;
\end{verbatim}
On valide avec {\tt OK} ou avec {\tt F9}.\\
On tape par exemple dans une ligne de commande :\\
{\tt efface;tourne\_gauche;arbre4(80,5,4)}\\
On obtient :\\
\includegraphics[width=\textwidth]{tortarb4}\\
Et maintenant, un arbre al\'eatoire : \\
\`a chaque n{\oe}ud on choisit, de fa\c{c}on al\'eatoire le rapport $k$ de
r\'eduction, qui fera les $p$ branches comme un arbre r\'eduit avec le
coefficient $k$.\\
On tape dans un \'editeur de programmes :
\begin{verbatim}
//tourne_gauche ;saute(-80);arbre5(60,4,3);
arbre5(h,p,n):={
local k;
si (n==0) alors
avance(h);
recule(h);
sinon
avance(h);
tourne_droite(90*(p-1)/p);
k:=hasard(0,1);
repete(p,arbre5(h*k,p,n-1),tourne_gauche(180/p));
tourne_droite(90*(p+1)/p);
recule(h);
fsi;
}:;
\end{verbatim}
On valide avec {\tt OK} ou avec {\tt F9}.\\
On tape par exemple dans une ligne de commande :\\
{\tt efface;tourne\_gauche;arbre5(60,5,4)}\\
On obtient :\\
\includegraphics[width=\textwidth]{tortarb5}\\
Et enfin, un arbre encore plus al\'eatoire : \\
pour chaque branche on choisit, de fa\c{c}on al\'eatoire le rapport
{\tt rand(0,1)} de r\'eduction, qui fera cette branche comme un arbre r\'eduit
avec ce coefficient.\\
On tape dans un \'editeur de programmes :
\begin{verbatim}
//tourne_gauche ;saute(-80);arbre6(60,4,3);
arbre6(h,p,n):={
si (n==0) alors
avance(h);
recule(h);
sinon
avance(h);
tourne_droite(90*(p-1)/p);
repete(p,arbre6(h*hasard(0,1),p,n-1),tourne_gauche(180/p));
tourne_droite(90*(p+1)/p);
recule(h);
fsi;
}:;
\end{verbatim}
On valide avec {\tt OK} ou avec {\tt F9}.\\
On tape par exemple dans une ligne de commande :\\
{\tt efface;tourne\_gauche;arbre6(60,5,4)}\\
On obtient :\\
\includegraphics[width=\textwidth]{tortarb6}\\
\subsection{Un arbre ramifi\'e}
Ici on suppose que, du tronc de longueur $h$,
il part $p$ branches de longueur $h/2$.
Ces branches donnent naissance \`a $p-1$ branches de longueur $h/4$ etc...
jusqu'\`a $p=2$.
On tape dans un \'editeur de programmes :
\begin{verbatim}
//tourne_gauche;saute(-80);arbre7(60,5)
arbre7(h,p):={
avance(h);
si (p>=2) alors
tourne_droite(90*(p-1)/p);
repete(p,arbre7(h/2,p-1),tourne_gauche(180/p));
tourne_droite(90*(p+1)/p);
fsi;
recule(h);
}:;
\end{verbatim}
On valide avec {\tt OK} ou avec {\tt F9}.\\
On tape par exemple dans une ligne de commande :\\
{\tt efface;tourne\_gauche;arbre7(80,5)}\\
On obtient :\\
\includegraphics[width=\textwidth]{tortarb7}\\
%On obtient :
%\input figtortue/arbrera.tex
En utilisant aussi la profondeur dans le test d'arr\^et on tape dans un
\'editeur de programmes :
\begin{verbatim}
//tourne_gauche;saute(-80);arbre8(90,5,3)
arbre8(h,p,n):={
avance(h);
si (p>=2 et n>=1) alors
tourne_droite(90*(p-1)/p);
repete(p,arbre8(h/2,p-1,n-1),tourne_gauche(180/p));
tourne_droite(90*(p+1)/p);
fsi;
recule(h);
}:;
\end{verbatim}
On valide avec {\tt OK} ou avec {\tt F9}.\\
On tape par exemple dans une ligne de commande :\\
{\tt efface;tourne\_gauche;arbre8(80,6,5)}\\
On obtient :\\
\includegraphics[width=\textwidth]{tortarb8}\\
%Les 8 proc\'edures ci-dessus se trouvent dans le fichier :\\
%{\tt examples/tortue/arbre.cxx}.\\
{\bf Exercice}
Refaire les exemples pr\'ec\'edents mais en ne dessinant que la frondaison de
l'arbre, c'est \`a dire l'arbre sans son tronc.\\
{\bf Une r\'eponse}
Voici la r\'eponse correspondant \`a {\tt arbre7} et \`a {\tt arbre8}. Bien
s\^ur, pour avoir la frondaison de {\tt arbre7(60,5)} il faut taper
{\tt arbre9(30,5)} et pour avoir la frondaison de {\tt arbre8(60,5,3)} il faut
taper {\tt arbre10(30,5,3)}.
\begin{verbatim}
//tourne_gauche;saute(-80);arbre9(90,5,3)
arbre9(h,p):={
si (p>=2) alors
tourne_droite(90*(p-1)/p);
repete(p,avance(h),arbre9(h/2,p-1),recule(h),tourne_gauche(180/p));
tourne_droite(90*(p+1)/p);
fsi;
}
\end{verbatim}
\begin{verbatim}
//tourne_gauche;saute(-80);arbre10(90,5,3)
arbre10(h,p,n):={
si (n>=1 et p>=2) alors
tourne_droite(90*(p-1)/p);
repete(p,avance(h),arbre10(h/2,p-1,n-1),recule(h),tourne_gauche(180/p));
tourne_droite(90*(p+1)/p);
fsi;
}
\end{verbatim}
\subsection{Un sapin}
Pour d\'ecrire un sapin, il faut choisir un param\`etre par exemple sa hauteur
$h$ du sapin.\\
On dit alors qu'un sapin de hauteur $h$ est compos\'e de :
\begin{itemize}
\item deux branches basses lat\'erales sym\'etriques de longueur $h/2$ et
faisant un angle de 60 degr\'es avec le tronc,
\item d'un bout de tronc de hauteur $h/4$,
\item d'une t\^ete de hauteur $3h/4h$ .
\end{itemize}
Cette d\'efinition sera r\'ecursive si on dit que les deux branches basses
lat\'erales sont des sapins plus petits (de hauteur \'egale \`a la moiti\'e de
la hauteur du sapin) et que la t\^ete est aussi un sapin plus petit
(de hauteur \'egale au trois-quart de la hauteur du sapin). Le tronc a donc
pour hauteur le quart de la hauteur du
sapin. Il nous faut alors d\'efinir ce que l'on consid\'ere
comme sapin "initial" : c'est le sapin form\'e d'un tronc unique. \\
Voici la croissance de ces sapins :\\
%\input figtortue/sapinr.tex
\includegraphics[width=\textwidth]{tortsap}\\
On tape dans un \'editeur de programme :
\begin{verbatim}
//tourne_gauche;sapin1(90)
sapin1(h):={
si (h<5) alors
avance(h);
recule(h);
sinon
tourne_droite(60);
sapin1(h/2);
tourne_gauche(120);
sapin1(h/2):
tourne_droite(60);
avance(h/4);
sapin1(3*h/4);
recule(h/4);
fsi;
}:;
\end{verbatim}
Ou on tape en utilisant pour faire le test d'arr\^et la profondeur $n$ :
\begin{verbatim}
//tourne_gauche;sapin2(90,4)
sapin2(h,n):={
si (n==0) alors
avance(h);
recule(h);
sinon
tourne_droite(60);
sapin2(h/2,n-1);
tourne_gauche(120);
sapin2(h/2,n-1):
tourne_droite(60);
avance(h/4);
sapin2(3*h/4,n-1);
recule(h/4);
fsi;
}:;
\end{verbatim}
On valide avec {\tt OK} ou avec {\tt F9}.\\
On tape par exemple dans une ligne de commande :\\
{\tt efface;tourne\_gauche;sapin2(100,7)}\\
On obtient :\\
\includegraphics[width=\textwidth]{tortsap2}\\
Les diff\'erentes \'etapes ont \'et\'e obtenus en ex\'ecutant :\\
{\tt tourne\_gauche; sapin2(90,0)} puis\\
{\tt tourne\_gauche; sapin2(90,1)} puis\\
{\tt tourne\_gauche; sapin2(90,2)} puis\\
{\tt tourne\_gauche; sapin2(90,3)}.
%Les 2 proc\'edures ci-dessus se trouvent dans le fichier :\\{\tt examples/tortue/sapin.cxx}
\section{Les flocons de Koch}
Voici les \'etapes de construction d'une courbe
d\'ecouverte par Koch :
%\input figtortue/flocon.tex
\includegraphics[width=\textwidth]{tortkoch}\\
On voit l'\'etape 0 : un segment de longueur $l$.\\
Pour obtenir l'\'etape 1, on divise ce segment de longueur $l$ en trois et on
r\'ealise la deuxi\`eme figure qui est compos\'ee de quatre segments de
longueur $l/3$ (le deuxi\'eme et troisi\'eme segments sont les c\^ot\'es d'un
triangle \'equilat\'eral),
puis on recommence en transformant chacun de ces 4 segments en 4 segments....\\
et cela tant que $l \geq 10$.
%La troisi\'eme figure est alors {\tt koch1(90)}.\\
On tape dans un \'editeur de programme :
\begin{verbatim}
//koch1(90)
koch1(l):={
si (l<10) alors
avance(l);
sinon
koch1(l/3);tourne_gauche(60);
koch1(l/3);tourne_droite(120);
koch1(l/3);tourne_gauche(60);
koch1(l/3);
fsi;
}:;
\end{verbatim}
Ou on tape en utilisant un param\`etre $n$ repr\'esentant la profondeur (i.e.
le nombre d'appels r\'ecursifs) :
\begin{verbatim}
//koch2(90,3)
koch2(l,n):={
si (n==0) alors
avance(l);
sinon
koch2(l/3,n-1);tourne_gauche(60);
koch2(l/3,n-1);tourne_droite(120);
koch2(l/3,n-1);tourne_gauche(60);
koch2(l/3,n-1);
fsi;
}:;
\end{verbatim}
On valide avec {\tt OK} ou avec {\tt F9}.\\
On tape par exemple dans une ligne de commande :\\
{\tt efface;koch2(270,7)}\\
On obtient :\\
\includegraphics[width=\textwidth]{tortkoch2}\\
Les dessins des diff\'erentes \'etapes ont \'et\'e obtenus en tapant :\\
{\tt koch2(90,0)} puis, \\
{\tt koch2(90,1)} puis, \\
{\tt koch2(90,2)} \\
%Les 2 proc\'edures ci-dessus se trouvent dans le fichier :\\{\tt examples/tortue/koch.cxx}
\section{Les courbes de P\'eano}
Parmi les nombreuses courbes invent\'ees par P\'eano, prouvant l'existence de
courbes remplissant un carr\'e, on n'en retiendra que trois, celles d\'ecrites
dans les paragraphes suivants.
\subsection{La courbe $\mathcal C^0$ de P\'eano}
Soit un carr\'e de diagonale $l$ :\\
au jour 0, on trace une diagonale,\\
au jour 1, on divise ce carr\'e en 9 carr\'es et on trace les diagonales de ces
carr\'es, de fa\c{c}on \`a avoir un trait continu en parcourant la premi\`ere
ligne, puis la deuxi\`eme, et enfin la troisi\`eme, comme ci-dessous :\\
%\input figtortue/peano.tex
\includegraphics[width=\textwidth]{tortpeano}\\
puis on recommence le m\^eme processus.\\
On tape dans un \'editeur de programme :
\begin{verbatim}
//peano(90)
peano(l):={
si (l<10) alors avance(l);
sinon
peano(l/3);
tourne_droite;peano(l/3);
tourne_gauche;peano(l/3);
tourne_gauche;peano(l/3);
tourne_gauche;peano(l/3);
tourne_droite;peano(l/3);
tourne_droite;peano(l/3);
tourne_droite;peano(l/3);
tourne_gauche;peano(l/3);
fsi
}:;
\end{verbatim}
On valide avec {\tt OK} ou avec {\tt F9}.\\
On tape par exemple dans une ligne de commande :\\
{\tt efface;tourne\_gauche 45;peano(200)}\\
On obtient :\\
\includegraphics[width=\textwidth]{tortpeano1}
\subsection{La courbe de P\'eano binaire}
Soit un carr\'e de cot\'e $l$ :\\
au jour 0, on trace un segment de longueur $l$ i.e. un cot\'e du carr\'e,\\
au jour 1, on remplace ce segment, en tra\c{c}ant 4 segments de longueur $l/2$
qui sont dispos\'es selon les trois cot\'es d'un rectangle situ\'e \`a gauche
de la position de la tortue, de largeur $l/2$ et de longueur $l$,\\
au jour 2, on remplace chaque segment de longueur $k$ par 4 segments de
longueur $k/2$ en tracant les trois
co\'es d'un rectangle de largeur $k/2$ et de longueur $k$ et situ\'e soit
\`a droite soit \`a gauche de la position de la tortue comme cela :\\
%\input figtortue/peanobi.tex
\includegraphics[width=\textwidth]{tortpeanob}\\
puis on recommence le m\^eme processus.\\
On remarque que l'on remplace un segment en tracant un rectangle situ\'e soit
\`a droite soit \`a gauche de la position de la tortue : on introduit donc un
param\`etre $s$ qui vaut 1 si ce rectangle se situe \`a droite et qui vaut -1
si ce rectangle se situe \`a gauche.\\
On tape :
\begin{verbatim}
//peanob(90,1)
peanob(l,s):={
si (l<10) alors avance(l);
sinon
tourne_gauche(-90*s);peanob(l/2,-s);
tourne_droite(-90*s);peanob(l/2,s);
peanob(l/2,s);tourne_droite(-90*s);
peanob(l/2,-s);tourne_gauche(-90*s);
fsi
}:;
\end{verbatim}
On valide avec {\tt OK} ou avec {\tt F9}.\\
On tape par exemple dans une ligne de commande :\\
{\tt efface;peanob(200,-1)}\\
On obtient :\\
\includegraphics[width=\textwidth]{tortpeanob1}
\subsection{La courbe de P\'eano ternaire}
Au jour 1, on trace la premi\`ere courbe {\tt peano1(l,0)} dans le carr\'e de
cot\'e $l$,\\
Au jour 2, on trace la deux\`eme courbe dans le carr\'e de cot\'e $l$
obtenue en partageant le carr\'e en 9 carr\'es et en tra\c{c}ant dans le premier carr\'e {\tt peano1(l,0)}, et dans les autres soit
{\tt peano1(l,1)}, soit {\tt peano1(l,-1)}, de fa\c{c}on \`a ce que les
courbes se raccordent entre elles.\\
Voici les dessins, o\`u la position de d\'epart et d'arriv\'ee de la tortue est
choisie comme indiqu\'ee sur la premi\`ere figure :\\
%\input figtortue/peanoter.tex
\includegraphics[width=\textwidth]{tortpeanot}\\
\hspace*{0.5cm}{\tt peano1(60,0)} {\tt peano1(60,1)} {\tt peano1(60,-1)}
On d\'ecide alors de prendre comme d\'epart de la tortue le
sommet inf\'erieur gauche du carr\'e. On d\'efinit {\tt car(l)} qui dessine un
carr\'e de c\^ot\'e {\tt l}, on tape :
\begin{verbatim}
//carre de cote l
car(l):={
repete(4,avance(l),tourne_gauche 90);
}:;
//peano1(30,0) ou peano1(30,1) ou peano1(30,-1)
peano1(l,s):={
si (s==-1) alors
tourne_droite(45);saute(-l*sqrt(2)/6);rond(round(l*sqrt(2)/6.),90);
sinon
si (s==1) alors
tourne_gauche(135);saute(-l*sqrt(2)/6);rond(round(-l*sqrt(2)/6.),90);
sinon
tourne_gauche(45);
saute(l*sqrt(2)/6);
fsi;
fsi;
rond(round(l*sqrt(2)/6.),90);
rond(round(-l*sqrt(2)/6.),270);
rond(round(l*sqrt(2)/6.),270);
rond(round(-l*sqrt(2)/6.),90);
saute(l*sqrt(2)/6);
tourne_droite(45);
}:;
//peanot(90,0)
peanot(l,s):={
si (l<31) alors
peano1(l,s);
sinon
peanot(l/3,s);
tourne_droite;peanot(l/3,1);
tourne_gauche;peanot(l/3,-1);
tourne_gauche;peanot(l/3,-1);
tourne_gauche;peanot(l/3,-1);
tourne_droite;peanot(l/3,1);
tourne_droite;peanot(l/3,1);
tourne_droite;peanot(l/3,1);
tourne_gauche;peanot(l/3,-1);
fsi;
}:;
\end{verbatim}
On valide avec {\tt OK} ou avec {\tt F9}.\\
On tape par exemple dans une ligne de commande :\\
\begin{verbatim}
dessine_tortue;
crayon jaune;
car(90);
crayon noir;
peanot(90,0);
\end{verbatim}
On obtient :\\
\includegraphics[width=\textwidth]{tortpeanot1}\\
% fltk N4xcas7EditeurE 709 74 231 399 20 0
%fltk N4xcas10Log_OutputE 16 473 924 1 20 0
Mais, on voit qu'\`a cause des erreurs d'arrondis, la courbe n'est pas centr\'ee
dans le carr\'e. En particuler, {\tt peanot(120,0), peanot(110,0),peanot(100,0)}
donne le m\^eme dessin !!!
On d\'ecide alors de prendre comme d\'epart de la tortue le
centre du carr\'e.
\begin{verbatim}
carc(l):={
pas_de_cote -l/2;
repete(4,avance l/2,tourne_gauche ,avance l/2);
pas_de_cote l/2;
}:;
pean1(l,s):={
tourne_gauche 45;
rond(round(l*sqrt(2)/6.),270);
rond(round(-l*sqrt(2)/6.),90);
si (s==-1) alors
rond(round(-l*sqrt(2)/6.),90);
tourne_droite 180;
rond(round(l*sqrt(2)/6.),90);
sinon
si (s==1) alors
rond(round(l*sqrt(2)/6.),90);
tourne_droite 180;
rond(round(-l*sqrt(2)/6.),90);
sinon tourne_droite 180;
fsi;
fsi;
rond(round(l*sqrt(2)/6.),90);
rond(round(-l*sqrt(2)/6.),270);
tourne_droite 225;
}:;
pean2(l,s):={
tourne_droite 135;
rond(round(l*sqrt(2)/6.),270);
rond(round(-l*sqrt(2)/6.),90);
tourne_droite 180;
rond(round(l*sqrt(2)/6.),90);
rond(round(-l*sqrt(2)/6.),270);
tourne_gauche -45;
}:;
pean(l,s):={
pean2(l,s);
pean1(l,s)
}:;
peant(l,s):={
si (l<31) alors
pean(l,s);
sinon
pas_de_cote -l/3;
saute -l/3;
peant(l/3,s);
saute l/3;tourne_droite;peant(l/3,1);
pas_de_cote l/3;tourne_gauche;peant(l/3,-1);
pas_de_cote l/3;tourne_gauche;peant(l/3,-1);
pas_de_cote l/3;tourne_gauche;peant(l/3,-1);
saute l/3;tourne_droite;peant(l/3,1);
saute l/3;tourne_droite;peant(l/3,1);
saute l/3;tourne_droite;peant(l/3,1);
pas_de_cote l/3;tourne_gauche;peant(l/3,-1);
pas_de_cote -l/3;saute -l/3;
fsi;
}:;
\end{verbatim}
On valide avec {\tt OK} ou avec {\tt F9}.\\
On tape par exemple dans une ligne de commande :\\
\begin{verbatim}
dessine_tortue;
peant(180,0);
crayon jaune;
carc(180);
\end{verbatim}
On obtient :\\
\includegraphics[width=\textwidth]{tortpeant1}\\
Mais ce n'est pas encore parfait, la courbe est bien centr\'ee dans le carr\'e
mais les raccords entres les diff\'erents morceaux ne se fait pas bien : c'est
toujours \`a cause des erreus d'arrondis !
On peut aussi supprimer les {\tt saute}, les {\tt tourne} et les $\sqrt2$,
c'est \`a dire en prenant comme d\'epart et d'arriv\'ee de la tortue les
tangentes aux arcs et comme param\`etre $l$ la diagonale du carr\'e et en rajoutant le param\`etre $n$ pour la profondeur.\\
On tape :
\begin{verbatim}
//fait le dessin de la tortue
des_tor():={
cache_tortue;
tourne_gauche;
avance 5;
tourne_droite(180-180/pi*atan(3.4));
avance(sqrt(25+17^2));
tourne_droite(180-2*180/pi*atan(1/3.4));
avance(sqrt(25+17^2));
tourne_droite(180-180/pi*atan(3.4));
avance 5;tourne_droite;
montre_tortue;
}:;
//carre de cote l
card(d):={
repete(4,avance(d/sqrt(2)),tourne_gauche 90);
}:;
//peano2(30,0) ou peano2(30,-1) ou peano2(30,1)
peano2(l,s):={
si (s==-1) alors
rond(round(l/6),90);
sinon
si (s==1) alors
rond(round(-l/6),90);
fsi;
fsi;
rond(round(l/6),90);
rond(round(-l/6),270);
rond(round(l/6),270);
rond(round(-l/6),90);
}:;
//tourne_gauche 45;peanot2(90,0,2)
peanot2(l,s,n):={
si (n==1) alors
peano2(l,s);
sinon
peanot2(l/3,s,n-1);
peanot2(l/3,1,n-1);
peanot2(l/3,-1,n-1);
peanot2(l/3,-1,n-1);
peanot2(l/3,-1,n-1);
peanot2(l/3,1,n-1);
peanot2(l/3,1,n-1);
peanot2(l/3,1,n-1);
peanot2(l/3,-1,n-1);
fsi;
}:;
\end{verbatim}
On remarquera que {\tt peanot2} commence \`a un sommet du carr\'e et se termine
en un point proche du sommet oppos\'e : le point d'arriv\'ee est ici fonction
de la valeur du param\`etre {\tt n} et est a une distance de $l/3^{n}/2$ du
sommet oppos\'e au carr\'e.\\
Puis on tape par exemple :\\
\begin{verbatim}
efface ;
tourne_gauche 45;
crayon jaune;
dessine_tortue;
crayon noir;
peanot2(180,0,2);
des_tor();
saute 180/3^2/2;
tourne_droite 135;
crayon jaune;
card(180);
cache_tortue;
\end{verbatim}
On obtient :\\
\includegraphics[width=\textwidth]{torpeant2}\\
Puis on tape par exemple :\\
\begin{verbatim}
efface ;
tourne_gauche 45;
crayon jaune;
dessine_tortue;
crayon noir;
peanot2(162,0,4);
des_tor();
saute 162/3^4/2;
tourne_droite 135;
crayon jaune;
card(162);
cache_tortue;
\end{verbatim}
On obtient :\\
\includegraphics[width=\textwidth]{tortpeant2}\\
Si on d\'efinit :\\
\begin{verbatim}
//peanot1(90,0,2)
peanot1(l,s,n):={
tourne_gauche 45;
saute(l/2/3^n);
peanot2(l,s,n);
saute(l/2/3^n);
tourne_droite 45;
}:;
\end{verbatim}
On a :\\
{\tt peanot1(l/sqrt(2),s,n)} ressemble \`a {\tt peanot(l,s)}....mais ce n'est
pas parfait \`a cause des erreurs d'arrondis.
%Les proc\'edures ci-dessus se trouvent dans le fichier :\\{\tt examples/tortue/peano.cxx}
\section{La courbe de Hilbert}
C'est une courbe remplissant un carr\'e qui a \'et\'e
d\'ecouverte par Hilbert :
cette courbe se fait a partir de quatre proc\'edures r\'ecursives qui
s'appellent les unes les autres et que j'ai
appel\'e {\tt hilbg}, {\tt hilbd}, {\tt bertg}, {\tt bertd}.\\
Voici les \'etapes de construction :
- au jour 0 on trace un segment,\\
- au jour 1 on trace les dessins o\`u on a dessin\'e les positions de d\'epart
et d'arriv\'ee de la tortue (la forme pleine repr\'esente la tortue au d\'epart
et la forme vide celle d'arriv\'ee). \\
%\input figtortue/hilbert.tex
\includegraphics[width=\textwidth]{torthilbert}\\
\hspace{0.1cm} {\tt hilbg} \hspace{0.8cm} {\tt hilbd} \hspace{0.8cm} {\tt bertg} \hspace{0.8cm} {\tt bertd}\\
{\tt hilbg} est compos\'ee de 4 segments qui sont le dessin obtenu au jour 0
par {\tt hilbd} {\tt hilbg} {\tt bertg} {\tt bertd}\\
{\tt hilbd} est compos\'ee de 4 segments qui sont le dessin obtenu au jour 0
par {\tt hilbg} {\tt hilbd} {\tt bertd} {\tt bertg}\\
{\tt bertg} est compos\'ee de 4 segments qui sont le dessin obtenu au jour 0
par {\tt hilbd} {\tt hilbg} {\tt bertg} {\tt hilbd}\\
{\tt bertd} est compos\'ee de 4 segments qui sont le dessin obtenu au jour 0
par {\tt hilbg} {\tt hilbd} {\tt bertd} {\tt hilbg}\\
On \'ecrit :
\begin{verbatim}
//hilbg(200)
hilbg(l):={
si (l<=10) alors
avance(l);
sinon
tourne_gauche(90);hilbd(l/2);
tourne_droite(90);hilbg(l/2);
tourne_droite(90);bertg(l/2);
tourne_gauche(90);bertd(l/2);
fsi;
}:;
hilbd(l):={
si (l<=10) alors
avance(l);
sinon
tourne_droite(90);;hilbg(l/2);
tourne_gauche(90);;hilbd(l/2);
tourne_gauche(90);bertd(l/2);
tourne_droite(90);bertg(l/2);
fsi;
}:;
bertg(l):={
si (l<=10) alors
avance(l);
sinon
tourne_droite(180);hilbd(l/2);
tourne_droite(90);hilbg(l/2);
tourne_droite(90);bertg(l/2);
hilbd(l/2);
fsi;
}:;
bertd(l):={
si (l<=10) alors
avance(l);
sinon
tourne_droite(180);hilbg(l/2);
tourne_gauche(90);hilbd(l/2);
tourne_gauche(90);bertd(l/2);
hilbg(l/2);
fsi;
}:;
\end{verbatim}
On tape par exemple :
\begin{verbatim}
efface ;
crayon jaune;
dessine_tortue;
crayon noir;
hilbg(200);
\end{verbatim}
On obtient :\\
\includegraphics[width=\textwidth]{torthilber}
%Les 4 proc\'edures ci-dessus se trouvent dans le fichier :\\{\tt examples/tortue/hilbert.cxx}
\section{Le dragon}
0/ Prener une longue bande de papier $AB$ de longueur $l$ : c'est le dragon au
jour 0.\\
1/ Plier cette bande de papier en deux, en amenant $B$
en coincidence avec $A$ par une rotation d'angle $+\pi*2$ et de centre $C$,
milieu de $AB$ : en d\'epliant \`a angle droit, on a le dragon au jour 1.\\
2/ Replier comme pr\'ec\'edemment, puis plier \`a nouveau en deux, en amenant
$C$ en coincidence avec $A$ par une rotation d'angle $+\pi*2$ : en d\'epliant
\`a angle droit chaque pliure, on a le dragon au jour 2.\\
3/ Recommencer tant que la longueur \`a plier n'est pas trop petite (pour la
tortue on s'arr\^ete de plier si $l<10$).\\
Voici les 5 premi\`eres \'etapes :\\
%\input figtortue/dragon.tex
\includegraphics[width=\textwidth]{tortdrag}\\
On remarque que le segment $AC$ et le segment $CB$ donne naissance \`a deux
dragons sym\'etriques : on appelle {\tt dragong} le dragon obtenu par des
pliages fait avec une rotation d'angle $+\pi*2$ et {\tt dragond} le dragon
obtenu par des pliages fait avec une rotation d'angle $-\pi*2$.\\
On tape :
\begin{verbatim}
//dragong(1800)
dragong(l):={
si (l<10) alors
avance(l);
sinon
dragong(l/2);
tourne_gauche(90);
dragond(l/2);
fsi;
}:;
dragond(l):={
si (l<10) alors
avance(l);
sinon
dragong(l/2);
tourne_droite(90);
dragond(l/2);
fsi;
}:;
\end{verbatim}
Ou encore en utilisant une seule proc\'edure {\tt dragon2} mais avec un
param\`etre suppl\'ementaire {\tt s} (si {\tt s=1} on a un dragon gauche et
si {\tt s=-1} on a un dragon droit).\\
On tape :
\begin{verbatim}
//dragon2(1800,1)
dragon2(l,s):={
si (l<10) alors
avance(l);
sinon
dragon2(l/2,1);
tourne_gauche(90*s);
dragon2(l/2,-1);
fsi;
}
\end{verbatim}
On tape par exemple :\\
\begin{verbatim}
efface;
rayon jaune;
dessine_tortue;
crayon noir;
dragon2(2880,1)}
\end{verbatim}
%\input figtortue/dragon2.tex
\includegraphics[width=\textwidth]{tortdragon}\\
Ou encore on \'ecrit {\tt dragon3} en utilisant le param\`etre $n$ profondeur
pour faire le test d'arr\^et :
\begin{verbatim}
//dragon3(1800,1,3)
dragon3(l,s,n):={
si (n==0) alors
avance(l);
sinon
dragon3(l/2,1,n-1);
tourne_gauche(90*s);
dragon3(l/2,-1,n-1);
fsi;
}:;
\end{verbatim}
Les dessins des 5 premi\`eres \'etapes ont \'et\'e r\'ealis\'es
en ex\'ecutant :
\begin{verbatim}
efface ;
crayon jaune;
dessine_tortue;
crayon noir;
dragon3(60,1,0);
des_tor();
saute 20;
crayon jaune;
dessine_tortue;
crayon noir;
dragon3(60,1,1);
des_tor();
pas_de_cote -20;
saute -30;
tourne_droite ;
crayon jaune;
dessine_tortue;
crayon noir;
dragon3(60,1,2);
des_tor();
pas_de_cote -40;
saute -30;
tourne_droite ;
crayon jaune;
dessine_tortue;
crayon noir;
dragon3(60,1,3);des_tor();
pas_de_cote -60;
saute -15;
tourne_droite ;
crayon jaune;
dessine_tortue;
crayon noir;
dragon3(60,1,4);
\end{verbatim}
%Les proc\'edures ci-dessus se trouvent dans le fichier :\\{\tt examples/tortue/dragon.cxx}
\subsection{La courbe de Gosper}
Voici {\tt gosperg(40,1);} et {\tt gosperd(40,1);} qui forment la courbe de
Gosper et l'\'etape 2 ({\tt gosperg(40,2)}) :\\
%\input figtortue/gosper.tex
\includegraphics[width=\textwidth]{tortgosper}
On remarque que les 7 segments de la premi\`ere courbe donne naissance soit
\`a la premi\`ere courbe, soit \`a la courbe obtenue en faisant le
trajet en sens inverse. On va donc d\'efinir deux proc\'edures :\\
{\tt gosperg} et {\tt gosperd} qui r\'ealisent les dessins suivants (avec comme
position de d\'epart de la tortue, le triangle plein et comme position
d'arriv\'ee, le triangle vide) :\\
%\input figtortue/gosperdg.tex
On d\'eduit l'\'ecriture de {\tt gosperd} de celle de {\tt gosperg} en mettant
les instructions de {\tt gosperg} de la derni\`ere \`a la premi\`ere en
changeant {\tt gauche} en {\tt droite} et r\'eciproqement.
\begin{verbatim}
//gosperg(80,3)
gosperg(l,n):={
si (n==0) alors avance(l);
sinon
gosperg(l/2,n-1);
tourne_gauche(60);
gosperd(l/2,n-1);
tourne_gauche(120);
gosperd(l/2,n-1);
tourne_droite(60);
gosperg(l/2,n-1);
tourne_droite(120);
gosperg(l/2,n-1);
gosperg(l/2,n-1);
tourne_droite(60);
gosperd(l/2,n-1);
tourne_gauche(60);
fsi;
};
gosperd(l,n):={
si (n==0) alors avance(l);
sinon
tourne_droite(60);
gosperg(l/2,n-1);
tourne_gauche(60);
gosperd(l/2,n-1);
gosperd(l/2,n-1);
tourne_gauche(120);
gosperd(l/2,n-1);
tourne_gauche(60);
gosperg(l/2,n-1);
tourne_droite(120);
gosperg(l/2,n-1);
tourne_droite(60);
gosperd(l/2,n-1);
fsi;
};
\end{verbatim}
On tape :
{\tt gosperg(80,3)}\\
On obtient :\\
{\tt la courbe de gosper \`a la troisi\`eme g\'en\'eration}\\
\includegraphics[width=\textwidth]{tortgosp}\\
Autre \'ecriture on choisit les fl\`eches d\'epart et d'arriv\'ee comme
ci-dessous mais alors la tortue a chang\'e de direction il faut donc aussi la
faire changer de la m\^eme direction dans le test d'arr\^et. L'\'ecriture de
{\tt gosperd} se fait encore \`a partir de celle de {\tt gosperg}, en mettant
les instructions de {\tt gosperg} de la derni\`ere \`a la premi\`ere en
changeant {\tt gauche} en {\tt droite} et r\'eciproqement, et cela m\^eme dans
le test d'arr\^et!!!
%\input figtortue/gosper2.tex
\includegraphics[width=\textwidth]{tortgospe}
\begin{verbatim}
//gosperg2(80,3)
gosperg2(l,n):={
si (n==0) alors
avance(l);tourne_droite(60);
sinon
gosperg2(l/2,n-1);
tourne_gauche(60);
gosperd2(l/2,n-1);
tourne_gauche(60);
gosperd2(l/2,n-1);
tourne_droite(60);
gosperg2(l/2,n-1);
tourne_droite(60);
gosperg2(l/2,n-1);
tourne_gauche(60);
gosperg2(l/2,n-1);
tourne_droite(60);
gosperd2(l/2,n-1);
fsi;
}:;
gosperd2(l,n):={
si (n==0) alors
tourne_gauche(60);avance(l);
sinon
gosperg2(l/2,n-1);
tourne_gauche(60);
gosperd2(l/2,n-1);
tourne_droite(60);
gosperd2(l/2,n-1);
tourne_gauche(60);
gosperd2(l/2,n-1);
tourne_gauche(60);
gosperg2(l/2,n-1);
tourne_droite(60);
gosperg2(l/2,n-1);
tourne_droite(60);
gosperd2(l/2,n-1);
fsi;
}:;
\end{verbatim}
On tape :\\
{\tt gosperg2(80,3)}\\
On obtient :\\
{\tt la courbe de gosper \`a la troisi\`eme g\'en\'eration}\\
\includegraphics[width=\textwidth]{tortgos}
%Les proc\'edures ci-dessus se trouvent dans le fichier :\\
%{\tt examples/tortue/gosper.cxx}
\newpage
\printindex
\newpage
\tableofcontents
\end{document}
\section{\'Ex\'ecution en pas \`a pas d'une proc\'edure}
On peut mettre une suite d'instrucrtions dans {\tt prg}, puis on demande
que l'\'ecran se coupe selon 2 fen\^etres (menu {\tt Edit} sous-menu
{\tt Fen\^etres} puis {\tt 2 Fen\^etres}).\\
On appuie sur {\tt geo} pour voir la tortue sur un des \'ecrans et sur
{\tt prg} pour voir les instructions.\\
Puis on met en surbrillance la
premi\`ere ligne de {\tt prg} et on appuie sur le bouton {\tt exec}
de la barre de boutons de {\tt prg}.\\
\`A chaque {\tt exec} les instructions sont ex\'ecut\'ees et visualis\'ees
sur l'\'ecran {\tt geo}.