Permis de conduire et cartes grises
un exemple de problème étendu sans types polymorphes
Un permis de conduire français contient, entre autres informations,
l'identité de son possesseur et la liste des catégories de permis de
cette personne.
Les catégories de permis sont A (permis moto), B
(voiture), C (transport de marchandises d'un poids supérieur
à 3.5 tonnes), D (transports en commun) ou E
(conduite d'ensemble de véhicules).
Une personne est identifiée par son nom, son prénom et l'adresse de
son domicile, sa ville donnée par son code postal.
La carte grise d'un véhicule comprend entre autres les informations
suivantes : le département de délivrance de la carte grise, la date de
première mise en circulation du véhicule, le numéro et la date
d'immatriculation du véhicule, l'identité du propriétaire du véhicule.
Une date est décrite, comme dans le cours, par le jour, le mois et
l'année.
Une immatriculation est décrite par le numéro du département, les
lettres de la plaque d'immatriculation et les chiffres qui
précédent ces lettres.
Enfin le document qui accompagne la vignette d'un véhicule comprend le
numéro du département du véhicule, l'année de validité de la vignette
et l'immatriculation du véhicule auquel elle est destinée.
-
Définir les types
catégorie_permis
, ville,
catégorie_voie
, voie, adresse,
identité, permis, date,
immatriculation, carte_grise
et vignette.
Attention à ce qu'aucune étiquette ne soit utilisée dans la
définition de plus d'un type enregistrement et qu'aucun
constructeur ne soit utilisé dans la définition de plus d'un type
somme. Pour cela vous pouvez par exemple préfixer ou suffixer
systématiquement l'étiquette ou le constructeur concerné(e).
Par la suite, nous considèrerons qu'une personne qui n'a pas de permis
de conduire dispose d'un élément de type permis, mais que la
liste des catégories de permis qu'il possède est vide.
-
Écrire la fonction
permis_voiture
qui détermine si la
personne détentrice d'un permis p peut conduire une voiture.
Écrire la fonction nouveau_permis
qui met à jour le permis
p d'une personne qui vient d'être reçue à l'examen du
permis de conduire pour la catégorie c.
-
Sachant que le département se déduit du code postal en retirant les
trois derniers chiffres, écrire la fonction
département_of_adresse
qui indique le département associé à
une adresse adr.
-
Écrire une fonction
achat_véhicule_occasion
qui fournit au
nouveau propriétaire ident la nouvelle carte grise d'un
véhicule décrit auparavant par sa carte grise cg à la date
d'achat d.
-
Écrire une fonction
changement_adresse
qui met à jour
l'identité ident d'une personne qui sera dorénavant
domiciliée à l'adresse nv_adr
.
En déduire une fonction changement_domicile
qui met à jour
la carte grise cg d'un véhicule qui sera à partir de la
date d domiciliée à l'adresse nv_adr
et dont la
nouvelle immatriculation sera nv_imm
.
-
Le type
carte_grise
comporte l'information du département du
propriétaire sous 3 formes : le département de délivrance de cette
carte grise, dans l'adresse du propriétaire, dans
l'immatriculation du véhicule.
Écrire une fonction cohérence_département_carte_grise
qui
vérifie que ces trois informations sont cohérentes pour une carte
grise cg.
-
Écrire une fonction avant telle que avant d1 d2
vaut true si et seulement si la date d1 est
antérieure à la date d2.
En déduire une fonction cohérence_dates_carte_grise
qui
vérifie que les deux dates inscrites sur une carte grise cg
sont cohérentes entre elles.
-
Lors d'un contrôle, un radar photographie la plaque
d'immatriculation d'un véhicule en infraction. Écrire la fonction
identification qui consulte une liste de cartes grises
cgl pour fournir l'identité du propriétaire du véhicule
d'immatriculation imm.
-
Écrire une fonction
achat_vignette
qui fournit la vignette
d'un véhicule décrit par sa carte grise cg pour l'année
a.
Une société de location de véhicules dispose d'une liste
cgl de cartes grises de véhicules, écrire la fonction
achat_vignettes_location
qui produit la liste de vignettes
associées à cgl pour l'année a. Vous écrirez de
deux façons différentes cette fonction : tout d'abord directement à
l'aide d'une fonction récursive puis en utilisant l'itérateur
map vu en cours.
-
Écrire la fonction
examen_permis
qui met à jour la liste des
permis pl, à la suite d'un examen de catégorie c
dont les reçus sont décrits par la liste reçus.
This document was translated from LATEX by
HEVEA.