23-NSIJ2LR1 : Corrigé
Année : 2023
Centre : Réunion
Jour : 2
Enoncé :
Exercice 1 (4 points)
Abres binaires de recherche, programmation orientée objet et récursivité
-
En suivant l'arbre comme indiqué dans l'énoncé, on trouve :
- le code de la lettre
N
est-o
- le code de la lettre
S
estooo
- le code de la lettre
I
estoo
Donc, le code morse de
NSI
est-o ooo oo
- le code de la lettre
-
Représentation du sous arbre pour les lettres
G
,M
,O
,Q
,Z
:graph TD R1[" "] --> V1[" "] R1-- - --> T["T"] T --> V2[" "] T -- - --> M["M"] M -- o --> G["G"] M -- - --> O["O"] G -- o --> Z["Z"] G -- - --> Q["Q"] style V1 fill:#FFFFFF, stroke:#FFFFFF linkStyle 0 stroke:#FFFFFF,stroke-width:0px style V2 fill:#FFFFFF, stroke:#FFFFFF linkStyle 2 stroke:#FFFFFF,stroke-width:0px
- La lettre
S
est le fils gauche deI
(arbre.gauche.gauche
) et la lettreK
le fils droit deN
(arbre.droite.gauche
), donc les instructions sont :arbre.gauche.gauche.gauche = Noeud("S") arbre.droite.gauche.droit = Noeud("K")
-
a.
1 2 3 4 5 6 7
def est_present(n, car) : if n == None : #(1) return False elif n.valeur == car : #(2) return True else : return est_present(n.droite, car) or est_present(n.gauche, car) #(3)
- Si le noeud est
None
alors le caractère n'est pas présent - On renvoie
True
si la valeur du noeud est le caractère cherché - On relance récursivement la recherche dans les deux sous arbres (droit et gauche)
b. La fonction
est_present
est récursive car elle s'appelle elle-même.c. Cette fonction parcourt en profondeur et la racine puis chacun des deux sous arbres, c'est donc un parcours en profondeur prefixe.
- Si le noeud est
-
a.
8 9 10 11 12 13 14
def code_morse(n, car): if n.valeur == car : return "" #(1) elif est_present(n.droit,car) : #(2) return "-" + code_morse(n.droite, car) else : return "o" + code_morse(n.gauche, car) #(3)
- On a atteint le caractère, son code a déjà été constitué entièrement, on renvoie
""
- Le caractère est à droite on ajoute
"-"
devant le code et on relance la recursion - Même traitement mais à gauche (on ajoute
"o"
)
b.
def morse_message(arbre,message): message_code = "" for car in message: message_code = message_code + code_morse(arbre,car) + "|" return message_code
Note
Dans la fonction ci-dessus, un
"|"
figure toujours à la fin d'un message non vide. - On a atteint le caractère, son code a déjà été constitué entièrement, on renvoie
Exercice 2 (4 points)
Réseaux et procoles de routage
-
L'écriture binaire de cette adresse est :
11000000.10101000.10100010.00000100
-
a. L'adresse du réseau local du secteur "Administration" est
192.168.16.0
(tous les bits de la partie hôte sont à 0) et son masque de sous réseau255.255.255.0
(les 24 premiers bits sont à 1)b. L'adresse de diffusion est
192.168.16.255
(tous les bits de la partie hôte sont à 1)c. On peut connecter 254 machines à ce réseau
-
Table de routage de
R5
:Destination Passe par Distance R1
R1
1 R2
R2
1 R3
R3
1 R4
R4
1 R6
R1
2 Table de routage de
R6
:Destination Passe par Distance R1
R1
1 R2
R1
3 R3
R4
2 R4
R4
1 R6
R1
2 Note
Plusieurs tables sont possibles, le sujet devrait l'indiquer !
b. Le chemin emprunté sera :
R6
R4
R3
c. La nouvelle route sera :
R6
R1
R5
R3
-
a. Tableau complété :
Liaison Débit Coût Ethernet \(\textcolor{green}{10^7}\) 10 Fast_Ethernet \(10^8\) \(\textcolor{green}{1}\) Fibre \(10^9\) \(\textcolor{green}{0,1}\) b. Schéma avec le coût des liaisons :
c. Le coût de la route
R4
R5
R2
est \(10,1\) donc le coût de la liaisonR6
R4
est 1, c'est une liaison Fast-Ethernet.d. La route sera
R6
R1
R5
R2
pour un coût total de \(2,1\).
Exercice 3 (4 points)
Bases de données relationnelles et langage SQL
-
a. Cette requête renvoie les
id_vehicule
des véhicules de type'citadine'
, sur l'extrait présenté on obtient donc :id_vehicule 1 2 4 b.
SELECT immatriculation FROM vehicule WHERE carburant = "diesel" ;
c. Le résultat de cette requête sera :
immatriculation modele ML – 128 – VM C3 CL – 142 – CE C5 AB – 135 – YZ 208 JL – 526 – LM 508 EC – 246 – TP Zoe LC – 231 – MG Model X d.
SELECT COUNT(*) FROM vehicule ;
e.
SELECT nom, prenom FROM utilisateur ORDER BY nom ASC;
Note
Le
ASC
est optionnel puisque c'est l'ordre croissant est l'ordre par défaut -
a. Les clés étrangères sont les clés primaires d'une autre table, ici c'est donc :
id_utilisateur
qui référence l'utilisateur etid_vehicule
qui référence le véhicule loué.b. vehicule (id_vehicule, immatriculation, marque, modele, type, carburant)
utilisateur (id_utilisateur, nom, prenom, permis, adresse, ville)
location (id_location, #id_utilisateur, #id_vehicule, date_debut, date_fin)c. Les clés primaires doivent être uniques, or ici la valeur 1 existe déjà pour la clé primaire
id_location
, un nouvel enregistrement ayant cette même valeur ne peut donc pas être ajouté. -
a.
UPDATE utilisateur SET adresse = "50 rue de la Liberté" WHERE id_utilisateur = 133 ;
b.
INSERT INTO utilisateur VALUES (137, "LEFEBVRE", "Gabriel", 124689, "30 ruelle des champs", "Amiens") ;
c.
INSERT INTO location VALUES (4, 132, 3, "2022-06-21", "2022-06-23") ;
d.
SELECT vehicule.modele, vehicule.immatriculation, utilisateur.nom, utilisateur.prenom FROM vehicule JOIN location ON location.id_vehicule = vehicule.id_vehicule JOIN utilisateur ON utilisateur.id_utilisateur = location.id_utilisateur WHERE location.date_debut = "2022-06-21"