Outils pour utilisateurs

Outils du site


chouffe:factorisation_tortue

Factorisation de code avec la tortue

La tortue dont on parlera ici se déplace dans la fenêtre graphique en laissant une trace derrière elle. En lui donnant des instructions, il est possible de dessiner des merveilles.

Pour plus d’informations, voir cette page.

Étymologie

En mathématiques, on dit qu’on factorise Z dans Z×Y + 2×Z quand on écrit :

Z×Y + 2×Z = Z×(Y+2)

Premier carré

Premier carré 1

Explication des commandes :

  • (RAZ) remet à zéro l’espace de travail et replace la tortue au centre de la fenêtre graphique, tournée vers le haut ;
  • (AV 10) signifie avance de 10 pixels ;
  • (TD 45) signifie tourne sur toi-même à droite avec un angle de 45 degrés.

Faites en sorte que le programme suivant dessine un carré de 100 pixels de côté.

Maintenant que le programme dessine un carré de 100 pixels de côté, comment modifier le programme précédent pour dessiner un carré de 50 pixels de côté ?

Premier carré 2

Pour nous simplifier la vie, nous allons utiliser une variable. Elle va nous permettre d’éviter les répétitions.

Faites en sorte que le programme suivant dessine un carré de 100 pixels de côté.

L’idée est de ne faire apparaître le nombre 100 qu’une seule fois.

Maintenant que le programme dessine un carré de 100 pixels de côté, comment modifier le programme précédent pour dessiner un carré de 50 pixels de côté ?

Maintenant que la longueur du côté du carré est factorisée, la changer peut se faire en changeant une seule valeur. On a pu le faire grâce à la mise en place d’une variable.

Premier carré 3

Pour nous simplifier encore plus la vie, nous allons utiliser la commande Repeter. Elle va nous permettre d’éviter les répétitions.

Faites en sorte que le programme suivant dessine un carré de 100 pixels de côté.

Comment modifier le programme précédent pour dessiner un carré de 50 pixels de côté ?

Maintenant que la longueur du côté du carré est factorisée, la changer peut se faire en changeant une seule valeur. On a pu le faire grâce à la mise en place d’une boucle.

Plusieurs carré

Plusieurs carré 1

Dessinez trois carrés.

Vous pourriez avoir besoin des commandes (LC) et (BC), qui permettent de lever et de baisser le crayon. Si la tortue a levé son crayon, elle ne laisse plus de trace derrière elle. Pour qu'elle dessine à nouveau, il faut utiliser (BC).

Plusieurs carré 2

Grâce à Definir, on peut stocker le code du carré dans une commande. La vraie syntaxe, dans le cas où la commande ne prend pas de paramètre, est :

(!!! "Pour définir :")
(Definir (Un_carre)
    "Un texte pour la documentation."
    "Le nom de l’auteur."
    (!!! "Le code...")
    (Retourner la_valeur_de_retour)
)
(!!! "Pour utiliser :")
(Un_carre)

Ici, on peut omettre la doc, l’auteur et le Retourner.

Comment dessiner des carrés de différentes tailles sur le même dessin ?

Empilements

Empilements 1

Dessiner :

  • un empilement de 3 carrés de taille 50,
  • un empilement de 5 carrés de taille 20.

Exemple de pile de carrés :

+-----+
|     |
|     |
+-----+
|     |
|     |
+-----+
|     |
|     |
+-----+

Empilements 2

Créer une commande Pile qui empile les carrés, et utilisez-la pour coder les deux empilements précédents. Vous aurez sans doute besoin de modifier Carre.

Nous aurons besoin de paramétrer la commande. La syntaxe est assez semblable :

(!!! "Pour définir :")
(Definir (Un_carre longueur)
    "Une texte pour la documentation."
    "Le nom de l’auteur."
    (!!! "Le code...")
    (Retourner la_valeur_de_retour)
)
(!!! "Pour utiliser :")
(Un_carre 100)

Empilements 3

Avant de lancer le programme suivant, exécutez-le vous-même sur une feuille de papier à la place de la tortue !
Vérifiez ensuite si vous avez travaillé correctement.

Conclusion

Factoriser son code revient à le simplifier, le réduire, rassembler et centraliser des valeurs ou opérations qui se répètent

Nous avons vu trois façons de factoriser du code :

  • avec une variable (utilisation de Declarer, Affecter_a) ;
  • avec une boucle (ici avec Repeter, mais ça aurait pu être aussi avec Tant_que...Faire ou Faire...Tant_que) ;
  • avec la définition d’une commande (parfois appelées procédures ou fonctions, donc grâce à la commande Definir.

Pour bien comprendre ce qu’il se passe lors de l’évaluation du code défini dans une commande, il faut comprendre les « environnements d’évaluation ».

Traces d’une session :

(Declarer n De_type "nombre")
(Afficher n)

(Declarer n De_type "nombre")
(Affecter_a n 0)
(Afficher n)

(Declarer n De_type "nombre")
(Affecter_a n 0)
(Afficher n)
(Affecter_a n 1)
(Afficher n)

(Declarer n De_type "nombre")
(Affecter_a n 0)
(Afficher n)
(Affecter_a n 1)
(Afficher n)
(Definir (Affiche-STP!)
   (Afficher n)
)
(Affiche-STP!)
(Affecter_a n 2)
(Affiche-STP!)

(Declarer n De_type "nombre")
(Affecter_a n 0)
(Afficher n)
(Affecter_a n 1)
(Afficher n)
(Definir (Affiche-le-double-STP!)
   (!!! "Attention, utilisation de variable globale")
   (Afficher (* 2 n))
)
(Affiche-le-double-STP!)
(Affecter_a n 2)
(Affiche-le-double-STP!)


(Definir (Affiche-le-double-STP! n)
   (!!! "Attention, utilisation de variable globale")
   (Afficher (* 2 n))
)
(Affiche-le-double-STP! 10)
(Affiche-le-double-STP! 100)

Diagrammes :

+-----+--------+
| nom | valeur | <-- environnement global
+-----+--------+
|  a  |    1   |
|  b  |   17   |
| ... |  ...   |
|     |        |
+-----+--------+

Cet environnement est remplacé par un autre quand on est « dans » une commande.

+-----+--------+
| nom | valeur | <-- environnement d’exécution d’une commande
+-----+--------+
|  a  |    1   |
|  b  |   10   | <-- si b est passé en paramètre c’est cette valeur qui est utilisée, la valeur globale n’est pas vue
|  x  |   -5   |
|  y  |   42   |
| ... |  ...   |
|     |        |
+-----+--------+

Vocabulaire :

  • paramètre formel (ou simplement paramètre, ou variable)
  • paramètre effectif (ou argument)

Sans paramètres:

(Definir (Carré)
    (AV 40)
    (TD 90)
    ...
)
(Carré)
(Carré)

Avec paramètres :

(Definir (Carré longueur) <-- paramètre formel
    (AV longueur)
    (TD 90)
    ...
)
(Carré 100) <-- paramètres effectifs
(Carré 50)
chouffe/factorisation_tortue.txt · Dernière modification: 2018/10/19 14:55 par 195.221.62.1