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

Projet « Cryptographie » – Séance 10 Programmer le chiffrement de César 3


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

Discipline dominante

Mathématiques

Résumé

Les élèves avancent leur programme du chiffrement de César : ils sont capables de trouver le rang d’une lettre, puis de chiffrer cette lettre en décalant le rang d’un certain nombre (la clé).

Notions

« Algorithmes »

  •  Une boucle permet de répéter plusieurs fois la même action
  •  Certaines boucles, dites "itératives", sont répétées un nombre prédéfini de fois.
  •  Un test permet de choisir quelle action effectuer si une condition est vérifiée ou non
  •  une condition est une expression qui est soit vraie, soit fausse
  •  On peut utiliser des opérateurs logiques comme ET, OU,  NON pour fabriquer des expressions logiques.

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é

Pour la classe

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

Le professeur rappelle les différentes étapes du projet. La classe enchaîne par l’étape n°5.

Note pédagogique
À partir de maintenant, les élèves vont réutiliser des éléments qu’ils ont déjà vus (fonctions, chaînes de caractères) : ils vont donc être davantage autonomes et avancer à leur propre rythme.

Étape 5 : obtenir le rang d’une certaine lettre (20 minutes)

Trouver quel est le rang d’une lettre donnée nécessite de parcourir tout l’alphabet et de tester, pour chaque rang, si la lettre de ce rang est bien la lettre considérée. Il faut donc utiliser une boucle.
Le programme ressemble à :

Ce programme nécessite la création de 2 variables :

  •  « Rang_de_lettre », qui est notre résultat final
  •  « Rang_actuel », qui sert à se repérer dans la boucle

De la même manière qu’à l’étape précédente, les élèves vont devoir créer une fonction qui remplit cette tâche, et écrire un programme qui permet de tester cette fonction. Attention, ici l’argument de la fonction n’est plus un nombre, mais une chaîne de caractères. On note au passage qu’il a fallu renommer la variable Rang_de_lettre en Var_rang_de_lettre, pour rester en cohérence avec notre convention de nommage.


NB : l’ajout de commentaires est traité en étape 11.

Étape 6 : chiffrer une lettre (20 minutes)

Au cours de cette étape, les élèves vont devoir utiliser les deux fonctions qu’ils ont définies précédemment afin de trouver le rang d’une lettre, lui ajouter un certain nombre (la clé), et renvoyer la lettre correspondant à ce nouveau rang décalé.
La difficulté tient dans l’utilisation de la fonction « modulo » (voir plus bas à la fin de cette étape).

À noter : on ne touche plus aux deux fonctions « Rang_de_lettre » et « Lettre_de_Rang ».

On remarque que ce programme fonctionne bien, sauf lorsque le rang de la lettre + la clé dépasse 26. En effet, si la clé vaut 3 et que l’on veut chiffrer la lettre Y, il faut la remplacer par la lettre de rang 25+3 = 28… cela correspond à la lettre B puisqu’à la place du rang 27 on reboucle sur le rang 1 (lettre A).
Le professeur introduit la fonction « modulo » dont il explique le principe. La fonction modulo (n) renvoie une valeur qui correspond au reste de la division euclidienne d’un nombre par n. Ainsi :[d17][d18]

  •  13 modulo 3 vaut 1, car 13 = 4 x 3 + 1 (en français : le reste de la division de 13 par 3 vaut 1)
  •  1 modulo 26 vaut 1
  •  26 modulo 26 vaut 0
  •  27 modulo 26 vaut 1
  •  28 modulo 26 vaut 2
  •  etc.

Cette fonction s’approche du but recherché. Cependant, il n’existe pas de lettre de rang = 0 (nous commençons à compter les rangs à partir de 1). Pour cette raison, il faut d’abord retrancher 1 à la variable, puis utiliser la fonction modulo, puis rajouter 1. Le programme est alors modifié de la façon suivante.

Note pédagogique

  •  Il est très peu probable que les élèves trouvent cette astuce par eux-mêmes. Ne pas hésiter à la leur présenter et vérifier collectivement qu’elle répond bien au problème qui nous préoccupe.
  •  On peut éventuellement se passer de la fonction « modulo » en effectuant un test sur le rang de la lettre et la clé. SI rang+clé <27, ALORS prendre la lettre (rang+clé), SINON prendre la lettre « rang+clé-26 ». Cela fonctionnera si le rang + la clé donne un nombre compris entre 1 et 52, ce qui est moins satisfaisant que la fonction modulo (qui donnera le bon résultat pour tout nombre entier).

Bilan intermédiaire

La classe établit un bilan d’étape :

  •  à ce stade, le programme permet de chiffrer une lettre (mais pas encore un message complet)
  •  La notion de « boucle », essentielle en programmation, a été vue (ou revue)
  •  Les élèves ont également appris à utiliser des fonctions mathématiques dans un programme (addition, fonction modulo).