Les nouvelles technologies pour l’enseignement des mathématiques
Intégration des TICE dans l’enseignement des mathématiques

MathémaTICE, première revue en ligne destinée à promouvoir les TICE à travers l’enseignement des mathématiques.

Comment un exercice de collège anime notre comité de rédaction
Explorer le monde avec des tortues : un travail mathématique.
Article mis en ligne le 21 juin 2018
dernière modification le 4 juillet 2018

par Patrick Raffinat, Yves Martin

Comment continuer à faire des maths en enseignant le codage dans le Secondaire en cours de maths ? Cette question a occupé MathémaTICE dès sa création en 2006. Mais elle a fortement évolué en douze ans.

Lors de la naissance de la revue, il s’agissait de réfléchir à l’intégration des TIC dans l’enseignement des mathématiques. Aujourd’hui, beaucoup d’enseignants de mathématiques ont l’impression que le codage vide insidieusement les maths de contenus essentiels...

Voici une narration de recherche, à partir d’un exercice a priori plutôt banal, proposé à une classe de Collège. Le Comité de rédaction de MathémaTICE s’en est emparé et s’est passionné pour des extensions dans lesquelles les technologies jouent un rôle essentiel. L’article est destiné à partager le plaisir qui a présidé à ces échanges et à montrer que, même en utilisant Scratch ou DGPad, un professeur de mathématiques reste toujours ... un matheux, et qu’en codant, il arrive que l’on fasse émerger d’intéressantes questions mathématiques.

A) Introduction

Tout est parti d’une remarque anodine sur la liste de diffusion du comité de rédaction de MathémaTICE : « on voit bien que tu ne dois pas connaître beaucoup d’enseignants de collège ! ». La personne ainsi interpellée a alors rétorqué que cela ne l’empêchait pas de connaître le programme de collège, notamment grâce à un neveu en cinquième à qui son professeur avait récemment posé l’exercice suivant (à chercher à la maison) :

Une tortue avance de 50 et tourne de 10 degrés, puis avance de 50 et tourne de 20 degrés, puis avance de 50 et tourne de de 30 degrés… A l’aide de Scratch, déterminer quand la tortue recoupe sa trajectoire.

L’activité exploratoire pour élèves de cinquième s’est progressivement transformée en activité exploratoire pour membres du comité de rédaction de MathémaTICE lorsque notre spécialiste DGPad s’est pris de passion pour cet exercice. Il a alors observé qu’à partir du 19 ième déplacement la tortue revenait sur ses pas, ce qui nous en a conduit à en chercher la preuve.

D’autres questionnements ont alors surgi, si bien qu’à l’arrivée notre rédacteur en chef nous a suggéré d’écrire un article.

B) Résolution du problème initial

La résolution du problème initial, à savoir au bout de combien de déplacements la tortue recoupe sa trajectoire, ne pose pas de gros problèmes avec Scratch :

Il suffit en effet d’essayer différentes valeurs pour le nombre de répétitions pour s’apercevoir que la tortue recoupe sa trajectoire au bout de 12 répétitions. Mais comment le prouver, question qui devrait piquer la curiosité des lecteurs de MathémaTICE ? Et, autre question, peut-on proposer des démonstrations accessibles au collège ou au lycée ?

Pour tenter d’y répondre, nous allons procéder en deux temps :

  • en montrant que $[P_8P_9]$ coupe $[P_{11}P_{12}]$ parce que $[P_8P_9]$ est horizontal, que $P_{11}$ est au dessus et que $P_{12}$ est en dessous.
  • en écrivant un programme Python vérifiant que les autres segments ne se coupent pas, ce qui conduit à s’intéresser à des inéquations définissant des demi-plans.

Avant d’examiner ces points, il est à signaler que le neveu à l’origine de cet article n’était pas en mesure de proposer ce programme Scratch : en effet, il ne connaissait pas le bloc « ajouter ». En faisant des copier-coller de blocs, il a donc écrit ceci : avancer 50, gauche 10, avancer 50, gauche 20… Et il a fait une copie d’écran de l’exécution pour prouver que la tortue recoupe sa trajectoire au bout de 12 mouvements.


$[P_{11}P_{12}]$ coupe $[P_8P_9]$

