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.

  1. 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.

  2. É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.

  3. 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.

  4. É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.

  5. É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.

  6. 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.

  7. É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.

  8. 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.

  9. É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.

  10. É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.