SE CONNECTER
1,2,3... codez ! | Le site de la Fondation La main à la pâte
Module 123 Codez | Programmer | Informatics and Digital Creation

Projet « Cryptographie » – Séance 8 Programmer le chiffrement de César (1)


1, 2, 3, codez ! - Activités cycle 4 - Projet « Cryptographie » - Séance 8 : Programmer le chiffrement de César (1/4)

Discipline dominante

Mathématiques

Résumé

Les élèves explicitent l’algorithme et listent les étapes qui vont structurer leur projet de programmation du chiffrement de César. Ils programment, dans l’environnement Scratch, une première fonction permettant de trouver la lettre correspondant à un rang dans l’alphabet.

Notions

« Langage »    

  •  Un programme est l'expression d'un algorithme dans un langage de programmation
  •  Scratch est un environnement de programmation graphique.
  •  Certaines instructions s’exécutent à la suite les unes des autres : on parle de programmation séquentielle.

 « Machine »

  •  Les machines qui nous entourent ne font qu'exécuter des ordres (instructions) exprimés dans des langages particuliers
  •  En combinant des instructions élémentaires, nous pouvons leur faire exécuter des tâches complexes.
  •  Une variable est un nom que l'on donne à une zone de mémoire. Elle permet de stocker une valeur et de la réutiliser plus tard, ou de la modifier.

« Bonnes habitudes de programmation »

  •  Lorsqu’un même bloc d’instructions doit être utilisé plusieurs fois dans un programme, il est judicieux de l’intégrer dans une fonction.
  •  Il est préférable d’initialiser une variable dès sa création.
  •  Les variables et les fonctions doivent avoir des noms explicites.

  « Algorithme »

  •  Un algorithme peut contenir des instructions, des boucles, des tests, des variables.
  •  Un test permet de choisir quelle action effectuer si une condition est vérifiée ou non

Matériel

Pour chaque binôme

  •  Un ordinateur possédant une connexion Internet (pour utiliser la version en ligne de Scratch) ou ayant Scratch préinstallé
  •  (facultatif) photocopie de la Fiche 11

Pour la classe

  •  Un vidéoprojecteur, utile lors des mises en commun

Note pédagogique

  •  Dans ce qui suit, nous supposons que les élèves (et le professeur) ont déjà programmé en Scratch et en connaissent les bases (créer un programme, l’enregistrer, utiliser les commandes les plus courantes…).
    - Si c’est le cas, les séances qui suivent ne posent pas de problème majeur.
    -  Si cela n’est pas le cas, nous renvoyons le lecteur au chapitre « Introduction générale à Scratch » pour une  discussion générale (pourquoi le choix de Scratch, quels sont ses avantages et ses limites, comment l’installer, etc.) ainsi que pour une séance de prise en main (familiarisation avec l’interface, exercices d’initiation, etc.).
  •  Comme expliqué dans le chapitre « Initiation à Scratch », les élèves avancent à des rythmes très différents dans ces activités de programmation. Nous encourageons le professeur à leur permettre, autant que possible, d’avancer à leur rythme.
  •  Pour cette raison, le découpage en séance est purement indicatif et ne doit pas être considéré comme un cadre à suivre par la classe dans son ensemble. À la fin de chaque séance, certains binômes n’auront pas terminé toutes les étapes, tandis que d’autres auront démarré celles des séances suivantes…

Étape 1 : définir les différentes étapes du projet  (20 minutes ; collectivement)

Le professeur explique aux élèves qu’ils vont réaliser des programmes permettant d’exécuter plus facilement certaines actions qu’ils ont faites de manière « débranchée » (ou « à la main ») jusqu’à présent. Il leur propose de commencer par le plus simple : le chiffrement de César.

Dans un premier temps, la classe réfléchit collectivement à l’algorithme de ce chiffrement et fait la liste des éléments qui seront nécessaires pour que le programme produise ce que l’on attend de lui :

  •  Chaque lettre figurant dans le message clair est remplacée par une lettre qui est décalée d’un certain nombre de rangs (la « clé ») dans l’alphabet.
  •  Le programme doit donc :
    •  Permettre à l’utilisateur de saisir le message à chiffrer (qui doit être enregistré dans une variable, nommée par exemple « message_clair »)
    •  Permettre à l’utilisateur de saisir la valeur de la clé (qui doit également être stockée dans une variable, nommée « clé »)
    •  Stocker l’alphabet dans une variable (que nous nommerons simplement « alphabet »)
    •  Chiffrer le message, et enregistrer résultat dans une nouvelle variable (nommée, par exemple « message_chiffré »), qui doit être affichée à l’écran.

Note pédagogique :

  •  Même si les élèves ont déjà été initiés à Scratch, il est peu probable qu’ils soient familiers avec la notion d’algorithme au point de pouvoir verbaliser ce que doit faire un programme avant de le programmer. Pour cette raison, nous conseillons de réaliser cette étape collectivement. À mesure qu’ils progresseront dans le projet, ils pourront prendre de l’autonomie sur ce type de tâche.
  •  Cette explicitation collective a par ailleurs un autre avantage : elle permet de fixer un cadre général que les élèves vont noter pour, ensuite, pouvoir suivre en autonomie sans forcément avoir besoin de tous avancer au même rythme.

