Journées APMEP 2009 à Rouen.

Cet article donne un rapide compte-rendu d'un exposé donné aux journées APMEP de Rouen en octobre 2009. Le thème en était "algorithmique, programmation et … géométrie". Il était ainsi présenté : 
Depuis peu, Eric Hakenholz, le développeur du logiciel de géométrie dynamique CaRMetal a intégré au code du logiciel le langage de programmation Javascript. Pourquoi Javascript ? Parce que c'est un langage très simple, donc idéal comme premier langage ; c'est aussi un langage de haut niveau et qui ne risque pas de passer de mode trop vite : c'est le langage libre et gratuit interprété par tous les navigateurs et utilisé pour l'affichage de la plupart des pages web ! Les programmeurs débutants ont besoin de se lancer très tôt dans des petits projets personnels même très simples, par lesquels ils puissent se sentir immédiatement valorisés. Projets d'autant plus attrayants s'ils se déroulent dans une fenêtre d'application graphique ! Alors aux instructions javascript ont été ajoutés les carscripts : la fenêtre d'application devenant celle de CaRMetal. Et toutes les notions habituelles de géométrie peuvent être utilisées dans l'écriture des scripts. Cet exposé est destiné aussi bien aux (grands) débutants en algorithmique qu'à tous ceux qui veulent découvrir l'association algorithmique-géométrie dynamique.

En fait il y a eu deux temps dans cet exposé. Un premier pour illustrer ceci : même sans langage de programmation, avec CaRMetal il est possible de faire fonctionner des instructions conditionnelles, des booléens et des instructions logiques. Et un second où il est question de JavaScript et de programmation.

I - Conditionnels, booléens et logique … sans logiciel de programmation.

1°) Un problème de longueur

