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.

Dr. Geo II, un docteur qui peut s’opérer tout seul.

Descendant de DR. Geo, le logiciel Dr. Geo II est destiné aux enfants des pays en voie de développement, et vise à maximiser leur autonomie. La cohérence de sa conception le rend aussi très intéressant pour le lycée, et pas seulement en géométrie.

Article mis en ligne le 7 mars 2011
dernière modification le 25 avril 2021

par Alain Busser

Descendant de DR. Geo, le logiciel Dr. Geo II est destiné aux enfants des pays en voie de développement, et vise à maximiser leur autonomie. La cohérence de sa conception le rend aussi très intéressant pour le lycée, et pas seulement en géométrie.

DrGeoII est écrit en Pharo, une variante de Smalltalk (qui fut le premier langage de programmation objet) et tourne avec la machine virtuelle Squeak (à l’instar de Scratch (langage)). Concrètement c’est donc un logiciel multiplateforme. Et bien sûr il est libre, comme on pouvait s’y attendre de la part de son auteur. Et même mieux que ça.

La dernière verson de Dr. Geo II vient de sortir (mars 2011) ; au programme des nouveautés, un accès plus aisé aux outils de programmation, la coloration syntaxique et la complétion automatique très efficaces, ainsi que la possibilité de construire un point défini par un bloc d’instructions Smalltalk.

Sur ce dernier point, un article futur en dira beaucoup plus, tant cette nouveauté offre de possibilités. On peut télécharger le logiciel tout-en-un ici.

Entre autres, un logiciel libre se laisse ausculter (liberté numéro 1 de Richard Stallman) ce qui permet de voir comment il fonctionne, à condition d’avoir un univers de développement qui permette de voir le code source. Dr. Geo II fait mieux, puisqu’il est muni d’une console Smalltalk, avec laquelle on peut non seulement voir les entrailles de Dr. Geo II, mais également modifier celui-ci. Même lorsque Dr. Geo II est en train de tourner ! C’est un peu comme le cyborg de Terminator II qui opère lui-même ses blessures sans s’anesthésier !

Le logiciel se télécharge ici, sous la forme d’un seul fichier tournant sous Mac, Windows ou Linux !

Plateforme

La plupart des logiciels sont compilés sous la forme d’un exécutable dépendant fortement de la machine, ce qui fait que la version Mac d’un logiciel ne peut pas tourner sous PC, et vice-versa d’ailleurs. Lorsque le développeur d’un logiciel se donne la peine d’en créer une version Mac ou Linux, il doit la reprogrammer complètement et il y a de fortes chances que le résultat soit légèrement différent de la version originale. Pour faire un logiciel multiplateforme, le mieux est de le concevoir pour une machine virtuelle, en général la machine virtuelle Java, en abrégé JRE (pour Java Runtime Environment).

Pour DR. Geo II la machine virtuelle est Squeak, donc écrite en Smalltalk, et fournie avec Dr. Geo II. Ce qui permet d’utiliser Dr. Geo II sous toutes les plateformes habituelles, contrairement à son ancêtre Dr. Geo qui était réservé aux linuxiens. Or Squeak est l’environnement choisi par le projet OLPC pour les ordinateurs XO-2, destinés en priorité aux enfants des pays peu urbanisés (communication par la wifi, batteries de longue durée, chargement de celles-ci à l’énergie solaire, prix peu élevé).

Le but de Dr. Geo II est donc la démocratisation de la géométrie. Ce qui n’est pas rien ! Et il y a aussi, comme on le verra dans l’onglet suivant, la démocratisation de l’algorithmique. Le tout sans prendre l’utilisateur pour un débile, puisqu’on lui permet depuis Dr. Geo II, de modifier le code source non seulement de Dr. Geo II, mais aussi de la plateforme Squeak. Imaginerait-on une version d’Excel qui permettrait de reprogrammer Excel et même Windows, et offerte à des enfants ?

Un soir de Noël, pour des raisons financières, mes parents avaient choisi de nous offrir à mon frère et à moi, un seul cadeau commun : Un « circuit 24 ». Sitôt que mon frère et moi eûmes déballé le merveilleux jouet, sous prétexte de nous expliquer comment il fonctionne, mon père et mon oncle se sont mis à jouer avec, et lorsqu’à la fin du réveillon, mon frère et moi sommes allés nous coucher, mon père et mon oncle jouaient toujours avec notre cadeau de Noël... Si je raconte ce souvenir d’enfance, c’est parce sans doute que la plupart des anciens petits garçons ont un souvenir analogue, où les adultes de leur entourage retombent en enfance simplement parce qu’ils ont un jouet devant eux (moi par exemple, il faut éviter de m’envoyer dans un magasin de jouets faire les achats de Noël...). Et bien, tester Dr. Geo II donne un peu la même impression, l’aspect un peu jouet étant essentiellement très beau, et le jouet, pardon le logiciel, donne l’impression hypnotique de manipuler un Mac même lorsque c’est loin d’être le cas.