L’écriture de ce programme Scratch est certes une activité intéressante, mais elle le devient bien plus si on la prolonge avec des questionnements plus mathématiques. Or, heureux hasard, il se trouve que $[P_8P_9]$ est horizontal, ce que des collégiens peuvent démontrer en calculant 10 + 20 + 30 + 40 + 50 + 60 + 70 + 80 : comme le résultat de ce calcul vaut 360, cela signifie que la tortue a effectué un tour complet et qu’elle est à nouveau orientée vers la droite.

Autre heureux hasard, la tortue tourne ensuite de 90 degrés, si bien que $[P_9P_{10}]$ est vertical et orienté vers le haut : la tortue monte donc de 50. Ensuite, comme $[P_{10}P_{11}]$ n’est pas vertical, l’ordonnée de la tortue diminue de moins de 50 : donc, $P_{11}$ est au dessus de la droite $(P_8P_9)$. Et si le problème est posé après que les collégiens aient abordé la trigonométrie, on peut même leur montrer (ou leur faire découvrir) que l’ordonnée de la tortue diminue de $50 \times sin(10)$.

Il est plus délicat de montrer que $P_{12}$ est en dessous de la droite $(P_8P_9)$ :

  • si les élèves ont des connaissances en trigonométrie, on peut leur montrer que le déplacement de $P_{11}$ à $P_{12}$ diminue l’ordonnée de $50 \times sin(60)$ : il reste donc à vérifier avec une calculatrice que $sin(10) + sin(60)$ est strictement supérieur à 1.
  • si les élèves n’ont aucune connaissance en trigonométrie, une alternative est de compléter le programme Scratch pour afficher l’ordonnée de $P_9$ et l’ordonnée de $P_{12}$ ; certes, cela ne constitue pas une véritable preuve mathématique, mais la démarche est plus formatrice qu’un simple « on voit [1] à l’écran que... ».

La tortue ne recoupe pas sa trajectoire lors des 11 premiers déplacements

A priori, il semble irréaliste de chercher à le démontrer au collège. Et, même au lycée, il n’est pas certain que la preuve qui va être donnée soit exploitable pédagogiquement, du moins sans un travail d’accompagnement conséquent des enseignants.

L’ordonnée des points croissant jusqu’en $P_6$, on peut en déduire que la tortue ne recoupe pas sa trajectoire lors de ses 6 premiers déplacements. Un petit raisonnement supplémentaire permet de l’affirmer aussi pour le septième déplacement :

  • $[P_6P_7]$ ne peut couper $[P_4P_5]$ car l’abscisse des points décroît strictement de $P_4$ à $P_7$.
  • $[P_6P_7]$ ne peut couper le chemin $P_0P_1P_2P_3P_4$ car tous les points de ce chemin ont une ordonnée strictement inférieure à celle de $P_6$ (qui est aussi celle de $P_5$).

Il semble problématique de chercher à prouver avec une « argumentation élégante » que la tortue ne peut pas non plus couper sa trajectoire lors de ses 4 déplacements suivants. C’est pourquoi nous allons recourir à un programme Python balayant toutes les possibilités de croisements de segments, c’est à dire toutes les paires $[P_iP_{i+1}, P_kP_{k+1}]$ avec $k \ge i+2$.

Si les segments se coupent, alors $[P_i$ et $P_{i+1}]$ (respectivement $[P_kP_{k+1}]$) sont de part et d’autre de la droite $(P_kP_{k+1})$ (respectivement $(P_iP_{i+1})$). Donc, si $P_i$ et $P_{i+1}$ sont dans le même demi-plan ou si $P_k$ et$P_{k+1}$ sont dans le même demi-plan, les segments $[P_iP_{i+1}]$ et $[P_kP_{k+1}]$ se ne coupent pas.

C’est ce qui sera vérifié dans le programme, en déterminant (sous la forme $a x + b y + c = 0$) l’équation cartésienne de chaque droite, le signe de $a x + b y + c$ permettant ensuite de déterminer dans quel demi-plan se trouve un point de coordonnées $(x,y)$.


Programmation Python

Cela conduit donc à introduire une fonction Python paramétrée par 6 points :

  • x1 et y1 sont les coordonnées du premier point de la droite
  • x2 et y2 sont les coordonnées du second point de la droite
  • x et y sont les coordonnées d’un point qu’on veut situer par rapport à la droite
  1. def f(x1, y1, x2, y2, x, y ) :
  2.         a = y2 - y1
  3.         b = x1 - x2
  4.         return a*(x-x1) + b*(y-y1)

