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.

Tout est algorithme, tout est fonction
Première approche d’une pensée fonctionnelle du programme de première S

Des années d’enseignement en classe de première S me font pressentir qu’en mathématiques, tout est algorithme, tout est fonction. Qu’est-ce que la pensée algorithmique ? C’est le fait d’analyser un problème afin de le décomposer en nombreuses petites fonctions ayant des tâches très précises, très réduites. Adopter ce point de vue en classe amène les élèves à penser en termes d’algorithmes épurés des problèmes d’entrées-sorties, pour finalement raisonner en termes de fonctions et développer une pensée mathématique plus claire. En première S, je m’attache à aborder en temps réel toute notion de manière algorithmique, en l’illustrant à l’aide de scripts Snap ! en français, proches de la langue naturelle. Entrée, boîte, résultat : on entre des objets de nature quelconque, la boîte traite ces objets et renvoie un résultat, celui qui est cherché, attendu par l’élève. Cela oblige les élèves à penser les mathématiques en termes d’objets, de comprendre que les fonctions ne sont pas que numériques, les algorithmes non plus, et qu’un résultat n’est pas forcément numérique.

Article mis en ligne le 3 mars 2019
dernière modification le 20 mai 2019

par Nathalie Carrié

N.D.L.R : Cet article est co-publié par MathémaTICE et par le site de l’IREM de La Réunion.

Des années d’enseignement en classe de première S me font pressentir qu’en mathématiques, tout est algorithme, tout est fonction. Qu’est-ce que la pensée algorithmique ? C’est le fait d’analyser un problème afin de le décomposer en nombreuses petites fonctions ayant des tâches très précises, très réduites. Adopter ce point de vue en classe amène les élèves à penser en termes d’algorithmes épurés des problèmes d’entrées-sorties, pour finalement raisonner en termes de fonctions et développer une pensée mathématique plus claire. En première S, je m’attache à aborder en temps réel toute notion de manière algorithmique, en l’illustrant à l’aide de scripts Snap ! en français, proches de la langue naturelle. Entrée, boîte, résultat : on entre des objets de nature quelconque, la boîte traite ces objets et renvoie un résultat, celui qui est cherché, attendu par l’élève. Cela oblige les élèves à penser les mathématiques en termes d’objets, de comprendre que les fonctions ne sont pas que numériques, les algorithmes non plus, et qu’un résultat n’est pas forcément numérique. [1]

J’adore enseigner en classe de Première S et j’ai eu la chance d’être placée dans cette classe dès ma première année d’enseignement. Depuis, j’ai enseigné en Première S bien plus qu’un an sur deux. C’est à mon sens la seule classe où l’on peut réellement faire des mathématiques, éveiller la curiosité des élèves, montrer la beauté des mathématiques, faire dessiner les élèves et prendre le temps de les faire programmer. La raison en est évidente, pas de pression du baccalauréat au bout, nous n’avons que le bonheur de pratiquer des mathématiques, habituer les élèves à explorer, à raisonner.
Les algorithmes étaient déjà partout présents dans les programmes de lycée en 1991, lorsque j’ai débuté en tant qu’enseignante, après quelques années dans le privé. Il suffisait de lire entre les lignes... On pouvait programmer en Logo ou sur la calculatrice avec les élèves.
Venant du privé avec une formation d’ingénieur, j’ai toujours adoré programmer. D’autant que mon père m’avait offert ma première calculatrice à la boutique du MIT [2] : une HP34C, lorsque nous y avions visité mon oncle, émigré Haïtien aux Etats-Unis, car il y avait une chaire en chimie.

Pas étonnant que tout au long de ma carrière d’enseignante, j’ai essayé de transmettre ce goût pour la programmation à mes élèves…

 [3]

Déplier tous les blocs
Replier tous les blocs

De Snap ! à la pensée algorithmique

Maths en classe en images

Depuis 2008, année où j’ai acheté ma première tablette graphique, j’écris en classe sur ma tablette, je suis face aux élèves et ai l’écran de l’ordinateur sur ma droite, la tablette sous la main. Le tout est vidéo-projeté en arrière plan décalé sur ma droite sur un mur blanc à côté du tableau noir sur lequel je prends la craie de très rares fois...
Ainsi, j’ai pu écrire en classe le cours, les corrections d’exercices, et j’ai pu annoter les devoirs et documents divers devant les élèves, avec eux, en les faisant participer en permanence, sans jamais leur tourner le dos. Tout ceci a été rendu possible grâce au logiciel Xournal sous Linux, un petit bijou de logiciel libre. [4]
J’effectue ainsi des copies d’écran de tout ce qui est fait en classe, ou des exports en fichiers pdf que je transforme ensuite en fichiers images au format png grâce à The Gimp, logiciel de traitement d’images toujours sous Linux.
Cela m’a servi à alimenter en temps réel mon cahier de textes en images, grâce au logiciel libre de galerie photo Piwigo, développé en PHP, et utilisant des bases de données pour stoker et tagger les pages affichées dans des albums virtuels.

