# Introduction

La partie `Tortue` de `Xcas` contient des commandes permettant de faire des dessins comme en `Logo` en donnant des ordres à une tortue possédant un crayon.
Ces dessins sont faits dans l’écran graphique `Tortue` qui est obtenu avec le raccourci clavier : `Alt+d`.
La tortue est un curseur graphique représenté par un triangle : c’est un robot orienté qui peut avancer, reculer, tourner sur place à droite ou à gauche et tracer ses déplacements.
Contrairement à `Logo` il n’y a pas de commandes gérant des changements d’échelles mais il y a la possibilité de déplacer l’écran du dessin avec la souris (par exemple, pour centrer le dessin) et aussi de réduire ou d’augmenter la taille du dessin en agissant sur la molette de la souris.
Par rapport à Logo, on a ajouté :

- les commandes :
  - `saute` qui fait faire à la tortue des bonds en avant ou en arrière et
  - `pas_de_cote` qui fait faire à la tortue des bonds sur le côté à gauche ou à droite,
  - `rond` qui fait faire à la tortue des cercles et des arcs de cercle,
  - `disque`, `disque_centre`, `rectangle_plein`, `triangle_plein` qui font faire à la tortue des figures pleines comme des disques, des rectangles pleins (mais aussi des carrés pleins, des losanges pleins ou des parallélogramme pleins), des triangles pleins,
- les instructions de programmation comme `pour, tantque, repeter` que l’on peut utiliser pour faire des boucles sans être obligé d’ utiliser la récursivité !

## 0.1 Pour avoir l’écran dessin tortue

Choisir le menu `Tortue`, sous menu `Dessin tortue` ou utiliser le raccourci clavier `Alt+d`.

Attention Une session de `Xcas` ne peut avoir qu’un seul écran de dessin tortue. Si on veut faire un nouveau dessin tortue, tout en gardant le dessin précédent, il faut ouvrir une nouvelle session.

On obtient :

- Au centre, un écran `dessin tortue` et on voit au début de la session, la tortue sous la forme d’un petit triangle ABC isocèle de sommet A. Le milieu M de BC donne la position de la tortue et la mesure en degrés de l’angle O x,M A donne le cap de la tortue. Au départ ou après la commande `efface`, la tortue a comme coordonnées 100,100 et a comme cap 0 c’est à dire que sa tête est dirigée selon l’axe `Ox`. On travaille en degrés pour toutes les commandes concernant la tortue. Mais si vous utiliser dans une procédure tortue des fonctions trigonométriques il faut tenir compte de la configuration du `cas` et savoir si on travaille en radian ou en degré....Il est donc préférable lorsqu’on travaille avec la tortue de choisir les degrés en décochant `radian` dans la configuration du `cas`.
- sous cet écran `dessin tortue`, une barre de bouton où l’on trouve les abréviations de certaines commandes.
- À droite, une ligne d’entrée pour taper les commandes pilotant la tortue.
  Attention les sorties de la ligne d’entrée de la tortue sont prevues pour afficher une seule ligne.
- À gauche un enregistreur qui est un éditeur de programmes qui garde la trace de toutes les commandes effectuées et qui commence par l’instruction `efface;`. On peut grâce à cet enregistreur corriger une commande puis réexécuter toutes les commandes qui s’y trouve en appuyant sur `F7`.

## 0.2 Pour changer la fenêtre 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 `M` avec `Voir->Zoom avant` ou `Voir->Zoom arriere`.

Si vous avez fait un dessin qui sort de l’écran, vous pouvez translater l’origine du repère en cliquant sans relacher dans l’écran puis en déplaçant la souris avec le bouton enfoncé.
On peut aussi utiliser le menu `M` avec `Voir->droite`, `Voir->gauche`, `Voir->haut` ou `Voir->bas`

## 0.3 Pour utiliser les lignes de commande et l’enregistreur

### 0.3.1 Comment remplir une ligne de commande

On peut remplir la ligne des commandes de différentes façons :

- on tape la commande en toutes lettres,
- on sélectionne la commande se trouvant dans l’un des items du menu `Tortue`,
- on clique sur l’abréviation de la commande si elle se trouve sur la barre des boutons,
- on tape le début de la commande (par exemple `ba`), puis on appuie sur la touche `tabulation` du clavier (⇆). Cela ouvre l’index de l’aide ce qui donne les différentes complétions possibles (par exemple `backquote, baisse_crayon,....`), et il reste à cliquer sur la commande voulue dans le choix proposé (par exemple `baisse_crayon`) et d’appuyer sur `OK` ou sur un des exemples.

Il faut savoir qu’en appuyant à la fois sur `Ctrl` et sur la flèche vers le haut du clavier, on remet dans la ligne des commandes, la commande précédente. On peut faire cela éventuellement plusieurs fois pour remonter dans l’historique des commandes et si on appuie à la fois sur `Ctrl` et sur la flèche vers le bas du clavier, on descend dans l’historique des commandes. Il faut savoir aussi que `esc` efface la ligne des commandes.

### 0.3.2 Comment utiliser l’enregistreur situé à droite et un éditeur

Un exemple
Vous voulez faire un carré de côté 10 au pas à pas.
Vous mettez en ligne 1 : `avance` et vous validez en tapant sur `entrée`
Vous mettez en ligne 2 : `tourne_gauche` et vous validez en tapant sur `entrée`
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ée mais dans l’éditeur de programme situé à droite, lorsque on aura dessiner le carré, il y aura :

    efface;
    avance;
    tourne_gauche;
    avance;
    tourne_gauche;
    avance;
    tourne_gauche;
    avance;
    tourne_gauche;