Télécharger

Voici comment utiliser cette fonction après avoir construit la liste des abscisses (notée x) et la liste des ordonnées (notée y) :

  1. import math
  2. n = 11 # ou n=12
  3. # construction de la liste des abscisses (x) et de celle des ordonnées (y)
  4. x = [0]*(n+1)
  5. y = [0]*(n+1)
  6. angle = 0
  7. for k in range(1,n+1) :
  8.         x[k] = x[k-1] + 50 * math.cos(angle/180.0*math.pi)
  9.         y[k] = y[k-1] + 50 * math.sin(angle/180.0*math.pi)
  10.         angle = angle + 10*k
  11. # on cherche les segments susceptibles de se couper
  12. for k in range(0,n) :
  13.         for i in range(k+2,n) :
  14.                 # M(i) et M(i+1) sont dans le même demi-plan par rapport à la droite M(k)M(k+1) ?
  15.                 if f(x[k],y[k],x[k+1],y[k+1],x[i],y[i]) * f(x[k],y[k],x[k+1],y[k+1],x[i+1],y[i+1]) > 0 :
  16.                         possible = False
  17.                 # M(k) et M(k+1) sont dans le même demi-plan par rapport à la droite M(i)M(i+1) ?
  18.                 elif f(x[i],y[i],x[i+1],y[i+1],x[k],y[k]) * f(x[i],y[i],x[i+1],y[i+1],x[k+1],y[k+1]) > 0 :
  19.                         possible = False
  20.                 else :
  21.                         possible = True
  22.                         print (k,k+1,i,i+1)

Télécharger

Quand on exécute ce programme pour n=11, aucun couple de segments n’est affiché : donc, la tortue ne recoupe pas sa trajectoire.

Une alternative plus ludique pour construire les listes x et y est d’utiliser le module « turtle » de Python, et de récupérer les coordonnées des diverses positions de la tortue :

  1. from turtle import *
  2. n = 12
  3. x = [0]*(n+1)
  4. y = [0]*(n+1)
  5. reset()
  6. for k in range(1,n+1) :
  7.         forward(50)
  8.         x[k] = xcor() # abscisse de la tortue
  9.         y[k] = ycor() # ordonnee de la tortue
  10.         left(10*k)

Télécharger

C) Surprise, la tortue rebrousse chemin !

En mettant des curseurs dans Scratch, ou comme ici avec DGPad, on itère un peu plus loin le procédé, de manière dynamique, pour mieux l’observer. On veut ainsi vérifier comme déjà mentionné, que l’itération 9 correspond à un trait horizontal vers la droite, la suivante un trait vertical montant. Augmenter l’itération jusqu’à 18, puis 19, et au delà, en particulier à 36 et 37 ...

On s’aperçoit donc que la tortue rebrousse chemin : le 18ème trait est vertical montant, le suivant vertical descendant sur le précédent, et les suivants repassent sur la trace de la tortue. Dans la figure ci-dessus, on a changé la couleur du stylo de la tortue à partir de 19, puis de 36 pour que cela soit plus clair.

Version dynamique en Scratch

On peut faire la même chose en Scratch 2, avec un curseur dynamique comme ici : lancer la figure, modifier le curseur n, la figure se rafraîchit sans être reconstruite.

Quelques remarques :
1. Les lecteurs qui découvriraient l’aspect dynamique des curseurs de Scratch avec cette figure peuvent se reporter, par exemple, à cet article qui précise la démarche sur d’autres exemples.
2. On peut être surpris que toute la couleur de toute la trace de la tortue change quand on franchit les 19 itérations alors qu’on a programmé un changement pour les seules itérations suivantes.
3. On pourrait penser que ce problème de rafraîchissement vient de cette question de rafraîchissement automatique du curseur dynamique, mais en fait ce n’est pas le cas comme on peut le voir sur cet autre script Scratch où le curseur est statique : il faut modifier la valeur de n et relancer le script avec le drapeau vert : on voit alors que le problème persiste.

Version en Scratch 3.0 pour tablette (ou pour tester)