L'initiation aux instructions conditionnelles, aux instructions logiques ou aux booléens peut très bien se faire sans passer par un véritable langage de programmation. En particulier lorsqu'une même instruction n'est pas réitérée de nombreuses fois, donc qu'on n'a pas besoin de beaucoup de "boucles". Les tableurs, et certains logiciels de géométrie dynamique, CaRMetal en particulier :-), offrent alors de nombreuses possibilités. Pour carmetal, avec l'outil "expression" ou dans de nombreuses boîtes d'entrée numérique, il est possible de créer des nombres conditionnels, de donner des instructions conditionnelles et aussi d'utiliser des booléens tels que "a>0" (qui sont ici des nombres valant 0 ou 1, réutilisables dans d'autres calculs). Tous les problèmes avec différents cas de figure où on doit calculer des longueurs, des aires ou des volumes sont souvent intéressants de ce point de vue.

En voici un exemple, largement inspiré d'un exercice du manuel Transmath de seconde. Il s'agit d'une longueur conditionnelle. Je l'avais utilisé avant l'introduction en classe de la notion de valeur absolue.


LongueurConditionnelle.zir

On sait que AB = 4. M est un point variable du segment [AB]. Puis on a construit deux carrés comme le montre la figure ci-dessous. On se propose alors de calculer la longueur L de la ligne verte (qui est donc fonction de x), puis de représenter graphiquement la fonction L dans le repère de droite (en utilisant la macro report de mesure algébrique suivie de l'outil lieu). Cette longueur sera évaluée par différentes méthodes :

en créant une expression du type if(‹condition›,‹valeur si vrai›,‹valeur sinon›).(l'aide contextuelle explique bien l'utilisation de cet outil expression)

en créant une expression avec min(…,…) ou max(…,…) ou une combinaison des deux (ce min ou ce max renvoient respectivement le plus petit ou le plus grand de deux nombres).

en créant une ou des expressions contenant des booléens.

Autant les deux premières méthodes n'avaient pas trop posé de problèmes aux élèves, autant l'utilisation d'expressions telles que x‹y qui valent soit 1 soit 0 les avaient laissé perplexes. Ceux qui avaient réussi à les utiliser étaient très peu nombreux.

2°) Logique : le et, le ou et le non.

Les exercices suivants n'ont pas encore été testés en classe. Ils ont simplement été créés juste après l'apparition dans CaRMetal des objets magnétiques. Au premier abord ils peuvent faire penser aux diagrammes de Venn, mais c'est en fait différent : si vous bougez le point m, vous constaterez que c vaut 0 ou 1 suivant que le point se trouve à l'intérieur du cercle C ou à l'extérieur, mais vaut 1/2 s'il est sur le cercle ! de même pour d et le cercle C'. C'est d'ailleurs la raison pour laquelle un des participants a qualifié ces nombres c et d de "booléens normands" : 1 pour oui, 0 pour non et 1/2 pour pt'ête ben qu'oui, pt'ête ben que non (nous étions à Rouen …)


01logique.zir

La consigne ? Dans le fichier obtenu après téléchargement (et non pas dans l'applet), après activation de la baguette magique, on remarquera que le texte bleu est lié au point R ; et un clic-droit sur ce même texte bleu fait apparaître ses propriétés, et en particulier ceci :

Après le if il y a une condition (1==1) qui est toujours vraie ! On demande de la remplacer par une condition sur c et sur d qui soit vraie uniquement lorsque le point m est dans la zone bleue. A cause du "invalid" le texte disparaîtra dans le cas contraire. La consigne est la même pour le texte jaune lié au point S.

Rappel : le et (&&), le ou (||) et le non (!) figurent dans les fonctions prédéfinies.

Et pour les amateurs, il y a un zip contenant le fichier 01logique.zir ainsi que d'autres fichiers analogues.

Algorithmique avec CaRMetal

Comme le signalait le texte de présentation de l'exposé, le langage de programmation JavaScript est désormais intégré au code de CaRMetal. Ce qui devient particulièrement intéressant si on est amené à utiliser une même suite d'instructions un grand nombre de fois (les boucles) ; sachant que s'il y a une ou un petit nombre de boucles, une macro devrait suffire. Inutile par exemple (en lycée) d'écrire un programme pour la construction d'un carré ; ni même pour le calcul du coefficient directeur d'une droite… (opinion qui n'engage que son auteur)

Avant de passer à la suite des explications, il me semble utile (une fois n'est pas coutume) de rapporter quelques éléments d'expérience personnelle. D'abord à propos de ce qui touche à la programmation, et de son utilisation en classe dans les programmes précédents. Depuis de nombreuses années, il était demandé d'initier un peu les élèves en utilisant … les calculatrices. Et j'avoue en avoir gardé un bien mauvais souvenir. D'abord à cause de la multiplicité des marques et des modèles d'une même marque : même en vidéo-projetant pour Texas et en distribuant des docs équivalents pour Casio, c'est difficilement gérable ; d'autant plus qu'il est extrêmement difficile d'expliquer le contenu même du programme : ce qui intéresse la grande majorité des élèves, c'est l'outil lui-même et non son fonctionnement interne. C'est particulièrement vrai pour tout ce qui concerne les suites. Les programmes distribués (et si vite échangés par cable interposé) leur servent de béquille pour les rassurer sur un sujet qui leur semble (au début surtout) tellement compliqué. Il me semble que les choses sont faites à l'envers : ce serait tellement plus simple de parler des suites s'ils avaient déjà la notion de boucle, de compteur … et que ces notions étaient déjà abordées en seconde par exemple ; mais dans un contexte qui les rassure, comme celui de la géométrie par exemple ! La géométrie reste pour eux un domaine "concret" : ainsi la construction de macros (avec un logiciel de géométrie dynamique) a toujours quelque chose de magique qui les motive particulièrement.

Autre note un peu personnelle : ce qui s'est passé en juin dernier, lorsqu'Eric a intégré le JavaScript au code de CaRMetal. Aux aficionados, il a annoncé la nouvelle en disant que c'était une version bêta, mais il envoyait aussi quelques scripts de sa fabrication, "des idées pour vous amuser". Et là, moi qui n'avais jamais programmé, qui savais juste lire des programmes simples sur calculatrice … pour les élèves, je me suis prise au jeu. Je me souvenais d'une situation que je voulais transformer en macro : un pion qui se déplace au hasard sur un damier, soit à droite (ou à gauche), soit vers le haut (ou vers le bas), jusqu'à ce qu'il atteigne le bord d'un carré ; avec en plus un compteur. En macro, ce n'est pas possible, alors pourquoi pas en javascript ? Sans rien demander à personne, en galérant un peu, mais uniquement par mimétisme, c'est à dire en copiant-collant des bouts de code (dans les scripts "pour vous amuser") et en les adaptant, mais sans tout comprendre évidemment :-), j'y suis arrivée ! Une idée plutôt géométrique au départ, et pour moi la motivation a suivi …

Vous trouverez ici ce petit programme ; amélioré et simplifié depuis ! parce qu'entre temps à l'IREM de la Réunion Yves Martin et Alain Busser ont beaucoup travaillé et publié sur le sujet ; et j'ai nettement mieux compris certaines choses. En particulier ce pdf (Yves Martin) est excellent pour débuter. Mais en allant sur le site de l'IREM vous trouverez une mine de renseignements sur le sujet.

Lors de l'exposé, c'est le script sur le "robot" précédent qui a été présenté. J'aurais pu transformer cette présentation en animation flash. Mais il m'a semblé préférable de "filmer" la construction du script d'un sujet très proche, mais plus riche : un sujet d'épreuve expérimentale au bac (merci Alain pour l'idée)

Et voici le film qui explique pas à pas la fabrication du fichier .js en question, ainsi que le dossier le contenant. Il y a des maladresses de programmation, mais c'est le travail d'une débutante ...

Petite discussion finale …

De nombreux participants découvraient ce jour-là CaRMetal, et paraissaient conquis par l'intuitivité de son utilisation ; de même pour l'utilisation de Javascript dans CaRMetal : la toile d'araignée et le tournesol d'Yves Martin ont particulièrement séduit. Mais ils semblaient bien perplexes sur la possibilité de faire faire un travail de ce type aux élèves en salle info : "on va perdre tellement de temps !". D'où ce petit conseil issu de ma propre expérience : ce qui fait toujours gagner en temps, mais surtout en compréhension, c'est l'utilisation du vidéo-projecteur. Et puis rien n'empêche de donner des "devoirs maison" informatiques : c'est bien le logicel libre !

Le déroulement est celui d'un cours classique, et on peut se lancer même si on a peu l'expérience. Les scéances en salle info sont passionnantes, différentes puisque ce n'est plus l'enseignant qui "dirige", mais la machine ; mais elles peuvent râter ! Et puis surtout, dans des lycées de 2000 élèves par exemple (mais construits pour 1500 …), sans administrateur réseau le plus souvent, comment faire si les salles sont trop peu nombreuses, et combien faudrait-il de salles pour que tous les profs puissent de seconde, première et terminale puissent y emmener régulièrement leurs élèves ?