Aller au contenu

Ep 30

le document

l'algorithme

Issue de : 23-NSI-07⚓

EXERCICE 1⚓

Programmer la fonction fusion prenant en paramĂštres deux tableaux non vides tab1 et tab2 (type list) d'entiers, chacun dans l’ordre croissant, et renvoyant un tableau triĂ© dans l’ordre croissant et contenant l’ensemble des valeurs de tab1 et tab2.

Exemples :

🐍 Script Python
>>> fusion([3, 5], [2, 5])
[2, 3, 5, 5]
>>> fusion([-2, 4], [-3, 5, 10])
[-3, -2, 4, 5, 10]
>>> fusion([4], [2, 6])
[2, 4, 6]
>>> fusion([], [])
[]
>>> fusion([1, 2, 3], [])
[1, 2, 3]
RĂ©ponse

Complétez le code ci-dessous

###
# Mettre votre code icibksl-nlbksl-nl



Solution

###
def fusion(tab1, tab2):bksl-nl tabpy-undfusion = []bksl-nl i1 = 0bksl-nl i2 = 0bksl-nl while i1 < len(tab1) and i2 < len(tab2):bksl-nl if tab1[i1] < tab2[i2]:bksl-nl tabpy-undfusion.append(tab1[i1])bksl-nl i1 += 1bksl-nl else:bksl-nl tabpy-undfusion.append(tab2[i2])bksl-nl i2 += 1bksl-nlbksl-nl if i1 == len(tab1):bksl-nl while i2 < len(tab2):bksl-nl tabpy-undfusion.append(tab2[i2])bksl-nl i2 += 1bksl-nl else:bksl-nl while i1 < len(tab1):bksl-nl tabpy-undfusion.append(tab1[i1])bksl-nl i1 += 1 bksl-nlbksl-nl return tabpy-undfusionbksl-nlbksl-nltry:bksl-nl assert fusion([3, 5], [2, 5]) == [2, 3, 5, 5]bksl-nl assert fusion([-2, 4], [-3, 5, 10]) == [-3, -2, 4, 5, 10]bksl-nl assert fusion([4], [2, 6]) == [2, 4, 6]bksl-nl assert fusion([], []) == []bksl-nl assert fusion([1, 2, 3], []) == [1, 2, 3]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



EXERCICE 2⚓

Le but de cet exercice est d’écrire une fonction rĂ©cursive traduire_romain qui prend en paramĂštre une chaĂźne de caractĂšres, non vide, reprĂ©sentant un nombre Ă©crit en chiffres romains et qui renvoie son Ă©criture dĂ©cimale.

Les chiffres romains considérés sont : I, V, X, L, C, D et M. Ils représentent respectivement les nombres 1, 5, 10, 50, 100, 500, et 1000 en base dix.

On dispose d’un dictionnaire romains dont les clĂ©s sont les caractĂšres apparaissant dans l’écriture en chiffres romains et les valeurs sont les nombres entiers associĂ©s en Ă©criture dĂ©cimale :

  • romains = {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000}

Le code de la fonction traduire_romain fournie repose sur le principe suivant :

  • la valeur d’un caractĂšre est ajoutĂ©e Ă  la valeur du reste de la chaĂźne si ce caractĂšre a une valeur supĂ©rieure (ou Ă©gale) Ă  celle du caractĂšre qui le suit ;

  • la valeur d’un caractĂšre est retranchĂ©e Ă  la valeur du reste de la chaĂźne si ce caractĂšre a une valeur strictement infĂ©rieure Ă  celle du caractĂšre qui le suit.

Ainsi, XIV correspond au nombre 10 + 5 - 1 puisque :

  • la valeur de X (10) est supĂ©rieure Ă  celle de I (1), on ajoute donc 10 Ă  la valeur du reste de la chaĂźne, c’est-Ă -dire IV ;

  • la valeur de I (1) est strictement infĂ©rieure Ă  celle de V (5), on soustrait donc 1 Ă  la valeur du reste de la chaĂźne, c’est-Ă -dire V.

On rappelle que pour priver une chaüne de caractùres de son premier caractùre, on utilisera l’instruction :

  • nom_de_variable[1:]

Par exemple, si la variable mot contient la chaĂźne "CDI", mot[1:] renvoie "DI".

Compléter le code de la fonction traduire_romain et le tester.

🐍 Script Python
1
2
3
4
5
6
7
8
9
def traduire_romain(nombre):
    """ Renvoie l'écriture décimale du nombre donné en chiffres
    romains """
    if len(nombre) == 1:
        return ... 
    elif romains[nombre[0]] >= ...: 
        return romains[nombre[0]] + ... 
    else:
        return ... 

Exemples :

🐍 Script Python
>>> traduire_romain("XIV")
14
>>> traduire_romain("CXLII")
142
>>> traduire_romain("MMXXIII")
2023
RĂ©ponse

Complétez le code ci-dessous

###
def traduirepy-undromain(nombre):bksl-nl """ Renvoie l'écriture décimale du nombre donné en chiffresbksl-nl romains """bksl-nl if len(nombre) == 1:bksl-nl return ... bksl-nl elif romains[nombre[0]] >= ...: bksl-nl return romains[nombre[0]] + ... bksl-nl else:bksl-nl return ... bksl-nlbksl-nlromains = {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000}bksl-nl



Solution

###
romains = {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000}bksl-nlbksl-nldef traduirepy-undromain(nombre):bksl-nl """ Renvoie l’écriture dĂ©cimale du nombre donnĂ© en chiffresbksl-nl romains """bksl-nl if len(nombre) == 1:bksl-nl return romains[nombre]bksl-nl elif romains[nombre[0]] >= romains[nombre[1]]:bksl-nl return romains[nombre[0]] + traduirepy-undromain(nombre[1:])bksl-nl else:bksl-nl return traduirepy-undromain(nombre[1:]) - romains[nombre[0]]bksl-nl bksl-nltry:bksl-nl assert traduirepy-undromain("XIV") == 14bksl-nl assert traduirepy-undromain("CXLII") == 142bksl-nl assert traduirepy-undromain("MMXXIII") == 2023bksl-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