Au moment où cet article est écrit (juin 2018), la version Scratch 3.0 est encore en béta, tout ne fonctionne pas comme en Scratch 2, mais on peut procéder à quelques essais. Cette partie sera réécrite avec la version finale de Scratch.

Utilisation en ligne d’une figure dynamique en Scratch 3.0

1.Ouvrir ce script dans une nouvelle page. Elle utilise une « branche spécifique » de Scratch, modifiée par Eric Hakenholz avec la figure sous google drive (donc un peu longue à arriver).

2. Lancer le script avec le drapeau vert. La variable n apparaît mais elle n’est pas un curseur (c’est un des problèmes de la béta). Mais avec un clic droit (ou tap prolongé) vous pouvez transformer la variable en potentiomètre (slider car non encore traduit).

3. Relancer le drapeau vert pour pouvoir agir sur n.

Comment cela fonctionne ?

Vous aurez remarqué la branche spéciale de ce Scratch 3.0 : https://scratch.dgpad.net/index.php

dans le domaine de DGPad car utilisé pour d’autres utilisations (DocTools)

Cela permet des utilisations hors du domaine de Scratch comme ceci : (attention le serveur de figures doit être un https)

https://scratch.dgpad.net/index.php?url=https://www.files.dgpad.net/scolarite/_scratch/figure_brevet.sb3

Sous google drive, vous récupérez le lien partagé et vous le placez comme ceci (exemple de la figure précédente) :

https://scratch.dgpad.net/index.php ?url=https ://drive.google.com/open?id=1f1UeQzI_-QJj1vfb7u3mKCYL4utXlIVB

Dans les deux cas (fichier .sb3 ou lien google drive), on peut ajouter un paramètre fullscreen pour être en visualisation seule (mais on perd - dans la version beta - l’affichage des variables), comme ceci :

https://scratch.dgpad.net/index.php?url=https://www.files.dgpad.net/scolarite/_scratch/figure_brevet.sb3&fullscreen=1

Tout ceci devrait évoluer avec la version finale de Scratch 3.0 même si le principe initial fonctionne déjà bien, sauf quelques détails sur l’affichage des variables. Voir aussi ce que fait la version 1.9 de DocShare.

fin du bloc Scratch 3.0


Pourquoi la tortue revient-elle sur ses pas ?

Nous donnerons deux preuves, au sens de Nicolas Balachef qui par « preuve » entend un argument qui convainc une communauté précise (une classe, un colloque, etc.). Dans son vocabulaire, une démonstration est une preuve pour la communauté des mathématiciens. Ainsi une preuve de collège peut souvent ne pas être une démonstration (utilisation didactique de la plausibilité par exemple au lieu de l’implication [2]), et - chaque enseignant l’a expérimenté de nombreuses fois - une démonstration peut ne pas être une preuve pour des collégiens.

En pratique ces deux preuves sont très proches. La première, de collège, s’organise autour de la perception du mouvement de la tortue par les élèves, il y a un effort d’interprétation géométrique des mouvements de la tortue.

La seconde preuve est, en fait, simplement une transposition formelle et algébrique de cette démarche. Elle a l’avantage, pour les mathématiciens, d’être - comme de manière auto-référente - portée par son propre formalisme, ce qui évite, en cours de preuve, de se référer à nouveau à la problématique originelle du monde sensible. Cette l’efficacité du formalisme mathématique surprend toujours, en particulier les philosophes.

P1. Une preuve, version pour le collège

Pour des élèves de collège, on peut envisager cette « preuve informelle » en adoptant la présentation suivante des diverses instructions :

Av G(10) Av G(20) Av G(30) … G(150) Av G(160) Av G(170) Av
G(180)
Av G(190) Av G(200) Av G(210) … G(330) Av G(340) Av G(350) Av
G(360)

Sachant que tourner à gauche de 180+10*k revient à tourner à droite de 180-10*k, on peut réécrire le programme ainsi :

Av G(10) Av G(20) Av G(30) … G(150) Av G(160) Av G(170) Av
G(180)
Av D(170) Av D(160) Av D(150) … D(30) Av D(20) Av D(10) Av
G(360)

Comme la seconde ligne correspond à un demi tour et comme la troisième ligne correspond à la première, lue à l’envers (en remplaçant gauche par droite), on peut en déduire informellement que la tortue revient sur ses pas.

P2. Une démonstration

