Vendredi 24 janvier 2025 1NSI
NSI – Devoir surveillé no 5 – Durée 1h
CORRECTION
Exercice 1 Encodage des entiers (Sur 5 points)
1. Sur 6 bits, en complément à 2, on représente 26 = 64 entiers, ceux allant de −32 à +31.
2. En utilisant la méthode du complément à 2 donner la représentation sur 6 bits de −12.
On cherche 12 en binaire sur 6 bits : 12d = 00 1100.
On inverse tous les bits, ce qui donne : 11 0011 puis on ajoute 1.
−12 est ainsi représenté par : 11 0100.
3. En utilisant la méthode du complément à 2 donner la représentation sur 6 bits de +7.
C’est tout simplement l’écriture de 7 en binaire sur 6 bits soit 00 0111.
4. On donne le codage en complément à 2 sur 6 bits d’un entier : 11 0110.
Il s’agit d’un nombre négatif (bit de poids fort égal à 1).
On soustrait 1 ce qui donne : 11 0101.
Puis on inverse tous les bits : 00 1010. On peut aussi inverser tous les bits puis ajouter 1.
Or 00 1010 vaut 2 + 8 = 10 en décimal.
Donc 11 0110 est la représentation en complément à deux sur 6 bits de −10.
5. On donne le codage en complément à 2 sur 6 bits d’un entier : 01 1010.
Il s’agit d’un nombre positif (bit de poids fort égal à 0).
On convertit directement cette écriture binaire en décimale : 01 1010b = 2 + 8 + 16 = 26d .
Donc 01 1010 est la représentation en complément à deux sur 6 bits de 26.
Exercice 2 Encodage des flottants (Sur 5 points)
1. Nommons x le flottant représenté sur 64 bits par :
1100 0000 0010 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
Le bit de signe vaut s = 1, x est un nombre négatif.
Les 11 bits de l’exposant biaisé sont 100 0000 0010 qui vaut 2 + 1 024 = 1 026 ce qui correspond à
l’exposant non biaisé : e = 1 026 − 1 023 = 3.
Les 52 bits de la mantisse sont 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
1 1
ce qui correspond à 2−4 = auquel on doit ajouter 1 : m = 1 + qu’il vaut mieux garder sous la
16 16
−4
forme m = 1 + 2 .
On a donc x = − 1 + 2−4 × 23 = −(23 + 2−1 ) = −8,5
2. On décide de représenter les flottants sur 16 bits selon la norme suivante : le bit de poids fort pour le
signe, les quatre bits suivants pour l’exposant biaisé de 7 et les onze derniers bits pour la mantisse.
On a 5 = 2,5 × 2 = 1,25 × 22 .
Ce nombre étant positif, on a s = 0.
L’exposant vaut 2, donc l’exposant biaisé vaut 2 + 7 = 9 représenté sur 4 bits par 1001.
La mantisse vaut 1,25, on ne représente que 0,25 qui s’écrit 010 0000 0000 sur 11 bits.
Ainsi 0100 1010 0000 0000 représente le nombre 5,0.
3. En Python, le booléen 0.1 + 0.2 == 0.3 vaut False.
Voir aussi le Code b de l’exercice 3.
Exercice 3 Analyse de code (Sur 3 points)
Code a Code b
Le code a ne va rien afficher, car une erreur va se produire lors de l’appel multiplier(3). La variable
locale x de la fonction maximum (ligne 4) n’est ni déclarée globale dans la fonction, ni initialisée dans la
fonction.
Le code b va afficher "Ben alors ?" car le test de la ligne 4 est un test d’égalité entre flottants. En effet, la
représentation des flottants n’est pas exacte en machine. La boucle while des lignes 2 et 3 va se répéter
jusqu’à ce que la valeur de x dépasse 1. Après le deuxième tour de boucle la valeur de x est obtenue par
l’expression 0,1 + 0,1 + 0,1 dont la valeur est différente de 0,3. De plus cet erreur va se propager.
Exercice 4 Effets de bord (Sur 2 points)
1. On parle d’effet de bord dans un programme informatique lorsque la modification d’une variable
entraîne la modification d’une copie de cette variable. Ceci se produit lorsque l’on fait une simple
copie par affectation d’une variable mutable de type construit (comme les types list et dict).
2. Voici un exemple de programme Python où un effet de bord se produit.
Ce programme va afficher deux fois la même liste : [100, 200] [100, 200]
Exercice 5 Tableaux ou listes de listes (type list de Python) (Sur 4 points)
1. tab1 == [[0, 1, 4, 9, 16], [1, 2, 5, 10, 17], [2, 3, 6, 11, 18]]
a. L’expression tab1[1][3] vaut 10.
b. L’expression len(tab1) vaut 3.
c. L’expression len(tab1[1]) vaut 5.
d. Le tableau tab1 en compréhension :
2. tab2 = [[i**2*j if i < j else i**2+j for j in range(2,5)] for i in range(4)]
Le tableau tab2 en construction :
3. tab3 = [[0, "paf"] if n%3 == 0 else [n%3, "boum"] for n in range(7)]
tab3 en extension :
Exercice 6 Dictionnaires (Sur 6 points)
1. La variable exemples_pokemons est un dictionnaire, du type dict en Python, dont les clés sont les
noms des Pokémons et les valeurs sont des tuples contenant la taille et le poids du Pokémon.
2. Pour ajouter à cette structure de données le Pokémon Goupix qui mesure 60 cm et pèse 10 kg :
exemple_pokemons["Groupix"] = (60, 10)
3. On donne le code suivant :
a. L’appel de fonction le_plus_grand(exemple_pokemon), la valeur renvoyée est ("Abo", 200).
En effet, on parcourt le dictionnaire en conservant dans les variables locales grand et taille_max,
le nom et la taille du Pokémon le plus grand rencontré jusqu’à présent.
b. Voici le code de la fonction le_plus_leger(pokemons) :
4. Voici le code de la fonction taille(pokemons, nom_du_pokemon) :