Tous les sujets du Bac 2022 · Toutes les annales du Bac de Numérique et Sciences Informatiques
Sujet du Bac Numérique et Sciences Informatiques 2022 · Centres étrangers (Afrique) Jour 2
Sujet du Bac de Numérique et Sciences Informatiques 2022, Centres étrangers (Afrique) Jour 2 : 3 exercices corrigés. Avec correction automatique.
Thèmes du sujet : Structures de données abstraites : listes, piles, files, dictionnaires · Programmation orientée objet : classes, attributs, méthodes · Bases de données relationnelles, SGBD et langage SQL · Réseaux : adressage IP et sous-réseaux · Protocoles de routage : RIP et OSPF · Récursivité
Exercice 1 · Récursivité
EXERCICE 1 (4 points)
Cet exercice porte sur les langages et la programmation (récursivité).
1.
Voici une fonction codée en Python:
def f(n):
if n == 0:
print("Partez!")
else:
print(n)
f(n-1)
a.
Qu'affiche la commande f(5) ?
b.
Pourquoi dit-on de cette fonction qu'elle est récursive ?
2.
On rappelle qu'en python l'opérateur + a le comportement suivant sur les chaînes de caractères:
>>> S = 'a'+'bc'
>>> S
'abc'
Et le comportement suivant sur les listes:
>>> L = ['a'] + ['b', 'c']
>>> L
['a', 'b', 'c']
On a besoin pour les questions suivantes de pouvoir ajouter une chaîne de caractères s en préfixe à chaque chaîne de caractères de la liste liste. On appellera cette fonction ajouter.
Par exemple, ajouter("a", ["b", "c"]) doit retourner ["ab", "ac"].
a.
Recopiez le code suivant et complétez les pointillés:
def ajouter(s, liste):
res = []
for m in liste:
res...............
return res
b.
Que renvoie la commande ajouter("b", ["a", "b", "c"]) ?
c.
Que renvoie la commande ajouter("a", [""]) ?
3.
On s'intéresse ici à la fonction suivante écrite en Python où s est une chaîne de caractères et n un entier naturel:
def produit(s, n):
if n == 0:
return [""]
else:
res = []
for i in range(len(s)):
res = res + ajouter(s[i], produit(s, n-1))
return res
a.
Que renvoie la commande produit("ab", 0) ? Le résultat est-il une liste vide ?
b.
Que renvoie la commande produit("ab", 1) ?
c.
Que renvoie la commande produit("ab", 2) ?
Exercice 2 · Structures de données abstraites : listes, piles, files, dictionnaires
EXERCICE 2 (4 points)
Cet exercice porte sur les structures de données (dictionnaires).
La cryptographie est un ensemble de techniques permettant de chiffrer un message.
Une technique de cryptographie consiste à mélanger les lettres d'un alphabet et à réécrire le message avec ces permutations. En Python, on peut créer un dictionnaire dans lequel les clés sont les lettres de l'alphabet et les valeurs sont celles de l'alphabet mélangé.
Par exemple, si l'alphabet contient les 4 lettres A, B, C et D, et si le dictionnaire de l'alphabet mélangé est alpha = {"A": "B", "B": "D", "C": "A", "D": "C"}, la chaîne de caractères "BAC" sera chiffrée "DBA".
Un tel dictionnaire sera appelé dictionnaire de chiffrement.
1.
On souhaite chiffrer un message écrit avec l'alphabet A, B, C, D, E, F, G à l'aide du dictionnaire:
alpha = {"A": "B", "B": "D", "C": "A", "D": "C", "E": "F", "F": "G", "G": "E"}
a.
b.
2.
On considère qu'un mot est une chaîne de caractères (un objet de type str) écrite uniquement avec les 26 lettres de l'alphabet en majuscule. Par exemple, "ARBRE" est un mot et "L'ARBRE !" n'est pas un mot à cause des caractères: "'", " " (espace) et "!".
Écrire une fonction chiffrer(mot, alpha) qui prend en paramètres mot un mot et alpha un dictionnaire de chiffrement, et qui renvoie une chaîne de caractères chiffrée avec le dictionnaire de chiffrement alpha.
3.
On souhaite déchiffrer un mot chiffré avec cette méthode.
a.
Si un mot est chiffré avec le dictionnaire de chiffrement alpha = {"A":"B", "B":"D", "C":"A", "D":"C", "E":"F", "F":"G", "G":"E"}, donner un dictionnaire permettant de le déchiffrer.
b.
Écrire une fonction en Python appelée dico_dechiffrement(dico) qui prend en paramètre dico un dictionnaire de chiffrement et qui renvoie un dictionnaire permettant de le déchiffrer. On pourra s'inspirer du code incomplet ci-dessous ou proposer une autre solution:
def dico_dechiffrement(dico):
nouveau = {}
for lettre in dico:
code = dico[................]
nouveau[................] =....................
return nouveau
c.
Écrire une fonction dechiffre(mot, dico) qui reçoit un mot chiffré et un dictionnaire de chiffrement et renvoie le mot décodé. On utilisera les fonctions écrites dans les questions précédentes.
4.
On souhaite à présent créer un dictionnaire de chiffrement. Écrire une fonction dico_chiffrement(alphabet) qui prend en paramètre alphabet un tableau de lettres et qui renvoie un dictionnaire de chiffrement dont les clés sont les lettres du tableau alphabet et les valeurs sont les lettres du tableau alphabet mélangées.
On pourra utiliser la fonction shuffle du module random qui mélange en place un tableau. Par exemple, on a:
>>> tab = ["A", "B", "C", "D"]
>>> shuffle(tab)
>>> tab
["B", "A", "D", "C"]
Exercice 3 · Bases de données relationnelles, SGBD et langage SQL
EXERCICE 3 (4 points)
Cet exercice porte sur les bases de données.
Un rappel sur la syntaxe de quelques fonctions SQL est disponible (Annexe 1: INSERT INTO, SELECT, WHERE, JOIN...).
Les enseignants d'un établissement imaginaire proposent des parcours d'entraînement au numérique à leurs élèves en créant des séries d'exercices appelées Evaluations. Les différentes informations sont stockées dans une base de données.
Les informations de chaque campagne créée sont stockées dans la table Evaluations dont la structure est la suivante:
attribut
type
Code_evaluation · CHAR
Nom_evaluation · CHAR
Auteur · CHAR
Date · CHAR
Code_competences · INT
Un extrait de la table Evaluations est donné ci-dessous:
Tableau 1
Code_evaluation
Nom_evaluation
Auteur
Date
Code_competences
EXKVLX886 · Term7 · Peltier · 13/10/2021 · 1453
AZVBYB689 · Groupe3 · Lacour · 07/10/2021 · 1276
PRJUYR491 · Term5 · Peltier · 07/10/2021 · 1453
RTKVLX656 · campagneSTMG · Beley · 03/10/2021 · 476
DZLYYR479 · Term5 · Serhani · 27/09/2021 · 1659
XJVBTX585 · grNSI2 · Eisen · 24/09/2021 · 532
CRLYYR439 · 1ere6 · Caille · 13/09/2021 · 532
AZVBYB789 · rentreeHGGSP · Martin · 13/09/2021 · 386
OBJUYR491 · Web_2 nde · Boucher · 07/09/2021 · 452
AGTBYB689 · rechercheBTS · Beley · 07/09/2021 · 1341
DQVBTX905 · 2nde2 · Nguyen · 07/09/2021 · 452
1.
a.
Dans la table Evaluations, quel est le seul attribut pouvant servir de clé primaire ? Justifier votre réponse.
b.
Écrire la requête SQL d'insertion qui a permis d'enregistrer la campagne Term7 dans la table Evaluations. Les informations relatives à cette campagne sont données dans la première ligne du tableau 1 précédent.
2.
On suppose maintenant que la table Evaluations contient uniquement les 11 enregistrements présentés en tableau 1.
a.
Combien de lignes s'affichent après l'exécution de la requête ?
SELECT auteur FROM Evaluations
b.
Recopier les lignes issues de la requête:
SELECT Nom_evaluation, Date FROM Evaluations WHERE auteur= "Peltier"
c.
Rédiger une requête permettant de connaître le nom des campagnes prévoyant un entraînement ciblé sur le web ( Code_competences 452).
3.
Le système de gestion de bases de données dispose également d'une table resultats dont la structure est la suivante:
attribut
type
Code_evaluation · CHAR
Num_eleve · INT
Score · INT
Si l'élève s'est connecté à la campagne mais n'a pas cliqué sur « envoyer les résultats », son score vaut -1.
a.
Qu'imposerait le choix du couple ( Code_evaluation, Num_eleve) comme clé primaire pour la table resultats ?
Un extrait de la relation est donné ci-dessous:
Code_evaluation
Num_eleve
Scores
PRJUYR491 · 17 · 300
CRLYYR439 · 654 · -1
PRJUYR491 · 1454 · 220
RTKVLX656 · 554 · 255
DZLYYR479 · 17 · -1
XJVBTX585 · 1664 · 12
CRLYYR439 · 18703 · 0
PRJUYR491 · 1565 · 422
XJVBTX585 · 12 · 643
CRLYYR439 · 168 · 19
DZLYYR479 · 17 · 140
XJVBTX585 · 1658 · 647
b.
Écrire une requête permettant d'obtenir les numéros des élèves ( Num_eleve) qui ont travaillé la compétence 532.
4.
a.
Proposer la structure d'une table eleves permettant d'identifier les noms, prénoms et les classes des élèves.
b.
Proposer une clef primaire pour cette table.
Exercice 4 - Programmation orientée objet · Programmation orientée objet : classes, attributs, méthodes
EXERCICE 4 (4 points)
Cet exercice porte sur les structures de données (programmation objet).
Simon souhaite créer en Python le jeu de cartes « la bataille » pour deux joueurs. Les questions qui suivent demandent de reprogrammer quelques fonctions du jeu. On rappelle ici les règles du jeu de la bataille:
Préparation
Distribuer toutes les cartes aux deux joueurs.
Les joueurs ne prennent pas connaissance de leurs cartes et les laissent en tas face cachée devant eux.
Déroulement
À chaque tour, chaque joueur dévoile la carte du haut de son tas.
Le joueur qui présente la carte ayant la plus haute valeur emporte les deux cartes qu'il place sous son tas.
Les valeurs des cartes sont: dans l'ordre de la plus forte à la plus faible: As, Roi, Dame, Valet, 10, 9, 8, 7, 6, 5, 4, 3 et 2 (la plus faible)
Si deux cartes sont de même valeur, il y a “bataille”.
Chaque joueur pose alors une carte face cachée, suivie d'une carte face visible sur la carte dévoilée précédemment.
On recommence l'opération s'il y a de nouveau une bataille sinon, le joueur ayant la valeur la plus forte emporte tout le tas.
Lorsque l'un des joueurs possède toutes les cartes du jeu, la partie s'arrête et ce dernier gagne.
Pour cela Simon crée une classe Python Carte. Chaque instance de la classe a deux attributs: un pour sa valeur et un pour sa couleur. Il donne au valet la valeur 11, à la dame la valeur 12, au roi la valeur 13 et à l'as la valeur 14. La couleur est une chaîne de caractères: "trefle", "carreau", "coeur" ou "pique".
1.
Simon a écrit la classe Python Carte suivante, ayant deux attributs valeur et couleur, et dont le constructeur prend deux arguments: val et coul.
a. Recopier et compléter les........ des lignes 3 et 4 ci-dessous.
1. class Carte:
2. def __init__(self, val, coul):
3..........valeur =.........
4................... = coul
b. Parmi les propositions ci-dessous quelle instruction permet de créer l'objet « 7 de cœur » sous le nom c7 ?
2.
On souhaite créer le jeu de cartes. Pour cela, on écrit une fonction initialiser():
sans paramètre
qui renvoie une liste de 52 objets de la classe Carte représentant les 52 cartes du jeu.
Voici une proposition de code. Recopier et compléter les lignes suivantes pour que la fonction réponde à la demande:
def initialiser():
jeu = []
for c in ["coeur", "carreau", "trefle", "pique"]: # couleur carte
for v in range(...): # valeur carte
carte_cree =...
jeu.append(carte_cree)
return jeu
4.
Écrire une fonction comparer(carte1, carte2) qui prend en paramètres deux objets de la classe Carte. Cette fonction renvoie:
0 si la force des deux cartes est identique,
1 si la carte carte1 est strictement plus forte que carte2
-1 si la carte carte2 est strictement plus forte que carte1
def comparer(carte1, carte2):
Exercice 4 - Structures de données linéaires · Structures de données abstraites : listes, piles, files, dictionnaires
EXERCICE 4 (4 points)
Cet exercice porte sur les structures de données (programmation objet).
Simon souhaite créer en Python le jeu de cartes « la bataille » pour deux joueurs. Les questions qui suivent demandent de reprogrammer quelques fonctions du jeu. On rappelle ici les règles du jeu de la bataille:
Préparation
Distribuer toutes les cartes aux deux joueurs.
Les joueurs ne prennent pas connaissance de leurs cartes et les laissent en tas face cachée devant eux.
Déroulement
À chaque tour, chaque joueur dévoile la carte du haut de son tas.
Le joueur qui présente la carte ayant la plus haute valeur emporte les deux cartes qu'il place sous son tas.
Les valeurs des cartes sont: dans l'ordre de la plus forte à la plus faible: As, Roi, Dame, Valet, 10, 9, 8, 7, 6, 5, 4, 3 et 2 (la plus faible)
Si deux cartes sont de même valeur, il y a “bataille”.
Chaque joueur pose alors une carte face cachée, suivie d'une carte face visible sur la carte dévoilée précédemment.
On recommence l'opération s'il y a de nouveau une bataille sinon, le joueur ayant la valeur la plus forte emporte tout le tas.
Lorsque l'un des joueurs possède toutes les cartes du jeu, la partie s'arrête et ce dernier gagne.
Pour cela Simon crée une classe Python Carte. Chaque instance de la classe a deux attributs: un pour sa valeur et un pour sa couleur. Il donne au valet la valeur 11, à la dame la valeur 12, au roi la valeur 13 et à l'as la valeur 14. La couleur est une chaîne de caractères: "trefle", "carreau", "coeur" ou "pique".
3.
On rappelle que dans une partie de bataille, les deux joueurs tirent chacun une carte du dessus de leur tas, et celui qui tire la carte la plus forte remporte les deux cartes et les place en dessous de son tas.
Parmi les structures linéaires de données suivantes: Tableau, File, Pile, quelle est celle qui modélise le mieux un tas de cartes dans ce jeu de la bataille ? Justifier votre choix.
Exercice 5 - Adressage IP et sous-réseaux · Réseaux : adressage IP et sous-réseaux
EXERCICE 5
Cet exercice porte sur les architectures matérielles, systèmes d'exploitation et réseaux (protocoles de routage).
On représente schématiquement un réseau dans lequel:
L1 et L2 sont des réseaux locaux
R1, R2, R3, R4, R5, et R6 sont des routeurs.
Dans cet exercice, les adresses IPv4 sont composées de 4 octets O1.O2.O3.O4 où O1, O2, O3 et O4 sont les représentations décimales de chacun des octets.
La notation « O1.O2.O3.O4 / n » est appelée la notation CIDR. En notation CIDR, l'adresse IP d'une machine est composée d'une adresse IPv4 et d'une indication sur le masque de sous-réseau. Par exemple: 172.16.1.10 / 16 signifie:
Adresse IP décimale: 172.16.1.10
Masque de sous-réseau en notation CIDR: 16
La notation CIDR /16 signifie que le masque de sous-réseau a les 16 bits de poids fort de son adresse IP à la valeur 1. C'est-à-dire, pour notre exemple:
11111111.11111111.00000000.00000000.
1.
Dans cet exercice, les adresses IPv4 sont composées de 4 octets O1.O2.O3.O4. O1, O2, O3 et O4 sont les représentations décimales de chacun des octets.
La notation « O1.O2.O3.O4 / n » est appelée la notation CIDR. En notation CIDR, l'adresse IP d'une machine est composée d'une adresse IPv4 et d'une indication sur le masque de sous réseau. Par exemple: 172.16.1.10 / 16 signifie:
Adresse IP décimale: 172.16.1.10
Masque de sous-réseau en notation CIDR: 16
La notation CIDR /16 signifie que le masque de sous-réseau a les 16 bits de poids fort de son adresse IP à la valeur 1. C'est-à-dire, pour notre exemple: 11111111.11111111.00000000.00000000.
a.
Une machine cliente du réseau local L2 a pour adresse IPv4: 192.168.10.31 / 24. Son adresse IP binaire est: 00110110. 00100101. 01111010.O4 / 24.
b.
Donner le masque de sous-réseau en notation binaire puis en notation décimale.
c.
Combien peut-on connecter de machines sur ce sous-réseau ?
Exercice 5 - Protocoles de routage · Protocoles de routage : RIP et OSPF
EXERCICE 5
Cet exercice porte sur les architectures matérielles, systèmes d'exploitation et réseaux (protocoles de routage).
On représente schématiquement un réseau dans lequel:
L1 et L2 sont des réseaux locaux
R1, R2, R3, R4, R5, et R6 sont des routeurs.
Dans cet exercice, les adresses IPv4 sont composées de 4 octets O1.O2.O3.O4 où O1, O2, O3 et O4 sont les représentations décimales de chacun des octets.
La notation « O1.O2.O3.O4 / n » est appelée la notation CIDR. En notation CIDR, l'adresse IP d'une machine est composée d'une adresse IPv4 et d'une indication sur le masque de sous-réseau. Par exemple: 172.16.1.10 / 16 signifie:
Adresse IP décimale: 172.16.1.10
Masque de sous-réseau en notation CIDR: 16
La notation CIDR /16 signifie que le masque de sous-réseau a les 16 bits de poids fort de son adresse IP à la valeur 1. C'est-à-dire, pour notre exemple:
11111111.11111111.00000000.00000000.
On communique des extraits de la table de routage des routeurs R1, R2, R3, R4 et R6 ci-dessous:
Routeur
Réseau destinataire
Passerelle
Interface
R1
192.168.10.0
57.23.2.2
57.23.2.1
R2
192.168.10.0
30.122.50.5
30.122.50.2
R3
192.168.10.0
175.16.100.5
175.16.100.3
R4
192.168.10.0
70.37.150.6
70.37.150.4
R6
192.168.10.0
120.154.30.5
120.154.30.6
2. Acheminement d'un paquet de L1 vers L2
Un paquet de données part du réseau local L1 pour aller vers L2.
a)
En utilisant le schéma du réseau et l'extrait de la table de routage du routeur R4, vers quel routeur R4 envoie-t-il ce paquet, R1 ou R6 ? Justifiez.
b)
Nommez les routeurs traversés par ce paquet lorsqu'il va de L1 à L2.
3. Protocole RIP après coupure de liaison
La liaison est coupée entre R4 et R6:
a)
Sachant que ce réseau utilise le protocole RIP (distance minimale en nombre de sauts), donner l'un des deux chemins possibles que pourra suivre un paquet de données allant de L1 vers L2.
b)
Dans les extraits de la table de routage, pour le chemin de la question 3.a., quelle(s) ligne(s) sera ou seront modifiée(s) ?
4. Protocole OSPF
La liaison entre R4 et R6 est rétablie. Par ailleurs, on décide d'utiliser le protocole OSPF (distance liée au coût minimal des liaisons) pour effectuer le routage. Le coût des liaisons entre les routeurs est conditionné par la bande passante (BP) des liaisons entre les routeurs.
Le coût est donné par la formule:
La bande passante (BP) peut s'exprimer en Mégabits par seconde. Plus BP est importante, plus le coût des liaisons diminue. Le coût des liaisons est donné dans le tableau ci-dessous:
Liaison
R1-R4
R1-R2
R1-R6
R2-R3
R2-R5
R2-R6
R3-R5
R3-R6
R4-R6
R5-R6
Coût
100
1
1
1
100
10
1
10
100
100
a)
Dessiner le réseau en y ajoutant les coûts entre les connexions. Déterminer le chemin parcouru par un paquet partant du réseau L1 et arrivant au réseau L2 en utilisant le protocole OSPF (le moindre coût).
b)
Indiquer pour quel(s) routeur(s) l'extrait de la table de routage sera modifié pour un paquet à destination de L2, avec le protocole OSPF.
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 · 11 exercices · 70 % de chances de tomber
- Structures de données abstraites : listes, piles, files, dictionnaires · 14 exercices · 60 % de chances de tomber
- Programmation orientée objet : classes, attributs, méthodes · 8 exercices · 50 % de chances de tomber
- Arbres : vocabulaire, mesures et algorithmique · 6 exercices · 45 % de chances de tomber
- Réseaux : adressage IP et sous-réseaux · 7 exercices · 40 % de chances de tomber
- Protocoles de routage : RIP et OSPF · 6 exercices · 40 % de chances de tomber