Scoop de dernière minute sur CaRMetal

En fait, cette possibilité d’accéder aux arcanes du logiciel à l’aide d’un outil fourni par le logiciel existe aussi dans CaRMetal : Stéphane Reyrolle, de l’IREM de Limoges, a réussi à utiliser des objets Java internes à CaRMetal, à partir de JavaScript. On peut trouver son récit, rédigé de manière un peu technique, sur cette entrée du forum. Et cette technique lui a permis, ici, d’illustrer graphiquement (sans le moindre jacobien), la méthode de Newton-Raphson.

Mais, pour puissante qu’elle soit, cette méthode ne va qu’à mi-chemin par rapport à DrGeoII, puisque si elle permet d’utiliser les organes internes de CaRMetal dans un CaRScript, elle ne permet pas de les modifier (mais c’est peut-être moins risqué !)

Programmation

L’affectation dans Smalltalk est notée comme dans Pascal par un double-point-égal, et pas par un simple signe égal. Ceci dit, les élèves ne semblent pas massivement sombrer dans la confusion dans laquelle on craignait qu’ils se précipitassent tous à cause de cette égalité qui n’en est pas une...


La notation des fonctions, comme dans tous les langages objets, se fait en quelque sorte à l’envers (héritage semble-t-il de l’action de groupe (mathématiques)) : Au lieu d’écrire f(x) on écrit x f (et dans les autres langages objets, x.f). Par exemple, pour calculer 8 ! on écrit

  1. 8 factorial

Ce qui correspond exactement à la notation (le point d’exclamation après le nombre entier).

Maintenant si on considère une fonction de deux variables, le nom de la fonction sera infixé (entre les deux variables). Ainsi, on ne parle pas du pgcd de 12 et 14 mais plutôt de 12 pgcd-isé avec 14 [1] (12 gcd: 14 : 12 envoie un message « gcd » à 14...). Cette notation infixée est d’ailleurs celle des opérations (plutôt que de parler de la somme de 3 et 4, on préfère noter 3+4). On verra plus bas qu’un point étant défini par ses coordonnées, se note un peu pareil (infixé).

Oui mais si la fonction a plus de deux variables ? Par exemple pour trois variables x, y et z, on parle de x avec y et z, ce qui se note

x f y and: z


Pour redéfinir la valeur absolue, on peut écrire

  1. absolue: x
  2.         x>0
  3.         ifTrue: [^ x.]
  4.         ifFalse: [^ x negate.]

Télécharger

Pour la partie test, on affirme de façon quelque peu péremptoire que x est positif. Ensuite seulement on dit ce qui se passe si c’est vraiment le cas (on retourne x). Là encore Smalltalk est un peu un langage à l’envers, d’habitude on donne d’abord le test avec « si ... alors ... ». Mais du point de vue linguistique, cette manière de voir évite le recours au conditionnel ce qui risque de convenir à certains élèves en difficulté. Et c’est un peu ce qu’on fait avec les hypothèses dans les démonstrations mathématiques.


Pour les boucles aussi, les choses sont un peu à l’envers : On donne d’abord les bornes de la boucle, et ensuite seulement on commence à se demander comment on pourrait bien appeler l’indice : C’est exactement comme ça que font les élèves en TP ! La syntaxe est la suivante :

  1. 1 to: 10 do: [ :indice | somme:=somme+indice.]

Et pour les boucles à test de sortie, pareil : on donne la condition pour rester dans la boucle d’abord, comme une affirmation, et ensuite seulement on rédige le corps de la boucle :

  1. [n<10]
  2. whileTrue: [ n:=n+1.]

Télécharger

Existe-t-il une langue naturelle où on fait comme ça ? Peut-être un peu avec des expressions comme « jusqu’à nouvel ordre » ou « jusqu’à de plus amples informations »... Ou en législation, avec la présomption d’innocence...


Enfin, les coordonnées des points et des vecteurs se notent avec une arrobase séparant les coordonnées : Par exemple, en notant

  1. p:=canvas point: 3@2.

