Aller au contenu

Index des sujets 2022

Corrigé sujet 11 - Année : 2022

Sujet 11 - 2022

Exercice 1

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
def recherche(tab,elt):
    ind_debut = 0
    ind_fin = len(tab)-1
    while ind_fin > ind_debut:
        ind_milieu = (ind_fin+ind_debut)//2
        if tab[ind_milieu]==elt:
            return ind_milieu
        elif tab[ind_milieu]>elt:
            ind_fin=ind_milieu-1
        else:
            ind_debut=ind_milieu+1
    return -1

Commentaire

  • Bien qu'au programme (méthode diviser pour régner), cet exercice est bien plus difficile que ceux proposés habituellement en exercice 1 (recherche simple, recherche de maximum, calcul de moyennes, ... ).
  • En cas de difficultés, revenir au chapitre de première sur la recherche par dichotomie

Exercice 2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
ALPHABET='ABCDEFGHIJKLMNOPQRSTUVWXYZ'

def position_alphabet(lettre):
    return ALPHABET.find(lettre)

def cesar(message, decalage):
    resultat = ''
    for lettre in message : #(1)
        if lettre in ALPHABET :
            indice = (position_alphabet(lettre) + decalage)%26 #(2)
            resultat = resultat + ALPHABET[indice]
        else:
            resultat = resultat + lettre #(3)
    return resultat
  1. La variable de parcours du message s'appelle lettre comme indiqué à la ligne suivante !
  2. On ajoute le decalage à la position de la lettre le %26 sert ensuite à s'assurer qu'on retombe entre 0 et 25.
  3. Si la lettre n'est pas dans l'alphabet, on la laisse telle quelle

Attention

  1. La variable lettre de parcours du message peut contenir justement autre chose qu'une lettre (ponctuation, espace, ...)
  2. La méthode find de recherche de l'indice de la lettre dans l'alphabet pourrait s'écrire sans utiliser la méthode find (par exemple avec ord)