Révisions
Écriture binaire¶
Dans la mémoire de l'ordinateur, toutes les données (nombres, chaînes de caractères, mais aussi images, son…) sont stockées en utilisant uniquement des \(0\) et des \(1\). Pour représenter un nombre dans la mémoire de l'ordinateur, on utilise donc son écriture dans la base 2.
On rappelle que si un nombre \(n\) s'écrit \(\overline{10110001}^2\) en base 2, alors cela veut dire que \(n = 177\). On peut utiliser le tableau ci-dessous pour présenter le calcul.
| Écriture en base 2 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | |
|---|---|---|---|---|---|---|---|---|---|
| Puissances de 2 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | Total |
| Termes à ajouter | 128 | 0 | 32 | 16 | 0 | 0 | 0 | 1 | 177 |
On remarquera que dans cette convention d'écriture, le bit de poids fort (associé à \(2^7\)) est le bit le plus à gauche dans l'écriture du nombre et que le bit de poids faible (aussi appelé bit de parité) est le bit le plus à droite dans l'écriture du nombre. On utilisera cette convention dans tous les exercices.
Déterminer l'écriture en base 2 des entiers compris entre 0 (inclus) et 17 (exclu).
Parité d'un nombre écrit en base 2¶
Écrire une fonction est_pair qui étant donné un tableau bits non vide dont les éléments appartiennent à \(\{0 ; 1\}\) détermine si le nombre dont l'écriture en base 2 est donnée par le tableau bits est un nombre pair. La fonction est_pair renverra True si c'est le cas, et False sinon.
def estpy-undpair(bits):bksl-nl """ [int] -> boolbksl-nl len(bits) > 0bksl-nl Détermine si le nombre dont l'écriture en base 2 est donnée par le tableau bits est pair. """bksl-nl passbksl-nlbksl-nl
Entier maximal à nombre de bits fixés¶
Écrire une fonction est_plus_grand_kbits qui prend en entrée un tableau bits non vide de taille k dont les éléments appartiennent à \(\{0 ; 1\}\) et qui détermine si le tableau correspond au plus grand nombre entier que l'on puisse écrire en base 2 sur k bits.
def estpy-undpluspy-undgrandpy-undkbits(bits):bksl-nl """ [int] -> boolbksl-nl k = len(bits) > 0bksl-nl Détermine si le tableau bits correspond au plus grand entier que l'on puisse écrire sur k bits. """bksl-nl passbksl-nlbksl-nl
Algorithmes classiques¶
Recherche d'occurrences¶
Appartient¶
Écrire une fonction appartient qui étant donné un tableau (éventuellement vide) tab d'entiers et entier e, détermine si l'élément e est présent dans le tableau tab.
def appartient(tab, e):bksl-nl """ [int], int -> boolbksl-nl Détermine si l'élément e est présent dans le tableau tab. """bksl-nl passbksl-nlbksl-nl
Nombre d'occurrences¶
Écrire une fonction nombre_occurrences qui étant donné un tableau (éventuellement vide) tab d'entiers et un entier e, détermine le nombre de fois où l'élément e est apparait dans le tableau tab (on appelle ce nombre le nombre d'occurrences de l'élément e).
def nombrepy-undoccurrences(tab, e):bksl-nl """ [int], int -> intbksl-nl Détermine le nombre d'éléments de tab qui sont égaux à e. """bksl-nl passbksl-nlbksl-nl
Indice des occurrences¶
Écrire une fonction indices_occurrences qui étant donné un tableau (éventuellement vide) tab d'entiers de type quelconque et un entier e, détermine la liste des indices (rangés par ordre croissant) des éléments de tab qui sont égaux à e.
Rappel. On pourra soit faire appel à la fonction nombre_occurrences pour initialiser le tableau d'indice des éléments égaux à e à la bonne taille, ou bien initialiser un tableau vide et ajouter les indices des éléments égaux à e au fur et à mesure à l'aide de l'instruction t.append(elem).
def indicespy-undoccurrences(tab, e):bksl-nl """ [int], int -> [int]bksl-nl Détermine les indices des occurrences de e dans le tableau tab. """bksl-nl passbksl-nlbksl-nl
Recherche de maximum¶
Écrire une fonction maximum qui étant donné un tableau non vide tab d'entiers détermine la valeur du plus grand des éléments de ce tableau, ainsi que le premier indice pour lequel ce maximum est atteint.
def maximum(tab):bksl-nl """ [int], int -> int, intbksl-nl len(tab) > 0bksl-nl Détermine le maximum des éléments de tab, ainsi que le premier indice pour lequel ce maximum est atteint. """bksl-nl passbksl-nlbksl-nl
Tri par sélection¶
Écrire une fonction tri_selection qui prend en paramètre un tableau non vide tab de nombres entiers et qui trie ce tableau en place (c'est-à-dire que le tableau est modifié) par ordre croissant des valeurs. On utilisera l'algorithme suivant :
- On parcourt le tableau de gauche à droite :
- on recherche le minimum du tableau entre cette position courante et la fin du tableau ;
- on échange alors les 2 valeurs
def tripy-undselection(tab):bksl-nl """ [int] -> [int]bksl-nl len(tab) > 0bksl-nl Trie en place le tableau tab, à l'aide de l'algorithme du tri par sélection """bksl-nl passbksl-nlbksl-nl
Documents¶
- Mémento python
-
Fichiers python :