23-NSIZERO-A : Corrigé⚓︎
Année : 2023
Centre : Sujet Zéro-A
Jour : x
Enoncé :
Exercice 1 (3 points)⚓︎
Bases de données et types construits de données
-
Les attributs de la table
groupes
sontidgrp
,nom
,style
etnb_pers
. -
L'attribut
nom
de la tablemusiciens
ne peut pas être une clé primaire car plusieurs musiciens peuvent porter le même nom, or une clé primaire doit identifier de façon unique un enregistrement. -
Cette requête renvoie la colonne
nom
de la tablegroupes
lorsque le style du groupe est'Latin Jazz'
. Sur l'extrait fourni, on obtient donc :
nom |
---|
'Weather Report' |
'Return to Forever' |
-
🗂️ Requête SQL
UPDATE concerts SET heure_fin = '22h30' WHERE idconc = 36;
-
Pour récupérer le nom de tous les groupes qui jouent sur la scène 1 :
🗂️ Requête SQLSELECT groupes.nom FROM groupes JOIN concerts ON groupes.idgrp = concerts.idgrp WHERE concerts.scene = 1
-
🗂️ Requête SQL
INSERT INTO groupes VALUES 15,'Smooth Jazz Fourplay','Free Jazz',4
-
🐍 Script Python
def recherche_nom(musiciens): au_moins_4_concerts = [] for musicien in musiciens: if musicien['nb_concerts']>=4: au_moins_4_concerts.append(musicien['nom']) return au_moins_4_concerts
Exercice 2 (3 points)⚓︎
Architecture matérielle, Réseaux et systèmes d'exploitation
-
L'adresse réseau de la configuration d'Alice est
172.16.2.0/24
, donc tous les ordinateurs de cette configuration ont une adresse IP qui commence par les 24 même premiers bits (i.e. les 3 premiers octets) :172.16.2
. Cette configuration appartient donc à l'ordinateur d'Alice. -
On applique la formule donnée dans l'énoncé avec un débit du réseau de \(1\,000\) Mbits/s :
\(\textnormal{cout} = \dfrac{10\,000}{1\,000} = 10\) Le cout du réseau WAN8 est donc 10. -
Voici la table du routeur R6 :
Destination | Pass. | Cout |
---|---|---|
LAN 1 | R5 | 21 |
LAN 2 | - | - |
WAN 1 | R5 | 11 |
WAN 2 | R5 | 20 |
WAN 3 | R5 | 11 |
WAN 4 | R5 | 12 |
WAN 5 | R5 | 10 |
WAN 6 | - | - |
WAN 7 | - | - |
WAN 8 | R5 | 10 |
-
Les routeurs traversés seront : R6 R5 R2 R1
-
Le routeur en panne est le routeur
R5
(car la nouvelle route est alors R6 R4 R2 R1 dont le coût est bien 111.)
Exercice 3 (6 points)⚓︎
ABR et programmation objet
-
Ce fonctionnement traduit le comportement d'une file c'est à dire que le premier élément qui entre dans la structure de données est aussi le premier à en sortir (FIFO pour First In, First Out). Dans une pile, la dernier élément entré est le premier à sortir (LIFO pour Last In, First Out)
-
a. C'est la taille de l'arbre (c'est à dire le nombre total de noeuds de l'arbre)
b. C'est la racine de l'arbre puisqu'il s'agit de la tâche ajoutée à l'arbre en premier
c. C'est une feuille de l'arbre aucune tâche n'ayant été ajouté après celle-ci, le noeud représentant cette tâche n'a pas de fils, c'est donc une feuille.
-
a. Les attributs de la classe
Noeud
sonttache
,indice
,gauche
etdroite
.b. La méthode
insere
est récursive car elle s'appelle elle-même. Elle se termine car à chaque appel on descend d'un niveau dans l'arbre.c. On insère à gauche lorsque la valeur à insérer est inférieure à celle du noeud courant donc on complète la ligne 26 par :
🐍 Script Pythonelif self.racine.indice > nouveau_noeud.indice
d.
État initial
graph TD N("12") --> Ng("6") N --> Nd("14") Ng --> Ngg(" ") Ng --> Ngd("10") Ngd --> Ngdg("8") Ngd --> Ngdd(" ") Nd --> Ndg("13") Nd --> Ndd(" ") style Ngg fill:none, stroke-width:0px style Ngdd fill:none, stroke-width:0px style Ndd fill:none, stroke-width:0px linkStyle 2 stroke-width:0px linkStyle 5 stroke-width:0px linkStyle 7 stroke-width:0px
Après l'insertion de 11
graph TD N("12") --> Ng("6") N --> Nd("14") Ng --> Ngg(" ") Ng --> Ngd("10") Ngd --> Ngdg("8") Ngd --> Ngdd("11") Nd --> Ndg("13") Nd --> Ndd(" ") style Ngg fill:none, stroke-width:0px style Ndd fill:none, stroke-width:0px linkStyle 2 stroke-width:0px linkStyle 7 stroke-width:0px
Après l'insertion de 5
graph TD N("12") --> Ng("6") N --> Nd("14") Ng --> Ngg("5") Ng --> Ngd("10") Ngd --> Ngdg("8") Ngd --> Ngdd("11") Nd --> Ndg("13") Nd --> Ndd(" ") style Ndd fill:none, stroke-width:0px linkStyle 7 stroke-width:0px
Après l'insertion de 16
graph TD N("12") --> Ng("6") N --> Nd("14") Ng --> Ngg("5") Ng --> Ngd("10") Ngd --> Ngdg("8") Ngd --> Ngdd("11") Nd --> Ndg("13") Nd --> Ndd("16")
Après l'insertion de 7
graph TD N("12") --> Ng("6") N --> Nd("14") Ng --> Ngg("5") Ng --> Ngd("10") Ngd --> Ngdg("8") Ngdg --> Ngdgg("7") Ngdg --> Ngdgd(" ") Ngd --> Ngdd("11") Nd --> Ndg("13") Nd --> Ndd("16") style Ngdgd fill:none, stroke-width:0px linkStyle 6 stroke-width:0px
🐍 Script Python 41 42 43 44 45 46 47 48 49 50 51
def est_present(self,indice_recherche): """renvoie True si l'indice de priorité indice_recherche (int) passé en paramètre est déjà l'indice d'un noeud de l'abre, False sinon""" if self.racine == None: return False else: if self.racine.indice == indice_recherche: return True elif self.racine.indice > indice_recherche: return self.racine.gauche.est_present() else: return self.racine.droite.est_present()
-
a. On rappelle que dans un parcours infixe, on parcourt le sous arbre gauche, puis la racine, puis le sous arbre droit. Dans le cas de l'arbre de la figure 1, on obtient : 6 8 10 12 13 14
b. La tâche la plus prioritaire sera le premier élément rencontré lors de ce parcours.
-
🐍 Script Python 1 2 3 4 5 6
def tache_prioritaire(self): """renvoie la tache du noeud situé le plus à gauche de l'ABR supposé non vide""" if self.racine.gauche.est_vide(): return self.racine.tache else: return self.racine.gauche.tache_prioritaire()
Étape 1 : ajout de 14
graph TD
N("14")
Étape 2 : ajout de 11
graph TD
N("14")
N --> Ng("11")
N --> Nd(" ")
style Nd fill:none, stroke-width:0px
linkStyle 1 stroke-width:0px
Étape 3 : ajout de 8
graph TD
N("14")
N --> Ng("11")
N --> Nd(" ")
Ng --> Ngg("8")
Ng --> Ngd(" ")
style Nd fill:none, stroke-width:0px
linkStyle 1 stroke-width:0px
style Ngd fill:none, stroke-width:0px
linkStyle 3 stroke-width:0px
Étape 4 : traiter 8 qui est prioritaire
graph TD
N("14")
N --> Ng("11")
N --> Nd(" ")
style Nd fill:none, stroke-width:0px
linkStyle 1 stroke-width:0px
Étape 5 : ajout de 12
graph TD
N("14")
N --> Ng("11")
N --> Nd(" ")
Ng --> Ngg(" ")
Ng --> Ngd("12")
style Nd fill:none, stroke-width:0px
linkStyle 1 stroke-width:0px
style Ngg fill:none, stroke-width:0px
linkStyle 2 stroke-width:0px
Étape 6 : traiter 11 qui est prioritaire
graph TD
N("14")
N --> Ng("12")
N --> Nd(" ")
style Nd fill:none, stroke-width:0px
linkStyle 1 stroke-width:0px
Étape 7 : traiter 12 qui est prioritaire
graph TD
N("14")
Étape 8 : ajout de 15
graph TD
N("14")
N --> Ng(" ")
N --> Nd("15")
style Ng fill:none, stroke-width:0px
linkStyle 0 stroke-width:0px
Étape 9 : ajout de 19
graph TD
N("14")
N --> Ng(" ")
N --> Nd("15")
Nd --> Ndg(" ")
Nd --> Ndd("19")
style Ng fill:none, stroke-width:0px
linkStyle 0 stroke-width:0px
style Ndg fill:none, stroke-width:0px
linkStyle 2 stroke-width:0px
Étape 10 : traiter 14 qui est prioritaire
graph TD
N("15")
N --> Ng(" ")
N --> Nd("19")
style Ng fill:none, stroke-width:0px
linkStyle 0 stroke-width:0px