On dit non pas que les coordonnées du point p sont 3 et 2 mais plutôt que ces coordonnées sont « de 3 jusqu’à 2 » (en général, l’arobase résume le mot anglais « at »). Or c’est de cette manière qu’un élève place le point dans un repère : Il part de la graduation 3 sur l’axe des abscisses, puis va jusqu’à la hauteur 2 en suivant la parallèle à l’axe des ordonnées.


Des exemples d’algorithmes conçus sous DrGeoII sont visibles dans cet article. Un exemple un peu plus innovant est présenté dans l’onglet suivant :

Théorie des ensembles

Le langage Smalltalk possède, entre autres objets, des fractions et même des ensembles. Ce qui donne une occasion d’aborder algorithmiquement les définitions d’évènements et de probabilités (sans faire de simulation avec des nombres pseudo-aléatoires). Voici l’énoncé d’un exercice :

On lance un dé, et on considère les deux évènements suivants :

*A : « Le résultat du lancer est pair. »

*B : « Le résultat est (strictement) inférieur à 5. »

1)Expliciter l’évènement « A ou B » ;

2)Expliciter l’évènement « A et B » ;

3)Calculer les probabilités de A et de B.

Lors du lancer d’un dé, l’univers est $\Omega=\{1,2,3,4,5,6\}$. Pour l’expliquer à DrGeoII, on peut tout simplement entrer

  1. omega:=(1 to: 6) asSet.

(on considère les nombres de 1 à 6 comme un ensemble, c’est-à-dire que DrGeoII devra le traiter comme un ensemble). Pour décrire l’ensemble A, on peut le donner en extension :

  1. a:=#(2 4 6) asSet.

et B sera défini par

  1. b:=(1 to: 4) asSet.

1/Réunion

La réponse à la première question se trouve en une seule ligne de Smalltalk (avec un vocabulaire très proche de celui du cours de maths) :

  1. u:=a union: b.

Mais pour DrGeoII il faudra trouver un moyen d’afficher la réunion u, ce qu’on va faire en représentant sa fonction caractéristique, et en donnant à un point, un nom égal au contenu de u (voir ci-dessous).

2/Intersection

De même, le calcul de l’intersection se fait en une seule ligne :

  1. i:=a intersection: b.

Pour représenter graphiquement les points de l’intersection, on va, pour chaque élément x de celle-ci, créer un point p de coordonnées (x ;1) ce qui se note donc x@1 et le colorier en rouge. Le dernier de ces points se verra affublé du nom de l’intersection i, convertie en chaîne de caractères :

  1. i do: [:x |
  2.         p:=figure point: x@1.
  3.         p color: Color red.
  4.         ].
  5. p name: i asString.

Télécharger

3/Calculs de probabilités

En Smalltalk, le cardinal d’un ensemble s’obtient en faisant suivre son nom de size (plus précisément en envoyant un message size à l’ensemble), et donc sa probabilité est simplement le quotient de sa size par celle de l’univers. Et comme Smalltalk gère les fractions, l’écriture de la probabilité est exacte. Là encore, pour l’afficher, on va simplement donner à un point, un nom égal à la probabilité :

  1. p:=figure point: (-1)@(-1).
  2. p round small.
  3. p color: Color cyan.
  4. p name: (a size /(omega size)) asString.

Télécharger

(on remarque les parenthèses, nécessaires parce que Smalltalk ne connaît pas les règles de priorité opératoire)


En faisant tout ce qui précède dans un « Canevas DrGeo » qui ci-dessus, s’appelle figure, et en mettant la liste des variables dont on a besoin dans ce script :

  • figure pour le canevas ;
  • omega pour l’univers ;
  • a et b pour les deux évènements ;
  • u pour leur réunion ;
  • i pour leur intersection ;
  • p pour stocker la référence des points créés dans la figure.

Le script complet est ici :

  1. |figure omega a b i u p|
  2. omega:=(1 to: 6) asSet.
  3. a:=#(2 4 6) asSet.
  4. b:=(1 to: 4) asSet.
  5. u:=a union: b.
  6. i:=a intersection: b.
  7.  
  8. figure:=DrGeoCanvas new.
  9. u do: [:x |
  10.         p:=figure point: x@(-1).
  11.         p color: Color blue.
  12.         ].
  13. p name: u asString.
  14. i do: [:x |
  15.         p:=figure point: x@1.
  16.         p color: Color red.
  17.         ].
  18. p name: i asString.
  19.  
  20.  
  21. p:=figure point: (-1)@(-1).
  22. p round small.
  23. p color: Color cyan.
  24. p name: (a size /(omega size)) asString.
  25.  
  26. p:=figure point: (-1)@1.
  27. p round small.
  28. p color: Color green.
  29. p name: (b size/(omega size)) asString.

