with Gada.Text_IO ; procedure Mission2 is package Txt renames Gada.Text_IO ; type T_Intervalle is record Inf : Float ; Sup : Float ; end record ; function Intervalle_Image(A : T_Intervalle) return String is begin return "[" & Integer'Image(Integer(A.Inf)) & "," & Integer'Image(Integer(A.Sup)) & "]" ; end Intervalle_Image ; -- A est inclus dans B <=> les bornes de A sont comprises entre les bornes de B. function Est_Inclus (A : T_Intervalle ; B : T_Intervalle) return Boolean is begin return A.Inf >= B.Inf and A.Sup <= B.Sup ; end Est_Inclus ; -- A et B disjoints <=> A est situé avant B ou A est situé après B. function Disjoints (A : T_Intervalle ; B : T_Intervalle) return Boolean is begin return A.Sup < B.Inf or A.Inf > B.Sup ; end Disjoints ; procedure Afficher_Relation (A : T_Intervalle ; B : T_Intervalle) is begin if Est_Inclus(A, B) then Txt.Put_Line(Intervalle_Image(A) & " est inclus dans " & Intervalle_Image(B)) ; elsif Est_Inclus(B,A) then Txt.Put_Line(Intervalle_Image(B) & " est inclus dans " & Intervalle_Image(A)) ; elsif Disjoints(A,B) then Txt.Put_Line(Intervalle_Image(A) & " et " & Intervalle_Image(B) & " sont disjoints.") ; else Txt.Put_Line(Intervalle_Image(A) & " et " & Intervalle_Image(B) & " ne sont pas disjoints.") ; end if ; end Afficher_Relation ; type T_Prod is record Gauche : T_Intervalle ; Droite : T_Intervalle ; end record ; function Prod_Image(A : T_Prod) return String is begin return Intervalle_Image(A.Gauche) & " x " & Intervalle_Image(A.Droite) ; end Prod_Image ; -- A1xA2 est inclus dans B1xB2 <=> A1 inclus dans B1 et A2 inclus dans B2 function Prod_Est_Inclus (A : T_Prod ; B : T_Prod) return Boolean is begin return Est_Inclus (A.Gauche, B.Gauche) and Est_Inclus(A.Droite, B.Droite) ; end Prod_Est_Inclus ; -- A1xA2 disjoint de B1xB2 <=> A1 disjoint de B1 ou A2 disjoint de B2 function Prod_Disjoints (A : T_Prod ; B : T_Prod) return Boolean is begin return Disjoints(A.Gauche, B.Gauche) or Disjoints(A.Droite, B.Droite) ; end Prod_Disjoints ; procedure Prod_Afficher_Relation (A : T_Prod ; B : T_Prod) is begin if Prod_Est_Inclus(A, B) then Txt.Put_Line(Prod_Image(A) & " est inclus dans " & Prod_Image(B)) ; elsif Prod_Est_Inclus(B,A) then Txt.Put_Line(Prod_Image(B) & " est inclus dans " & Prod_Image(A)) ; elsif Prod_Disjoints(A,B) then Txt.Put_Line(Prod_Image(A) & " et " & Prod_Image(B) & " sont disjoints.") ; else Txt.Put_Line(Prod_Image(A) & " et " & Prod_Image(B) & " ne sont pas disjoints.") ; end if ; end Prod_Afficher_Relation ; C : constant T_Intervalle := (5.0, 10.0) ; D : constant T_Intervalle := (7.0, 8.0) ; E : constant T_Intervalle := (4.0, 6.0) ; begin Afficher_Relation(C,D) ; Afficher_Relation(D,C) ; Afficher_Relation(C,E) ; Afficher_Relation(D,E) ; Prod_Afficher_Relation((C, C), (D, D)) ; Prod_Afficher_Relation((C, D), (D, C)) ; Prod_Afficher_Relation((D, C), (E, C)) ; end Mission2 ;