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.

Blockly, calcul formel et statistiques
Article mis en ligne le 7 octobre 2016
dernière modification le 24 novembre 2016

par Patrick Raffinat

Cet article peut être librement diffusé à l’identique dans la limite d’une utilisation non commerciale suivant la license CC-by-nc-nd : http://creativecommons.org/licenses/by-nc-nd/3.0/fr/legalcode

A) Introduction

Ma suite logicielle Mathem@ALGO, détaillée dans le N°50, a pour but de faciliter l’enseignement de l’algorithmique, plus particulièrement dans un cadre mathématique où :

  • elle permet d’écrire et d’exécuter des programmes (Blockly ou Javascript) manipulant le tableur de Xcas.
  • elle simplifie l’écriture de programmes dans plusieurs langages mathématiques (Scilab, Xcas et R), grâce à son composant PluriAlgo.

Plusieurs logiciels de mathématiques sont donc utilisés dans une optique algorithmique, ce qui est très réducteur. C’est pourquoi j’ai cherché à mieux mettre en valeur les fonctionnalités mathématiques de ces logiciels dans Mathem@ALGO.

La première évolution présentée est une extension R de Blockly, qui permet de faire de la programmation visuelle dans un cadre statistique au lycée. Elle peut également être utilisée pour faciliter l’apprentissage du langage R dans l’enseignement supérieur.

La seconde évolution présentée est un perfectionnement de l’extension Xcas de Blockly, qui permet désormais faire du calcul formel. Par exemple, il devient possible d’exécuter ce programme visuel :

B) Statistiques avec R

Introduction

J’ai souvent pris plus de plaisir à enseigner des logiciels programmables (tableurs, R...) que des langages de programmation généralistes parce qu’on peut y faire preuve de plus de créativité dans les applications développées. Dans un module R enseigné en IUT, j’ai par exemple appris à mes étudiants comment automatiser la production de rapports (Html ou OpenOffice) dont les statistiques et les graphiques dépendaient de fichiers fournis en paramètres.

R peut aussi être un candidat très crédible pour des enseignements en lycée, comme l’a montré Hubert Raymondaud [1] : il permet non seulement de traiter le programme officiel en statistiques, mais c’est aussi un logiciel polyvalent sur le plan mathématique (même s’il n’y a pas de calcul formel) et un langage de programmation à part entière permettant de faire de l’algorithmique [2].

Mais je doute qu’il soit très utilisé, parce que le programme officiel n’encourage guère à utiliser les logiciels de mathématiques programmables, ce que je trouve regrettable pour (au minimum) les filières scientifiques.

En créant une extension R de Blockly, je cherche donc à inciter les enseignants de lycée à plus utiliser R, même si je crois que ça n’aura guère d’effet tant que les programmes officiels n’évolueront pas. Cette extension peut bien entendu aussi être utilisée dans l’enseignement supérieur, pour démarrer l’apprentissage du langage R.

Après avoir écrit un programme Blockly avec cette extension, l’utilisateur a deux possibilités :

  • récupérer le code R correspondant (bouton Exporter Pluri) : le code obtenu devra ensuite être collé dans un environnement extérieur [3] où il pourra éventuellement être complété avant d’être exécuté.
  • exécuter directement le programme Blockly (bouton Exécuter) : le code est alors envoyé à un serveur R [4] qui, en retour, affiche le résultat dans l’onglet Blockly.

La première possibilité m’intéresse plus, parce que je cherche avant tout à promouvoir l’enseignement de R. La seconde possibilité s’adresse aux enseignants souhaitant simplement faire de la programmation visuelle dans un cadre statistique.

Exemple 1

Pour centrer un tableau de nombres, c’est à dire ôter la moyenne à chacune de ses valeurs, deux approches seront illustrées :

  • une approche algorithmique classique, consistant à calculer la moyenne à l’aide d’une première boucle, puis à la retrancher à chaque valeur du tableau à l’aide d’une seconde boucle.
  • une approche spécifique à R, consistant à calculer la moyenne à l’aide d’une fonction prédéfinie, puis à la retrancher directement au tableau (sans boucle).

Approche algorithmique

Quand on clique sur le bouton Exécuter, le code R est engendré et envoyé au serveur R :

Approche spécifique à R

R permet d’utiliser les opérateurs arithmétiques (+, -, *, /) avec des nombres, mais aussi avec des vecteurs (terminologie R pour les tableaux à une dimension). L’instruction « t=t-moy » soustrait un nombre (c’est à dire un vecteur de taille 1) à un vecteur de taille 3, ce qui produit un vecteur de taille 3.

Le bloc calculant la moyenne peut être utilisé pour d’autres statistiques, à choisir dans une liste déroulante. La traduction mean(t, na.rm=TRUE) tient compte de la possibilité d’avoir des valeurs manquantes dans un vecteur.

Par défaut, le bloc « créer une liste avec » comporte 3 cases. Vous pouvez ajouter ou supprimer des cases en faisant un clic (gauche) sur l’icône en haut à gauche, puis avec des clics-glissés.

Exemple 2

Pour illustrer les fonctionnalités de PluriAlgo dans le N°41 de MathemaTICE, j’avais traité un exemple où il fallait estimer par simulation la probabilité de l’évènement « au moins 60 piles en 100 lancers ». La démarche avait été illustrée en Larp, mais j’aurais pu choisir R. Un code équivalent peut être obtenu à partir de ce programme Blockly (bouton Exporter Pluri) :

Il est également possible de traiter cet exemple avec une approche spécifique à R :