Télécharger

En l’exécutant, on crée la figure suivante :

Évidemment, les géogébristes diront que tout ça a un air de déjà vu :

Seulement, la figure DrGeoII a été construite entièrement par un programme, donc dans un cadre purement algorithmique (si tant est que la programmation objet soit algorithmiquement correcte). La version Ruby est ici. Ce langage est très proche de Smalltalk, on peut même parler de filiation...

Géométrie dynamique

La partie géométrie dynamique est assez classique et plutôt orientée collège (l’exception notable est l’homothétie). L’apparition de bulles d’aide (« cette droite » lorsque la souris s’approche d’une droite) satisfera les nostalgiques de CaBri.

Comme avec CaRMetal et GeoGebra, une transformation peut s’appliquer à des objets de nature différente, et pas seulement des points. L’idée qu’à partir d’une fonction d’un ensemble de points dans lui-même, on puisse parler de l’image d’une partie de l’ensemble de départ par la fonction, très importante en algèbre linéaire, mais aussi en probabilités, est très abstraite pour des collégiens, mais les préparer tôt à ce genre d’abstraction peut être intéressant, surtout quand on le fait dans le cadre moins abstrait de la géométrie. Ainsi, une fois qu’on a défini le symétrique d’un point par rapport à un autre, parler du symétrique d’une droite par rapport à un point est un saut vers l’abstraction qui se fait sans effort et même inconsciemment. Alors que définir la probabilité d’un évènement à partir de celles d’évènements élémentaires est nettement plus abstrait, en Seconde.

La présence de l’homothétie est très intéressante aussi en collège, comme source de contre-exemples : Lorsque dans le cours, le professeur insiste sur le fait que la symétrie conserve les distances, les élèves s’en étonnent parce qu’ils n’imaginent pas de transformation ne conservant pas les distances : Elles ne font pas partie de son univers parce qu’elles ne sont pas enseignées en collège. En montrant vite l’effet d’une homothétie au vidéoprojecteur, on passe quelques minutes à faire quelque chose qui est hors programme, mais en même temps on montre aux élèves la motivation de ces étranges affirmations sur la conservation de propriétés qu’ils croyaient évidentes...

Un exemple d’utilisation des fractions : Les cercles de Ford

Un cercle de Ford est défini par son centre et son rayon : l’ordonnée du premier et le second ont pour valeur $\frac{1}{2q^2}$ si l’abscisse du centre est $\frac{p}{q}$ (irréductible). Le tracé de cercles de Ford est donc une excellente application des fractions, qui se trouvent être présentes dans DrGeoII :

Une manière particulièrement simple est d’écrire une fonction qui, à une fraction, associe l’inverse du double du carré de son dénominateur, et d’appliquer cette fonction à une abscisse pour avoir à la fois l’ordonnée et le rayon. Cette fonction s’appelle ford, et s’implémente ainsi :

  1. ford:=[ :r | 1/(r asFraction denominator) squared /2 asFloat].

(on convertit r en fraction avec asFraction, on élève son dénominateur au carré avec square, on inverse le résultat, on divise par 2 et on convertit à nouveau en réel avec asFloat)

Ensuite, on boucle sur x [2], et pour chaque valeur de x, on

  1. calcule l’ordonnée y avec la fonction ci-dessus ;
  2. crée le point p de coordonnées (x,y) ;
  3. cache le point (ce sera le centre du cercle) ;
  4. crée à la volée une variable numérique DrGeoII, qui restera cachée (avec freeValue) et le cercle de centre p et de rayon cette valeur (égale à y aussi)

ce qui donne ceci :

  1. |figure ford p y c|
  2.  
  3. ford:=[ :r | 1/(r asFraction denominator) squared /2 asFloat].
  4.  
  5. figure:=DrGeoCanvas new.
  6.  
  7. 0 to: 2 by: (1/120) do:
  8.         [:x |
  9.         y:=ford value: x.
  10.         p:=figure point: x@y.
  11.         p hide.
  12.         c:=figure circleCenter: p radius: (figure freeValue: y).
  13.         ]

Télécharger

C’est tout ! Le dessin de cercles de Ford est assuré par ces quelques lignes de code :

D’une certaine manière, on peut dire que DrGeoII pousse jusqu’au bout la théorie des micromondes, en permettant à l’enfant, non seulement d’explorer le micromonde, mais d’en être d’une certaine manière le démiurge...