xxxxxxxxxx
On sait que sur `k` bits on peut coder `2**k` mots différents. Par exemple sur `k = 10` bits on peut coder `2**10 = 1024` mots différents.
Un exemple classique est le codage ASCII sur `k = 7` bits qui permet de représenter `n = 2**7 = 128` «objets» (à savoir des caractères alphabétiques et numériques plus quelques autres symboles ou codes spéciaux).
Mais si l'on souhaite coder `n` éléments différents, peut-on déterminer le nombre `k` de bits nécessaires ?
Par exemple si l'on souhaite coder `n = 3 789 147` caractères, combien de bits sont nécessaires ?
On sait que sur k
bits on peut coder 2**k
mots différents. Par exemple sur k = 10
bits on peut coder 2**10 = 1024
mots différents.
Un exemple classique est le codage ASCII sur k = 7
bits qui permet de représenter n = 2**7 = 128
«objets» (à savoir des caractères alphabétiques et numériques plus quelques autres symboles ou codes spéciaux).
Mais si l'on souhaite coder n
éléments différents, peut-on déterminer le nombre k
de bits nécessaires ?
Par exemple si l'on souhaite coder n = 3 789 147
caractères, combien de bits sont nécessaires ?
xxxxxxxxxx
*Question 1 :*
Compléter la fonction `nombre_de_bits` ci-dessous qui prend en paramètre un nombre `n >= 2` d'éléments à coder et renvoie le nombre `k` de bits nécessaires pour y parvenir.
Pour cela on teste différentes valeurs de `2**k` (en augmentant `k` de un en un) jusqu'à dépasser la valeur `n` fournie.
Question 1 :
Compléter la fonction nombre_de_bits
ci-dessous qui prend en paramètre un nombre n >= 2
d'éléments à coder et renvoie le nombre k
de bits nécessaires pour y parvenir.
Pour cela on teste différentes valeurs de 2**k
(en augmentant k
de un en un) jusqu'à dépasser la valeur n
fournie.
xxxxxxxxxx
def nombre_de_bits(n):
k = 0
while ... < ... :
k = ... + ...
return ...
xxxxxxxxxx
*Question 2 :*
Tester votre fonction en utilisant le jeu de tests ci-dessous.
Question 2 :
Tester votre fonction en utilisant le jeu de tests ci-dessous.
xxxxxxxxxx
from math import log, ceil, floor
for n in [2, 3, 4, 5, 6, 7, 8, 15, 16, 17, 1024, 1025, 2**57 - 1, 2**57]:
assert nombre_de_bits(n) == (n-1).bit_length()
xxxxxxxxxx
Avec le module `turtle`, on cherche à dessiner des «escaliers» possédant des marches de profondeur `p` et de hauteur `h`. Voici un exemple de tel escalier comportant 5 marches de profondeur 10 et de hauteur 7 :
```
┌───────╴
│
┌───────┘
│
┌───────┘
│
┌───────┘
│
┌───────┘
│
╵
```
*Question 1 :*
Compléter la fonction `escalier` ci-dessous qui :
- prend en paramètres un nombre entier `n` de marches, une profondeur `p` et une hauteur `h`,
- et fait tracer à la tortue un escalier de `n` marches de profondeur `p` et de hauteur `h`.
À partir de la position initiale de la tortue, cet escalier sera dessiné en allant d'abord « vers le haut» puis «vers la droite».
Pour cela on pourra utiliser les méthodes suivantes du module `turtle` :
- `down()`
- `up()`
- `forward()`
- `left()`
- `right()`
*Remarque :* La zone de dessin va horizontalement de `x = -320` à `x = +320` et verticalement de `y = -240` à `y = +240` (dans Basthon).
xxxxxxxxxx
import turtle
def escalier(n, p, h):
for i in range(...):
...
...
...
...
xxxxxxxxxx
escalier(10, 20, 15)
turtle.done() #dernière instruction pour faire afficher le dessin
xxxxxxxxxx
*Question 2 :*
En utilisant la fonction `escalier` de la question précédente, obtenir un motif obtenu en dessinant 15 escaliers les uns «à côté» des autres. Voici un exemple possible de tel motif :
```
┌───────╴
│ ┌───────╴
┌───────┘ │ ┌───────╴
│ ┌───────┘ │ ┌───────╴
┌───────┘ │ ┌───────┘ │ ┌───────
│ ┌───────┘ │ ┌───────┘ │ ┌───────
┌───────┘ │ ┌───────┘ │ ┌───────┘ │ ┌───────
│ ┌───────┘ │ ┌───────┘ │ ┌───────┘ │
┌───────┘ │ ┌───────┘ │ ┌───────┘ │ ┌───────┘
│ ┌───────┘ │ ┌───────┘ │ ┌───────┘ │
╵ │ ┌───────┘ │ ┌───────┘ │ ┌───────┘
╵ │ ┌───────┘ │ ┌───────┘ │
╵ │ ┌───────┘ │ ┌───────┘
╵ │ ┌───────┘ │
╵ │ ┌───────┘
╵ │
╵
```
Si besoin on pourra (mais ce n'est pas nécessaire) utiliser la méthode `goto()` du module turtle.
xxxxxxxxxx
for i in range(15):
...
...
...
...
...
...
...
turtle.done() #dernière instruction pour faire afficher le dessin