Aller au contenu

Index des sujets 2023

Corrigé sujet 07 - Année : 2023

Sujet 07 - 2023

Exercice 1

 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 rappelle que pour fusionner deux listes déjà triées, on peut :

  • parcourir les deux listes en comparant leurs éléments, le plus petit est placé dans la liste fusion et on progresse dans le parcours de la liste correspondante
  • lorsque la fin d'une deux listes est atteinte on complète avec les éléments de l'autre. On peut aussi penser à une solution récursive du type:
    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

 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.
  • Dans l'un des exemples figurant sur le pdf on trouve traduire au lieu de traduire_romain comme nom de fonction.