Découverte du langage LOGO en 10 leçons
Découverte du langage LOGO en 10 leçons
Le Coq Loı̈c
27 juin 2007
Table des matières
1 Introduction 3
4 Les variables 10
4.1 Rôle des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.2 Exemples d’utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.3 Tracer un rectangle de longueur et largeur déterminée . . . . . . . . . . . . . . . . 11
4.4 Tracer une forme à des tailles diverses . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.5 Activité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5 La récursivité 14
5.1 Avec la zone de dessin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.1.1 Premier exemple : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.1.2 Trois nouvelles primitives : . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.1.3 Deuxième exemple : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.2 Avec la zone de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5.2.1 Un premier exemple : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5.2.2 Réaliser un test de sortie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1
7 Activité sur les chiffres de calculatrice 18
7.1 Le programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
7.2 Création d’une petite animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Introduction
Dans ce manuel, vous trouverez un certain nombre d’ingrédients afin de maı̂triser le langage Logo.
Etant prof de math, ce guide est un petit peu le récapitulatif des diverses activités traitées en
classe avec les élèves de classe de quatrième et de cinquième. Chaque chapitre essaye d’aborder
une notion particulière du langage et propose des activités à réaliser soit en guise de découverte
soit pour autoévaluation (Une correction est disponible dans ce cas à la fin du manuel).
Ca manuel ne se veut pas être LE tutoriel idéal pour appréhender le LOGO. Il se contente de pro-
poser diverses pistes, différentes approches sur certains aspects de la programmation en LOGO.
Les activités sont de tout niveau et je pense, représente un bon panel de ce qu’est capable de
réaliser le langage LOGO. J’espère que les explications apportées seront le plus claires possible !
N’hésitez pas à me faire parvenir vos commentaires et vos critiques à l’égard de ce tutoriel. Et
maintenant, commencez à vous initier aux joies de la petite tortue !
3
Chapitre 2
Pour déplacer la tortue sur l’écran, on utilise des commandes prédéfinies appelées « primitives ».
Dans cette premier chapitre, on va découvrir les primitives de base permettant de contrôler la
tortue.
4
2.2.1 Le carré
Un carreau représente 50 pas de tortue. Pour dessiner le carré ci-contre,
on va donc taper :
av 200 td 90 av 200 td 90 av 200 td 90 av 200 td 90
On s’aperçoit ainsi que l’on répète 4 fois la même instruction d’où une
syntaxe plus rapide :
repete 4[av 200 td 90]
c
2.2.2 Le triangle équilatéral
Ici, un carreau représente 30 pas de tortues. Nous allons voir ici comment
tracer ce triangle équilatéral de 150 pas de tortue de côté.
La commande ressemblera à quelque chose du style : ?
repete 3[av 150 td ....]
60˚
Reste à déterminer le bon angle. Dans un triangle équilatéral, les angles
valent tous 60˚. Comme la tortue doit tourner à l’extérieur du triangle.
L’angle vaudra 180-60=120˚. La commande est donc :
repete 3[av 150 td 120]
2.2.3 L’hexagone
3
Ici, un carreau=20 pas de tortues.
4 2
repete 6[av 80 td ....]
On s’aperçoit que lors de son déplacement, la tortue effectue en fait un
tour complet sur elle même. (Elle part orientée vers le haut puis revient
dans cette position). Cette rotation de 360˚ s’effectue en 6 étapes. Par 5 1
360
conséquent, à chaque fois, elle tourne de = 60˚. La commande est
6
donc : 6
repete 6[av 80 td 60]
pour carre
repete 4[av 100 td 90]
fin
puis on ferme l’éditeur en enregistrant les modifications grâce au pingouin. Maintenant à chaque
fois que l’on tape carre, un carré apparaı̂tra à l’écran !
A B
–
Chapitre 3
3.1 Présentation
Dans ce chapitre, nous allons découvrir la primitive fixeposition. La zone de dessin est en fait
muni d’un repère dont l’origine est située au centre de l’écran. On peut ainsi atteindre chacun des
points de la zone de dessin à l’aide de ses coordonnées.
(200 ;100)
50
−100
−150
(-100 ;-150) (50 ;-150)
3.2 Activité :
Dans cette activité, vous devez réaliser la figure située à la page suivante. Vous n’avez le droit
d’utiliser que les primitives : fpos, ve, lc, bc.
8
180
120
60
−60
−120
−180
−240
Chapitre 4
Les variables
pour carre
repete 4[av 100 td 90]
fin
Nous allons modifier cette procédure afin qu’elle reçoive un paramètre (on dit également « argu-
ment ») indiquant la longueur du côté du carré à tracer.
Une variable est toujours précédée du symbole « : ». Si nous voulons indiquer à la procédure carre
qu’elle dépend de la variable :c, on rajoute à la fin de la ligne de défnition :c.
Par conséquent, ensuite, on avancera non plus de 100 pas de tortue mais de :c pas de tortues. La
procédure devient donc :
pour carre :c
repete 4[av :c td 90]
fin
Ainsi, en tapant :
carre 100 carre 50 carre 30 carre 20 carre 10
On obtient la figure ci-contre.
10
4.3 Tracer un rectangle de longueur et largeur déterminée
Nous allons ici définir une procedure nommée rec qui dépendra de deux variables.
Par exemple, rec 200 100 tracera un rectangle de hauteur 200 et largeur 100. On obtient :
rec 200 100 rec 100 300 rec 50 150 rec 1 20 rec 100 2
Bien sûr, si vous ne donnez qu’un argument à la procédure rec, l’interpréteur vous signalera par
un message d’erreur que la procédure attend un autre argument.
L’objectif est de passer un argument à la procédure ma pour que selon le paramètre, la mai-
son soit plus ou moins grande. Nous souhaitons que ma 10 trace la maison du chapitre 1.
ma 5 tracera une maison à l’échelle 0,5.
ma 20 tracera une maison aux dimensions deux fois plus grandes etc
La notion de proportionnalité est bien sûr sous-jacente. Sur le dessin, du chapitre 1, un carreau
représente 10. La procédure carre était la suivante.
pour carre
repete 4[av 150 td 90]
fin
pour carre :c
repete 4[av 15*:c td 90]
fin
Ainsi quand on tapera carre 10, le carré aura pour côté 15 × 10 = 150. les proportions sont bien
respectées ! En fait, on s’aperçoit qu’il va juste falloir reprendre toutes les procédures et changer
les longueurs de déplacement de la manière suivante.
70 deviendra 7* :c
av 45 deviendra av 4.5* :c
etc
Cela revient en fait simplement à compter le nombre de carreaux pour chaque longueur ! On
obtient :
pour carre :c
repete 4[av 15*:c td 90]
fin
pour tri :c
repete 3[av 15*:c td 120]
fin
pour porte :c
repete 2[av 7*:c td 90 av 5*:c td 90]
fin
pour che :c
av 5.5*:c td 90 av 2*:c td 90 av 2*:c
fin
pour dep1 :c
td 90 av 5*:c tg 90
fin
pour dep2 :c
tg 90 av 5*:c td 90 av 15*:c td 30
fin
pour dep3 :c
lc td 60 av 2*:c tg 90 av 3.5*:c bc
fin
pour ma :c
carre :c dep1 :c porte :c dep2 :c tri :c dep3 :c che :c
fin
4.5 Activité
Réaliser les dessins suivants avec des variables de telle sorte que l’on puisse les obtenir à des tailles
diverses.
Chapitre 5
La récursivité
On dit qu’une procédure est récursive si elle s’appelle elle-même. Voyons quelques exemples
utilisant cette propriété.
pour ex1
td 1 Cette procédure est récursive puisque la commande ex1 est exécuté à la dernière ligne. A
ex1 l’exécution, on constate que la tortue ne cesse de tourner sur elle-même. Pour interrompre
fin le programme, on est obligé de se servir du bouton STOP.
14
5.2 Avec la zone de texte
Si vous n’avez toujours pas compris la syntaxe de la primtive si, reportez-vous au manuel de
référence de XLogo.
pour ex3 :n
Lancer la commande ex3 0
si :n=100 [stop]
Faites les changements nécessaires dans ce programme
ecris :n
pour faire apparaı̂tre les chiffres compris entre et 55 et
ex3 :n+1
350 qui sont dans la table de 11.
fin
Chapitre 6
Dans cette leçon, nous allons voir comment on peut procéder pour remplir un rectangle de longueur
et largeur déterminée. Nous choisirons dans les exemples suivants un rectangle de 100 sur 200.
16
Note : à la place d’utiliser la primitive ou, on peut utiliser le symbole « | » : on obtiendrait :
si :lo=0 | :la=0 [stop]
2
7.1 Le programme
Nous aurons besoin du rectangle rempli précé-
dent :
18
pour chiffre :a :b :c :d :e :f :g
# On dessine le rectangle 1
si :a=1 [rec 160 40]
# On dessine le rectangle 2
si :b=1 [rec 40 160]
lc td 90 av 120 tg 90 bc
# On dessine le rectangle 3
si :c=1 [rec 160 40]
lc av 120 bc
# On dessine le rectangle 5
si :e=1 [rec 160 40]
# On dessine le rectangle 4
tg 90 lc re 40 bc
si :d=1 [rec 160 40]
# On dessine le rectangle 6
td 90 lc av 120 tg 90 bc
si :f=1 [rec 160 40]
# On dessine le rectangle 7
lc av 120 tg 90 re 40 bc
si :g=1 [rec 160 40]
fin
pour rebours
ve ct chiffre 0 1 1 1 1 1 1 attends 60
ve ct chiffre 1 1 1 1 1 1 1 attends 60
ve ct chiffre 0 0 1 0 1 1 0 attends 60
ve ct chiffre 1 1 1 1 0 1 1 attends 60
ve ct chiffre 0 1 1 1 0 1 1 attends 60
ve ct chiffre 0 0 1 1 1 0 1 attends 60
ve ct chiffre 0 1 1 1 1 1 0 attends 60
ve ct chiffre 1 1 0 1 1 1 0 attends 60
ve ct chiffre 0 0 1 0 1 0 0 attends 60
ve ct chiffre 1 1 1 0 1 1 1 attends 60
fin
Petit problème : il y aun effet de clignotement désagréable pendant la création de chaque chiffre.
Pour fluidifier cela on va utiliser les primitives animation et rafraichis.
animation attend un argument égal à vrai ou faux.
– S’il est égal à faux, cest le mode d’affichage classique.
– S’il est égal à vrai, on passe en mode « animation ». La tortue ne dessine plus à l’écran
mais dans le cache, c’est à dire qu’elle effectue les changements en mémoire. Elle n’affichera
l’image que lorsqu’on lui le demande à l’aide la primitive rafraichis.
On obtient ainsi le programme modifié :
pour rebours
# On passe en mode animation
animation vrai
ve ct chiffre 0 1 1 1 1 1 1 rafraichis attends 60
ve ct chiffre 1 1 1 1 1 1 1 rafraichis attends 60
ve ct chiffre 0 0 1 0 1 1 0 rafraichis attends 60
ve ct chiffre 1 1 1 1 0 1 1 rafraichis attends 60
ve ct chiffre 0 1 1 1 0 1 1 rafraichis attends 60
ve ct chiffre 0 0 1 1 1 0 1 rafraichis attends 60
ve ct chiffre 0 1 1 1 1 1 0 rafraichis attends 60
ve ct chiffre 1 1 0 1 1 1 0 rafraichis attends 60
ve ct chiffre 0 0 1 0 1 0 0 rafraichis attends 60
ve ct chiffre 1 1 1 0 1 1 1 rafraichis attends 60
# On rebascule en mode dessin classique
animation faux
fin
Chapitre 8
Rajoute une valeur dans une liste. Si cette valeur est une liste, assemble les deux listes.
21
pour question
lis [Quel est ton age?] "age
lis [Quel est ton nom?] "nom
lis [Quel est ton prénom?] "prenom
ecris phrase [Ton nom est: ] :nom
ecris phrase [Ton prénom est: ] :prenom
ecris phrase [Ton age est: ] :age
si ou :age>18 :age=18 [ecris [Tu es majeur]] [ecris [Tu es mineur]]
fin
Tout d’abord, nous allons définir une procédure bon qui trace le bonhomme
ci-contre à la taille de notre choix.
pour bon :c
tg 154 av 2.2*:c re :c*2.2
tg 52 av 2.2*:c re :c*2.2
tg 154 av :c*2
tg 154 av 2.2*:c re :c*2.2
tg 52 av 2.2*:c re :c*2.2
tg 154 av :c/2 26˚
tg 90 repete 180[av :c/40 td 2] td 90
fin
Nous allons à présent créer une animation donnant l’illusion que le bonhomme gran-
dit petit à petit. Pour cela, nous allons tracer bon 1 puis bon 2 bon 3 ... jusqu’à
bon 75. Entre chaque tracé, on effacera l’écran. On obtient les deux procédures
suivantes :
pour bon :c
si :c=75[stop]
tg 154 av 2.2*:c re :c*2.2
tg 52 av 2.2*:c re :c*2.2
tg 154 av :c*2
tg 154 av 2.2*:c re :c*2.2
tg 52 av 2.2*:c re :c*2.2
tg 154 av :c/2
tg 90 repete 180[av :c/40 td 2] td 90
ve ct bon :c+1
fin
pour demarrer
ve ct
bon 0
fin
23
Enfin, pour fluidifier le tout, on va se servir du mode animation et de la primitive
rafraichis.
pour bon :c
si :c=75[stop]
ve ct tg 154 av 2.2*:c re :c*2.2
tg 52 av 2.2*:c re :c*2.2
tg 154 av :c*2
tg 154 av 2.2*:c re :c*2.2
tg 52 av 2.2*:c re :c*2.2
tg 154 av :c/2
tg 90 repete 180[av :c/40 td 2] td 90
rafraichis
bon :c+1
fin
pour demarrer
ct animation vrai
bon 0
animation faux
fin
Chapitre 10
– Par exemple, 42 et 28 ont pour pgcd 14 (c’est le plus grand nombre possible qui divise à la
fois 28 et 42)
Voici le principe : Étant donnés deux entiers positifs a et b, on commence par tester si b est
nul. Si oui, alors le PGCD est égal à a. Sinon, on calcule r, le reste de la division de a par b. On
remplace a par b, et b par r, et recommence le procédé.
Calculons par exemple, le pgcd de 2160 et 888 par cet algorithme avec les étapes suivantes :
a b r
2160 888 384
888 384 120
384 120 24
120 24 0
24 0
25
Le pgcd de 2160 et 888 est donc 24. Il n’y pas de plus grand entier qui divise ces deux nombres.
(En fait 2160 = 24 × 90 et 888 = 24 × 37)
Le pgcd est en fait le dernier reste non nul.
pour pgcd :a :b
si (reste :a :b)=0 [retourne :b][retourne pgcd :b reste :a :b]
fin
Note : On est obligé de mettre des parenthèses sur reste :a :b, sinon l’interpréteur va chercher
à évaluer : b = 0. Pour éviter ce problème de parenthésage, écrire : si 0=reste :a :b
pour test
# On initialise la variable compteur à 0
donne "compteur 0
repete 1000 [
si (pgcd hasard 1000000 hasard 1000000)=1 [donne "compteur :compteur+1]
]
ecris [frequence:]
ecris :compteur/1000
fin
Note : De même que précédemment, On est obligé de mettre des parenthèses sur pgcd hasard
1000000 hasard 1000000, sinon l’interpréteur va chercher à évaluer 1 000 000 = 1. Pour éviter
ce problème de parenthésage, écrire : si 1=pgcd hasard 1000000 hasard 1000000
pour test
# On initialise la variable compteur à 0
donne "compteur 0
repete 1000 [
si 1=pgcd hasard 1000000 hasard 1000000 [donne "compteur :compteur+1]
]
# On calcule la frequence
donne "f :compteur/1000
# On affiche la valeur approchée de pi
ecris phrase [approximation de pi:] racine (6/:f)
fin
test
approximation de pi: 3.164916190172819
test
approximation de pi: 3.1675613357997525
test
approximation de pi: 3.1008683647302115
Bon, je modifie mon programme de tel sorte que quand je le lance, je précise le nombre d’essais
souhaités. J’ai dans l’idée d’essayer avec 10000 essais, voilà ce que j’obtiens sur mes trois premières
tentatives :
pour test :essais
# On initialise la variable compteur à 0
donne "compteur 0
repete :essais [
si 1=pgcd hasard 1000000 hasard 1000000 [donne "compteur :compteur+1]
]
# On calcule la frequence
donne "f :compteur/:essais
# On affiche la valeur approchée de pi
ecris phrase [approximation de pi:] racine (6/:f)
fin
test 10000
approximation de pi: 3.1300987144363774
test 10000
approximation de pi: 3.1517891481565017
test 10000
approximation de pi: 3.1416626832299914
J’enlève le « . »du 3.14 .... qui risque de nous ennuyer quand on extraiera les décimales. Bien,
tout est en place, nous créons une nouvelle procédure appelée hasardpi et modifions légèrement
la procédure test
pour pgcd :a :b
si (reste :a :b)=0 [retourne :b][retourne pgcd :b reste :a :b]
fin
pour hasardpi :n
soit "nombre "
repete :n [
# S’il n’y plus de caractere sur la ligne
si 0=compte :ligne [donne "ligne premier lisligneflux 1]
# On donne à la variable caractere la valeur du premier caractere de la ligne
donne "caractere premier :ligne
# puis on enleve ce vpremier caractere de la ligne.
donne "ligne saufpremier :ligne
donne "nombre mot :nombre :caractere
]
retourne :nombre
fin
test 10
approximation de pi: 2.7386127875258306
test 100
approximation de pi: 2.9704426289300225
test 1000
approximation de pi: 3.0959109381151797
test 10000
approximation de pi: 3.139081837741219
Lorsqu’on lance deux dés et qu’on fait le total des points de chacun des dés, on obtient un
entier compris entre 2 et 12. Ici, nous allons voir dans cette activité la répartition des différents
tirages et la représenter sous forme d’un petit graphique.
pour lancer
retourne 1+hasard 6
fin
11.2 Le programme
Nous allons utiliser le mode multi-tortues. Pour disposer ainsi de plusieurs tortues sur l’écran,
on utilise la primitive fixetortue suivi du numéro de la tortue que l’on veut sélectionner.
Un bon schéma valant mieux que mille explications....
tortue n˚4
tortue n˚3
tortue n˚2
2 3 4 5 6 ......................... 12
30 pas de tortues
30
Sur le principe, chaque tortue numérotée de 2 à 12 avancera d’un pas de tortue, lorsque le ti-
rage de la somme des deux dés sera identique à son numéro. Par exemple, si les dés ont pour
somme 8, la tortue numéro 8 avancera d’un pas. Toutes les tortues sont espacées de 30 pas de
tortues horizontalement.
Plutôt que de taper 11 fois quasiment la même ligne de commande, on peut automatiser cela en
utilisant la primitive repetepour. A l’aide de cette primitive, on peut affecter à une variable une
succession de valeurs prises dans un intervalle à espaces réguliers. Ici, on veut que la variable :i
prenne successivement les valeurs 2, 3, 4, ... , 12. On tapera :
repetepour [i 2 12] [ liste des instructions à exécuter ]
pour initialise
ve ct
repetepour [i 2 12] [
# On place la tortue
fixetortue :i fpos liste -150+(:i-2)*30 0
# On écrit le numéro de la tortue juste en dessous
lc re 15 etiquette :i av 15 bc
]
fin
pour demarrer
initialise
# On effectue 1000 tentatives
repete 1000 [
donne "somme lancer+lancer
fixetortue :somme av 1
]
# On affiche les fréquences de tirage
repetepour [i 2 12] [
fixetortue :i
# L’ordonnée de la tortue représente le nombre de tirages
soit "effectif dernier pos
lc av 10 tg 90 av 10 td 90 bc etiquette :effectif/1000*100
]
fin
Voici une généralisation de ce programme. Ici, on demandera à l’utilisateur le nombre de dés
souhaités ainsi que le nombre de lancers à effectuer.
pour lancer
soit "somme 0
repete :des [
soit "somme :somme+1 +hasard 6
]
retourne :somme
fin
pour initialise
ve ct fixemaxtortues :max+1
repetepour ph liste "i :min :max [
# On place la tortue
fixetortue :i fpos liste (:min-:max)/2*30+(:i-:min)*30 0
# On écrit le numéro de la tortue juste en dessous
lc re 15 etiquette :i av 15 bc
]
fin
pour demarrer
lis [Nombre de dés:] "des
si non nombre? :des [ec [Le nombre rentré n’est pas valide!] stop]
donne "min :des
donne "max 6*:des
lis [Nombre de lancers à effectuer] "tirages
si non nombre? :tirages [ec [Le nombre rentré n’est pas valide!] stop]
initialise
# On effectue 1000 tentatives
repete :tirages [
fixetortue lancer av 1
]
# On affiche les fréquences de tirage
repetepour ph liste "i :min :max [
fixetortue :i
# L’ordonnée de la tortue représente le nombre de tirages
soit "effectif dernier pos
# On arrondit à 0,1
lc av 10 tg 90 av 10 td 90 bc etiquette (arrondi :effectif/:tirages*1000)/10
]
fin
Chapitre 12
12.1 Chapitre 2
pour carre
repete 4[av 150 td 90]
fin
pour tri
repete 3[av 150 td 120]
fin
pour porte
repete 2[av 70 td 90 av 50 td 90]
fin
pour che
av 55 td 90 av 20 td 90 av 20
fin
pour dep1
td 90 av 50 tg 90
fin
pour dep2
tg 90 av 50 td 90 av 150 td 30
fin
pour dep3
lc td 60 av 20 tg 90 av 35 bc
fin
pour ma
carre dep1 porte dep2 tri dep3 che
fin
34
12.2 Chapitre 3
pour supercube
ve lc fpos[ -30 150] bc fpos[-150 150] fpos[-90 210] fpos[30 210] fpos[-30 150]
fpos[-30 -210] fpos[30 -150] fpos[30 -90] fpos[-30 -90] fpos[90 -90] fpos[90 30]
fpos[-270 30] fpos[-270 -90] fpos[-210 -90] fpos[-210 -30] fpos[-90 -30] fpos[-90 -150]
fpos[-210 -150] fpos[-210 -30] fpos[-150 30] fpos[-30 30] fpos[-90 -30] fpos[90 150]
fpos[30 150] fpos[30 210] fpos[30 90] fpos[90 90] fpos[90 150] fpos[90 90] fpos[150 90]
fpos[150 -30] fpos[90 -90] fpos[90 30] fpos[150 90] lc fpos[-150 30] bc fpos[-150 150]
fpos[-150 90] fpos[-210 90] fpos[-270 30] lc fpos[-90 -150] bc fpos[-30 -90]
lc fpos[-150 -150] bc fpos[-150 -210] fpos[-30 -210]
fin
12.3 Chapitre 4
12.3.1 Le robot
Le premier dessin est composé exclusivement de motif élémentaire à base de rectangle, carré
et triangle. Voici le code associé à ce dessin :
pour rec :lo :la
# trace un rectangle de longueur :lo et largeur :la
repete 2[av :lo td 90 av :la td 90]
fin
pour carre :c
# trace un carre de cote :c
repete 4[av :c td 90]
fin
pour tri :c
# trace un triangle equlateral de c^
oté :c
repete 3[av :c td 120]
fin
pour patte :c
rec 2*:c 3*:c carre 2*:c
fin
pour antenne :c
av 3*:c tg 90 av :c td 90 carre 2*:c
lc re 3 *:c td 90 av :c tg 90 bc
fin
pour robot :c
ve ct
# Le corps
rec 4*:c 28* :c
# Les pattes
td 90 av 2*:c patte :c av 4* :c patte :c av 14*:c patte :c av 4*:c patte :c
# La queue
lc tg 90 av 4* :c bc td 45 av 11*:c re 11 * :c tg 135
# le cou et la t^
ete
av 18 *:c carre :c av 3*:c carre :c td 90 av :c tg 90 av 2*:c td 90 carre 8* :c
# Oreilles
av 4*:c tg 60 tri 3*:c lc td 150 av 8 *:c tg 90 bc tri 3*:c
# Les antennes
av 4 *:c tg 90 av 2*:c td 90 antenne :c tg 90 av 4*:c td 90 antenne :c
# les yeux
lc re 3 *:c bc carre :c td 90 lc av 3*:c bc tg 90 carre :c
# La bouche
lc re 3*:c tg 90 av 3*:c td 90 bc rec :c 4*:c
fin
12.3.2 La grenouille
pour gre :c
ve ct
av 2 *:c td 90 av 5*:c tg 90 av 4*:c tg 90 av 7 *:c td 90 av 7*:c td 90
av 21 *:c td 90 av 2*:c tg 90 av 2*:c td 90 av 9*:c td 90 av 2*:c tg 90
av 2*:c td 90 av 9*:c td 90 av 2*:c td 90 av 7*:c re 5*:c tg 90 av 4*:c
td 90 av 4*:c re 4*:c tg 90 re 2*:c tg 90 av 5*:c tg 90 av 4*:c td 90 av 7*:c
td 90 lc av 9*:c bc repete 4[av 2*:c td 90]
fin
12.4 Chapitre 8 :
pour jeu
# On initialise le ,nombre recherché et le nombre de coups
donne "nombre hasard 32
donne "compteur 0
boucle
fin
pour boucle
lis [proposez un nombre] "essai
si nombre? :essai[
# Si la valeur rentrée est bien un nombre
si :nombre=:essai[ec ph ph [vous avez gagné en ] :compteur+1 [coup(s)]][
si :essai>:nombre [ec [Plus petit]][ec [Plus grand]]
donne "compteur :compteur+1
boucle
]
]
[ecris [Vous devez rentrer un nombre valide!] boucle]
fin