Parcours Les messages secrets Étape 1
Décaler une lettre
Trouver la position d'une lettre dans l'alphabet et afficher la lettre décalée de 3 rangs, en revenant au début après le Z.
Notions :positionindex d'un textemod
Le code de César remplace chaque lettre par celle qui se trouve 3 rangs plus loin : A devient D, B devient E… Pour cela, on range l'alphabet dans un texte, et position donne le rang d'une lettre :
p vaut position("C", alphabet)p vaut 3, car les positions d'un texte commencent à 1. Si la lettre n'est pas dans l'alphabet, position renvoie 0.
Revenir au début après le Z
X décalé de 3 devrait donner la 27e lettre… qui n'existe pas. Il faut revenir au début : X donne A. C'est le travail de mod, le reste de la division :
alphabet[(p - 1 + cle) mod 26 + 1]
- on passe d'une position de 1 à 26 à un rang de 0 à 25 (
p - 1) ; - on ajoute le décalage, et
mod 26ramène le résultat entre 0 et 25 ; - on revient à une position de texte (
+ 1).
Pour X (24) : (23 + 3) mod 26 = 0, et 0 + 1 = 1, c'est A.
Ouvrez CoddyRun et partez d'un programme vide : tout commence ici.
Il te faut le logiciel pour faire cette étape. Il est gratuit : crée ton compte pour le télécharger, puis reviens ici, ta place t'attend.
Créer mon compte et téléchargerIndice 1
Déclarez alphabet, lettre est un texte et p, cle est un nombre.
Indice 2
Mettez la lettre saisie en majuscule : lettre vaut majuscules(lettre).
Indice 3
Si p vaut 0, ce n'est pas une lettre : affichez un message au lieu de chiffrer.
Voir la solution complète
Essayez d'abord par vous-même : c'est en cherchant qu'on apprend. La solution sert à vérifier ou à se débloquer.
@ Les déclarations
alphabet, lettre est un texte
p, cle est un nombre
@ Le décalage
alphabet vaut "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
cle vaut 3
html("<h2>Le code de César</h2>")
demande "Une lettre : " dans lettre
lettre vaut majuscules(lettre)
p vaut position(lettre, alphabet)
si p = 0 ou longueur(lettre) <> 1 alors
affiche "Ce n'est pas une lettre de A à Z."
sinon
affiche lettre + " devient " + alphabet[(p - 1 + cle) mod 26 + 1]
fin si