# Exercice de manipulation de type article

L'objectif est d'écrire quelques fonctions manipulant des intervalles de réels, représentés avec un type article.

### Première partie : les intervalles compacts

- Créez un nouveau fichier mission2.adb contenant la structure habituelle d'un programme Ada.
- Définissez un type article `T_Intervalle` permettant de représenter les intervalles de réels fermés et bornés, c'est-à-dire de la forme [inf, sup] où inf et sup sont des réels. Remarquez qu'il suffit de connaître inf et sup pour définir l'intervalle.
- Définissez une fonction `Intervalle_Image` qui reçoit un `T_Intervalle` et renvoie une chaîne de caractères, de la forme "[3;5]" (pour un affichage pas trop laid, convertir les bornes en entier).
- Ajoutez une fonction `Est_Inclus` qui reçoit deux arguments A et B de type `T_Intervalle` et qui renvoie vrai si et seulement si A est inclus dans B.
  (Le corps de la fonction tient en une seule ligne.)
- Ajoutez une fonction `Disjoints` ayant la même signature que `Est_Inclus` (même arguments, même type de résultat) et qui renvoie vrai si et seulement si A et B sont disjoints. (Elle tient aussi en une seule ligne.)
- Ajoutez une procédure `Afficher_Relation` qui reçoit deux arguments A et B de type `T_Intervalle` et qui affiche l'un ou l'autre des messages suivants (selon ce qui est le plus adéquat) :
  - A est inclus dans B
  - B est inclus dans A
  - A et B sont disjoints
  - A et B ne sont pas disjoints (mais aucun n'est inclus dans l'autre)
  Vous pouvez utiliser `Intervalle_Image` pour afficher l'intervalle lui-même au lieu de "A" ou "B".
- Pour tester, créez trois constantes C, D, E, représentant respectivement les intervalles [5, 10], [7, 8], et [4, 6]. Puis, dans le corps du programme principal, invoquez `Afficher_Relation` avec les paires d'arguments (C,D), (D,C), (C,E), et (D,E). Grâce à votre maîtrise absolue des relations ensemblistes, vous pouvez prévoir à l'avance ce qui sera affiché.

### Deuxième partie : produits cartésiens d'intervalles compacts

- Dans le même programme, définissez un type `T_Prod` représentant un produit cartésien de deux intervalles. Par exemple : [1,5]x[3,8] est un élément de T_Prod
- Définissez une fonction `Prod_Image` qui reçoit un `T_Prod`et qui renvoie une chaîne de caractère, par exemple "[1,5]x[3,8]". Vous pensez spontanément à utiliser Intervalle_Image, c'est bien.
- Comme ci-dessus, définissez les fonctions `Prod_Est_Inclus` et `Prod_Disjoints` qui reçoivent deux arguments A et B de type `T_Prod` et qui indiquent si A est inclus dans B ou si A et B sont disjoints (respectivement).
  Le corps de ces fonctions tient toujours en une seule ligne.
- Comme ci-dessus, ajoutez une procédure `Prod_Afficher_Relation` qui joue le même rôle que `Afficher_Relation` mais pour des arguments de type `T_Prod`.
- Testez dans le corps du programme principal en invoquant `Prod_Afficher_Relation` avec les paires d'arguments suivants :
  - CxC et DxD
  - CxD et DxC
  - DxC et ExC
  en prévoyant à l'avance ce qui sera affiché.