Cette approche illustre l’ingéniosité du langage R dans sa gestion des vecteurs :

  • pieces=runif(100,0,1) crée un vecteur de 100 réels aléatoires compris entre 0 et 1.
  • pieces<0.5 crée un vecteur de 100 booléens : T (TRUE) pour les réels aléatoires inférieurs à 0.5 et F (FALSE) sinon.
  • sum(pieces<0.5) calcule la somme de ce vecteur de 100 booléens en le traitant comme un vecteur numérique : TRUE est converti en 1 et FALSE est converti en 0.
  • tirages>=60 crée un vecteur de n booléens puisque tirages est un vecteur de n nombres.
  • mean(tirages>=60) calcule la moyenne de ce vecteur de n booléens, qui est traité comme un vecteur numérique de 0 et de 1

Compléments

R propose non seulement de nombreuses fonctionnalités statistiques, mais permet aussi de faire du calcul matriciel, de créer des pages web...

Calcul matriciel

Le pdf joint illustre quelques fonctionnalités de R en calcul matriciel avec un exemple portant sur la diagonalisation d’une matrice :

R et calcul matriciel

Ne trouvant pas pertinent de développer des blocs Blockly pour faciliter l’écriture de ce type de programmes R, je me suis épargné ce travail. Néanmoins, j’ai ajouté quelques blocs permettant de faire de la programmation visuelle avec des matrices :

Ce second exemple, détaillé dans le pdf joint, montre comment calculer le déterminant d’une matrice en se ramenant à une matrice triangulaire grâce à des combinaisons linéaires entre lignes.

Pages web

Comme je l’ai dit en introduction, j’ai enseigné à mes étudiants d’IUT comment automatiser la production de rapports Html avec R. Cela ne nécessite aucune compétence en Html, puisque la librairie R2HTML assure le passage de R à Html.

Pour les lecteurs qui souhaiteraient réaliser des rapports statistiques élémentaires sans avoir à connaître la syntaxe des instructions R2HTML, j’ai ajouté quelques blocs spécifiques dans l’extension R de Blockly. J’explique comment les utiliser dans le pdf joint :

Pages web avec R2HTML

Les codes des exemples développés sont disponibles dans le fichier zippé joint :

Codes des exemples

C) Xcas : intégration du calcul formel dans Mathem@ALGO

Introduction

A la demande d’Alain Busser, j’ai fait évoluer l’extension Xcas de Blockly pour pouvoir faire du calcul formel avec des « programmes de calculs », un programme de calculs étant « une suite de modifications d’une (ou deux) variable numérique » :

Comme je le détaillerai dans la section « Variables spéciales », le calcul formel sera possible en utilisant des variables Blockly nommées _A, _B … _N, qui seront associées aux colonnes A, B, … N du tableur de Xcas.

Ensuite, dans la section « Boucles », je montrerai qu’on peut également combiner boucles et calcul formel dans un programme Blockly.

Variables spéciales

Si on dispose d’un programme Blockly faisant les calculs pour des valeurs numériques, il faut en renommer les variables (ici nombre en _A et copie en _B) :

En exécutant ensuite le programme obtenu [5], on constate que les affectations relatives aux variables _A et_B se traduisent par des formules dans les colonnes A et B du tableur :

Pour faire du calcul formel, on peut soit remplacer 4 par x dans le tableur, soit le faire dans le programme Blockly qu’il faut alors réexécuter :

Solution alternative avec une fonction Xcas

Si on s’adresse à des lycéens et non à des collégiens, une solution alternative est de transformer le programme Blockly en une fonction Xcas, puis d’utiliser la fonction dans une formule du tableur :

Pour obtenir la fonction Xcas, il faut commencer par traduire le programme Blockly en Javascript avec le bouton Exporter Pluri :

Il reste ensuite à traduire ce programme en Xcas, en introduisant une fonction, grâce au mécanisme de reformulation de l’onglet PluriAlgo :

Boucles

Intérêts composés

Pour savoir ce que deviennent 1000 euros placés à 2% pendant 5 ans, on peut écrire et exécuter le programme Blockly suivant :

En le transformant en programme Blockly formel, on verra apparaître la formule des intérêts composés dans le tableur :

Factorielle

Pour calculer la factorielle d’un nombre, on peut écrire et exécuter le programme suivant :

Pour avoir une valeur exacte, il suffit de renommer les variables et d’augmenter le nombre de lignes du tableur (20 par défaut) :

A l’exécution, la valeur exacte de la factorielle de 22 s’affichera dans la cellule A23 du tableur, même si l’instruction « afficher _A » continuera à afficher une valeur approchée puisque _A est une variable numérique gérée par Javascript.

D) Conclusion

Même si l’objectif principal de Mathem@ALGO est de faciliter l’enseignement de l’algorithmique, les logiciels de mathématiques qu’il utilise ne doivent pas servir uniquement de faire-valoir à l’algorithmique. C’est pourquoi j’ai cherché à mieux exploiter les fonctionnalités mathématiques de R et de Xcas :

  • l’extension R de Blockly peut être utilisée dans l’enseignement supérieur (ou au lycée [6]) pour démarrer l’apprentissage du langage R.
  • l’extension « calcul formel » de Blockly permet de relier programmation et calcul algébrique au collège avec des « programmes de calculs ».

A une époque où on transforme peu à peu les enseignants de mathématiques en enseignants d’informatique, je propose des outils visant à infléchir cette évolution trop radicale à mes yeux : dans des enseignements de mathématiques, l’informatique devrait avant tout servir à faire progresser les élèves ... en mathématiques !