site2wouf.fr : Algorithme — Séquence 9

Dieu lui-même croit à la publicité : il a mis des cloches dans les églises.

Aurélien Scholl (sur Mon tshirt!)

Partager :

Facebook X (Twitter) LinkedIn Email WhatsApp

La séquence 8 vous a semblé difficile — même si des résultats furent atteints, la fonction demandée ne fut jamais exempte de bugs. Il s'agissait de construire une fonction qui calcule, en fonction de l'indice d'une lettre et de la clef César, le nouvel indice.

def indice(n, clef):
    """ calcule le nouvel indice en connaissant la clef """
    return n + clef

La meilleure solution obtenue en séquence 8 fut :

def indice(n, clef):
    nouveau = n + clef
    if nouveau > 26:
        nouveau = nouveau - 26
    return nouveau

Pourtant cette fonction n'est pas si satisfaisante !

Problème avec clef négative

Elle pose problème dès qu'on décode (clef négative) ou si la clef est supérieure à 26 !

J'avais tenté de vous orienter vers la division euclidienne — pourquoi ? Simplement parce que le reste de la division euclidienne répond parfaitement au problème !

Les restes de la division euclidienne par 26 sont les entiers naturels de 0 à 25.

On pourrait ajouter 1 pour avoir le rang dans l'alphabet, mais pour Python l'indice du premier élément est 0 !

def indice(n, clef):
    return (n+clef)%26  # reste de la division euclidienne par 26
Solution avec modulo

Voici quelques fonctions en cadeau :

Code Python traduit en HTML :
alphabet = "abcdefghijklmnopqrstuvwxyz"

def nouvel_indice(n, clef):
    """ n est l'indice de départ, clef la clé César.
    Renvoie le nouvel indice calculé. """
    n = int(n)
    clef = int(clef)
    return (n+clef)%26  # reste de la division euclidienne par 26

def indice_lettre(x):
    """ x est une lettre, renvoie son indice """
    return alphabet.index(x)

def lettre_indice(x):
    """ x est un indice, renvoie la lettre associée """
    return alphabet[x]

def code_lettre(x, clef):
    """ x est une lettre, clef la clé César.
    Renvoie la nouvelle lettre codée. """
    return "C'est à vous de jouer !"

cesar.2.0.3

Une remarque importante sur la portée des variables

alphabet est définie en dehors des fonctions : c'est une variable globale, accessible partout dans le code.

Si elle avait été définie à l'intérieur de indice_lettre(), la fonction lettre_indice n'y aurait pas accès — on parlerait alors de variable locale.

Commentaires et mission

J'ai rebaptisé indice() en nouvel_indice() — nom plus parlant.

Elle devrait, une fois terminée, renvoyer la lettre codée avec la clef spécifiée.

Par exemple, code_lettre("a", 2) devrait renvoyer "c".

Quelques exemples qui vont bien…

Exemples qui fonctionnent

… et d'autres plus problématiques

Exemples problématiques

Remarque finale

Les plus rapides s'efforceront de régler les soucis liés :

Au cycle 4, les élèves s'initient à la programmation, en développant dans une démarche de projet quelques programmes simples, sans viser une connaissance experte et exhaustive d'un langage ou d'un logiciel particulier. En créant un programme, ils développent des méthodes de programmation, revisitent les notions de variables et de fonctions sous une forme différente, et s'entraînent au raisonnement.

Attendus de fin de cycle

Connaissances et compétences associées

Décomposer un problème en sous-problèmes afin de structurer un programme ; reconnaître des schémas. Écrire, mettre au point (tester, corriger) et exécuter un programme en réponse à un problème donné. Écrire un programme dans lequel des actions sont déclenchées par des événements extérieurs. Programmer des scripts se déroulant en parallèle. - Notions d'algorithme et de programme. - Notion de variable informatique. - Déclenchement d'une action par un événement, séquences d'instructions, boucles, instructions conditionnelles.

Exemples de situations, d'activités et de ressources pour l'élève

Jeux dans un labyrinthe, jeu de Pong, bataille navale, jeu de nim, tic tac toe. Réalisation de figure à l'aide d'un logiciel de programmation pour consolider les notions de longueur et d'angle. Initiation au chiffrement (Morse, chiffre de César, code ASCII...). Construction de tables de conjugaison, de pluriels, jeu du cadavre exquis... Calculs simples de calendrier. Calculs de répertoire (recherche, recherche inversée...). Calculs de fréquences d'apparition de chaque lettre dans un texte pour distinguer sa langue d'origine : français, anglais, italien, etc.

Repères de progressivité:

En 5e, les élèves s'initient à la programmation événementielle. Progressivement, ils développent de nouvelles compétences, en programmant des actions en parallèle, en utilisant la notion de variable informatique, en découvrant les boucles et les instructions conditionnelles qui complètent les structures de contrôle liées aux événements.

Liens utiles

Téléchargements