Baccalauréat — Métropole (session de remplacement) Jour 1 — 2022 — NSI
Bac NSI — Métropole, session de remplacement 2022 (Jour 1)
Sujet
Présentation de l'épreuve
Épreuve écrite de spécialité NSI, session 2022, Métropole (session de remplacement / septembre), jour 1. Durée : 3h30, calculatrice interdite. 5 exercices notés sur 4 points, le candidat en choisit 3.
Exercice 1 — Arbres binaires de recherche et parcours
Un arbre binaire de recherche (ABR) vérifie : clés du sous-arbre gauche ≤ racine, clés du sous-arbre droit > racine, et chaque sous-arbre est lui-même un ABR.
Partie A.
1. Parmi ces trois arbres, lequel/lesquels sont des ABR ?
- Arbre 1 : racine 3, gauche 2(enfants 1,3), droite 4(enfants 4,5).
- Arbre 2 : racine 4, gauche 2(enfants 1,3), droite 4(enfants 4,5).
- Arbre 3 : racine 3, gauche 2(enfants 1,1), droite 4(enfants 3,5).
Partie B.
Structure abstraite ABR, opérations : creer_arbre(), est_vide(a), racine(a), sous_arbre_gauche(a), sous_arbre_droit(a), inserer(a, e).
2.a. Dans un ABR, où se trouve le plus petit élément ? Justifier.
2.b. Écrire RechercheValeur(cle, a) récursive, qui renvoie un booléen indiquant si cle figure dans l'ABR a.
3. ABR : racine 7, gauche 2 (enfants 1 et 5, 5 ayant pour enfants 3 et 6), droite 10 (enfants 8 et 9). 3.a. À quel type de parcours correspond le résultat trié 1-2-3-5-6-7-8-9-10 ? 3.b. Donner le parcours préfixe de cet arbre. 3.c. Donner le parcours suffixe de cet arbre. 3.d. Donner le parcours en largeur de cet arbre.
Exercice 2 — Classes, itération et récursivité : villas
Une agence stocke ses annonces via ces classes :
class Piece:
def __init__(self, a, b):
self.nom = a
self.sup = b # superficie
class Villa:
def __init__(self, a, b, c, d, e):
self.nom = a
self.sejour = b
self.ch1 = c
self.ch2 = d
self.eqCuis = e # "eq" ou "non eq"
def nom(self):
return self.nom
def surface(self):
return ......
def equip(self):
return self.eqCuis
v = []
v.append(Villa("Les quatre vents", Piece("séjour",40), Piece("ch1",10), Piece("ch2",20), "eq"))
v.append(Villa("Les goélands", Piece("séjour",50), Piece("ch1",15), Piece("ch2",15), "eq"))
v.append(Villa("Rêve d'été", Piece("séjour",30), Piece("ch1",15), Piece("ch2",20), "non eq"))
v.append(Villa("Les oliviers", Piece("séjour",30), Piece("ch1",10), Piece("ch2",20), "eq"))
v.append(Villa("Bellevue", Piece("séjour",30), Piece("ch1",10), Piece("ch2",20), "non eq"))Partie A.
1.a. Combien d'éléments contient v ?
1.b. Que renvoie v[1].nom() ?
1.c. Compléter surface() pour qu'elle renvoie la surface totale (séjour + chambre 1 + chambre 2).
2. Écrire la portion de programme qui affiche le nom de chaque villa équipée d'une cuisine ("eq").
Partie B — Récursivité.
3. Parmi ces propositions, laquelle caractérise un appel récursif ? « appel d'une fonction par elle-même » / « appel dont l'exécution est un processus itératif » / « appel d'une fonction comportant une boucle ».
Algorithme pour max_surface(v) : si v ne contient qu'une villa, c'est le résultat ; sinon comparer v[0] et v[1], retirer la plus petite, et relancer sur la liste tronquée.
4. Écrire max_surface(v) en Python selon cet algorithme.
Exercice 3 — Bases de données : catalogue Gaia
Le satellite GAIA cartographie des objets célestes. Table Gaia(Num_Objet: Int, Num_Systeme: Int, Nom_Systeme: String, #Type_Objet: String, Nom_Objet: String, Ascension_Droite: Real, Declinaison: Real, Parallaxe: Real, Nom_SIMBAD: String). Extrait (14 objets, dont Proxima Cen, alf Cen A/B, Barnard's Star, Luhman 16 A/B, Wolf 359, HD 95735, Lalande 21185 b, alf CMa A/B, G 272-61 A/B, Ross 154, Ross 248) avec, pour chaque objet, son Type_Objet parmi LM (étoile de faible masse), Planet, * (étoile), BD (naine brune), WD (naine blanche), et sa parallaxe (de 316 à 768 millisecondes d'arc selon l'objet).
Partie A.
1. Pourquoi Num_Objet peut-il être choisi comme clé primaire de Gaia ?
Table Type(Type_Objet, Libelle_Objet) : LM→"Etoile de faible masse", Planet→"Planète", *→"Etoile", BD→"Naine Brune", WD→"Naine Blanche".
2. Proposer le schéma relationnel de Type, clé primaire soulignée.
Partie B.
3. Laquelle de ces requêtes ne provoque pas d'erreur ?
a. INSERT INTO Gaia VALUES ('8', 4, 'WISEA J085510', 'Naine Brune', 'WISEA J085510', 133.781,-7.244, 439.000, 'WISEA J085510');
b. INSERT INTO Gaia VALUES (8, 4, 'WISEA J085510', 'Naine Brune', 'WISEA J085510', 133.781,-7.244, 439.000, 'WISEA J085510');
c. INSERT INTO Gaia VALUES (8, 4, WISEA J085510, 'Naine Brune', WISEA J085510, 133.781,-7.244, 439.000, WISEA J085510);
d. INSERT INTO Gaia VALUES (8, 4, 'WISEA J085510', 'Naine Brune', 'WISEA J085510', '133.781',-7.244, 439.000, 'WISEA J085510')
4. Pourquoi INSERT INTO Type VALUES ('BD', 'Trou Noir'); échoue-t-il ?
5. Résultat de SELECT Nom_Objet, Parallaxe FROM Gaia WHERE Type_Objet = 'Planet'; ?
6. Requête donnant nom du système, nom de l'objet et libellé du type, pour les objets de parallaxe > 400 mas et de type '*' (étoile).
On veut renommer le type '*' en 'ST' dans Gaia et Type.
7.a. Requête insérant un nouveau type 'ST' de libellé "Etoile".
7.b. Décrire la démarche complète (requêtes) pour finaliser le remplacement de '*' par 'ST'.
Exercice 4 — Architecture matérielle, processus et réseaux
Partie A.
1. Entre les deux schémas proposés (l'un montrant Mémoire ↔ Processeur{UC, UAL} avec Entrées/Sorties reliées au Processeur ; l'autre montrant UAL isolée comme "Processeur", UC séparée reliée à Mémoire et Entrées/Sorties), lequel représente le mieux une architecture de Von Neumann ?
Partie B.
Adresse IPv4 en notation CIDR W.X.Y.Z/n. Réseau : R1 (LAN01, 192.168.10.0/24, avec serveur DHCP et PC01-03) relié à R2 (vers Internet, 90.10.20.0/24), R3 (via 3.100.30.0/24), R4 (via 4.10.10.0/24) ; R3 relié à R5 (via 5.30.20.0/24) ; R5 relié à R7 (via 7.30.40.0/24) ; R4 relié à R6 (via 6.10.30.0/24). Liaison R1–R2 via 2.100.40.0/24 ; R3–R4 via 4.20.10.0/24.
2. Proposer une adresse IPv4 pour l'ordinateur PC02 du LAN01. 3. Compte tenu du masque /24 de LAN01, combien de machines au maximum peuvent y être connectées ? 4. Quel est le rôle d'un switch ? 5. Quel est le rôle d'un routeur ?
Table de routage RIP (partielle) de R1 :
| Destination | Passerelle | Métrique |
|---|---|---|
| 192.168.10.0/24 | 0.0.0.0 | 0 |
| 2.100.40.0/24 | 2.100.40.1 | 1 |
| 3.100.30.0/24 | 3.100.30.2 | 1 |
| 4.10.10.0/24 | 4.10.10.2 | 1 |
| 4.20.10.0/24 | ... | ... |
| 7.30.40.0/24 | ... | ... |
| 6.10.30.0/24 | ... | ... |
| 90.10.20.0/24 | 2.100.40.1 | 2 |
6. Compléter les lignes incomplètes selon la logique RIP.
7. La liaison R1–R2 tombe en panne : que devient la ligne « Internet » (90.10.20.0/24) ?
Exercice 5 — Files et programmation : file d'attente prioritaire
Une file suit le principe « premier arrivé, premier servi ».
1. Laquelle de ces deux situations correspond à une file ? Situation 1 : crêpes empilées, on mange d'abord celle du dessus. Situation 2 : impression réseau, documents imprimés dans l'ordre d'arrivée.
On modélise l'attente à une caisse : les clients sont dans une File. Un client prioritaire passe directement en position 1 (les autres reculent d'une place) ; en cas de plusieurs prioritaires, ils restent ordonnés entre eux selon leur ordre d'arrivée.
Opérations disponibles : creer_file_vide(), est_vide(File), enfiler(File, element), defiler(File).
File F (queue → tête) : Client4, Prioritaire, Client3, Client2, Client1.
2.a. Que valent V, F et val après :
V = creer_file_vide()
val = defiler(F)
while not est_vide(F) and val != 'Prioritaire':
enfiler(V, val)
val = defiler(F)2.b. Compléter longueur_file(F), qui renvoie le nombre d'éléments de F et doit restituer F intact en fin d'exécution :
def longueur_file(F):
V = creer_file_vide()
n = 0
while not est_vide(F):
n = ...
val = defiler(F)
enfiler(V, val)
while not est_vide(V):
...
...
return n2.c. Écrire compter_prio(F), qui renvoie le nombre de personnes prioritaires dans F, en laissant F identique en fin d'exécution.
Corrigé
Créez un compte gratuit : votre première correction est offerte.