Les élèves en ont tiré le double avantage de pouvoir rattraper le cours lors d’une absence, ou de revoir ce qui a été fait en classe le jour même et compléter leur prise de notes si besoin.
Et moi, j’en ai tiré la réelle satisfaction de voir le rendu de mes cours en permanence, retrouver avec les élèves ce qui a été déjà fait, mais surtout aujourd’hui de voir comment mes cours et les outils utilisés ont évolué au fil des années, en fonction des programmes en cours.
C’est vraiment très instructif de parcourir la galerie selon les classes et les années et de voir comment les outils utilisés en classe ont changé au fil de ces dernières années.

Les albums virtuels y sont organisés
 par classe et par année

 par thèmes (ou logiciels utilisés)

En particulier, voici le lien obtenu en effectuant une recherche avec les mots-clé :
programme, algorithme, code, python, snap, scratch, algobox, calculatrice
nathalierun.net/lycee/piwigo/index.php ?/search/683
Il faut penser à activer l’ordre de Tri Date d’ajout ancien -> récent.
Vous obtenez au moins 766 images, que vous pourrez alors faire défiler sous forme de diaporama.

Au moins 153 images illustrent des algorithmes (avec les mêmes mots-clé) en classe de première S ici :
nathalierun.net/lycee/piwigo/index.php ?/search/684
C’est intéressant de voir d’une part la variété des algorithmes : on peut en voir dans toutes les branches des mathématiques abordées, mais aussi l’évolution des outils utilisés pour les mettre en oeuvre : la calculatrice, les logiciels utilisés en classe tels que :

Snap ! le Scratch qui code du code

Alonzo
Mascotte de Snap !

Ce que je trouve particulièrement intéressant en naviguant sur mon cahier de textes en images, c’est de voir à quel point la découverte du logiciel Snap ! a fait évoluer mes pratiques en classe et ma vision algorithmique des notions abordées. La première utilisation de Snap ! en classe a eu lieu le 30 mars 2016 et depuis, on voit clairement mes pratiques évoluer.

Si vous ne connaissez pas encore Snap !, je vous invite à lire la page « About » de son site père, 
et ce premier article que je lui ai consacré sur le site de l’IREM en avril 2017 : Programmer des algorithmes avec Snap ! ou la programmation visuelle au lycée

 [5]

Tout est fonction.

A partir de la première illustration de l’utilisation de Snap ! comme bloc qui renvoie une valeur
tout est toujours codé grâce à Snap ! comme une fonction.

Grâce à mes années d’enseignement en classe de première S, je pressens que tout est algorithme en Mathématiques, tout est fonction. Et Snap ! m’a totalement convaincue de cela, tout en m’aidant à l’illustrer, à le confirmer.
images.math.cnrs.fr/Et-si-on-commencait-par-les.html

Alonzo Church
Mathématicien, Logicien

(14 June, 1903 – 11 August, 1995)

Dans cet article (difficile !), on montre qu’au lieu de fonder les mathématiques sur la notion d’ensemble comme le veut la tradition, on peut mettre la notion de fonction au centre de l’édifice. Et ce raisonnement trouve son origine dans les travaux d’Alonzo Church, connu principalement pour le développement du lambda-calcul qui a débouché sur la programmation fonctionnelle qui est un paradigme de programmation de type déclaratif qui considère le calcul en tant qu’évaluation de fonctions mathématiques.

Never had any mathematical conversations with anybody, because there was nobody else in my field. Alonzo Church.

D’ailleurs, on notera l’anecdote suivante : la mascotte de Snap ! s’appelle Alonzo et ses cheveux sont gominés en forme de Lambda...

Alonzo
Mascotte de Snap !

Petit historique sur le λ-Calcul

A ce propos, voici un petit historique sur le Lambda-Calcul, d’après David Perrin, Le lambda-calcul,le reTour de Babel ?

La pensée algorithmique

