_2023
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.
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