Aller au contenu

Corrigé sujet 07 - Année : 2023⚓︎

Sujet 07 - 2022

Exercice 1⚓︎

🐍 Script Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
def fusion(tab1,tab2):
    i1,i2 = 0,0
    tab = []
    while i1<len(tab1) and i2<len(tab2):
        if tab1[i1]<tab2[i2]:
            tab.append(tab1[i1])
            i1 += 1
        else:
            tab.append(tab2[i2])
            i2 += 1
    tab = tab + tab1[i1:] + tab2[i2:]
    return tab

Commentaire

Même si le tri fusion est au programme de terminale, l'exercice est sans doute difficile.
On peut aussi penser à une solution récursive du type:

🐍 Script Python
def fusion(l1,l2):
    if l1 == []: return l2
    if l2 == []: return l1
    if l1[0]<l2[0]: 
        return [l1[0]] + fusion(l1[1:],l2)
    else:
        return [l2[0]] + fusion(l1,l2[1:])

Exercice 2⚓︎

🐍 Script Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
romains = {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000}

def traduire_romain(nombre) :
    """ Renvoie l'ecriture decimale du nombre donné en chiffres romains """
    if len(nombre) == 1:
        return romains[nombre] #(1)
    elif romains[nombre[0]] >= romains[nombre[1]] :
        return romains[nombre[0]] + traduire_romain(nombre[1:]) #(2)
    else:
        return traduire_romain(nombre[1:]) - romains[nombre[0]] #(3)
  1. Si le nombre contient un unique chiffre, on renvoie sa valeur.
  2. Ici, il faut ajouter la valeur de la première lettre car elle est supérieure à la valeur de la lettre suivante.
  3. Ici, il faut soustraire car elle est inférieure à la valeur de la lettre suivante.

Attention

  • Le sujet utilise les slices (nombre_droite = nombre[1:]) qui ne sont pas au programme.