Aller au contenu

Ep 21

▶ TĂ©lĂ©charger le sujet en pdf.

EXERCICE 1⚓

Le codage par diffĂ©rence (delta encoding en anglais) permet de compresser un tableau dedonnĂ©es en indiquant pour chaque donnĂ©e, sa diffĂ©rence avec la prĂ©cĂ©dente (plutĂŽt que la donnĂ©e elle-mĂȘme). On se retrouve alors avec un tableau de donnĂ©es plus petit, nĂ©cessitant moins de place en mĂ©moire. Cette mĂ©thode se rĂ©vĂšle efficace lorsque les valeurs consĂ©cutives sont proches.

Programmer la fonction delta(liste) qui prend en paramĂštre un tableau non vide de nombres entiers et qui renvoie un tableau contenant les valeurs entiĂšres compressĂ©es Ă  l’aide cette technique.

Exemples :

🐍 Script Python
    >>> delta([1000, 800, 802, 1000, 1003])
    [1000, -200, 2, 198, 3]
    >>> delta([42])
    [42] 
RĂ©ponse

Complétez le code ci-dessous

###
# Mettez votre code icibksl-nlbksl-nl



Solution

###
bksl-nldef delta(tab):bksl-nl diff = [tab[0]]bksl-nl for i in range(1, len(tab)):bksl-nl diff.append(tab[i] - tab[i-1])bksl-nl return diffbksl-nlbksl-nl



EXERCICE 2⚓

Une expression arithmĂ©tique ne comportant que les quatre opĂ©rations +, −, ×, Ă· peut ĂȘtre reprĂ©sentĂ©e sous forme d’arbre binaire. Les nƓuds internes sont des opĂ©rateurs et les feuilles sont des nombres. Dans un tel arbre, la disposition des nƓuds joue le rĂŽle des parenthĂšses que nous connaissons bien.

image

En parcourant en profondeur infixe l’arbre binaire ci-dessus, on retrouve l’expression notĂ©e habituellement :

\[(3 \times (8 + 7)) − (2 + 1)\]

La classe Noeud ci-aprĂšs permet d’implĂ©menter une structure d’arbre binaire.

ComplĂ©ter la fonction rĂ©cursive expression_infixe qui prend en paramĂštre un objet de la classe Noeud et qui renvoie l’expression arithmĂ©tique reprĂ©sentĂ©e par l’arbre binaire passĂ© en paramĂštre, sous forme d’une chaĂźne de caractĂšres contenant des parenthĂšses.

RĂ©sultat attendu avec l’arbre ci-dessus :

🐍 Script Python
    >>> e = Noeud(Noeud(Noeud(None, 3, None), '*', Noeud(Noeud(None, 8, None), '+', Noeud(None, 7, None))), '-', Noeud(Noeud(None, 2, None), '+', Noeud(None, 1, None)))
    >>> expression_infixe(e)
    '((3*(8+7))-(2+1))'
RĂ©ponse

Complétez le code ci-dessous

###
class Noeud:bksl-nl '''bksl-nl classe implémentant un noeud d'arbre binairebksl-nl '''bksl-nlbksl-nl def py-undpy-undinitpy-undpy-und(self, g, v, d):bksl-nl '''bksl-nl un objet Noeud possÚde 3 attributs :bksl-nl - gauche : le sous-arbre gauche,bksl-nl - valeur : la valeur de l'étiquette,bksl-nl - droit : le sous-arbre droit.bksl-nl '''bksl-nl self.gauche = gbksl-nl self.valeur = vbksl-nl self.droit = dbksl-nlbksl-nl def py-undpy-undstrpy-undpy-und(self):bksl-nl '''bksl-nl renvoie la représentation du noeud en chaine de caractÚresbksl-nl '''bksl-nl return str(self.valeur)bksl-nlbksl-nl def estpy-undunepy-undfeuille(self):bksl-nl '''bksl-nl renvoie True si et seulement si le noeud est une feuillebksl-nl '''bksl-nl return self.gauche is None and self.droit is Nonebksl-nlbksl-nlbksl-nldef expressionpy-undinfixe(e):bksl-nl s = ...bksl-nl if e.gauche is not None:bksl-nl s = '(' + s + expressionpy-undinfixe(...)bksl-nl s = s + ...bksl-nl if ... is not None:bksl-nl s = s + ... + ...bksl-nl return sbksl-nlbksl-nl



Solution

###
class Noeud:bksl-nl '''bksl-nl classe implémentant un noeud d'arbre binairebksl-nl '''bksl-nlbksl-nl def py-undpy-undinitpy-undpy-und(self, g, v, d):bksl-nl '''bksl-nl un objet Noeud possÚde 3 attributs :bksl-nl - gauche : le sous-arbre gauche,bksl-nl - valeur : la valeur de l'étiquette,bksl-nl - droit : le sous-arbre droit.bksl-nl '''bksl-nl self.gauche = gbksl-nl self.valeur = vbksl-nl self.droit = dbksl-nlbksl-nl def py-undpy-undstrpy-undpy-und(self):bksl-nl '''bksl-nl renvoie la représentation du noeud en chaine de caractÚresbksl-nl '''bksl-nl return str(self.valeur)bksl-nlbksl-nl def estpy-undunepy-undfeuille(self):bksl-nl '''bksl-nl renvoie True si et seulement si le noeud est une feuillebksl-nl '''bksl-nl return self.gauche is None and self.droit is Nonebksl-nlbksl-nlbksl-nldef expressionpy-undinfixe(e):bksl-nl s = ''bksl-nl if e.gauche is not None:bksl-nl s = '(' + s + expressionpy-undinfixe(e.gauche)bksl-nl s = s + str(e.valeur)bksl-nl if e.droit is not None:bksl-nl s = s + expressionpy-undinfixe(e.droit) + ')'bksl-nl return sbksl-nlbksl-nl