Vous voulez maintenant faire un autre carré de côté 10 à côté de ce carré.
Vous mettez par exemple en ligne 3 : `saute` et vous validez en tapant sur `entrée`
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é puis exécuter toutes les commandes depuis le début en appuyant sur `F7`.
Supposer maintenant que vous voulez modifier la place du 2-ième carré. Vous pouvez remplacer par exemple `saute` par `pas_de_cote` directement dans l’éditeur, puis exécuter toutes les commandes depuis le début en appuyant sur `F7`.
Cette façon de travailler peut amener les élèves à la notion de procédure : on peut ouvrir un éditeur de programme sur un autre niveau et recopier d’un coup de souris les lignes qui correspondent au carré. Il suffit alors de rajouter sur la première ligne le nom de la procédure, des parenthèses, `:={` et de rajouter à la fin `}:;` puis d’appuyer sur `OK` ou `F9` pour définir une procédure.
Pour l’exemple précédent on aura :

    C():={
    avance;
    tourne_gauche;
    avance;
    tourne_gauche;
    avance;
    tourne_gauche;
    avance;
    tourne_gauche;
    }:;

Si on tape maintenat dans une ligne de commande :
`C()` puis entree
la tortue dessine un carré direct de côté 10.

## 0.4 Pour avoir l’écran tortue en ouvrant `Xcas`

Il suffit la première fois de donner comme niveau `tortue`.
Si vous ne l’avez pas fait, il faut sélectionner `tortue` dans le menu `Configuration` sous-menu `Mode`. Ensuite, il suffit de sélectionner `Sauver préférences` dans le menu `Configuration` : ainsi, au prochain démarrage de `Xcas`, vous verrez la tortue au niveau 1 et un éditeur de programmes au niveau 2.

## 0.5 Le menu `Tortue`

Toutes les primitives se trouvent dans le menu `Tortue` :

- `Dessin tortue` ou `Alt+d` fait apparaître l’écran `dessin tortue`,
- `Deplacements` contient les primitives de déplacements et d’orientation qui gèrent la `Tortue` avec des coordonnées relatives : `avance`, `recule`, `saute`, `pas_de_cote`, `tourne_droite`, `tourne_gauche`, `efface` (qui permet d’effacer l’écran ou un trait),
- `Positionner` contient les primitives de déplacements et d’orientation qui gèrent la `Tortue` avec des coordonnées absolues : `cap`, `position`, `vers`,
- `Formes` contient les primitives dessinant des figures géométriques : `rond`, `disque`, `rectangle_plein`, `triangle_plein` et aussi `polygone_rempli` qui permet de remplir un polygone quelconque et la commande `dessine_tortue 1` qui dessine la tortue ou `dessine_tortue 0` qui dessine la tortue selon une forme pleine,
- `Crayon` contient les primitives gérant le crayon et sa couleur : `leve_crayon`, `baisse_crayon`, `crayon`, `crayon blanc`, `crayon noir`, `crayon rouge`, `crayon vert`, `crayon bleu`, `crayon jaune`, `crayon magenta`, `crayon cyan`, `crayon gomme`,
- `Tortue` contient les primitives qui permettent de rendre la tortue visible ou invisible : `cache_tortue`, `montre_tortue`,
- `Programme` contient les primitives de programmation propres à la `Tortue` : `repete`, `si...fsi`, `pour...fpour`, `tantque...ftantque`, et aussi des commandes gérant les fichiers `sauve` et `ramene`,
- `Autres` contient les primitives `ecris` pour écrire sur l’écran à un endroit donné, `hasard` pour avoir des nombres aléatoires, `signe` pour écrire sur l’écran au point (10,10) avec la fonte 20 et les commandes qui permettent d’écrire des procédures en faisant du pas à pas :`debut_enregistrement` et `fin_enregistrement`.

## 0.6 L’écriture des paramètres

Les paramètres des primitives et des procédures doivent être mis entre des parenthèses `()` et doivent être séparés par des virgules.
Pour les primitives ayant 0 ou 1 paramètre on peut se dispenser des parenthèses `()` mais pour les procédures écrites par l’utilisateur, les parenthèses `()` sont obligatoires même si il n’y a pas de paramètre.
Une primitive de déplacement, ayant 1 paramètre, a comme paramètre par défaut 10 et une primitive de pivotement, ayant 1 paramètre, a comme paramètre par défaut 90.
Une exception : `efface` efface tout l’écran alors que `efface 10`, la tortue recule de 10 en effacant.
On écrira par exemple :
`avance; tourne_droite; avance; leve_crayon`
ou
`avance(10);tourne_droite(90);avance(10);leve_crayon()`
Pour les procédures écrites par l’utilisateur, il faut mettre des parenthèses `()` même si il n’y a pas de paramètre.
On écrira par exemple :
`avtd():={avance;tourne_droite}`
puis par exemple pour dessiner un carré de côté 10 :
`avtd();avtd();avtd();avtd();`
ou
`repete(4,avtd())`
et pour dessiner un carré plein de côté 10 :
`avtd();avtd();avtd();avtd();polygone_rempli(-8)` ou
`repete(4,avtd());polygone_rempli -8` ou
`rectangle_plein`