Objectifs

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

Étapes à suivre

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, ou alors utiliser l'acteur DFloat).
  • 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. Function Est_Inclus(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
    • A contient B
    • A et B sont disjoints
    • A et B ne sont pas disjoints (mais aucun ne contient 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_Prodet 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é.

Bilan

  • Avec le type T_Prod, vous avez expérimenté un type article imbriqué dans un autre type article.
  • Vous savez maintenant que vous devez vous souvenir du produit cartésien À VIE.