Qu’est-ce que la pensée algorithmique ?

Jeanette Wing en donne cette définition en 2011 :
« computational thinking is the thought processes involved in formulating a problem and expressing its solution(s) in such a way that a computer—human or machine—can effectively carry out. » [6]

C’est le mode de pensée qui permet de concevoir ce qu’un calculateur - humain ou machine - peut exécuter.

Avoir une pensée algorithmique permanente peut induire une pensée mathématique plus claire. En effet, observer une pensée algorithmique demande d’analyser un problème afin de le décomposer en nombreuses petites fonctions ayant des tâches très précises, très réduites.
La pensée algorithmique va donc développer chez les élèves l’habitude de raisonner en termes de fonctions.
Je m’attache donc à aborder toute notion en première S de manière algorithmique.
Et Snap ! s’y prête bien. Ainsi, je pratique en classe en temps réel une pensée algorithmique que nous illustrons sans cesse à l’aide de scripts Snap ! en français, proche d’un langage de script illustrant la langue naturelle.

La pensée algorithmique en classe

Recherche d’un algorithme en classe

J’utilise Snap ! en classe pour écrire un algorithme mais aussi pour le programmer et le tester. L’idée est d’ouvrir l’esprit des élèves à une pensée algorithmique indépendante d’un langage précis de programmation.

Bien sûr, j’utilise Python également comme langage de programmation textuel…

Toute pensée est un calcul…

J’essaie d’amener mes élèves à une pensée algorithmique, de les amener à penser fonctions en permanence.

On entre des objets, quelqu’ils soient. Cela constitue l’entrée de la boîte. La boîte traite alors ces objets et renvoie un résultat, celui qui est cherché, attendu par l’élève. Cela oblige mes élèves à penser les Mathématiques en terme d’objets. De comprendre que les fonctions ne sont pas que numériques, les algorithmes non plus. Et qu’un résultat n’est pas forcément numérique. A partir de cet enseignement, leurs remarques me font grandir, je réalise à quel point je suis dans la bonne voie car ils m’apprennent des choses, me font réaliser la puissance de cette vision fonctionnelle de l’algorithmique.

Lorsque j’ai demandé aux élèves, lors d’une activité sur les fractales, quel était l’objet renvoyé par l’algorithme qui dessine un flocon de Von Koch, Aliyah m’a répondu comme une évidence « Et bien, le dessin Madame ! ».
On en a déduit ensemble que cet algorithme était bien une fonction : il en a tous les ingrédients : des entrées traitées dans une boîte, et le dessin qui en résulte.

Penser algorithmes en classe, penser fonctions.

Afin d’amener mes élèves à penser en termes de fonctions, j’ai donné un devoir d’algorithmique à traiter à l’aide de Snap ! . Les élèves devaient transformer une série d’algorithmes de base en fonctions.
Cet article détaille largement le travail donné : L’algorithmique revisitée avec Snap ! et Python

Le projet Snap ! ci-contre constitue la correction de ce travail, mais peut être donné aux élèves afin qu’ils s’habituent à écrire des algorithmes sous forme de fonctions.

Notion universelle de fonction

Ce qui me conforte dans l’idée de notion universelle de fonction, ce sont de petites modifications subtiles apportées aux programmes de mathématiques ces derniers temps.

-> Document d’accompagnement du programme de seconde « Algorithmique et programmation »

On trouvera dans le document d’accompagnement de seconde « Algorithmique et programmation » les extraits suivants.

 Deux idées essentielles : 
la notion universelle de fonction d’une part et la programmation comme production d’un texte dans un langage informatique d’autre part.

 Les notions mathématique et informatique de fonction relèvent du même concept universel.

 Notions d’entrées-sorties

-> Évolution de l’écriture des algorithmes au baccalauréat (A partir de juin 2018)

Dans un objectif de simplicité et de cohérence, il a été proposé une évolution de l’écriture des algorithmes dans les sujets de baccalauréat obéissant aux principes suivants :
 suppression de la déclaration des variables, les hypothèses faites sur les variables étant précisées par ailleurs
 suppression des entrées-sorties (en cohérence avec le nouveau document d’accompagnement en 2nde – p5)
 simplification de la syntaxe, avec le symbole ← pour l’affectation.


S ← 0
U ← 900
Pour N allant de 1 à 10
  S ← ...
  U ← 0.75 U + 12
FinPour


-> Recherche de l’occurence du mot algorithme dans les pages du B.O.
Programme officiel de mathématiques de la classe de première S, paru au BO le 30 septembre 2010

