Tous les sujets du Bac 2023 · Toutes les annales du Bac de Numérique et Sciences Informatiques
Sujet du Bac Numérique et Sciences Informatiques 2023 · Amérique du Nord Jour 2
Sujet du Bac de Numérique et Sciences Informatiques 2023, Amérique du Nord Jour 2 : 5 exercices corrigés. Thèmes : Structures de données abstraites et Arbres.
Thèmes du sujet : Structures de données abstraites : listes, piles, files, dictionnaires · Arbres : vocabulaire, mesures et algorithmique · Bases de données relationnelles, SGBD et langage SQL · Architectures matérielles et systèmes d'exploitation · Protocoles de routage : RIP et OSPF
Exercice 1 - Partie A · Bases de données relationnelles, SGBD et langage SQL
Exercice 1 (4 points)
Cet exercice porte sur les bases de données et les protocoles de routage.
Partie A
L'énoncé de cette partie utilise les mots du langage SQL suivant:
SELECT, FROM, WHERE, UPDATE, JOIN, ON, INSERT, INTO, VALUES, AND, COUNT, DISTINCT.
Une compétition internationale de rugby féminin est organisée en France.
Une base de données relationnelle est mise en place afin de gérer l'organisation.
Son schéma relationnel est donné ci-dessous:
JOUEUSE( idjoueuse, #pays, nom, prenom, age, numero)
SELECTION(# idjoueuse, # idmatch, points)
MATCH( idmatch, stade, jour, horaire)
Dans ce schéma, les clés primaires sont soulignées et les clés étrangères sont précédées du symbole #.
On donne ci-dessous un extrait de la relation JOUEUSE:
idjoueuse · pays · nom · prenom · age · numero
101 · "France" · "Lefevre" · "Charline" · 23 · 15
108 · "Australie" · "Porteur" · "Cindy" · 31 · 7
305 · "Argentine" · "Gomez" · "Laëtitia" · 35 · 8
318 · "Tunisie" · "Char" · "Jo" · 30 · 2
1. a)
Expliquer ce que renvoie la requête SQL suivante:
SELECT nom, prenom, numero
FROM JOUEUSE
WHERE pays = "France";
1. b)
Écrire une requête permettant d'obtenir le nom et le prénom de toutes les joueuses de l'équipe d'Argentine ayant au moins 30 ans.
2. a)
Une erreur de saisie a été commise: la joueuse Charline Lefevre n'a pas 23 ans mais 33 ans. Écrire une requête SQL permettant de mettre à jour son âge.
2. b)
Écrire la requête permettant d'insérer la joueuse dont l'identifiant idjoueuse est 105, le nom Warm, le prénom Suzanna, l'âge 29 ans, le pays Angleterre et le numéro 6.
3. a)
On suppose que la compétition est terminée et que les tables sont correctement remplies.
Recopier en intégralité sur la copie la requête SQL ci-dessous et la compléter de façon à ce qu'elle renvoie les noms des joueuses qui ont marqué au moins 10 points lors d'un match.
1 SELECT...
2 FROM JOUEUSE
3 JOIN SELECTION ON...
4 WHERE...
3. b)
On rappelle qu'en langage SQL, la fonction d'agrégation COUNT permet de compter un nombre d'enregistrements. Par exemple, pour déterminer le nombre de joueuses dans la table JOUEUSE, on peut utiliser la requête suivante:
1 SELECT COUNT(idjoueuse)
2 FROM JOUEUSE;
Écrire une requête permettant de connaitre le nombre de sélections de la joueuse Laëtitia Gomez, dont l'identifiant idjoueuse est 305, lors de cette compétition.
3. c)
Écrire une requête permettant de connaitre les noms des stades dans lesquels la joueuse Laëtitia Gomez, dont l'identifiant idjoueuse est 305, a joué lors de cette compétition.
Exercice 1 - Partie B · Protocoles de routage : RIP et OSPF
Exercice 1 (4 points)
Cet exercice porte sur les bases de données et les protocoles de routage.
Partie A
L'énoncé de cette partie utilise les mots du langage SQL suivant:
SELECT, FROM, WHERE, UPDATE, JOIN, ON, INSERT, INTO, VALUES, AND, COUNT, DISTINCT.
Une compétition internationale de rugby féminin est organisée en France.
Une base de données relationnelle est mise en place afin de gérer l'organisation.
Son schéma relationnel est donné ci-dessous:
JOUEUSE( idjoueuse, #pays, nom, prenom, age, numero)
SELECTION(# idjoueuse, # idmatch, points)
MATCH( idmatch, stade, jour, horaire)
Dans ce schéma, les clés primaires sont soulignées et les clés étrangères sont précédées du symbole #.
On donne ci-dessous un extrait de la relation JOUEUSE:
idjoueuse · pays · nom · prenom · age · numero
101 · "France" · "Lefevre" · "Charline" · 23 · 15
108 · "Australie" · "Porteur" · "Cindy" · 31 · 7
305 · "Argentine" · "Gomez" · "Laëtitia" · 35 · 8
318 · "Tunisie" · "Char" · "Jo" · 30 · 2
Partie B
Lors de cette compétition, les échanges numériques mondiaux officiels (en particulier les différents flux vidéo) sont effectués de continent à continent en suivant les liaisons simplifiées ci-dessous.
Les routeurs principaux de chaque continent affectés à ces échanges sont identifiés par les lettres de A à G. Le réseau de ces routeurs est modélisé par le schéma suivant:
Tous les routeurs utilisent le protocole RIP qui minimise la distance, exprimée en nombre de sauts, qui séparent deux routeurs.
4.
Le routeur G de l'Afrique doit transmettre un message au routeur B de l'Océanie, en effectuant un nombre minimal de sauts. Déterminer le trajet parcouru.
5.
On s'intéresse à la table de routage du routeur F de l'Amérique du Sud une fois les tables stabilisées.
Recopier et compléter sur la copie la table suivante:
Table du routeur F de l'Amérique du Sud
Destination
Routeur suivant
Distance
6.
Déterminer une panne qui obligerait toutes les données échangées entre l'Afrique et l'Amérique du Sud à transiter par le routeur d'Asie. Justifier la réponse.
Exercice 2 · Arbres : vocabulaire, mesures et algorithmique
Exercice 2 (5 points)
Cet exercice porte sur les arbres binaires, notamment les arbres binaires de recherche et sur la programmation en langage Python.
Partie A
Dans cet exercice, on considère que la hauteur de l'arbre vide est 0.
On considère l'arbre binaire suivant, noté dans la suite de l'exercice:
1.
Déterminer, sans justifier, la hauteur et la taille de l'arbre binaire :
2.
On utilise l'interface suivante pour un arbre binaire:
Cette interface a été implémentée en langage Python.
a)
Dessiner l'arbre binaire obtenu avec l'instruction suivante:
cons(7,
cons(4,
cons(2, arbre_vide(), arbre_vide()),
cons(6,
cons(5, arbre_vide(), arbre_vide()),
arbre_vide())),
cons(9,
arbre_vide(),
cons(8, arbre_vide(), arbre_vide())))
b)
Déterminer la ou les instructions en langage Python permettant d'obtenir l'arbre binaire suivant:
3.
a)
Déterminer l'ordre des valeurs obtenu lorsqu'on parcourt l'arbre à l'aide d'un parcours infixe.
b)
La fonction parcours incomplète ci-après prend en argument un arbre binaire et renvoie un tableau contenant les valeurs de l'arbre, dans l'ordre obtenu lors d'un parcours infixe.
def parcours(arbre):
if est_vide(arbre):
return []
else:
...
Déterminer parmi les trois propositions suivantes, quelle instruction doit-être écrite à la ligne 5:
Partie B
Un arbre binaire de recherche est un arbre binaire dans lequel chaque nœud possède une valeur, telle que chaque nœud du sous arbre gauche ait une valeur inférieure ou égale à celle du nœud considéré, et que chaque nœud du sous arbre droit ait une valeur supérieure à celle-ci.
Par exemple, l'arbre suivant, noté dans la suite de l'exercice, est un arbre binaire de recherche:
4.
Déterminer en justifiant, parmi les arbres suivants, ceux qui ne sont pas des arbres binaires de recherche:
5.
Déterminer, en justifiant, quel parcours d'un arbre binaire de recherche permet d'obtenir les valeurs de l'arbre classées par ordre croissant.
6.
On ajoute à l'interface des arbres binaires une fonction inserer_dans_ABR qui prend en arguments un arbre binaire de recherche et une valeur, et qui ajoute une feuille contenant la valeur, à sa place dans l'arbre binaire de façon à ce que la structure d'arbre binaire de recherche soit toujours respectée.
a)
Dessiner l'arbre obtenu après exécution de l'instruction suivante:
inserer_dans_ABR(B, 16)
b)
Dessiner l'arbre binaire de recherche que l'on obtient, en partant de l'arbre vide, et en insérant les valeurs suivantes dans cet ordre: 5, 3, 7, 8, 4, 1, 9, 2 et 6.
7.
On veut écrire une fonction tri qui prend en argument un tableau de nombres T et qui renvoie un tableau trié en utilisant l'algorithme suivant:
on construit un arbre binaire de recherche en insérant, à partir d'un arbre vide, les éléments du tableau T;
on construit le tableau que l'on obtient en parcourant cet arbre binaire de recherche grâce à la fonction parcours de la partie A.
Écrire la fonction tri en Python, en utilisant cet algorithme:
def tri(T):
""" Trie le tableau de nombres T. """
Exercice 3 - Questions 1 et 2 · Architectures matérielles et systèmes d'exploitation
Exercice 3 (3 points)
Cet exercice porte sur les systèmes d'exploitation, la programmation en général et les dictionnaires.
Dans un système d'exploitation de type UNIX, on considère l'arborescence suivante dans laquelle les noms des répertoires sont en gras et ceux des fichiers sont en italique:
On donne ci-après un extrait de quelques commandes de base à utiliser dans un terminal sous linux:
Extrait des commandes de base linux
ls: affiche le contenu d'un répertoire.
ls repertoire1 affiche le contenu de repertoire1
cd: permet de changer de répertoire courant.
Après la commande cd repertoire1, le répertoire courant devient repertoire1
cp: crée une copie d'un fichier.
cp fichier1.py fichier2.py copie fichier1.py sous le nom fichier2.py
mv: déplace ou renomme un fichier ou un répertoire.
mv fichier.txt dossier1 déplace fichier.txt dans dossier1
rm: supprime un fichier ou un répertoire.
rm mon_fichier.mp3 supprime mon_fichier.mp3
mkdir: crée un répertoire.
mkdir dossier2 crée le répertoire dossier2
cat: affiche le contenu d'un fichier.
cat fichier1.txt affiche le contenu de fichier1.txt
touch: crée un fichier qui n'existait pas jusqu'alors.
touch fichier2 crée fichier2
Dans l'arborescence décrite ci-dessus, alix, camille et dominique sont respectivement les répertoires personnels des utilisateurs Alix, Camille et Dominique.
On souhaite explorer et modifier les répertoires et fichiers grâce à l'utilisation d'un terminal.
1. Navigation et manipulation de fichiers
Dans cette question, la problématique des droits d'accès n'est pas prise en compte.
a)
Dans l'arborescence précédente, on suppose que le répertoire courant est camille. Parmi les quatre propositions suivantes, déterminer la commande qui permet d'afficher son contenu:
b)
Dans l'arborescence précédente, on suppose que le répertoire courant est camille. Parmi les quatre propositions suivantes, déterminer toutes celles qui permettent que le répertoire cours d'Alix devienne le répertoire courant:
c)
Dans l'arborescence précédente, on suppose que le répertoire courant est alix. Déterminer l'instruction permettant de copier le fichier fich2.txt qui se trouve dans le répertoire d'Alix dans le répertoire devoirs de Camille.
2. Droits d'accès
Dans cette question, la problématique des droits d'accès est prise en compte.
Camille, depuis le répertoire camille/devoirs utilise la commande ls -l et obtient le résultat suivant:
-rw-r--r-- 1 root root 1096 juil. 22 17:10 DS1.txt
-rw-r--r-- 1 camille eleve 128 juil. 22 16:03 algo.py
-r--r--r-- 1 camille eleve 128 juil. 22 18:21 NSI.txt
a)
Expliquer pourquoi l'instruction rm DS1.txt est refusée si l'utilisateur est Camille.
On donne ci-après un extrait du mode d'emploi de la commande chmod à utiliser dans un terminal sous linux:
b)
Camille souhaite interdire la lecture du contenu du fichier algo.py aux autres utilisateurs (même ceux de son groupe). Elle souhaite également se donner la possibilité de l'exécuter. Écrire l'instruction permettant de modifier les droits sur algo.py. On suppose que Camille bénéficie déjà des droits de super utilisateur.
Exercice 3 - Question 3 · Structures de données abstraites : listes, piles, files, dictionnaires
Exercice 3 (3 points)
Cet exercice porte sur les systèmes d'exploitation, la programmation en général et les dictionnaires.
Dans un système d'exploitation de type UNIX, on considère l'arborescence suivante dans laquelle les noms des répertoires sont en gras et ceux des fichiers sont en italique:
On donne ci-après un extrait de quelques commandes de base à utiliser dans un terminal sous linux:
Extrait des commandes de base linux
ls: affiche le contenu d'un répertoire.
ls repertoire1 affiche le contenu de repertoire1
cd: permet de changer de répertoire courant.
Après la commande cd repertoire1, le répertoire courant devient repertoire1
cp: crée une copie d'un fichier.
cp fichier1.py fichier2.py copie fichier1.py sous le nom fichier2.py
mv: déplace ou renomme un fichier ou un répertoire.
mv fichier.txt dossier1 déplace fichier.txt dans dossier1
rm: supprime un fichier ou un répertoire.
rm mon_fichier.mp3 supprime mon_fichier.mp3
mkdir: crée un répertoire.
mkdir dossier2 crée le répertoire dossier2
cat: affiche le contenu d'un fichier.
cat fichier1.txt affiche le contenu de fichier1.txt
touch: crée un fichier qui n'existait pas jusqu'alors.
touch fichier2 crée fichier2
3. Dans son répertoire vacances, Dominique a conservé tous les fichiers durant une année.
Dominique décide d'indexer ces fichiers selon leur type: "photo", "vidéo" ou "son", le mois de leur création (un nombre entre 1 et 12), et leur taille en kilo-octets. Puis Dominique les stocke dans une liste, implémentée par le type list de Python.
Un extrait de la liste est donnée ci-dessous:
fichiers_vacances = [
{"nom_fichier": "plage.jpg", "type": "photo", "mois": 7, "taille": 152},
{"nom_fichier": "mouette.mp3", "type": "son", "mois": 7, "taille": 54},
{"nom_fichier": "famille1.png", "type": "photo", "mois": 12, "taille": 257},
...
] a)
Recopier et compléter sur la copie le code de la fonction classement_type qui prend en paramètre une liste L au format précédent et qui renvoie trois listes photos, sons et videos, contenant les éléments du type correspondant.
1 def classement_type(L):
2 photos = []
3 sons = []
4 videos = []
5 for fichier in...:
6 if... == "photo":
7 photos.append(fichier)
8 elif... == "son":
9...
10 else:
11...
12 return photos, sons, videos
b)
Dominique souhaite maintenant compter le nombre de photos datant du mois de juillet. Écrire une fonction photo_juillet qui prend en paramètre une liste de fichiers et qui renvoie le nombre de fichiers de type "photo" du mois de juillet.
c)
À partir des fichiers de la liste photos_vacances, Dominique souhaite stocker le plus de fichiers possible sur une clé USB d'une capacité de 64 Go.
Proposer une démarche algorithmique pour y parvenir (on ne demande pas de la programmer en Python).
Tu peux aussi réviser par thème
Entraîne-toi sur un thème avec les exercices des sujets de toutes les années.
- Bases de données relationnelles, SGBD et langage SQL · 12 exercices · 75 % de chances de tomber
- Arbres : vocabulaire, mesures et algorithmique · 11 exercices · 65 % de chances de tomber
- Structures de données abstraites : listes, piles, files, dictionnaires · 12 exercices · 60 % de chances de tomber
- Programmation orientée objet : classes, attributs, méthodes · 8 exercices · 60 % de chances de tomber
- Architectures matérielles et systèmes d'exploitation · 6 exercices · 40 % de chances de tomber
- Binaire, entiers et opérateurs booléens · 4 exercices · 35 % de chances de tomber