Sujet bac : annale 2024 – centres étrangers groupe 1 – jour 1
EXERCICE 1 (6 points)
EXERCICE 1 (6 points)
$\bold{1}$
« Voisins » est une liste de listes. La première liste, d’index « 0 », correspond à la liste des voisins directs du nœud « 0 ». De la même manière, le seconde liste, d’index « 1 », correspond à la liste des voisins direct du nœud « 1 ». Et ainsi de suite.
$\bold{2}$
$\bold{3}$
$\bold{4}$
Remarque : si l’on considère que les graphes concernés par la fonction peuvent présenter un nœud isolé, c’est-à-dire sans voisin, un test sur la longueur de « voisins[s] » est nécessaire afin de traiter le cas d’un nœud isolé. Sinon, le cas d’un nœud isolé provoquerait une erreur.
$\bold{5}$
La définition de la fonction
C’est la caractéristique d’une fonction récursive.
$\bold{6}$
Cette fonction génère un trajet aléatoire, dans le graphe « voisins », à partir du nœud n° « i » et constitué de « $n$ » étapes. Elle renvoie le numéro du dernier nœud de ce trajet.
En rapportant cette fonction au contexte de l’exercice, celle-ci modélise le trajet aléatoire du virus qui gagne « $n$ » ordinateurs en partant de l’ordinateur « i » et affiche l’identité du $n$ième ordinateur visité.
$\bold{7}$
On pourrait optimiser le code en remplaçant les 3 dernières lignes par :
$\bold{8}$
On constate que près d’un tiers des 1 000 parcours aléatoires de 1 000 pas effectués par le virus à partir du nœud « 4 » se terminent au nœud « 0 », tous les autres nœuds n’atteignant pas ce score. Il semble donc prioritaire de protéger le nœud « 0 ».
$\bold{9}$
Proposition du code Python implémentant l’algorithme demandé :
$\char"0023\text{importation importation de la bibliothèque random}$
$\text{import random}$
$\char"0023\text{initialisation des données avec celles de l’énoncé}$
$\char"0023\text{définition de la fonction marche\textunderscore alea donnée en 4) de l’exercice}$
$\char"0023\text{définition de la fonction demandée nommée temps\textunderscore contamination}$
$\qquad\char"0023\text{initialisation du compteur de pas}$
$\qquad\char"0023\text{initialisation de la liste des sommets contamines avec le premier sommet}$ $\qquad\text{passé en second argument de la fonction}$
$\qquad\char"0023\text{condition d'arrêt de la fonction : lorsque le nombre de sommets visités}$ $\qquad\text{est égal au nombre de sommets du graphe "voisins »}$
$\qquad\char"0023\text{appel de la fonction avec les données fournies par l'énoncé}$
EXERCICE 2 (6 points)
EXERCICE 2 (6 points)
PARTIE A
$\bold{1}$
Les 16 bits positionnés à 1 correspondent à 255.255 pour la partie gauche de la notation décimale pointée.
La partie machine, qui se situe à droite de la notation décimale pointée, doit être à zéro.
Le masque de sous-réseau en notation décimale pointé est donc : 255.255.0.0.
$\bold{2}$
L’adresse du réseau local L2 se déduit du masque de sous-réseau appliqué aux adresses des machines de ce sous-réseau.
On trouve ainsi : 172.16.0.0/16.
$\bold{3}$
L’adresse de diffusion du réseau local L2 correspond à la partie gauche représentant l’adresse de ce sous-réseau, donc 172.16, et la partie droite dont tous les bits sont positionnés à 1 soit 255.255.
L’adresse de diffusion du réseau local L2 est donc : 172.16.255.255/16.
$\bold{4}$
Le nombre maximum de machines pouvant être connectées au réseau local L2 correspond au nombre maximum d’adresses que l’on peut affecter entre 0.1 et 255.255 (partie droite de l’adresse réseau dont il faut exclure la valeur 0.0 réservée à l’adresse réseau et la valeur 255.255 réservée à l’adresse de diffusion).
Cela fait donc en tout 256 * 256 – 2 = 65634.
Partie B
$\bold{5}$
L1 $\to$ Routeur A $\to$ Interface 53.10.10.1 $\to$ Interface 53.10.2 $\to$ Routeur H $\to$ Interface 53.10.10.5 $\to$ Interface 53.10.10.6 $\to$ Routeur D $\to$ Interface 172.16.255.254 $\to$ L2
$\bold{6}$
Deux chemins possibles :
- L1 $\to$ Routeur A $\to$ Routeur B $\to$ Routeur C $\to$ Routeur D $\to$ L2 (4 sauts)
- L1 $\to$ Routeur A $\to$ Routeur H $\to$ Routeur C $\to$ Routeur D $\to$L2 (4 sauts)
Les autres, tels que par exemple L1 $\to$ Routeur A $\to$ Routeur H $\to$ Routeur F $\to$Routeur E $\to$ Routeur D $\to$ L2 présentent plus de sauts.
Le protocole RIP reposant sur le nombre de sauts, celui-ci suivra l’un des deux seuls chemins ne présentant que 4 sauts.
$\bold{7}$
Prenons le chemin L1 $\to$ Routeur A $\to$ Routeur B $\to$ Routeur C $\to$ Routeur D $\to$ L2.
Le seul routeur dans ce chemin dont les tables de routage sont impactées par la rupture de la liaison entre le routeur « H » et le routeur « D » est le routeur « A », dont la règle de routage pour joindre L2 doit être modifiée comme suit :
Routeur | Réseau destinataire | Passerelle | Interface |
A | L2 | 193.55.24.2 | 193.55.24.1 |
$\bold{8}$
Bande passante | Coût de la liaison |
10 Gbits/s | $(10^9)/(10^{10}) =0,1$ |
1 Gbits/s | $(10^9)/(10^9) =1$ |
100 Mbits/s | $(10^9)/(10^8) =10$ |
$\bold{9}$
En privilégiant les liaisons à plus faible coût, on détermine assez rapidement que le chemin déterminé par le protocole OSPF entre L1 et L2 est le suivant :
Le coût total de ce chemin est donc de $1 0,1+0,1+0,1$ soit $1,3$.
$\bold{10}$
On continue à privilégier les liaisons à plus faible coût.
On détermine alors le nouveau chemin suivant :
Le coût total de ce chemin est donc de $1 0,1+0,1+0,1$ soit $1,3$.
$\bold{10}$
On continue à privilégier les liaisons à plus faible coût.
On détermine alors le nouveau chemin suivant :
IMAGE 03
Le coût total de ce chemin alors de $1+1+0,1+0,1$ soit $2,2$.
EXERCICE 3 (8 points)
EXERCICE 3 (8 points)
PARTIE A
$\bold{1}$
L’usage d’une base de données relationnelle présente de nombreux avantages, dont les suivants :
- cela évite la saisie d’informations redondantes et, par la même occasion, les risques d’incohérence ;
- cela permet d’effectuer des recherches complexes de façon rapide et fiable.
$\bold{2}$
Pour qu’un attribut soit utilisé en tant que clé primaire d’une relation, les occurrences de cet attribut ne doivent prendre que des valeurs uniques dans cette relation.
$\bold{3}$
Les clés étrangères « $\char"0023\text{id\textunderscore client}$ » et « $\char"0023\text{id\textunderscore emplacement}$ » dans la relation « $\text{Reservation}$ » permettent de rattacher un client et un emplacement à une réservation donnée.
Ainsi, la clé étrangère « $\char"0023\text{id\textunderscore client}$ » fait référence à la clé primaire « $\text{id\textunderscore client}$ » de la relation « $\text{Client}$ ». La table « $\text{Client}$ » est ainsi mise en relation avec la table « $\text{Reservation}$ ».
De la même manière, la clé étrangère « $\char"0023\text{id\textunderscore emplacement}$ » fait référence à la clé primaire « $\text{id\textunderscore emplacement}$ » de la relation « $\text{Emplacement}$ ». La table « $\text{Emplacement}$ » est ainsi mise en relation avec la table « $\text{Reservation}$ ».
$\bold{4}$
Schéma relationnel de la relation « $\text{Emplacement}$ » :
$\bold{5}$
Cette requête recherche dans la table « $\text{Emplacement}$ » (
Le résultat qu’affiche cette requête est par conséquent :
Id_emplacement | nom | localisation |
1 | myrtille | A4 |
4 | mandarine | B1 |
6 | melon | A2 |
$\bold{6}$
$\bold{7}$
$\bold{8}$
PARTIE B
$\bold{9}$
Le terme « $\text{self}$ » fait référence à l’instance courante. Celle-ci est passée en paramètre à des méthodes de la classe dont elle est issue.
$\bold{10}$
$\bold{11}$
Remarque : le nombre de jours de réservation dans le calcul dont le résultat est retourné a été mis en facteur.
$\bold{12}$
L’erreur se produit au niveau de la ligne de code 25 dans laquelle la variable « année » fait l’objet d’une comparaison avec les entiers 2018 et 2024. En effet, cette comparaison échoue car le type de la variable « année » est une chaîne de caractère. La comparaison d’une chaîne de caractères à un entier provoque donc une erreur.
$\bold{13}$
Proposition de correction :
Remarque : le fait que dans les deux lignes de code précédentes (23 et 24) on ait vérifié que la chaîne « année » ne soit constituée que de chiffres nous garantit que l’instruction proposée en correction ne provoquera jamais d’erreur.
$\bold{14}$
- Vérification du mois :
- Vérification du numéro :