Mathématice, intégration des Tice dans l'enseignement des mathématiques  
Sommaire > N°20 - Mai 2010 > Les articles hors dossier > Utilité pédagogique de la licence GPL

Utilité pédagogique de la licence GPL
Moteur de recherche
Mis en ligne le 28 mai 2010, par Alain Busser

La licence GPL (ainsi que la CeCill) autorise l’utilisateur lambda à consulter le code source d’un logiciel placé sous ladite licence. Des exemples illustrant le cours de mathématiques peuvent alors être puisés dans le code source de logiciels libres, avec des remarques comme "c’est d’ailleurs comme ça que tel logiciel réalise telle tâche". Pour peu que les élèves aient déjà manipulé le logiciel, ces exemples leur "parlent" tout de suite.

Les exemples ci-dessous ont été traités en Seconde, dans les chapitres consacrés à la géométrie repérée. Le fait que les élèves ont programmé en JavaScript en TP les avaient préparés à la lecture de codes sources écrits dans des langages voisins de JavaScript tels c++ ou Java (langage).

Le logiciel dont les extraits sont montrés ci-dessous n’est autre que CaRMetal, écrit en Java, et que les élèves connaissent assez bien parce que les figures du cours et tous les TP de l’année sont faits avec ce logiciel. Le code source de ce logiciel est téléchargeable en bas de la page de téléchargement, sous la forme d’un fichier zip.

Milieu

Le sujet de TP consistant à demander d’"écrire un algorithme" calculant les coordonnées du milieu d’un segment, étant données les coordonnées des sommets, est selon toute vraisemblance destiné à devenir un grand classique en Seconde. La variante dynamique est décrite dans le BV 487 de l’APMEP, pages 191 à 199.

Mais dans le cas présent, l’activité a été remplacée par une simple projection, à l’aide d’un éditeur de texte muni de coloration syntaxique, de cet extrait du code source de CaRMetal [1] :

L’expression P1.getX() désigne l’application de la méthode getX (une fonction sans antécédent, d’où les parenthèses vides) au point P1. Bien que peu anglophones, les élèves comprennent assez bien que cette fonction donne l’abscisse du point P1.

Comme deux réels sont calculés, on se doute bien que la fonction setXY affecte simultanément les deux coordonnées d’un point...

Il est plus que probable que d’autres logiciels utilisent cette formule du cours de Seconde pour calculer les coordonnées du milieu d’un segment, mais ni CaBri ni GeoPlan n’étant libres, je n’ai pu accéder à leur source. Même pour GeoGebra il semble, bien que ce logiciel soit libre, que pour accéder au source il faille s’inscrire en tant que développeur...

Distance

Un autre sujet de TP qui risque de devenir un must en algorithmique est celui qui consiste à demander aux élèves un programme qui

  • Demande à l’utilisateur d’entrer les coordonnées de trois points, soit 6 réels à entrer (!)
  • Calcule les distances entre ces points
  • puis effectue une batterie de tests
  • et affiche le diagnostic sur la nature du triangle

Je suis personnellement hostile à cette activité pour les raisons suivantes :

  1. Les 6 affectations et les tests (à permutations près) sont lourdes. Difficile pour un élève seul de faire tout ça en une heure ;
  2. Les élèves perçoivent-ils bien que l’activité n’a aucun sens si le repère n’est pas orthonormé ? Cette critique s’adresse aussi à la solution proposée ci-dessous...
  3. Problèmes d’arrondi : Un triangle n’apparaît pas comme isocèle si la différence entre les longueurs de ses côtés est très petite, alors qu’avec un calcul exact il le serait. Cette critique ne s’appliquerait pas au logiciel xcas dont la géométrie dynamique est faite sous calcul formel.

Alors là encore, un extrait du code source de CarMetal a été vidéoprojeté en cours [2] :

Pour la signification de M.getX() qui donne l’abscisse de M, voir l’onglet précédent. La notation Math.sqrt() désigne la racine carrée, comme en JavaScript. Le mot-clé "this" veut dire que la méthode Expression est appliquée à l’objet présent. c est un objet de type construction. Sans trop m’y connaître en Java, je suppute alors avec mes élèves que la construction du cercle de rayon fixe utilise une expression numérique E égale à $\sqrt{(x-x_M)(x-x_M)+(y-y_M)(y-y_M)}$ qui est la formule du cours, à ceci près que plutôt que calculer le carré de $x-x_M$, René Grothmann a préféré le multiplier par lui-même, ce qui a valu une intéressante question posée à la classe :

Pourquoi ?

Deux raisons invoquées par certains élèves :

  1. Multiplier un nombre par lui-même est plus rapide qu’élever ce nombre à la puissance 2 ;
  2. Multiplier un nombre par lui-même est plus précis qu’élever ce nombre à la puissance 2.

