Exercice 1 SQL et chiffrement⚓︎
Partie A⚓︎
1. Nom_artiste comme clé primaire⚓︎
Non, il n’aurait pas été possible de choisir l'attribut Nom_artiste comme clé primaire dans la relation CD.
Une clé primaire doit être unique pour chaque n-uplet de la relation.
Or, dans la relation CD, l'attribut Nom_artiste n'est pas unique, car un artiste peut enregistrer plusieurs albums.
2. Réponses pour les artistes⚓︎
| Artistes |
|---|
| Nightwish |
| The Rasmus |
3. Réponses pour les années⚓︎
| Année |
|---|
| 1986 |
| 2001 |
| 1986 |
4. requête de mise à jour⚓︎
5. les albums de “Metal” rangés sur l’étagère 1⚓︎
| SQL | |
|---|---|
6. Intégrité réferentielle⚓︎
Il est nécessaire de suivre l'ordre suivant pour garantir le respect des contraintes d'intégrité référentielles :
-
Supprimer les références dans la table
Rangement: -
Supprimer l'album dans la table
CD: -
Supprimer l'artiste dans la table
Artiste
partie B⚓︎
7. Chiffrement symétrique⚓︎
Un algorithme de chiffrement symétrique utilise une clé partagée pour chiffrer et déchiffrer un message. Par exemple, Alice et Bob partagent une clé K. Alice chiffre un message M pour obtenir M'. Même si M' est intercepté, il reste illisible sans la clé K. Bob utilise la même clé K pour déchiffrer M' et retrouver le message original M.
8. Chiffrement asymétrique⚓︎
Un algorithme de chiffrement asymétrique utilise deux clés distinctes : une clé publique et une clé privée. La clé publique sert à chiffrer un message, et seule la clé privée correspondante peut déchiffrer ce message. Par exemple, Alice utilise la clé publique de Bob pour chiffrer un message, et Bob utilise sa clé privée pour le déchiffrer. La clé privée ne doit jamais être partagée.
9. Création d'une clé de session⚓︎
Pour envoyer la clé C de manière sécurisée au serveur, le serveur peut utiliser le chiffrement asymétrique. Le serveur chiffre la clé C avec la clé publique de Bob. Ainsi, seule la clé privée de Bob pourra déchiffrer la clé C. Même si le message est intercepté, il restera illisible sans la clé privée de Bob.
Une fois cette clé échangée la poursuite des échanges se chiffrée à l'aide d'un chiffrement symétrique avec la même clé C.
Exercice 2⚓︎
1.⚓︎
| Python | |
|---|---|
2.⚓︎
| Python | |
|---|---|
3.⚓︎
4.⚓︎
| Python | |
|---|---|
Partie B – Première approche de rangement⚓︎
5.⚓︎
Voici les combinaisons possibles et leurs prix associés :
| Combinaison | Volume total | Prix total |
|---|---|---|
| 𝑚1 | 20 | 40 |
| 𝑚2 | 70 | 210 |
| 𝑚3 | 40 | 160 |
| 𝑚4 | 50 | 50 |
| 𝑚1 + 𝑚2 | 90 | 250 |
| 𝑚1 + 𝑚3 | 60 | 200 |
| 𝑚1 + 𝑚4 | 70 | 90 |
| 𝑚3 + 𝑚4 | 90 | 210 |
Toutes les combinaisons à 3 et 4 marchandises dépassent le volume de 100l et donc ne sont pas possibles.
La combinaison qui maximise le prix total est donc m1 + m2
6.⚓︎
Le qualificatif qui s'applique le mieux Ă l'algorithme ChargementGlouton est glouton.
Justification, non demandée :
Cela vient du fait que l'algorithme choisit à chaque étape la marchandise avec le plus grand prix volumique, sans tenir compte de l'impact global de cette décision. Il suit une stratégie de "choix local optimal", typique des algorithmes gloutons.
7.⚓︎
| Python | |
|---|---|
8.⚓︎
Le nom du tri est tri par insertion.
La complexité temporelle dans le pire des cas est quadratique (O(n²)).
9.⚓︎
Partie C – Rangement optimisé par récursivité⚓︎
Exercice 3⚓︎
1.⚓︎
Voici la liste des attributs de la classe Piste avec leurs types précisés :
-
nom : str (chaîne de caractères)
-
denivele : int (entier)
-
longueur : float (nombre réel)
-
couleur : str (chaîne de caractères)
-
ouverte : bool (booléen)
2.⚓︎
| Python | |
|---|---|
3.⚓︎
Proposition D : une liste d'objets de type Piste.
L'attribut self.pistes est une liste qui contient des objets de type Piste (puisque dans la méthode ajouter_piste, des instances de la classe Piste sont ajoutées à cet attribut). Par conséquent, la méthode get_pistes() renvoie cette liste d'objets de type Piste.
4.⚓︎
| Python | |
|---|---|
5.⚓︎
| Python | |
|---|---|
ou en liste par compréhension
| Python | |
|---|---|
6.⚓︎
7.⚓︎
domaine['E']['F']
8.⚓︎
Une autre solution avec un boucle for est aussi acceptée
9.⚓︎
| Python | |
|---|---|
10.⚓︎
La fonction parcours est récursive car elle s'appelle elle-même. Elle possède aussi une condition d'arrêt
11.⚓︎
| Python | |
|---|---|
12.⚓︎
13.⚓︎
En montagne, le chemin le plus court n'est pas forcément le plus rapide, la dénivelée ou un passage difficile peuvent par exemple compliquer l'accès.
Le choix du plus court chemin est donc discutable.