Baccalauréat — Épreuve pratique — 2024 — NSI
Épreuve pratique NSI 2024 — Sujet 09 : tri par comptage des notes, conversions binaires récursives
Sujet
Épreuve pratique de NSI, session 2024 — sujet n°09 de la banque nationale. Durée : 1 heure, sur ordinateur. Le candidat traite les deux exercices, notés chacun sur 10 points.
Exercice 1 — trier des notes en comptant les effectifs
On veut trier par ordre croissant les notes d'une évaluation, qui sont des nombres entiers compris entre 0 et 10 (inclus). Ces notes sont contenues dans un tableau notes_eval (type list).
Écrire une fonction effectif_notes prenant en paramètre le tableau notes_eval et renvoyant un tableau de longueur 11 tel que la valeur d'indice i soit le nombre de notes valant i dans le tableau notes_eval.
Écrire ensuite une fonction notes_triees prenant en paramètre le tableau des effectifs des notes et renvoyant un tableau contenant les mêmes valeurs que notes_eval, mais triées dans l'ordre croissant.
Exemple :
>>> notes_eval = [2, 0, 5, 9, 6, 9, 10, 5, 7,
9, 9, 5, 0, 9, 6, 5, 4]
>>> eff = effectif_notes(notes_eval)
>>> eff
[2, 0, 1, 0, 1, 4, 2, 1, 0, 5, 1]
>>> notes_triees(eff)
[0, 0, 2, 4, 5, 5, 5, 5, 6, 6, 7, 9, 9, 9, 9, 9, 10]Exercice 2 — conversions décimal-binaire récursives
L'objectif de cet exercice est d'écrire deux fonctions récursives dec_to_bin et bin_to_dec, qui assurent respectivement la conversion de l'écriture décimale d'un nombre entier vers son écriture en binaire et, réciproquement, la conversion de l'écriture en binaire d'un nombre vers son écriture décimale. Dans cet exercice, on s'interdit l'usage des fonctions Python bin et int.
L'exemple suivant montre comment obtenir l'écriture en binaire du nombre 25 :
L'écriture binaire de 25 est donc 11001.
On rappelle également que :
- l'expression
a // 2calcule le quotient de la division euclidienne deapar 2 ; - l'expression
a % 2calcule le reste dans la division euclidienne deapar 2.
On indique enfin qu'en Python, si mot = "informatique", alors :
- l'expression
mot[-1]vaut'e', c'est-à-dire le dernier caractère de la chaînemot; - l'expression
mot[:-1]vaut'informatiqu', c'est-à-dire la chaînemotprivée de son dernier caractère.
Compléter, puis tester, le code des deux fonctions ci-dessous. La fonction récursive dec_to_bin prend en paramètre un nombre entier et renvoie une chaîne de caractères contenant l'écriture en binaire du nombre passé en paramètre :
>>> dec_to_bin(25)
'11001'La fonction récursive bin_to_dec prend en paramètre une chaîne de caractères représentant l'écriture d'un nombre en binaire et renvoie l'écriture décimale de ce nombre :
>>> bin_to_dec('101010')
42def dec_to_bin(nb_dec):
q, r = nb_dec // 2, nb_dec % 2
if q == ...:
return ...
else:
return dec_to_bin(...) + ...
def bin_to_dec(nb_bin):
if len(nb_bin) == 1:
if ... == '0':
return 0
else:
return ...
else:
if nb_bin[-1] == '0':
bit_droit = 0
else:
...
return ... * bin_to_dec(nb_bin[:-1]) + ...Corrigé
Créez un compte gratuit : votre première correction est offerte.