Centres étrangers 2023 Jour 1
Exercice 1
Schéma relationnel de la relation
description
(la clé primaire est soulignée et la clé étrangère est précédée du symbole #):description(id_description : INT, resume : TEXT, duree : INT, #id_emission : INT)
- La requête affiche le résultat suivant :
theme annee Le système d’enseignement supérieur français est-il juste et efficace ? 2022 Trois innovations pour la croissance future (1/3) : La révolution blockchain 2021 - Requête permettant d’afficher les thèmes des podcasts de l’année 2019 :
SELECT theme FROM podcast WHERE annee = 2019
- Requête permettant d’afficher la liste des thèmes et des années de diffusion des podcasts dans l’ordre chronologique des années :
SELECT theme, annee FROM podcast ORDER BY annee
La requête proposée affiche la liste de tous les thèmes de la relation
podcast
sans répétition.Requête SQL supprimant la ligne contenant l’
id_podcast = 40
de la relationpodcast
:
DELETE FROM podcast WHERE id_podcast = 40
Requête SQL permettant de changer le nom de l’animateur de l’émission “Le Temps de débat” en “Emmanuel L”.
UPDATE emission SET animateur = "Emmanuel L" WHERE nom = "Le Temps de débat"
Requête SQL permettant d’ajouter l’émission “Hashtag” sur la radio “France inter” avec “Mathieu V.”, avec un
id_emission
égal à 12850.INSERT INTO emission (id_emission, nom, radio, animateur) VALUES (12850, "Hashtag", "France inter", "Mathieu V.")
Requête permettant de lister les thèmes, le nom des émissions et le résumé des podcasts pour lesquels la durée est strictement inférieure à 5 minutes.
SELECT podcast.theme, emission.nom, description.resume FROM podcast JOIN emission ON podcast.id_emission = emission.id_emission JOIN description ON emission.id_emission = description.id_emission WHERE description.duree < 5
La base de donnée telle que définie dans l’énoncé n’est bien construite. Chaque description est en-effet reliée à une émission unique à travers la clé étrangère id_emission
, mais pas au podcast correspondant. Comme il existe plusieurs podcasts pour une émission, il n’y a pas moyen de savoir à quel podcast correspond quelle description.
Exercice 2
- On convertit les entiers 2 et 13 en binaire sur 8 bits :
2 13 00000010 00001101 L’adresse IP 164.178.2.13 est donc représentée par la chaîne de caractères :
10100100.10110010.00000010.00001101
- L’adresse IP indique que les 24 premiers bits sont réservés à l’identifiant du réseau et les 8 derniers bits sont réservés à l’identifiant de l’hôte. La machine appartient donc au réseau dont l’adresse est 164.178.2.0
Pour un paquet émis par A à destination de G, les chemins optimaux en suivant le protocole RIP sont ceux qui minimisent le nombre se sauts :
Chemin Nombre de sauts A -> B -> C -> H -> G 4 A -> B -> E -> G 3 A -> D -> E -> G 3 A -> D -> F -> G 3 Les chemins optimaux sont donc A -> B -> E -> G, A -> D -> E -> G et A -> D -> F -> G.
- Le coût d’une liaison Ethernet est \(\frac{10^9}{10^8}=10\), celui d’une liaison Fast-Ethernet est \(\frac{10^9}{10^9}=1\) et celui d’une liaison fibre est \(\frac{10^9}{10^{10}}=0.1\)
Nous pouvons déterminer le chemin de parcours en utilisant l’algorithme de Dijkstra.
A B C D E F G H choix 0-A - - - - - - - A(0) X 1-A - 10-A - - - - B(1) X X 11-B 10-A 11-B - - - D(10) X X 11-B X 10.1-D 11-D - - E(10.1) X X 11-B X X 11-D 20.1-E - C(11) ou F(11) X X X X X X 12-F 11.1-C H(11.1) X X X X X X 12-F X G(12) Le chemin optimal est donc A -> D -> F -> G de coût total 12.
Le routeur F est en panne. Nous appliquons l’algorithme de Dijkstra en supprimant le routeur F
A B C D E G H choix 0-A - - - - - - A(0) X 1-A - 10-A - - - B(1) X X 11-B 10-A 11-B - - D(10) X X 11-B X 10.1-D - - E(10.1) X X 11-B X X 20.1-E - C(11) X X X X X 20.1-E 11.1-C H(11.1) X X X X X 12.1-H X G(12.1) Le chemin optimal est donc A -> B -> C -> H -> G de coût total 12.1.
Exercice 3
Fonction permettant l’ajout d’une couleur aléatoire dans la file
f
:def ajout(f): = ("bleu", "rouge", "jaune", "vert") couleurs = randint(0, 3) indice enfiler(f, couleurs[indice])return f
Fonction permettant de vider la séquence
f
:def vider(f): while not est_vide(f): defiler(f)
Fonction
affich_seq
complétée :def affich_seq(sequence): = creer_file_vide() stock ajout(sequence)while not est_vide(sequence): = defiler(sequence) c affichage(c)0.5) time.sleep( enfiler(stock, c)while not est_vide(stock): enfiler(sequence, defiler(stock))
- Fonction
tour_de_jeu
complétée :
def tour_de_jeu(sequence): # zone A affich_seq(sequence) = creer_file_vide() stock while not est_vide(sequence): = saisie_joueur() c_joueur = defiler(sequence) # zone B c_seq if c_joueur == c_seq: # zone C enfiler(stock, c_seq) else: # zone D vider(sequence) while not est_vide(stock): # zone E # zone F enfiler(sequence, defiler(stock))
- Fonction modifiée :
- Fonction
def tour_de_jeu(sequence):
# zone A
affich_seq(sequence) = creer_file_vide()
stock = True
gagne while not est_vide(sequence):
= saisie_joueur()
c_joueur = defiler(sequence) # zone B
c_seq if c_joueur == c_seq:
# zone C
enfiler(stock, c_seq) else:
# zone D
vider(sequence) = False
gagne while not est_vide(stock): # zone E
# zone F
enfiler(sequence, defiler(stock)) if gagne:
tour_de_jeu(sequence)else:
vider(sequence)
ajout(sequence) tour_de_jeu(sequence)