Académique Documents
Professionnel Documents
Culture Documents
On veut modéliser en B un système d’enregistrement de l’attribution des places de passagers sur un avion.
La machine abstraite correspondante « réservationAvion » est partiellement définie de la manière suivante :
MACHINE réservationAvion
SETS
PERSONNE /* l’ensemble de toutes les personnes */
SIEGE /* l’ensemble de tous les sièges de cet avion */
REPONSE = {OK , déjaRéservé , nonRéservé , pasLeVotre , possèdePasDeRéservation}
SiègeCatégorie = {FirstClass , BusinessClass , economyClass}
VARIABLES réservéPour
INITIALISATION
…………
OPERATIONS
……………..
Q1. Donner les clauses PROPERTIES, INVARIANTS et INITIALISATION compètes, sachant que :
(2,5 pts)
PROPERTIES
INVARIANTS
INITIALISATION
réservéPour =
pR ← listePersonnesRéserver = BEGIN
pR := dom(réservéPour)
END
2) b ← siègeLibres(s) : retourne la valeur booléenne b indiquant si le siège s est libre. (1,5 pt)
nbr ← PlacesPersonne(p,c) =
PRE p PERSONNE c SiègeCatégorie
THEN
nbr := card(dom( ({p} <| réservéPour)|>(dom (SiègeType |> {c}))))
( ou bien nbr := card(dom({p} <| (réservéPour |>(dom (SiègeType |> {c}))))))
( ou bien nbr := card(dom({p} <| (réservéPour |> (SiègeType-1 {c})))))
( ou bien nbr := card(ran({p} <| (réservéPour)) (SiègeType-1 {c}))
( ou bien nbr := card((SiègeType |> {c}) ([réservéPour([{p}])]))
END
AnnulerRéservation(p) =
PRE p PERSONNE p dom(réservéPour)
THEN réservéPour := réservéPour – ( {p} <| réservéPour)
( ou bien réservéPour := {p} <<| réservéPour )
END
3/2
THEN
ANY ss WHERE ss SIEGE (ss, c) SiègeType ¬ (ss ran(réservéPour))
THEN
réservéPour := réservéPour {(p, ss)} || s := ss
END
END
9) modifierRéservation(p1,s,p2) : modifier la réservation d’un siège s (déjà réservé par une personne p1)
pour une nouvelle personne p2 (n’a aucune réservation). (2 pts)
modifierRéservation(p1,s,p2) =
PRE p1 PERSONNE p2 PERSONNE
s SIEGE (p1,s) réservéPour ¬ (p2 dom(réservéPour))
THEN
mes ← AnnulerToutesRéservatiosn(p) =
PRE p PERSONNE
THEN
IF p dom(réservéPour)
THEN réservéPour := réservéPour – ( {p} <| réservéPour) || mes := OK
( ou bien réservéPour := {p} <<| réservéPour || mes := OK )
ELSE mes := possèdePasDeRéservation
END
END
4/2
11) mes ← AnnulerRéservation(p,s) : annuler la réservation du siège s pour la personne p et retourner un
message mes pour chaque cas possible.
mes ← AnnulerRéservation(p,s) =
Exercice 2 : (3 points)
MACHINE Examen
VARIABLES x, y
INVARIANTS x N* y N
INITIALISATION x := 1 || y := 0
OPERATIONS
Obligations de preuve :
1- Initialisation :
2- Opération
5/2
( x N* y N) a N → [IF a >0 THEN x := a+y END] ( x N* y N)
= ( x N* y N) a N →
[ (a >0 ==> x := a+y) [] (¬(a >0) ==> SKIP)] ( x N* y N)
= ( x N* y N) a N →
[ a >0 ==> x := a+y] ( x N* y N) [a ≤ 0 ==> SKIP] ( x N* y N)
= ( x N* y N) a N →
(a >0 → [x := a+y] ( x N* y N)) (a ≤ 0 →[ SKIP] ( x N* y N))
= ( x N* y N) a N →
(a >0 → ( x N* y N) (x /a+y)) (a ≤ 0 → ( x N* y N))
=( x N* y N) a N →
(a >0 → ( a+y N* y N)) (a ≤ 0 → ( x N* y N))
---------------------------------------------------
=( x N* y N) a N → (a >0 → ( a+y N* y N))
( ( x N* y N) a N → (a ≤ 0 → ( x N* y N)))
=( x N* y N) a N a >0 → a+y N* y N)
(( x N* y N) a N a ≤ 0 → ( x N* y N)))
= VRAI
6/2