23-NSIJ2ME1 : Corrigé
Année : 2023
Centre : Métropole
Jour : 2
Enoncé :
Exercice 1 (3 points)
Protocoles Réseaux
-
- Table de routage du noeud
B
Destination Coût A 1 C 3 D 2 E 2 F 2 G 1 H 2 - Table de routage du noeud
F
Destination Coût A 1 B 2 C 3 D 2 E 1 G 2 H 3 - Table de routage du noeud
-
Le protocole RIP minimise le nombre de routeurs traversé, ici pour aller du noeud
Fau noeudH, au minmum on traverse 3 routeurs et les routes possibles sont :FEGHFAGH
-
D'après sa table de routage, le nouveau noeud
Zse situe à 1 saut deCet deH. Ci-dessous le tracé le réseau avec le nouveau noeud en vert :
-
Le protocole OSPF minimise le coût du chemin traversé, ici ce sera donc la route
BGEFADCHpour un coût total de 34.
Exercice 2 (3 points)
Bases de données et langage SQL
Bug
Attention, une erreur figure dans le sujet à propos de la relation Equipe, contrairement à ce qui est indiqué id_vol n'est pas la clé primaire de cette relation. La clé primaire de cette relation est formée du couple (id_vol,id_astronaute). L'attribut id_vol est une clé étrangère faisant référence à lattribut id_vol de la relation Vol.
-
a. Une clé primaire permet d'identifier de façon unique un enregistrement d'une table.
b. Cette requête tente d'insérer dans la table un nouvel enregistrement dont la clé primaire
id_astronauteest 3. Or la clé primaire doit être unique et il existe déjà dans la tableAstronauteun enregistrement dont l'id_astronauteest 3. Cette requête provoque donc une erreur.c. Fusee (id_fusee : int, modele : text, constructeur : text, nb_places : int)
-
a. Cette requête renvoie le nombre de fusées dont le constructeur est
'SpaceX', elle renvoie donc 2.b.
SELECT modele, constructeur FROM Fusee WHERE nb_places >=4 ;c.
SELECT nom, prenom FROM Astronaute ORDER BY nom ASC;Note
On rappelle que l'ordre de tri par défaut est l'ordre croissant, le
ASCest donc optionnel. -
a.
INSERT INTO Vol VALUES (5,3, "12/04/2023"); INSERT INTO Equipe VALUES (5,1); INSERT INTO Equipe VALUES (5,4);b.
SELECT nom, prenom FROM Astronaute JOIN Equipe ON Astronaute.id_astronaute = Equipe.id_astronaute JOIN Vol ON Equipe.id_vol = Vol.id_vol WHERE Vol.Date = "25/10/2022"
Exercice 3 (6 points)
Arbres binaires, files et programmation orientée objet
-
- La taille de cet arbre est 5 (son nombre de noeud)
- La hauteur de cet arbre est 3 (longueur du plus long chemin de la racine vers une feuille)
-
- L'insertion de
'davidbg'se fait à gauche de'dfifi'puis à droite de'annieji'et enfin à droite de'celine' - L'insertion de
'papicoeur'se fait à droite de'dfifi'puis à droite de'helene'L'arbre arbre insertion de ces deux valeurs est donc :graph TD A["'dfifi'"] --> B["'annieji'"] A --> C["'helene'"] B --> D["'aalice'"] B --> E["'celine'"] C --- V1[" "] C --> F["'papicoeur'"] E --- V2[" "] E --> G["'davidbg'"] style V1 fill:#FFFFFF, stroke:#FFFFFF linkStyle 4 stroke:#FFFFFF,stroke-width:0px style V2 fill:#FFFFFF, stroke:#FFFFFF linkStyle 6 stroke:#FFFFFF,stroke-width:0px linkStyle 7 stroke:#FF0000,stroke-width:2px linkStyle 5 stroke:#FF0000,stroke-width:2px style G fill:#FFCCCC, stroke:#FF0000 style F fill:#FFCCCC, stroke:#FF0000
- L'insertion de
-
Le parcours à utiliser est le C (parcours en profondeur infixe)
-
1 2 3 4 5 6 7 8 9
def present(self, identifiant): if self.est_vide(): return False elif self.racine() == identifiant: return True #(1) elif self.racine() < identifiant: return self.sd().present(identifiant) #(2) else: return self.sg.present(identifiant) #(3)- L'identifiant cherché est la racine, on renvoie
True - On relance récursivement la recherche à droite car l'étiquette de la racine est inférieure à celle recherchée
- On relance récursivement la recherche à gauche
Bug
Le code précédent est probablement la réponse attendue, mais il ne fonctionne pas en l'état. En effet l'énoncé indique que
self.sg()(ouself.sd()) renvoieNonelorsque le sous arbre n'existe pas. Cela conduit donc à relancer la recherche surNoneor la méthode ̀presentn'est pas définie pourNone. - L'identifiant cherché est la racine, on renvoie
-
a.
est_vide(f1)renvoieFalseb.
'bac' 'nsi' '2023' c.
'poule' 'python' 'castor' Note
Lors du parcours de la liste c'est
'castor'qui est enfilé en premier puis'python'et enfin'poule' -
1 2 3 4 5 6 7 8 9 10
def longueur(f): resultat = 0 g = creer_file() while not est_vide(f) : #(1) elt = defiler(f) resultat = resultat + 1 #(2) enfiler(g , elt) #(3) while not(est_vide(g)): enfiler(f, defiler(g)) return resultat- Tant que
fn'est pas vide - On a défilé un élement de f, on incrémente le compteur
- On sauvegarde l'élément dans une file
g. De façon à pouvoir restituerfdans son état d'origine on enfilera (boucle suivante) tous les éléments degdansf.
- Tant que
-
C'est
'2!@59fgds'qui sera validé en effet'best@'est rejeté car contient moins de 8 caractères et'paptap23'est rejeté car ne contient aucun des caractères de la liste['!', '#', '@', ';', ':']. -
def ajouter_mot(f,mdp): if longueur(f) == 3: defiler(f) enfiler(f,mdp)Note
Par hypothèse
fcontient au plus 3 éléments, donc on défile seulement dans le cas ou sa longueur est 3. -
1 2 3 4 5 6 7 8 9 10 11
def mot_file(f, mdp): g = creer_file() present = False while not(est_vide(f)): elt = defiler(f) enfiler(g, elt) if elt == mdp: #(1) present = True #(2) while not(est_vide(g)): enfiler(f, defiler(g)) return present- On a trouvé le mot de passe dans la file
- On met à jour le booléen
present
-
def modification(f,nv_mdp): if est_valide(nv_mdp) and not mot_file(f,nv_mdp): ajouter_mot(f,nv_mdp) return True return False