Une fois que la classe sait ce que doit faire le programme, et comment il doit le faire, il reste une étape importante à discuter collectivement : comment allons-nous nous y prendre ?
Il s’agit maintenant de découper le projet (une tâche complexe) en plusieurs sous-projets (tâches plus élémentaires).
À titre d’exemple, voici comment on peut « découper » un tel projet :

  •  Dans un premier temps, on va chercher à ne traiter qu’une seule lettre, et pas un message complet
  •  Pour savoir comment décaler une lettre d’un certain rang, on doit être capable de trouver quel est le rang d’une lettre donnée dans l’alphabet (par exemple, la lettre n°3 est C) et, réciproquement, quelle est la lettre qui correspond à un rang donné (la lettre F occupe le rang n°6). Le professeur conseille de réaliser une tâche après l’autre et de commencer par la tâche la plus facile : trouver la lettre qui correspond à un certain rang.
  •  On doit savoir décaler les lettres d’un certain rang mais, quand on dépasse 26 (lettre Z), on doit revenir à 1 (lettre A).

Les étapes du projet, telles qu’elles sont définies par la classe, deviennent donc :

Difficulté

Nom de l’étape

Nature des tâches à réaliser

Étape 1 - Définir les étapes du projet

  • C’est le travail que la classe est en train de faire, étape primordiale au démarrage d’un projet.

Étape 2 - Obtenir la lettre d’un certain rang

  • Écrire un programme qui demande un rang et donne la lettre ayant ce rang dans l’alphabet.

Étape 3 – Créer une fonction (1/2)

  • Apprendre à manipuler les fonctions dans un programme.

Étape 4 – Créer une fonction (2/2)

  • Écrire une fonction qui remplit l’objectif de l’étape 2.
  • Écrire un programme pour tester cette fonction.

Étape 5 - Obtenir le rang d’une certaine lettre

  • Écrire un programme qui demande une lettre et donne son rang dans l’alphabet.
  • En faire une fonction, et la tester.

Étape 6 - Chiffrer une lettre

  • Écrire un programme qui demande une clé, puis une lettre qu’il chiffre avec cette clé.
  • En faire une fonction, et la tester.
  • Transformer cette fonction pour qu’elle fonctionne si le rang + la clé dépasse 26.

Étape 7 - Chiffrer le message entier

  • Écrire un programme qui demande une clé et un message, et qui affiche le message chiffré.

Note scientifique

  •  Découper le travail de programmation en tâches élémentaires permet de tester les différentes parties du programme au fur et à mesure. C’est beaucoup plus  facile, et plus sûr, que d’écrire un long programme et de le tester à la fin (dans ce cas, on obtient en général de nombreux bugs qu’il est très difficile de résoudre)
  •  Travailler à l’aide de fonctions permet, une fois que la fonction est écrite, de passer à autre chose sans avoir besoin de toucher ce morceau de programme.

Étape 2 : obtenir la lettre d’un certain rang dans l’alphabet (50 minutes)

Note pédagogique :
Cette première étape est elle-même une tâche complexe dans la mesure où beaucoup d’opérations sont réalisées pour la première fois par les élèves (manipulation des chaînes de caractères et des variables…). Ne pas hésiter à faire de fréquentes mises en commun.

Cette étape nécessite d’utiliser la commande « demander » dans Scratch. Disponible dans l’onglet [d16]bleu clair intitulé « capteurs », cette commande permet de poser une question et de stocker le résultat dans une variable (déjà existante) appelée « réponse ».
Si les élèves n’ont jamais utilisé cette fonctionnalité, ni manipulé de chaines de caractères dans Scratch, nous conseillons de leur proposer les exercices de la Fiche 11. Le corrigé est :

Programme 1

Le programme recopie à l’écran le mot que l’utilisateur a saisi au clavier (et qui a été enregistré dans une variable « réponse », créée automatiquement).

Programme 2

Le programme répète le nom qui a été saisi au clavier, en le faisant précéder de « bonjour » (avec un espace derrière « bonjour » de façon à ce que les 2 mots ne soient pas collés l’un à l’autre).

Programme 3

Le programme renvoie la première lettre du nom saisi au clavier.

Programme 4

Le programme renvoie la lettre correspondant au numéro qui a été saisi au clavier.
Par exemple, si l’utilisateur tape « 2 », le programme renvoie la 2ème lettre du mot CESAR, soit « E ».

La réponse au problème posé initialement (faire afficher la lettre d’un certain rang de l’alphabet) peut se programmer de la façon suivante :

Si nécessaire, l’enseignant peut découper cette étape en tâches plus élémentaires, en leur demandant :

  • 1. de faire afficher l’alphabet
  • 2. de faire afficher la lettre 13 de l’alphabet
  • 3. de demander le rang, puis de faire afficher la lettre correspondante à ce rang

Pour éviter d’avoir à répéter plusieurs fois tout l’alphabet, et simplifier la lecture du programme, stocker l’alphabet dans une variable. Le programme devient simplement :

Note scientifique :
créer une variable se fait via l’onglet orange intitulé « données ».

On peut améliorer la réponse et, ce faisant, se familiariser avec la concaténation des chaînes de caractères (qui sera fort utile pour la dernière étape) :

Bilan intermédiaire

La classe établit un bilan d’étape :

  •  le programme permet de trouver quelle lettre se situe à un rang donné dans l’alphabet
  •  Certains concepts clés de la programmation ont été vus (ou revus) :
    •  séquence d’instructions
    •  variables
    •  entrées, sorties