Aller au contenu

Ep 46

le document

l'algorithme

Issue de : 23-NSI-19⚓

EXERCICE 1⚓

Écrire une fonction recherche qui prend en paramĂštres un tableau tab de nombres entiers triĂ©s par ordre croissant et un nombre entier n, et qui effectue une recherche dichotomique du nombre entier n dans le tableau non vide tab.

Cette fonction doit renvoyer un indice correspondant au nombre cherchĂ© s’il est dans le tableau, -1 sinon.

Exemples :

🐍 Script Python
>>> recherche([2, 3, 4, 5, 6], 5)
3
>>> recherche([2, 3, 4, 6, 7], 5)
-1

RĂ©ponse

Complétez le code ci-dessous

###
# Mettre ici votre codebksl-nlbksl-nl



Solution

###
def recherche(tab, n):bksl-nl indpy-unddebut = 0bksl-nl indpy-undfin = len(tab) - 1bksl-nl while indpy-unddebut <= indpy-undfin:bksl-nl indpy-undmilieu = (indpy-unddebut + indpy-undfin) // 2bksl-nl if tab[indpy-undmilieu] == n:bksl-nl return indpy-undmilieubksl-nl elif tab[indpy-undmilieu] < n:bksl-nl indpy-unddebut = indpy-undmilieu + 1bksl-nl else:bksl-nl indpy-undfin = indpy-undmilieu - 1bksl-nl return -1bksl-nlbksl-nltry:bksl-nl assert recherche([2, 3, 4, 5, 6], 5) == 3bksl-nl assert recherche([2, 3, 4, 6, 7], 5) == -1bksl-nl print('Tout semble correct 👍')bksl-nlbksl-nlexcept AssertionError as asser:bksl-nl print('Le rĂ©sultat de votre fonction n\'est pas conforme đŸ€”')bksl-nl



EXERCICE 2⚓

Le codage de CĂ©sar transforme un message en changeant chaque lettre en la dĂ©calant dans l’alphabet. Par exemple, avec un dĂ©calage de 3, le A se transforme en D, le B en E, ..., le X en A, le Y en B et le Z en C. Les autres caractĂšres (‘!’,’ ?’ ...) ne sont pas codĂ©s.

La fonction position_alphabet ci-dessous prend en paramùtre un caractùre lettre et renvoie la position de lettre dans la chaüne de caractùres ALPHABET s’il s’y trouve.

La fonction cesar prend en paramÚtre une chaßne de caractÚres message et un nombre entier decalage et renvoie le nouveau message codé avec le codage de César utilisant le décalage decalage.

🐍 Script Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

def position_alphabet(lettre):
    '''Renvoie la position de la lettre dans l'alphabet'''
    return ord(lettre) - ord('A')

def cesar(message, decalage):
    '''Renvoie le message codé par la méthode de César
    pour le decalage donné'''
    resultat = ''
    for ... in message: 
        if 'A' <= c and c <= 'Z':
            indice = (...) % 26 
            resultat = resultat + alphabet[indice]
        else:
            resultat = ... 
    return resultat

Exemples :

🐍 Script Python
>>> cesar('BONJOUR A TOUS. VIVE LA MATIERE NSI !', 4)
'FSRNSYV E XSYW. ZMZI PE QEXMIVI RWM !'
>>> cesar('GTSOTZW F YTZX. ANAJ QF RFYNJWJ SXN !', -5)
'BONJOUR A TOUS. VIVE LA MATIERE NSI !'

RĂ©ponse

Complétez le code ci-dessous

###
ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'bksl-nlbksl-nldef positionpy-undalphabet(lettre):bksl-nl return ord(lettre) - ord('A')bksl-nlbksl-nldef cesar(message, decalage):bksl-nl resultat = ''bksl-nl for ... in message:bksl-nl if 'A' <= c and c <= 'Z':bksl-nl indice = ( ... ) % 26bksl-nl resultat = resultat + ALPHABET[indice]bksl-nl else:bksl-nl resultat = ...bksl-nl return resultatbksl-nlbksl-nl



Solution

###
ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'bksl-nlbksl-nldef positionpy-undalphabet(lettre):bksl-nl return ord(lettre) - ord('A')bksl-nlbksl-nldef cesar(message, decalage):bksl-nl resultat = ''bksl-nl for c in message:bksl-nl if 'A' <= c and c <= 'Z':bksl-nl indice = (positionpy-undalphabet(c) + decalage) % 26bksl-nl resultat = resultat + ALPHABET[indice]bksl-nl else:bksl-nl resultat = resultat + cbksl-nl return resultatbksl-nlbksl-nltry:bksl-nl assert cesar('BONJOUR A TOUS. VIVE LA MATIERE NSI !', 4) == 'FSRNSYV E XSYW. ZMZI PE QEXMIVI RWM !'bksl-nl assert cesar('GTSOTZW F YTZX. ANAJ QF RFYNJWJ SXN !', -5) == 'BONJOUR A TOUS. VIVE LA MATIERE NSI !'bksl-nl print('Tout semble correct 👍')bksl-nlbksl-nlexcept AssertionError as asser:bksl-nl print('Le rĂ©sultat de votre fonction n\'est pas conforme đŸ€”')bksl-nl