NSIJ1PO
NSIJ1PO
NSIJ1PO
SESSION 2023
Dès que ce sujet vous est remis, assurez-vous qu’il est complet.
L’énoncé de cet exercice utilise les mots clefs du langage SQL suivants : SELECT,
FROM, WHERE, JOIN ON, UPDATE, SET, INSERT INTO VALUES, COUNT,
ORDER BY.
La ligue féminine de basket-ball publie les données relatives à chaque saison sur le site
web de la ligue. On y retrouve des informations concernant les équipes participantes,
les calendriers et les résultats des matchs ainsi que les statistiques des joueuses. Dans
cet exercice, nous allons nous intéresser à la base de données relationnelle
LFB_2021_2022 permettant le stockage et la gestion des données de la saison
régulière de basket-ball féminin 2021-2022.
1. Voici ci-dessous le contenu entier de la relation (table) Equipe :
id_equipe nom adresse telephone
1 Saint-Amand 39 avenue du Clos, 59230 Saint-Amand-les-Eaux 03 04 05 06 07
2 Basket Landes 15 place Saint-Roch, 40000 Mont-De-Marsan 05 06 07 08 09
3 Villeneuve d'Ascq 2 rue Breughel, 59650 Villeneuve-d'Ascq 03 02 01 00 01
4 Tarbe Quai de l'Adour, 65000 Tarbes 05 04 03 02 02
5 Lyon 451 cours Emile Zola, 69100 Villeurbanne 04 05 06 07 08
6 Bourges 6 rue du Pré Doulet, 18000 Bourges 02 03 04 05 06
7 Charleville-Mézières Rue de la Vieille Meuse, 08000 Charleville-Mézières 03 05 07 09 01
8 Landerneau Kerouel, 29410 Pleyber-Christ 02 04 06 08 00
9 Angers 330 rue Saint-Léonard, 49000 Angers 02 00 08 06 04
10 Lattes Montpellier 157 rue de la Porte Lombarde, 34970 Lattes 04 03 02 01 00
11 Charnay Allée des Ecoliers, 71850 Charnay-lès-Mâcon 03 01 09 07 05
12 Roche Vendée BP 151, 85004 La Roche-Sur-Yon Cedex 02 05 08 01 04
e. Écrire la requête SQL permettant d’afficher les noms des équipes par ordre
alphabétique.
f. Écrire la requête SQL permettant de corriger le nom de l’équipe dont
l’id_equipe est égal à 4. Le nom correct est "Tarbes".
3. Les résultats des matchs sont aussi publiés sur le site web de la ligue. Par exemple,
pour le match n°10 qui a opposé l’équipe de Villeneuve d’Ascq à l’équipe de
Bourges le 23/10/2021 on retrouve les informations suivantes :
Match n° 10
23/10/2021
Villeneuve d’Ascq 73 78 Bourges
Le score final du match a été de 73 points pour l’équipe de Villeneuve d’Ascq qui a joué
à domicile (nom affiché à gauche sur la page) contre 78 points pour l’équipe de Bourges
qui a joué en déplacement (nom affiché à droite sur la page).
a. À partir de l’analyse de cet exemple, proposer un schéma relationnel pour la table
Match. Si des clés étrangères sont définies, préciser quelles tables et quels
attributs elles référencent.
b. Écrire la requête SQL qui permet l’insertion dans la table Match de
l’enregistrement correspondant à l’exemple donné ci-dessus.
4. En plus du score final, sur la page web sont affichées des informations relatives aux
performances des joueuses pendant le match.
Nous allons retenir ici seulement 3 critères : le nombre de points marqués, les
rebonds et les passes décisives effectués.
Voici un extrait des statistiques du match n°53 qui a opposé l’équipe de Landerneau à
celle de Charleville-Mézières le 16/04/2022 :
On rappelle qu’un processus est l’instance d’un programme en cours d’exécution. Il est
identifié par un numéro unique appelé PID. L’ordonnanceur est la composante du
système d’exploitation qui gère l’allocation du processeur entre les différents processus.
Nous allons nous intéresser à l’algorithme d’ordonnancement du tourniquet dont le
fonctionnement est résumé ci-dessous :
Sortie des
Entrée des Processeur processus
processus prêts Durée terminés
d’exécution
File d’attente <= quantum
➢ Les processus prêts à être exécutés sont placés dans une file d’attente selon
leur ordre d’arrivée ;
➢ L’ordonnanceur alloue le processeur à chaque processus de la file d’attente
un même nombre de cycles CPU, appelé quantum ;
➢ Si le processus n’est pas terminé au bout de ce temps, son exécution est
suspendue et il est mis à la fin de la file d’attente ;
➢ Si le processus est terminé, il sort définitivement de la file d’attente.
1 class Processus:
2 def __init__(self, pid, duree):
3 self.pid = pid
4 self.duree = duree
5 # Le nombre de cycles qui restent à faire :
6 self.reste_a_faire = duree
7 self.etat = "Prêt"
Les états possibles d'un processus sont : "Prêt", "En cours d'exécution", "Suspendu" et
"Terminé".
def execute_un_cycle(self):
"""Met à jour le reste à faire après l'exécution d'un
cycle."""
.............................................
def est_termine(self):
"""Renvoie True si le processus est terminé, False sinon,
en se basant sur le reste à faire."""
.............................................
L’objectif de cet exercice est de trouver les deux points les plus proches dans un nuage
de points pour lesquels on connaît les coordonnées dans un repère orthogonal.
Les coordonnées d’un point seront stockées dans un tuple de deux nombres réels.
Le nuage de points sera représenté en Python par une liste de tuples de taille 𝑛, 𝑛
étant le nombre total de points. On suppose qu’il n’y a pas de points confondus (mêmes
abscisses et mêmes ordonnées) et qu’il y a au moins deux points dans le nuage.
Pour calculer la racine carrée, on utilisera la fonction sqrt du module math, pour
rappel :
1 >>> from math import sqrt
2 >>> sqrt(16)
3 4.0
1. Cette partie comprend plusieurs questions générales :
1 def liste_segments(liste_points):
2 n = len(liste_points)
3 segments = []
4 for i in range(......):
5 for j in range(......, n ):
6 # On construit le segment à partir des points i et j.
7 seg = .....................................
8 segments.append(seg) # On l'ajoute à la liste.
9 return segments
3. L’objectif de cette partie est d’écrire la fonction de recherche des deux points les
plus proches en utilisant la méthode diviser-pour-régner.
On dispose de deux fonctions : moitie_gauche (respectivement
moitie_droite) qui prennent en paramètre une liste et qui renvoient chacune
une nouvelle liste contenant la moitié gauche (respectivement la moitié droite) de
la liste de départ. Si le nombre d'éléments de celle-ci est impair, l'élément du
centre se trouve dans la partie gauche.
Rechercher les deux points les plus proches revient à rechercher le plus court
segment parmi ceux qui ont été construits à partir du nuage de points.