24 NSIJ1G1 corr

sujet

Exercice 1

Correction Q1
voisins = [[1, 2, 3, 4],
        [0, 2, 3],
        [0, 1],
        [0, 1],
        [0]]
Correction Q2

image

Correction Q3
voisins = [[1, 2, 3, 4, 5],
        [0, 2, 3],
        [0, 1, 5],
        [0, 1],
        [0],
        [0, 2]]
Correction Q4
import random
def voisin_alea(voisins, s):
    alea = random.randrange(len(voisins[s]))
    return voisins[s][alea]
Correction Q5

La fonction marche_alea s'appelle elle-même dans sa propre définition, elle est donc récursive.

Correction Q6

Cette fonction modélise la propagation aléatoire du virus. Elle renvoie le dernier ordinateur infecté.

Correction Q7
def simule(voisins, i, n_tests, n_pas) :
    results = [0] * len (voisins)
    while n_tests > 0 :
        j = marche_alea(voisins, i, n_pas)
        results[j] = results[j] + 1
        n_tests = n_tests - 1
    return [s/n_tests for s in results]
Correction Q8

C'est l'ordinateur 0 qui semble avoir la plus grande probabilité d'être infecté. C'est donc lui qu'il faut protéger.

Correction Q9

On peut par exemple effectuer un parcours en largeur et compter le nombre d'étapes nécessaires pour visiter tous les ordinateurs du réseau.

Exercice 2

Correction Q1

Le masque équivalent au /16 est 255.255.0.0

Correction Q2

L'adresse de réseau de L2 est 172.16.0.0

Correction Q3

L'adresse de diffusion de L2 est 172.16.255.255

Correction Q4

Le nombre de machines pouvant être connectées est \(256^2-2=65534\). (il faut enlever l'adresse du réseau et l'adresse de diffusion)

Correction Q5

Le chemin est L1 - A - H - D - L2.

Correction Q6

Suivant le protocole RIP, les deux trajets possibles sont L1 - A - H - C - D - L2 ou L1 - A - B - C - D - L2.

Correction Q7

Si on choisit le trajet L1 - A - H - C - D - L2, il faut modifier la table de routage du routeur H. Il faut lui indiquer l'adresse 53.10.10.10 en passerelle et l'adresse 53.10.10.9 en interface.

Si on choisit le trajet L1 - A - B - C - D - L2, il faut modifier la table de routage du routeur A. Il faut lui indiquer l'adresse 193.55.24.2 en passerelle et l'adresse 193.55.24.2 en interface.

Correction Q8
  • Pour 1 Gbit/s, \(c=\frac{10^9}{10^9}=1\)
  • Pour 10 Gbit/s, \(c=\frac{10^9}{10^{10}}=0,1\)
  • Pour 100 Mbit/s, \(c=\frac{10^9}{10^8}=10\)
Correction Q9

Avec le protocole OSPF, le meilleur chemin est L1 - A - G - F - E - D - L2, pour un coût total de 1,3.

Correction Q10

Le nouveau chemin est L1 - A - H - F - E - D - L2, pour un coût total de 2,2.

Exercice 3

Correction Q1

Utiliser une base de données relationnelle permet de garantir l'intégrité de la base, et d'éviter (par exemple) les doublons.

Correction Q2

Pour être utilisé comme clé primaire, un attribut doit identifier de manière unique l'enregistrement auquel il fait référence.

Correction Q3

La clé étrangère id_client permet de relier la table Reservation à la table Client. La clé étrangère id_emplacement permet de relier la table Reservation à la table Emplacement.

Correction Q4

Emplacement(id_emplacement:INT, nom:STRING, localisation:STRING, tarif_journalier:FLOAT)

Correction Q5
1 myrtille A4
4 mandarine B1
6 melon A2
Correction Q6
SELECT nom, prenom
FROM Client
WHERE ville = 'Strasbourg'
Correction Q7
INSERT INTO Client
VALUES (42, 'CODD', 'Edgar', '28 rue des Capucines', 'Lyon', 'France', '0555555555')
Correction Q8
SELECT Client.nom, Client.prenom, Reservation.nombre_personne, Reservation.date_arrivee, Reservation.date_depart, Emplacement.tarif_journalier
FROM Reservation
JOIN Client ON Client.id_client = Reservation.id_client
JOIN Emplacement ON Emplacement.id_emplacement = Reservation.id_emplacement
WHERE Reservation.id_reservation = 18
Correction Q9

Le terme self est utilisé pour signifier l'objet en cours de construction dans la méthode constructeur et les différentes méthodes.

Correction Q10
client01 = Client('CODD', 'Edgar', '28 rue des Capucines', 'Lyon', 'France', '0555555555')
Correction Q11
def montant_a_regler(triplet):
    ''' renvoie le montant en euros a regler pour cette reservation '''
    client, reservation, emplacement = triplet
    return emplacement.tarif_journalier*reservation.nb_jours() + reservation.nombre_personne*2.2*reservation.nb_jours()
Correction Q12

La variable annee est de type String. Or à la ligne 25 on essaie de faire une comparaison de cette variable avec les nombres 2018 et 2024. Cela va provoquer une erreur.

Correction Q13

Il suffit, à la ligne 25, de remplacer annee par int(annee).

Correction Q14

Vérification des mois :

if mois not in calendrier:
    return False

Vérification du numéro :

if len(numero) != 3 or not que_des_chiffres(numero):
    return False