Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Correction Spe Nsi 20.03

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 6

BACCALAURÉAT GÉNÉRAL

Correction épreuve de spécialité


numérique et sciences informatiques

Exercice I

1.
a. Un attribut doit posséder les caractéristiques suivantes pour pouvoir être choisi
comme clé primaire :
- les valeurs prises par cet attribut doivent identifier un enregistrement de manière unique ;
- les valeurs ne doivent jamais être vides (ou NULL).
Facultatif : pour que la table soit cohérente, les valeurs ne doivent pas être modifiées.

b. Chaque commande possède 5 attributs.


-id, la clé primaire.
-idClient, une clé étrangère - qui permet de connaître le client qui a passé la commande.
-idMeuble, la 2e clé étrangère - qui permet de connaître le meuble commandé.
-quantité qui sera le nombre commandé.
-date, la date de cette commande.

c. Schéma relationnel de la table Meubles :


Meubles (id, intitule, prix, stock, description)
Il n’y a pas de clé étrangère.

2. La requête donne le résultat suivant :


Le résultat de la requête
SELECT id, stock, description
FROM Meubles
WHERE intitule = 'skap';

est :

id stock description
------- ------- -------------------------------
62 2 "Armoire blanche 3 portes"
63 3 "Armoire noire 3 portes"
3. La requête SQL permettant d’afficher les noms et prénoms des clients
habitant à Paris est :
SELECT nom, prenom
FROM Clients
WHERE ville = "Paris";

4. Pour ajouter ces meubles, on peut faire :


UPDATE Meubles SET stock = 50 WHERE (id = 98);

Cependant, il serait plus intéressant, dans une interface de remplissage avec la BDD de faire :
UPDATE Meubles SET stock = stock + 50 WHERE (id = 98);`
Pour éviter d’écraser un enregistrement sans tenir compte du stock précédent.

5. On insère un enregistrement :
Soit on précise les champs :
INSERT INTO Meubles
(id, intitule, prix, stock, description)
VALUES (65, "matta", 95.99, 25, "Tapis vert à pois rouges");

Soit on ne précise pas les champs mais on veille à l’ordre :


INSERT INTO Meubles
VALUES (65, "matta", 95.99, 25, "Tapis vert à pois rouges");`

6. Pour récupérer le nom et le prénom des différents clients qui ont passé une commande le
30 avril 2021 (on pourra utiliser JOIN ou INNER JOIN) :
SELECT nom, prenom
FROM Clients
JOIN Commandes
ON Clients.id = Commandes.idClient`
WHERE date = "30/04/2021";

Exercice 2

1. Si une seule liaison est coupée, on remarque que l’on peut toujours trouver un chemin
pour relier chaque site à n’importe quel autre.

2. On veut aller du site B au site C, c'est-à-dire passer par le routeur R2 pour aller au routeur
R5.
La table de routage nous indique qu’il faut d’abord aller à R3, puis si l’on suit la table de
chaque routeur on obtient ce chemin :
site B -> R2 -> R3 -> R4 -> R5 -> site C

3. Table de routage du routeur R1, avec le protocole RIP:


Destination Suivant Nombre de sauts
Site A Local 0
Site B R2 1
Site C R2 2
Site D R3 2

4. Le protocole RIP prend en compte uniquement le nombre de routeurs intermédiaires à


traverser.
Il ne prend pas en compte le débit des liaisons. Si une liaison a un débit très inférieur à celui
des autres liaisons, il est possible que pour aller de R2 à R5, le chemin passant par les
routeurs R3 et R4 soit plus rapide malgré un nombre de sauts plus important.

5.
a. La liaison dont le débit est le plus faible est celui dont le coût est le plus grand : la
liaison 2 est donc celle qui a le débit le plus faible. On trouve par calcul 10 kbps.

b. Les quatre chemins possibles pour aller du site A au site C avec leur coût associé :

chemin coût
R1 - R2 - R5 1 100 000
R1 - R2 - R3 - R4 - R5 100 020
R1 - R3 - R2 - R5 1 050 005
R1 - R3 - R4 - R5 50 015

c.

100 000

50 000 5

1 000 000
5

10

Table de routage OSPF du routeur R1 devient donc :


Destination Suivant Coût total du chemin
Site A Local 0
Site B R3 50 005
Site C R3 50 015
Site D R3 50 005

Exercice 3

Partie 1

1. Les noms nom, tab_voisines, tab_couleurs_disponibles et couleur_attribuee désignent


des attributs de la classe region.

2. D’après la documentation, le paramètre nom_region est de type chaîne de caractères (ou


string ou str).

3. Pour créer une instance, on fait appel à la classe et on donne la valeur pour le
constructeur :
ge = Region("Grand Est")

4. On veut la première valeur d’une liste :


return self.tab_couleurs_disponibles[0]

Cependant, on peut aussi se demander si cette liste est vide et renvoyer une chaîne de
caractères vide le cas échéant. L’opérateur ternaire peut faire tenir le tout sur une ligne :
return self.tab_couleurs_disponibles[0] if len(self.tab_couleurs_disponibles) > 0 else ""

5. Une fois repéré que self.tab_voisines contient les couleurs voisines, on obtient :
return len(self.tab_voisines)

6. self.couleur_attribuee vaut None par défaut. Cet attribut sera modifié et contiendra la
chaîne de caractères de la couleur. On peut donc faire un :
return self.couleur_attribuee is not None

ou encore :

if self.couleur_attribuee is None:
return False
else :
return True

7. if couleur in self.tab_couleurs_disponibles :
self.tab_couleurs_disponibles.remove(couleur)

Si on veut le faire avec une boucle for :


for couleur_listee in self.tab_couleurs_disponibles :
if couleur_listee==couleur :
self.tab_couleurs_disponibles.remove(couleur)

Il y a beaucoup d’autres possibilités.

8. Voici une version possible:

for region_voisine in self.tab_voisines :


if region_voisine==region :
return True
return False

Ici, la comparaison avec les objets region vont fonctionner mais on peut aussi comparer avec
le nom.

Partie 2

9. On parcourt la liste self.tab_regions. Pour chacune, on regarde si une couleur a été


attribuée. Sinon, on l’ajoute à la liste region_non_coloriees. Puis on renvoie cette liste

region_non_coloriees = []
for region in self.tab_regions:
if not region.est_coloriee():
region_non_coloriees.append(region)
return region_non_coloriees
10.
a. La méthode renvoie None lorsque la liste renvoyée par
self.renvoie_tab_regions_non_coloriees() sera vide. C'est-à-dire quand toutes les
régions seront coloriées.

b. Les deux particularités de la région renvoyée sont:

- la région n'est pas coloriée, vu qu’elle appartient à la liste renvoyée par


self.renvoie_tab_regions_non_coloriees()- ;
- c'est la région non coloriée qui possède le plus de régions voisines.

11. Voici une version possible:

def colorie(self):
On récupère la région non coloriée qui possède le
region = self.renvoie_max()
plus de voisines.
Tant que cette région existe :
while region is not None:
la couleur attribuée à cette région est la première
region.couleur_attribuee =
couleur disponible dans son tableau de couleurs
region.renvoie_premiere_couleur_disponible(
disponibles.
)

Pour chaque région voisine de la région :


si la couleur choisie est présente dans le tableau
for voisine in region.tab_voisines:
des couleurs disponibles de la région voisine alors
voisine.retire_couleur(region.couleur_attribue
on la retire de ce tableau.
e)
On récupère à nouveau la région non coloriée qui
possède le plus de voisines

region = self.renvoie_max()

Vous aimerez peut-être aussi