Chaque itération de la tortue est un vecteur du plan, la position actuelle de la tortue étant alors la somme de ces vecteurs. En se plaçant dans le plan complexe, chaque itération est un nombre complexe et la position de la tortue une somme finie de nombres complexes (le début d’une série si on veut).

En notant $u_n$ l’affixe de position de la tortue à la $n^{ième}$ itération et $v_k$ le vecteur de l’avancée de la tortue à la $k^{ième}$ itération.

Alors on peut écrire (figure manipulable)

P2a. Analyse

P2b. Preuve

Voici une copie d’écran de la figure suivante qui répond à la question

Cette figure étant un peu grande pour être manipulée directement dans l’article, la voici à l’extérieur (à ouvrir dans un nouvel onglet)

Retour sur la preuve collège de la coupure de la trajectoire à l’itération 12

Même si deux démonstrations ont déjà été données dans la partie précédente (trigonométrie et Python), cette analyse invite à organiser, par exemple en tâche complexe, plus ou moins guidée - car la démarche est une vraie démarche d’exploration - une preuve, sur le même thème de la trigonométrie, mais organisée autour de l’utilisation de la simple définition du cosinus dans un triangle rectangle.

L’auteur de cette partie intervient dans la formation initiale des enseignants (M1 MEEF -préparation au CAPES- et M2 MEEF). Ce type d’exercice, a priori à l’origine purement opérationnel sur une pratique de Scratch, permet de montrer aux futurs enseignants, et déjà pour un oral de concours, qu’avec un peu d’imagination, il est possible, sans grand moyen mathématique, d’établir un lien, et même plus, pour un enseignant de mathématique, un équilibre entre des préoccupations de programmation et de mathématiques : ici on utilise simplement des propriétés de collège pour valider un résultat exploré avec Scratch.

Par ailleurs, en formation, il est intéressant de faire le lien - un changement de cadre - entre la trace de la tortue et une somme de vecteurs et donc de nombres complexes. Ce lien a été utilisé ici simplement pour une preuve, là aussi proposée en dossier d’oral de CAPES aux étudiants de M1.

Hors formation des enseignants, c’est encore plus intéressant quand ce lien est utilisé de manière constructive et dynamique comme cela a déjà été fait dans cet article sur les spirolatères. Les personnes intéressées par ce sujet peuvent regarder le dernier onglet de la partie 4 de cet article.

La suite est une extension de ce qui précède. Elle n’a pas été utilisée en formation initiale des enseignants (on peut pas passer trop de temps sur les détails d’un thème précis) mais pourrait faire l’objet de projets pour des formations continues liant l’utilisation de la programmation et la lecture mathématique de ce qui est ainsi exploré. L’idée est toujours celle d’homologie didactique, au sens de placer, en formation, sur des thématiques à leur niveau, les enseignants dans cet esprit d’exploration dans lequel on les invite à placer leurs élèves.

D) Comment changer l’angle pour avoir la même propriété ?

Vu la preuve proposée pour le rebroussement de la tortue, on imagine bien que pour une itération d’un angle en degrés, diviseur entier de 180, on va observer le même phénomène.

Explorer cette figure (à ouvrir dans un nouvel onglet) qui permet d’illustrer les relations dégagées sur les diviseurs de 360. En voici une copie d’écran qui rend compte du résultat général et des explorations que l’on veut tester.

Le changement de couleur se fait tout simplement comme cela :

On notera que, pour voir la couleur changer, il faut afficher l’itération suivante puisque le changement de couleur est en fin de boucle. D’où, pour voir le premier trait vert, le n=21 dans la première illustration avec a=9 (car 20x9=180) et le n=11 avec a=18 dans l’illustration ci-dessus (car 10x18=180).

E) Et si l’angle est un entier non diviseur de 180 ?

Cette partie est la plus intéressante. On va distinguer le cas où l’angle a est impair, simplement pair, multiple de 4, ou multiple de 8. Le retour de la tortue sur elle-même est toujours simple à calculer. On s’intéressera alors, dans une seconde partie, plutôt aux motifs produits et à la façon dont ils sont produits.

Analyse générale

Illustrations de l’analyse précédente

Tout d’abord, deux exemples avec l’angle impair, non diviseur de 180, mais non premier avec 180. On voit le tortue revenir sur elle-même par changement de couleur de la trace