Je vous invite tout d’abord à parcourir le programme de mathématiques de première S en cours et de trouver des exemples d’algorithmes puis de les écrire sous forme de fonctions...

L’image suivante présente un extrait du B.O. concernant l’algorithmique.

Qu’est-ce qu’une fonction ?

Construisons le programme de Première S…

 …sous une vision algorithmique
 …par une approche fonctionnelle

Le but ultime est de se consacrer à l’essentiel : comprendre les mathématiques grâce aux algorithmes.

Car les algorithmes sont la sève des mathématiques !

 [7]

 
Posons-nous la même question que Gilles Dowek dans Une deuxième révolution galiléenne ? :
À quelles questions la réponse est-elle « Un algorithme » ?
À laquelle il répond :
Les questions Qu’est-ce qu’un aéroport ?, Qu’est-ce que la synthèse d’une protéine ?, Qu’est-ce qu’une réaction chimique ?, Qu’est-ce qu’une grammaire ? reçoivent donc une même réponse : Un algorithme. Et cette réponse est également une réponse possible aux questions : Qu’est-ce qu’un agent économique ?, Qu’est-ce qu’un nombre entier ?, Qu’est-ce qu’un nombre réel ?, Qu’est-ce qu’une démonstration mathématique ?, Qu’est- ce qu’une théorie ?...
Ainsi, les algorithmes, qui ont toujours été présents à travers l’histoire, permettent de décrire non seulement les mathématiques, mais le monde réel [8]. Tout algorithme pouvant s’écrire à l’aide d’une fonction, je voudrais insuffler à mes élèves la graine d’une pensée fonctionnelle afin de les aider à mieux appréhender le monde qui les entoure.

Fonctions numériques

-> Définition de la fonction valeur absolue
Commencer l’année par définir la fonction valeur absolue nous fait rentrer dans le vif du sujet. C’est une définition purement algorithmique du type Si...Alors...Sinon !

Définition algorithmique Définition en Python
fonctionValeurAbsolue(x):
        Si x>=0
            renvoie x
        Sinon
            renvoie -x
       FinSi
  1.  def ValeurAbsolue(x):
  2.         if (x>0 or x==0):
  3.             return x
  4.         else:
  5.             return -1*x

 [9]

Ce lien vous mènera à ce qui a été présenté en classe sur le sujet.

-> Enchaînement de fonctions
Comprendre comment se forme une fonction numérique est essentiel.

Voici un exercice Wims illustré avec Snap ! donné en devoir Wims puis en interrogation écrite.

A partir des fonctions de référence vues en seconde, les élèves doivent agencer les blocs dans le bon ordre afin d’obtenir la fonction demandée.

Voici comment réaliser l’appel d’une fonction avec Snap !


-> Le second degré

J’ai demandé aux élèves de créer un logiciel Snap ! qui permet de résoudre tous les problèmes abordés lors de cette leçon : étant donné une fonction trinôme f, calcul de son discriminant, résolution de l’équation f(x)=0, signe de f, factorisation etc...

Voici un script Snap ! qui renvoie les solutions d’une équation du second degré.

En voici une interprétation en Python Le script du programme Python [10]
  1.  
  2. from math import *
  3.  
  4. def discriminant(a,b,c):
  5.     return b**2-4*a*c
  6.  
  7. def racines(a,b,c):
  8.     delta = discriminant(a,b,c)
  9.     if delta < 0:
  10.         return []
  11.     else:
  12.         x1 = (-b-sqrt(delta))/(2*a)
  13.         x2 = (-b+sqrt(delta))/(2*a)
  14.         return [x1,x2]
  15.  

Fonctions en trigonométrie

-> Alonzo et ses amis Sinus et Cosinus

Lorsque Alonzo décrit le cercle trigonométrique, son ami Cosinus (qui a la même abscisse qu’Alonzo) décrit la fonction cosinus et son ami Sinus (qui a la même ordonnée que Alonzo) décrit la fonction sinus.

Voici ce que l’on a pu dire de cette animation en classe.

L’animation en ligne est visible sur ce projet Snap !.

-> Mesure principale d’un angle orienté


Essence de la programmation fonctionnelle

Amener les algorithmes aux données

Amener les algorithmes aux données est l’essence de la programmation fonctionnelle…
En programmation fonctionnelle, on utilise le duo map/reduce pour traiter un grand nombre de données, que l’on peut traduire par appliquer/réduire ou combine .

