Tous les sujets du Bac 2021 · Toutes les annales du Bac de Numérique et Sciences Informatiques
Sujet du Bac Numérique et Sciences Informatiques 2021 · Métropole 2 remplacement
Sujet du Bac de Numérique et Sciences Informatiques 2021, Métropole 2 remplacement : 4 exercices corrigés. Thèmes : Structures de données abstraites. Gratuit.
Thèmes du sujet : Structures de données abstraites : listes, piles, files, dictionnaires · Programmation orientée objet : classes, attributs, méthodes · Graphes : modélisation, implémentations et parcours · Bases de données relationnelles, SGBD et langage SQL · Réseaux : adressage IP et sous-réseaux · Protocoles de routage : RIP et OSPF · Mise au point des programmes : bugs, assertions et tests
Exercice 1 - Partie A · Réseaux : adressage IP et sous-réseaux
EXERCICE 1
Principaux thèmes abordés: protocoles de communication, architecture d'un réseau et protocoles de routage.
Les parties A et B sont indépendantes.
Partie A: Réseau
1. Parmi les termes ci-dessous, préciser celui qui désigne l'ensemble des règles de communication utilisées pour réaliser un service particulier sur le réseau ?
2. On considère le schéma réseau de l'entreprise Lambda:
Parmi les quatre propositions suivantes ( Routeur, Commutateur (Switch), Contrôleur WIFI et Serveur), préciser celle qui correspond à:
a)
b)
3. En reprenant le schéma de la question 2. et le tableau d'adressage du réseau de l'entreprise Lambda, recopier sur votre copie et compléter la ligne du tableau du poste 3:
Matériel · Adresse IP · Masque · Passerelle
Routeur Port 1 · 172.16.0.1 · 255.255.0.0
Routeur Port 2 · 192.168.11.1 · 255.255.255.0
Routeur Port 3 · 192.168.11.254 · 255.255.255.0
Serveur fichiers · 192.168.11.10 · 255.255.255.0 · 192.168.11.1
Serveur données · 192.168.11.11 · 255.255.255.0 · 192.168.11.1
Poste 1 · 192.168.11.20 · 255.255.255.0 · 192.168.11.1
Poste 2 · 192.168.11.21 · 255.255.255.0 · 192.168.11.1
Poste 3
Exercice 1 - Partie B · Protocoles de routage : RIP et OSPF
Partie B: Routage réseaux
L'extrait de la table de routage d'un routeur R1 est donné ci-dessous:
1.
Indiquer les adresses IP du(des) réseau(x) directement connectés à ce routeur.
2.
Indiquer l'interface utilisée pour transférer les paquets contenant les adresses IP destination suivantes:
Adresse IP destination
Interface Machine ou Port
192.168.1.55
172.18.10.10
3.
On considère un réseau selon le schéma ci-dessous.
Compléter la table de routage simplifiée du Routeur1 (R1) en prenant comme métrique le nombre de routeurs à « traverser » avant d'atteindre le réseau de la machine destinataire.
Table de routage simplifiée du Routeur1
Routeur destination
Métrique
Route
R2: Routeur2
0
R1 – R2
R3: Routeur3
R4: Routeur4
R5: Routeur5
R6: Routeur6
R7: Routeur7
Exercice 2 · Graphes : modélisation, implémentations et parcours
EXERCICE 2 (4 points)
Principaux thèmes abordés: structure de données (tableaux, dictionnaires) et langages et programmation (spécification).
Objectif de l'exercice:
Les Aventuriers du Rail © est un jeu de société dans lequel les joueurs doivent construire des lignes de chemin de fer entre différentes villes d'un pays.
La carte des liaisons possibles dans la région Occitanie est donnée en annexe 1 de l'exercice 2. Dans l'annexe 2 de l'exercice 2, les liaisons possédées par le joueur 1 sont en noir, et celles du joueur 2 en blanc. Les liaisons en gris sont encore en jeu.
Annexe 1: Liaisons possibles en Occitanie
Annexe 2: Joueur 1 (noir) et joueur 2 (blanc)
Codages des structures de données utilisées:
• Liste des liaisons d'un joueur: Toutes les liaisons directes (sans ville intermédiaire) construites par un joueur seront enregistrées dans une variable de type "tableau de tableaux".
Le joueur 1 possède les lignes directes "Toulouse-Muret", "Toulouse-Montauban", "Gaillac-St Sulpice" et "Muret-Pamiers" (liaisons indiquées en noir dans l'annexe 2). Ces liaisons sont mémorisées dans la variable ci-dessous:
liaisonsJoueur1 = [
["Toulouse", "Muret"],
["Toulouse", "Montauban"],
["Gaillac", "St Sulpice"],
["Muret", "Pamiers"]
]
Remarque: Seules les liaisons directes existent, par exemple ["Toulouse","Muret"] ou ["Muret","Toulouse"]. Par contre, le tableau ["Toulouse","Mazamet"] n'existe pas, puisque la ligne Toulouse-Mazamet passe par Castres.
• Dictionnaire associé à un joueur: On code la liste des villes et des trajets possédée par un joueur en utilisant un dictionnaire de tableaux. Chaque clef de ce dictionnaire est une ville de départ, et chaque valeur est un tableau contenant les villes d'arrivée possibles en fonction des liaisons possédées par le joueur.
Le dictionnaire de tableaux du joueur 1 est donné ci-dessous:
DictJoueur1 = {
"Toulouse": ["Muret", "Montauban"],
"Montauban": ["Toulouse"],
"Gaillac": ["St Sulpice"],
"St Sulpice": ["Gaillac"],
"Muret": ["Toulouse", "Pamiers"],
"Pamiers": ["Muret"]
}
1.
Expliquer pourquoi la liste des liaisons suivante n'est pas valide:
tableauliaisons = [["Toulouse", "Auch"], ["Luchon", "Muret"], ["Quillan", "Limoux"]]
2.
Cette question concerne le joueur n°2 ( Rappel: les liaisons possédées par le joueur n°2 sont représentées par un rectangle blanc dans l'annexe 2 de l'exercice 2).
a)
b)
3.
À partir du tableau de tableaux contenant les liaisons d'un joueur, on souhaite construire le dictionnaire correspondant au joueur. Une première proposition a abouti à la fonction construireDict ci-dessous.
1 def construireDict(listeLiaisons):
2 """
3 listeLiaisons est un tableau de tableaux représentant la
4 liste des liaisons d'un joueur comme décrit dans le problème
5 """
6 Dict = {}
7 for liaison in listeLiaisons:
8 villeA = liaison[0]
9 villeB = liaison[1]
10 if not villeA in Dict.keys():
11 Dict[villeA] = [villeB]
12 else:
13 destinationsA = Dict[villeA]
14 if not villeB in destinationsA:
15 destinationsA.append(villeB)
16 return Dict
a)
b)
c)
La fonction construireDict, définie ci-dessus, est donc partiellement inexacte.
Compléter la fonction construireDict pour qu'elle génère bien l'ensemble du dictionnaire de tableaux correspondant à la liste de liaisons données en argument. À l'aide des numéros de lignes, on précisera où est inséré ce code.
Exercice 3 · Bases de données relationnelles, SGBD et langage SQL
Exercice 3 (4 points)
Principaux thèmes abordés: bases de données (modèle relationnel, base de données relationnelle et langage SQL).
Dans notre monde, l'information a de plus en plus de valeur et d'importance mais nous sommes de plus en plus confrontés à l'infobésité.
Considérons l'utilisation des données issues de la table de Mendeleïev (tableau périodique des éléments). Il est contraignant de faire des recherches sur des moteurs dédiés à chaque fois qu'une valeur est nécessaire (masse volumique, rayon de covalence, point de fusion...).
Les lignes 3, 4 et 5 de cette table Mendeleïev ont permis de construire, en annexe 1, une base de données des différents atomes correspondants.
Annexe 1 — Relations ATOMES et VALENCE
Z: Numéro atomique; Sym: symbole; L: lignes; C ou Col: Colonne; Couche: Couche de valence.
1.
Donner le nom du langage informatique utilisé pour accéder aux données dans une base de données ?
2. a)
Lister les différents attributs des tables ATOMES et VALENCE en précisant le type du domaine de chacun.
2. b)
Déterminer si des attributs de la table ATOMES peuvent avoir un rôle de clé primaire et/ou de clé étrangère. Justifier.
2. c)
Donner le schéma relationnel pour les deux tables ATOMES et VALENCE.
3. a)
Donner la réponse de la requête suivante:
SELECT nom FROM ATOMES WHERE L='3' ORDER BY Sym
3. b)
Donner la réponse de la requête suivante:
SELECT DISTINCT C FROM ATOMES
4. a)
Donner la requête SQL pour afficher le nom et la masse atomique des atomes.
4. b)
Donner la requête SQL pour afficher le symbole des atomes dont la couche de valence est s.
5.
On a remarqué une erreur de saisie dans la table ATOMES, la masse atomique de l'argon (Ar) n'est pas 29,948 g.mol⁻¹ mais 39,948 g.mol⁻¹. Écrire la requête SQL pour corriger cette erreur de saisie.
Exercice 4 - POO · Programmation orientée objet : classes, attributs, méthodes
Une entreprise fabrique des yaourts qui peuvent être soit nature (sans arôme), soit aromatisés (fraise, abricot ou vanille).
Pour pouvoir traiter informatiquement les spécificités de ce produit, on va donc créer une classe Yaourt qui possèdera un certain nombre d'attributs:
Son genre: nature ou aromatisé
Son arôme: fraise, abricot, vanille ou aucun
Sa date de durabilité minimale (DDM) exprimée par un entier compris entre 1 et 365 (on ne gère pas les années bissextiles). Par exemple, si la DDM est égale à 15, la date de durabilité minimale est le 15 janvier.
On va créer également des méthodes permettant d'interagir avec l'objet Yaourt pour attribuer un arôme ou récupérer un genre par exemple. On peut représenter cette classe par le tableau de spécifications ci-dessous:
1. Déclaration et instanciation de la classe Yaourt
La classe Yaourt est déclarée en Python à l'aide du mot-clé class:
class Yaourt:
""" Classe définissant un yaourt caractérisé par:
- son arome
- son genre
- sa durée de durabilité minimale"""
L'annexe 1 de l'exercice 4 donne le code existant et l'endroit des codes à produire dans les questions suivantes.
a)
Quelles sont les assertions à prévoir pour vérifier que l'arôme et la durée correspondent bien à des valeurs acceptables. Il faudra aussi expliciter les commentaires qui seront renvoyés.
Pour rappel:
• L'arôme doit prendre comme valeur 'fraise', 'abricot', 'vanille' ou 'aucun'.
• Sa date de durabilité minimale (DDM) est une valeur positive.
b)
Pour créer un yaourt, on exécutera la commande suivante:
Mon_Yaourt = Yaourt('fraise', 24)
c)
Écrire en Python une méthode GetArome(self), renvoyant l'arôme du yaourt créé.
def GetArome(self):
2. Mutateur d'arôme
On appelle mutateur une méthode permettant de modifier un ou plusieurs attributs d'un objet.
Écrire en Python le mutateur SetArome(self, arome) permettant de modifier l'arôme du yaourt.
On veillera à garder une cohérence entre l'arôme et le genre.
def SetArome(self, arome):
Exercice 4 - Piles · Structures de données abstraites : listes, piles, files, dictionnaires
Une entreprise fabrique des yaourts qui peuvent être soit nature (sans arôme), soit aromatisés (fraise, abricot ou vanille).
Pour pouvoir traiter informatiquement les spécificités de ce produit, on va donc créer une classe Yaourt qui possèdera un certain nombre d'attributs:
Son genre: nature ou aromatisé
Son arôme: fraise, abricot, vanille ou aucun
Sa date de durabilité minimale (DDM) exprimée par un entier compris entre 1 et 365 (on ne gère pas les années bissextiles). Par exemple, si la DDM est égale à 15, la date de durabilité minimale est le 15 janvier.
On va créer également des méthodes permettant d'interagir avec l'objet Yaourt pour attribuer un arôme ou récupérer un genre par exemple. On peut représenter cette classe par le tableau de spécifications ci-dessous:
3. On veut créer une pile contenant le stock de yaourts. Pour cela il faut tout d'abord créer une pile vide:
def creer_pile():
pile = [ ]
return pile
a)
Créer une fonction empiler(p, Yaourt) qui renvoie la pile p après avoir ajouté un objet de type Yaourt à la fin.
def empiler(p, Yaourt):
b)
Créer une fonction depiler(p) qui renvoie l'objet à dépiler.
def depiler(p):
c)
Créer une fonction estVide(p) qui renvoie True si la pile est vide et False sinon.
def estVide(p):
d)
Qu'affiche le bloc de commandes ci-dessous ?
mon_Yaourt1 = Yaourt('aucun', 18)
mon_Yaourt2 = Yaourt('fraise', 24)
ma_pile = creer_pile()
empiler(ma_pile, mon_Yaourt1)
empiler(ma_pile, mon_Yaourt2)
print(depiler(ma_pile).GetDuree())
print(estVide(ma_pile))
Exercice 5 · Mise au point des programmes : bugs, assertions et tests
EXERCICE 5 (4 points)
Principaux thèmes abordés: Traitement de données en tables (CSV) et langages et programmation (spécification).
Afin d'améliorer l'ergonomie d'un logiciel de traitement des inscriptions dans une université, un programmeur souhaite exploiter l'intelligence artificielle pour renseigner certains champs par auto-complétion. Il s'intéresse au descripteur « genre » (masculin, féminin ou indéterminé). Pour cela il propose d'exploiter les dernières lettres du prénom pour proposer automatiquement le genre.
Pour vérifier son hypothèse, il récupère un fichier CSV associant plus de 60 000 prénoms du monde entier au genre de la personne portant ce prénom. En utilisant seulement la dernière lettre, le taux de réussite de sa démarche est de 72,9% avec la fonction définie ci-dessous:
def genre (prenom):
liste_M = ['f', 'd', 'c', 'b', 'o', 'n', 'm', 'l', 'k',
'j', 'é', 'h', 'w', 'v', 'u', 't', 's', 'r',
'q', 'p', 'i', 'þ', 'z', 'x', 'ç', 'ö', 'ã',
'â', 'ï', 'g']
liste_F = ['e', 'a', 'ä', 'ü', 'y', 'ë']
if prenom[len(prenom)-1].lower() in liste_M:
return "M"
elif prenom[len(prenom)-1].lower() in liste_F:
return "F"
else:
return "I"
# Pour rappel, C.lower() convertit le caractère C en minuscule.
1. Appropriation
a)
Expliquer ce qu'est un fichier CSV.
b)
Donner le type de l'argument prenom de la fonction genre, et le type de la réponse renvoyée.
2. Développement
Pour effectuer son étude sur les prénoms à partir du fichier CSV, le programmeur souhaite utiliser la bibliothèque csv.
a)
La bibliothèque csv est un module natif du moteur python. Donner, dans ce cas, l'instruction d'importation.
b)
Au cours du développement de son projet, le programmeur souhaite insérer une assertion sur l'argument donné à la fonction. Proposer une assertion sur le type de l'argument qui corrige une erreur lorsque le type ne correspond pas à celui attendu.
c)
Avant le déploiement de sa solution, le programmeur décide de rendre sa fonction plus robuste. Pour cela il veut remplacer l'assertion proposée dans la question 2.b) par une gestion de l'argument pour éviter toutes erreurs empêchant la poursuite du programme. Proposer alors une ou plusieurs instructions en Python utilisant l'argument afin de s'assurer que la fonction se termine quel que soit le type de l'argument.
3. Améliorations
En prenant en compte les deux dernières lettres du prénom, il parvient à augmenter son taux de réussite à 74,4%. Pour cela, son étude du fichier CSV lui permet de créer deux listes: liste_M2 pour les terminaisons de deux lettres associées aux prénoms masculins et liste_F2 pour les prénoms féminins.
Recopier et modifier la structure conditionnelle (lignes 8 à 13) de la fonction genre afin de prendre en compte les terminaisons de deux lettres des listes liste_M2 et liste_F2.
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 · 22 exercices · 75 % de chances de tomber
- Protocoles de routage : RIP et OSPF · 17 exercices · 60 % de chances de tomber
- Réseaux : adressage IP et sous-réseaux · 14 exercices · 55 % de chances de tomber
- Structures de données abstraites : listes, piles, files, dictionnaires · 15 exercices · 45 % de chances de tomber
- Programmation orientée objet : classes, attributs, méthodes · 13 exercices · 45 % de chances de tomber
- Arbres : vocabulaire, mesures et algorithmique · 13 exercices · 45 % de chances de tomber
Autres sujets de 2021
Métropole Candidat libre 1 (2021) · Métropole Candidat libre 2 (2021) · Métropole France 1 (2021) · Métropole France 1 remplacement (2021) · Métropole France 2 (2021)