autre exemple

Dans la suite on ne montrera que l’illustration qui correspond au retournement de la tortue, on le repère car c’est le dernier trait de la trace, et il change de couleur. Les illustration sont dans les blocs suivants

Cas 1 - Angle premier avec 180

On notera que pour un angle premier avec 180 de la forme a=2k-1, il y a k motifs avant d’arriver au retournement de la tortue sur elle-même.

a = 7

a=11

a=13

Cas 3 - Les angles multiples de 8

C’est le cas où les motifs sont en translation, soit au bout de 45 itérations soit un diviseur de 45 itérations.

a=8

a=16

a=24 - ici 3 fois 15 itérations


La figure générale pour manipuler ces cas et quelques autres non illustrés

Elle est en ligne hors de l’article pour une meilleure manipulation

La figure générale

Le changement de couleur au demi-tour de la tortue se fait simplement de cette façon, pour tous les cas : on aurait d’ailleurs pu faire l’analyse générale de cette façon, cela aurait été plus rapide et plus simple. Mais on a laissé la démarche initiale pour respecter l’aspect « narration de recherche » qui s’est dégagé autour de cet exercice.

F) Un petit bonus pour finir

Sur les motifs très fournis (pour a=7,11 entre autres), il est assez naturel de se demander sur quelle itération la tortue retourne à l’intérieur même du motif.

La question revient à se demander quand la différence des arguments de deux itérations successives est supérieure à 180°. On cherche donc $k$ tel que

$\left( (k+1)k-k(k-1) \right) \displaystyle \frac{\pi a}{360} > \pi$ et donc $k > \displaystyle \frac{180}{a}$

La première valeurs est donc $E \left( \displaystyle \frac{180}{a} \right) +1$, du moins si a ne divise pas 180 (sinon on peut choisir de prendre le diviseur (choix précisé dans les illustrations ci-dessous). Les itérations suivantes sont alors $E \left( \displaystyle \frac{180=360k}{a} \right) +1$.
Pour illustrer ce point on choisit de changer la couleur en mettant le crayon en rouge et plus gras. Voici ce que cela donne :

Cas d’un angle premier avec 180

a=7

a=19

Cas d’un angle non premier avec 180

a=9

a=12

Cette nouvelle figure à manipuler en ligne.

Le code de ce dernier ajout

Techniquement, les deux cas diviseurs ou non diviseurs sont traités par le même bloc arrondir par excès ce qui simplifie l’écriture. Par contre il faut calculer la couleur actuelle (car le retrait d’un nombre à une couleur contient un bug - quand la couleur devient elle-même d’indice négative, elle n’est pas prise « modulo » -au moment où cet article est écrit).

Conclusion

On voit qu’un exercice donné simplement pour l’apprentissage d’une démarche opérationnelle de Scratch en Collège peut contenir de nombreux prolongements totalement imprévus. C’est une des richesses de l’utilisation de la programmation en cours de maths. On refait ainsi, trente ans plus tard, une expérience voisine de celle qui a marqué l’arrivée de la géométrie dynamique en classe (Cabri 1.0 a été disponible en 1988) : l’appropriation de nouveaux outils pour faire des mathématiques autrement .

La situation rencontrée avec cet exercice est très courante, tout comme l’a été l’usage pertinent de la manipulation directe en géométrie dynamique. C’est l’occasion de manifester notre créativité, tout en maintenant notre vigilance mathématique sur les choix implicites ou explicites qui président à notre enseignement de la programmation.

On pourrait reprendre cette analyse sur les jolygones [3], une occasion d’activité mathématique ludique (aspect dynamique et booléen, exemples en Scratch et en version débranchée du Petit Archimède (qui a initié les plus anciens d’entre nous à l’algorithmique, alors débranchée) ou les différentes spirales des fiches en Tortue Logo du Collège Iqbal Masih.

D’un point de vue pratique, même si elles ont été faites avec DGPad, toutes ces figures pourraient être réalisées quasiment à l’identique en Scratch, y compris avec plusieurs curseurs dynamiques comme on l’a montré au début. Il faudrait alors adapter les parties utilisant les fonctions, mais elles ne sont pas indispensables : elles favorisent une clarté d’écriture ... et empêchent les copies d’écran de trop déborder du cadre.