Aller au contenu

Ep 43

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

EXERCICE 1⚓

Écrire une fonction ecriture_binaire_entier_positif qui prend en paramĂštre un entier positif n et renvoie une liste d'entiers correspondant Ă  lâ€˜Ă©criture binaire de n.

Ne pas oublier d’ajouter au corps de la fonction une documentation et une ou plusieurs assertions pour vĂ©rifier les prĂ©-conditions.

Exemples :

🐍 Script Python
    >>> ecriture_binaire_entier_positif(0)
    [0]
    >>> ecriture_binaire_entier_positif(2)
    [1, 0]
    >>> ecriture_binaire_entier_positif(105)
    [1, 1, 0, 1, 0, 0, 1]

Aide :

  • l'opĂ©rateur // donne le quotient de la division euclidienne : 5//2 donne 2 ;
  • l'opĂ©rateur % donne le reste de la division euclidienne :5%2 donne 1 ;
  • append est une mĂ©thode qui ajoute un Ă©lĂ©ment Ă  une liste existante :
    • Soit T=[5,2,4], alors T.append(10) ajoute 10 Ă  la liste T. Ainsi, T devient [5,2,4,10].
  • reverse est une mĂ©thode qui renverse les Ă©lĂ©ments d'une liste.
    • Soit T=[5,2,4,10]. AprĂšs T.reverse(), la liste devient [10,4,2,5].

On remarquera qu’on rĂ©cupĂšre la reprĂ©sentation binaire d’un entier n en partant de la gauche en appliquant successivement les instructions :

  • b = n%2
  • n = n//2

répétées autant que nécessaire.

RĂ©ponse

Complétez le code ci-dessous

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



Solution

###
def ecriturepy-undbinairepy-undentierpy-undpositif(n):bksl-nl # cas particulier pour n = 0bksl-nl if n == 0:bksl-nl return [0]bksl-nl # cas généralbksl-nl b = []bksl-nl while n != 0:bksl-nl b.append(n % 2)bksl-nl n = n // 2bksl-nl b.reverse()bksl-nl return bbksl-nlbksl-nl



EXERCICE 2⚓

La fonction tri_bulles prend en paramĂštre une liste T d’entiers non triĂ©s et renvoie la liste triĂ©e par ordre croissant.

Le tri Ă  bulles est un tri en place qui commence par placer le plus grand Ă©lĂ©ment en derniĂšre position en parcourant la liste de gauche Ă  droite et en Ă©changeant au passage les Ă©lĂ©ments voisins mal ordonnĂ©s (si la valeur de l’élĂ©ment d’indice i a une valeur strictement supĂ©rieure Ă  celle de l’indice i + 1, ils sont Ă©changĂ©s). Le tri place ensuite en avant-derniĂšre position le plus grand Ă©lĂ©ment de la liste privĂ©e de son dernier Ă©lĂ©ment en procĂ©dant encore Ă  des Ă©changes d’élĂ©ments voisins. Ce principe est rĂ©pĂ©tĂ© jusqu’à placer le minimum en premiĂšre position.

Exemple : pour trier la liste [7, 9, 4, 3] :

  • premiĂšre Ă©tape : 7 et 9 ne sont pas Ă©changĂ©s, puis 9 et 4 sont Ă©changĂ©s, puis 9 et 3 sont Ă©changĂ©s, la liste est alors [7, 4, 3, 9]
  • deuxiĂšme Ă©tape : 7 et 4 sont Ă©changĂ©s, puis 7 et 3 sont Ă©changĂ©s, la liste est alors [4, 3, 7, 9]
  • troisiĂšme Ă©tape : 4 et 3 sont Ă©changĂ©s, la liste est alors [3, 4, 7, 9]

Compléter le code Python ci-dessous qui implémente la fonction tri_bulles.

RĂ©ponse

Complétez le code ci-dessous

###
def tripy-undbulles(T):bksl-nl '''bksl-nl Renvoie le tableau T trié par ordre croissantbksl-nl '''bksl-nl n = len(T)bksl-nl for i in range(...,...,-1):bksl-nl for j in range(i):bksl-nl if T[j] > T[...]:bksl-nl ... = T[j]bksl-nl T[j] = T[...]bksl-nl T[j+1] = tempbksl-nl return Tbksl-nlbksl-nl



Solution

###
def tripy-undbulles(T):bksl-nl '''bksl-nl Renvoie le tableau T trié par ordre croissantbksl-nl '''bksl-nl n = len(T)bksl-nl for i in range(n-1,-1,-1):bksl-nl for j in range(i):bksl-nl if T[j] > T[j+1]:bksl-nl temp = T[j]bksl-nl T[j] = T[j+1]bksl-nl T[j+1] = tempbksl-nl return Tbksl-nlbksl-nl



Exemple :

🐍 Script Python
    >>> tri_bulles([])
    []
    >>> tri_bulles([7])
    [7]
    >>> tri_bulles([9, 3, 7, 2, 3, 1, 6])
    [1, 2, 3, 3, 6, 7, 9]
    >>> tri_bulles([9, 7, 4, 3])
    [3, 4, 7, 9]