NOM et Prénom ……… Classe de Première Spécialité NSI Année 2020 2021
1ère NSI
12 20 10,25
0
Médiane en 2010
9
Médiane en 2020
CORRIGE CONTROLE 2 (55’)
CODAGE BINAIRE ; TYPES CONSTRUITS ; TABLES
Compte rendu :
Numérisation des nombres (exo 1) : Le cours n’est tout simplement pas su !! Il suffit de connaître le tableau récapitulatif du cours Numérisation des nombres p.14.)
Types construits (Listes, Tuples, Dicos) (exo 2 questions 1 à 5) : Là encore le cours n’est pas assez su !
Tables de données (exo2 questions 6-7) : Cours non su.
Programmation (exo 2 questions 8 à 10 + exo 3) : Catastrophique. Très peu de rigueur (respect de la consigne, notations, testing de son programme etc.)
Pourtant il avait été bien annoncé qu’un exo porterait sur l’un des 2 algorithmes d’encodage des entiers.
L’exercice de programmation (n°3) est très inquiétant sur le niveau de certains : du n’importe quoi rarement vu. Ne rien écrire plutôt que ce genre de choses.
Plus généralement : apprendre son cours, bien lire la consigne, et se relire ! Médianes = 11,75 en 2019
Exercice n° 1 (…………..……… / 6 points) : Numérisation des entiers.
Pour chaque affirmation, 4 choix vous sont proposés dont un seul est vrai. Lequel ? L’entourer.
Barème : réponse juste =1 pt sans réponse ou réponse fausse = 0 pt
Affirmations Choix 1 Choix 2 Choix 3 Choix 4
Pour convertir en base 10 un nombre écrit en base 2, on peut :
effectuer une suite de divisions euclidiennes
par 2.
effectuer une suite de divisions euclidiennes
par 10.
additionner des puissances de 2.
additionner des puissances de 10.
Le nombre d’entiers non
signés codables sur n bits est 2n 1 1 2n 1 2n 1 2n
Sur n bits, le plus petit entier signé négatif
représentable en machine est
-2n -2n 1 -2n 1 -2n 1 1
L’écriture binaire du plus grand entier signé négatif
commence par 1 suivi que de 0.
commence par 0 suivi que de 1.
commence par 1 suivi que de 1.
commence par 0 suivi que de 0.
Soit l’entier signé ayant pour écriture binaire 1011.
Cet entier est
11 -3 -5 5
Sur n bits, l’inversé bit à
bit correspond au complémentaire à 1. complémentaire à 2. complémentaire à
2n 1. complémentaire à 2n.
Plus généralement, convertir de la base p vers la base 10 revient à calculer la valeur d’une écriture en base p : il faut additionner des puissances de p.
Vérifier en prenant un exemple tout bêtement ! 1 seul élève a eu bon en 2020 !
Cours Livret Numérisation des nombres p.14 !
Calculer l’inversé bit à bit + 1 de 1011, donner la valeur, puis prendre l’opposé.
Sur n bits, lorsqu’on somme une écriture binaire et son l’inversé bit à bit, on obtient forcément une suite de 1 qui correspond à la valeur 2n 1. Donc l’inversé bit à bit est bien le complémentaire à 2n 1.
NOM et Prénom ……… Classe de Première Spécialité NSI Année 2020 2021
Exercice n° 2 (………..………… / 10 points) : Entourer le seul choix vrai.
(D’après Banque Nationale des sujets, sujet 1 question B2) Soit T une liste, que vaut T à la suite de ce script :
T = [ 2 , 2 , 2 , 2 ] T[2] = T[2] + 2
Bien réussi en 2020.
1) [ 2 , 4 , 2 , 2 ]
Choix de ceux qui oublient que les indices commencent à 0 et non à 1 !
2) [ 4 , 4 , 4 , 4 ]
Choix si on a For item in T : item = item + 2.
3) [ 2 , 2 , 2 , 2 , 2 ]
Choix si on avait eu T = T + [2].
4) [ 2 , 2 , 4 , 2 ]
La compréhension de liste ci-dessous génère : [ x**2 for x in range (4) if x % 2 == 0 ]
Attention range(4) = [0,1,2,3] puis la condition sélectionne les entiers pairs puis on fait agir la puissance 2.
1) [ 0 , 4 , 16 ] 2) [ 0 , 4 ]
3) [ 2**2 , 4**2 ] 4) [ 0 , 1 , 4 , 9 ]
a , c = 1 , 2
b = ( [ c , a ] , c ) c = 3
Que vaut b à la fin de l’exécution de ce script ?
Après la ligne 2, b contient le tuple ( [2 , 1] , 2 ]. Un changement a postériori sur une simple variable n’a aucun effet rétroactif ni sur les listes ni sur les tuples !
1) ( [ 3 , 1 ] , 3 )
Les changements sur une simple variable ne sont pas rétroactifs !
2) ( [ 1 , 2 ] , 1 )
Choix de ceux qui intervertissent a et c.
3) ( [ 2 , 1 ] , 2 ) 4) ( [ 3 , 1 ] , 2 )
Valable si on avait fait b[0][0] = 3.
Un autre nom des clés d’un dictionnaire :
Les clés ne sont a priori pas des numéros ! Et encore moins des valeurs ! Peu réussi en 2020.
1) Indices = index numérotés.
2) Valeurs.
3) Index nommés.
4) Index numérotés.
Soit le dictionnaire Dico :
Dico = { ‘a’ : 1 , ‘b’ : 2 , ‘c’ : 3 } Pour changer la valeur 2 par 3, il faut faire
La syntaxe est Dico[clé] = nouvelle_valeur (attention crochets !) Bien réussi en 2020.
1) Dico [2] = 3 2) Dico (‘b’) = 3 3) Dico [‘b’] = 3 4) Dico {‘b’} = 3
Un tableau à entêtes colonnes est implémenté en Python par : Cours non su. Très peu réussi en 2020.
1) une liste de listes. Tableau sans entêtes.
2) un dictionnaire ayant pour valeurs des listes. Tableau à entêtes lignes.
3) un dictionnaire ayant pour valeurs des dictionnaires. Tableau à entêtes lignes et colonnes.
4) une liste de dictionnaires. Tableau à entêtes colonnes.
NOM et Prénom ……… Classe de Première Spécialité NSI Année 2020 2021
(D’après Banque Nationales des Sujets, sujet 1, Question C3) Soit la liste de p-uplets suivants représentant un informaticien ou une informaticienne célèbre. :
Table = [ ('Grace','Hopper','F',1906), ('Tim', 'Berners-Lee', 'H', 1955), ('Ada', 'Lovelace', 'F', 1815), ('Alan', 'Turing', 'H', 1912) ] On définit la fonction ci-dessous : def fonctionMystere(table):
résultat = [ ]
for ligne in table : Dans chaque Tuple de Table
if ligne[2] == 'F': sélection des femmes
résultat.append(ligne[1]) Ajout de leurs noms à la liste résultat.
return résultat
Que retourne fonctionMystere(Table) ?
Très peu réussi en 2020.
1) [‘Grace’, ‘Ada’]
2) [‘Hopper’, ’Lovelace’]
3) [ ]
4) [ ('Grace', 'Hopper', 'F', 1906), ('Ada', 'Lovelace', 'F', 1815) ]
(D’après Banque Nationale des sujets, sujet n°11 question F6) Soient A un entier strictement positif et le programme suivant :
k = 0
while 2**k ≤ A : k = k + 1
Que contient la variable k à la fin de l'exécution du programme ? La boucle s’arrête dès que 2k > A.
1) L’exposant de la plus grande puissance de 2 < A.
2) L’exposant de la plus grande puissance de 2 ≤ A.
3) L’exposant de la plus petite puissance de 2 > A.
4) L’exposant de la plus petite puissance de 2 ≥ A.
Soit L une liste d'entiers. On définit la fonction suivante : def trouver_max(L):
max = L[0]
for élément in L :
if élément > max : max = élément return max
Compléter les 2 lignes en pointillés pour que cette fonction retourne l’élément maximum de la liste L.
Remarque : élément max moins bien car on ne remplace le max que si élément est vraiment plus grand que max !
On n’écrit pas L[élément] ! élément n’est pas un indice ! Très peu réussi en 2020.
NOM et Prénom ……… Classe de Première Spécialité NSI Année 2020 2021
(D’après Banque Nationale des sujets, sujet n°1 question B1) On veut construire la liste t :
t = [ [0 , 1 , 2] , [3 , 4 , 5] , [6 , 7 , 8] , [9 , 10 , 11] ].
Pour cela on utilise le script suivant : n = 4
p = 3
t = [ [ ………..… for j in range(p) ] for i in range(n) ] Par quoi faut-il remplacer les pointillés ?
Réussi 1 seule fois en 2020 !
Voir cours Tables de données p.5 exo 3.
On passe d’une ligne à l’autre en ajoutant 3.
Donc de la 1ère ligne à n’importe quelle autre ligne en rajoutant un multiple de 3.
Donc la solution est :
3 * numéro_ligne + numéro_colonne
1) i * j + j 2) p * j + i 3) p * i + j 4) i * ( j + 1)
Exercice n° 3 (………..………… / 4 points) : Encodage binaire par divisions successives.
1. Appliquer l’algorithme par divisions successives afin de donner l’écriture binaire de 23 (………. / 1 pt) :
2. Ecrire une fonction Convbinaire_par_divisions( ) qui en entrée reçoit un nombre entier quelconque et en sortie renvoie son écriture binaire sous forme de chaîne de caractères. (……….. / 3 pts)
Voir Corrigé Cours Numérisations des nombres p.7.
def Convbinaire_par_divisions (entier) :
if entier == 0 : # On traite à part le cas où l'entier rentré est 0 ! écriture_binaire = "0"
else : # Cas général
# Initialisation des variables locales de travail.
quotient = entier écriture_binaire=" "
# Remplissage de la liste des restes.
while quotient > 0 : reste = quotient % 2
écriture_binaire = str(reste) + écriture_binaire # Remplissage par la gauche ! quotient = quotient // 2 # Attention à ne pas calculer le quotient avant le reste ! return écriture_binaire
Stop 1 11
1 5 2 23 2
1 2 2
0 1 2
1 2 0
(23)
10=
Beaucoup ne savent même pas faire une division entière par 2 !
Catastrophique !
Jamais réussi parfaitement en 2020.