Les deux raisons semblent bonnes.

Bien que la nécessité que le repère soit orthonormé n’apparaisse pas dans cette activité (CaRMetal ne connaît pas d’autres sortes de repères), l’exemple a le mérite d’être basé sur une problématique, le fichier examiné n’étant pas censé calculer une distance mais un rayon, ce qui ne semblait pas être la même chose pour les élèves...

Colinéarité

Le test de colinéarité est utile pour deux tests en géométrie dynamique : Le test de parallélisme et le test d’alignement.

Parallélisme

Sous CaRMetal, les tests ne sont pas dans le code source en Java mais dans un fichier de "macros", rédigées comme tous les fichiers CaRMetal, au format xml. Le test de parallélisme est ici affichage conditionnel d’un texte) :

Pour reconnaître la formule du cours, il faut savoir que sous CaRMetal, $x(l1)$ et $y(l1)$ désignent les coordonnées d’un vecteur directeur de $l1$ (dont le nom vient de ce que CaR est en Allemand, langue dans laquelle "droite" se dit "Linie").

Ce n’est pas une égalité qui est souhaitée mais une égalité à $10^{-10}$ près. En effet CaRMetal est si précis que les erreurs d’arrondi se remarquent, et si deux nombres coïncident jusqu’à la 15ème décimale, ils sont considérés comme différents !

Enfin l’abscisse du texte n’est valide que si les droites sont parallèles ; dans le cas contraire, seule l’ordonnée est valide, et le texte n’apparaît pas : Il y a ici une génération automatique d’erreur, procédé assez puissant en algorithmique (à condition bien sûr que l’outil gère correctement les erreurs !).


Points alignés

Pour voir si des points sont alignés, CaRMetal n’utilise pas le cours de Seconde (géométrie repérée) mais une macro purement géométrique. Il n’est pour autant pas totalement dénué d’intérêt (en particulier pour les élèves) de voir comment ça fonctionne ; manipuler le curseur "étape" pour voir les différentes étapes :

Des étapes en séquence pour résoudre un problème : Même ici on a un algorithme !

Limites

Le code source de l’éditeur JavaScript de Mozilla (rhino (moteur JavaScript)) est également public, alors autant regarder comment JavaScript calcule les fonctions trigonométriques ou exponentielles. Pas de chance, elles ne sont pas calculées par l’interpréteur JavaScript mais par la machine Java. Cependant on trouve [3] la manière dont les erreurs (style racine carrée d’un nombre négatif) sont gérées par la norme ECMA de JavaScript, et notamment les limites usuelles sont codées dedans :

Dans le cas du cosinus, on voit que rhino a créé une variable $x$ à laquelle a été affectée la valeur de l’argument de la fonction (ce peut être un nombre mais aussi le résultat de l’appel d’une autre fonction). Ensuite, si $x$ vaut $+\infty$ ou $-\infty$, la fonction retourne "NaN" (not a number) pour dire que la fonction cosinus n’a pas de limite ni en $+\infty$ ni en $-\infty$. Sinon elle appelle la fonction cosinus de la machine Java.

Dans le cas de la fonction exponentielle, on lit de façon analogue que $\lim_{x \rightarrow +\infty}e^x = +\infty$ et $\lim_{x \rightarrow -\infty}e^x = 0$ (écrit avec une décimale pour que rhino le considère comme un réel et non comme un entier).


Il faut quelques secondes pour projeter un extrait de code source et le commenter, puis environ une ou deux minutes pour poser les questions et attendre les réponses. D’autres domaines du cours de mathématiques peuvent être traités de cette manière, par exemple la dichotomie pour résoudre certaines équations, le calcul numérique de nombres dérivés et d’intégrales, ou même tout simplement le calcul de pgcd.

Cet article peut donc rester vivant assez longtemps sous la forme de commentaires, un par idée d’extrait de code source.

Mais faire ça avec un logiciel qui ne serait pas libre, est soit techniquement impossible, soit illégal (selon les compétences du hacker).


notes

[1ligne 83 du fichier MidPointObject.java

[2ligne 56 de FixedCircleObject.java

[3NativeMath.java est dans le dossier org/mozilla/javascript

Documents associés à l'article
  macro test alignement   |   (CarMetal - 4.1 ko)
Réagir à cet article
Vous souhaitez compléter cet article pour un numéro futur, réagir à son contenu, demander des précisions à l'auteur ou au comité de rédaction...
À lire aussi ici
MathémaTICE est un projet
en collaboration avec
Suivre la vie du site Flux RSS 2.0  |  Espace de rédaction  |  Nous contacter  |  Site réalisé avec: SPIP  |  N° ISSN 2109-9197