L’outil est extrêmement puissant, utilisable tel quel par les élèves, en chargeant la bibliothèque outils de Snap !.

Amener les opérateurs aux données

C’est une méthode que je propose à mes élèves. Une fois qu’ils la connaissent, ils trouvent cela beaucoup plus simple que de faire appel à une boucle...

Jouer avec les fonctions

De quelle fonction s’agit-il ?

Jeu sur les fonctions avec Python Le script du programme Python
  1. from math import *
  2. from random import *
  3.  
  4. a = 2.
  5. b = 5.
  6.  
  7. def u1(x):
  8.     return x*x
  9.  
  10. def u2(x):
  11.     if x!=0:
  12.         return 1/x
  13.  
  14. def u3(x):
  15.     if x>=0:
  16.         return sqrt(x)
  17.  
  18. def u4(x):
  19.     return a*x+b
  20.  
  21. def u5(x):
  22.     return abs(x)
  23.  
  24. liste_fonctions = [u1,u2,u3,u4,u5]
  25.  
  26. def f(x):
  27.     u = choice(liste_fonctions)
  28.     v = choice(liste_fonctions)
  29.     return u(v(x))
  30.  
  31. def jeu(liste = [1,2,3,4,5,6,7,8,9,10]):
  32.     return map(f,liste)

 [11]

Lancement du jeu, quelques exemples d’exécution dans le terminal :
  1. >>> jeu()
  2. [1, 16, 0.09090909090909091, 5.0, 1.4953487812212205, 36, 7, 8.0, 529.0, 100]
  3. >>> jeu([1,2,3,4,5])
  4. [7.0, 23.0, 3, 4.0, 9.47213595499958]
  5. >>> jeu([1,7])
  6. [0.14285714285714285, 0.0]

 [12]

Tout est fonction en classe de première S

Courbes de fonctions associées

Sur les courbes suivantes, les élèves devaient reconnaître les fonctions associées, en partant d’une fonction trinôme.

J’adore donner ce genre d’exercices chaque année en première S car il permet de voir si les élèves ont compris la notion de valeur(s) interdite(s), de signe d’une fonction, etc...

Dessin et algorithmes en géométrie

Programmer des fractales permet à mes élèves de s’initier au raisonnement récursif.

On pourra lire mon article Pourquoi faire des fractales en classe ?. [13]

Exemples de suites numériques

-> Les puissances de 2

Script Snap ! programmant une suite géométrique.

-> Sommes de suites

- sommes d’entiers naturels

- sommes de carrés d’entiers naturels

- sommes de cubes d’entiers naturels

Fonctions en géométrie analytique

-> Vues en seconde

De nombreux algorithmes de géométrie analytique ont été vus en seconde, entre autres :
 calcul des coordonnées du milieu d’un segment
 condition de colinéarité de 2 vecteurs
 équation d’une droite passant par 2 points dont on connaît les coordonnées.

-> Produit scalaire de 2 vecteurs

Un peu d’arithmétique

L’arithmétique est un des domaines des mathématiques les plus appropriés pour commencer la programmation.


Calcul du pgcd par l’algorithme d’Euclide

Égalité de Bézout

La notion de fonction en images

-> Résolution approchée d’une équation par la méthode de dichotomie


-> Probabilités et loi binomiale

Factorielle
script avec boucle
script récursif

Coefficients binomiaux
Loi binomiale


-> Une activité sur le codage de la couleur et les pourcentages

Cet exercice peut être réalisé en accompagnement personnalisé et mener à un travail sur les pourcentages.

-> Fractale de Von Koch aléatoire

Magie des mathématiques...

Et pour terminer, voici des citations qui me tiennent à coeur.

La première sur l’imagination est d’Albert Einstein. Imagination sans laquelle les mathématiques ne seraient pas ce qu’elles sont aujourd’hui.

  • Logic will get you from A to B. Imagination will take you everywhere. [14]

Les suivantes sont toutes de Seymour Papert, le père du langage Logo.

  • The role of the teacher is to create the conditions for invention rather than provide ready-made knowledge.
  • The reason most kids don’t like school is not that the work is too hard, but that it is utterly boring.
  • My basic idea is that programming is the most powerful medium of developing the sophisticated and rigorous thinking needed for mathematics, for grammar, for physics, for statistics, for all the « hard » subjects.... In short, I believe more than ever that programming should be a key part of the intellectual development of people growing up.
     [15]