-
- withGada.Text_IO ;
+packageTxtrenamesGada.Text_IO ;
- procedureMission2is
-
- packageTxtrenamesGada.Text_IO ;
-
- typeT_Intervalleisrecord
+typeT_IntervalleisrecordInf : Float ;
- Sup : Float ;
- endrecord ;
+ Sup : Float ;
+ endrecord ;
+
+ functionIntervalle_Image(A : T_Intervalle) returnStringis
+ begin
+ return"[" & Integer'Image(Integer(A.Inf)) & "," & Integer'Image(Integer(A.Sup)) & "]" ;
+ endIntervalle_Image ;
- functionIntervalle_Image(A : T_Intervalle) returnStringis
- begin
- return"[" & Integer'Image(Integer(A.Inf)) & "," & Integer'Image(Integer(A.Sup)) & "]" ;
- endIntervalle_Image ;
-
- -- A est inclus dans B <=> les bornes de A sont comprises entre les bornes de B.
- functionEst_Inclus (A : T_Intervalle ; B : T_Intervalle) returnBooleanis
- begin
+-- A est inclus dans B <=> les bornes de A sont comprises entre les bornes de B.
+functionEst_Inclus (A : T_Intervalle ; B : T_Intervalle) returnBooleanis
+ beginreturnA.Inf >= B.InfandA.Sup <= B.Sup ;
- endEst_Inclus ;
+ endEst_Inclus ;
- -- A et B disjoints <=> A est situé avant B ou A est situé après B.
- functionDisjoints (A : T_Intervalle ; B : T_Intervalle) returnBooleanis
- begin
+-- A et B disjoints <=> A est situé avant B ou A est situé après B.
+functionDisjoints (A : T_Intervalle ; B : T_Intervalle) returnBooleanis
+ beginreturnA.Sup < B.InforA.Inf > B.Sup ;
- endDisjoints ;
+ endDisjoints ;
- procedureAfficher_Relation (A : T_Intervalle ; B : T_Intervalle) is
- begin
+procedureAfficher_Relation (A : T_Intervalle ; B : T_Intervalle) is
+ beginifEst_Inclus(A, B) then
- Txt.Put_Line(Intervalle_Image(A) & " est inclus dans " & Intervalle_Image(B)) ;
+ Txt.Put_Line(Intervalle_Image(A) & " est inclus dans " & Intervalle_Image(B)) ;
elsifEst_Inclus(B,A) then
- Txt.Put_Line(Intervalle_Image(B) & " est inclus dans " & Intervalle_Image(A)) ;
+ Txt.Put_Line(Intervalle_Image(B) & " est inclus dans " & Intervalle_Image(A)) ;
elsifDisjoints(A,B) then
- Txt.Put_Line(Intervalle_Image(A) & " et " & Intervalle_Image(B)
- & " sont disjoints.") ;
+ 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.") ;
+ Txt.Put_Line(Intervalle_Image(A) & " et " & Intervalle_Image(B) & " ne sont pas disjoints.") ;
endif ;
- endAfficher_Relation ;
+ endAfficher_Relation ;
- typeT_Prodisrecord
+typeT_ProdisrecordGauche : T_Intervalle ;
Droite : T_Intervalle ;
- endrecord ;
+ endrecord ;
+
+ functionProd_Image(A : T_Prod) returnStringis
+ begin
+ returnIntervalle_Image(A.Gauche) & " x " & Intervalle_Image(A.Droite) ;
+ endProd_Image ;
+
+
+ -- A1xA2 est inclus dans B1xB2 <=> A1 inclus dans B1 et A2 inclus dans B2
+functionProd_Est_Inclus (A : T_Prod ; B : T_Prod) returnBooleanis
+ begin
+ returnEst_Inclus (A.Gauche, B.Gauche) andEst_Inclus(A.Droite, B.Droite) ;
+ endProd_Est_Inclus ;
- functionProd_Image(A : T_Prod) returnStringis
- begin
- returnIntervalle_Image(A.Gauche) & " x " & Intervalle_Image(A.Droite) ;
- endProd_Image ;
+-- A1xA2 disjoint de B1xB2 <=> A1 disjoint de B1 ou A2 disjoint de B2
+functionProd_Disjoints (A : T_Prod ; B : T_Prod) returnBooleanis
+ begin
+ returnDisjoints(A.Gauche, B.Gauche) orDisjoints(A.Droite, B.Droite) ;
+ endProd_Disjoints ;
-
- -- A1xA2 est inclus dans B1xB2 <=> A1 inclus dans B1 et A2 inclus dans B2
- functionProd_Est_Inclus (A : T_Prod ; B : T_Prod) returnBooleanis
- begin
- returnEst_Inclus (A.Gauche, B.Gauche) andEst_Inclus(A.Droite, B.Droite) ;
- endProd_Est_Inclus ;
-
- -- A1xA2 disjoint de B1xB2 <=> A1 disjoint de B1 ou A2 disjoint de B2
- functionProd_Disjoints (A : T_Prod ; B : T_Prod) returnBooleanis
- begin
- returnDisjoints(A.Gauche, B.Gauche) orDisjoints(A.Droite,
- B.Droite) ;
- endProd_Disjoints ;
-
- procedureProd_Afficher_Relation (A : T_Prod ; B : T_Prod) is
- begin
+procedureProd_Afficher_Relation (A : T_Prod ; B : T_Prod) is
+ beginifProd_Est_Inclus(A, B) then
- Txt.Put_Line(Prod_Image(A) & " est inclus dans " & Prod_Image(B)) ;
+ Txt.Put_Line(Prod_Image(A) & " est inclus dans " & Prod_Image(B)) ;
elsifProd_Est_Inclus(B,A) then
- Txt.Put_Line(Prod_Image(B) & " est inclus dans " & Prod_Image(A)) ;
+ Txt.Put_Line(Prod_Image(B) & " est inclus dans " & Prod_Image(A)) ;
elsifProd_Disjoints(A,B) then
- Txt.Put_Line(Prod_Image(A) & " et " & Prod_Image(B) & " sont disjoints.") ;
+ 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.") ;
+ Txt.Put_Line(Prod_Image(A) & " et " & Prod_Image(B) & " ne sont pas disjoints.") ;
endif ;
- endProd_Afficher_Relation ;
+ endProd_Afficher_Relation ;
- C : constantT_Intervalle := (5.0, 10.0) ;
- D : constantT_Intervalle := (7.0, 8.0) ;
- E : constantT_Intervalle := (4.0, 6.0) ;
+C : constantT_Intervalle := (5.0, 10.0) ;
+ D : constantT_Intervalle := (7.0, 8.0) ;
+ E : constantT_Intervalle := (4.0, 6.0) ;
- begin
+beginAfficher_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, C), (D, D)) ;
Prod_Afficher_Relation((C, D), (D, C)) ;
Prod_Afficher_Relation((D, C), (E, C)) ;
- endMission2 ;
-
-
-
-
-
-
+endMission2 ;
+
\ No newline at end of file
diff --git a/Y/Ada-S2/Programmes/exos-preparatoires/solution-en-ocaml.html b/Y/Ada-S2/Programmes/exos-preparatoires/solution-en-ocaml.html
index 2d66ed2..3cfc3d1 100644
--- a/Y/Ada-S2/Programmes/exos-preparatoires/solution-en-ocaml.html
+++ b/Y/Ada-S2/Programmes/exos-preparatoires/solution-en-ocaml.html
@@ -1,80 +1,63 @@
-
+
+
+mission2.ml
mission2.ml
(* Version OCaml de l'exercice sur les intervalles *)
-
- mission2.ml
-
-
-
-
+type t_intervalle =
+ { inf: float ;
+ sup: float }
-
-
-
mission2.ml
-
- (* Version OCaml de l'exercice sur les intervalles *)
+letsof x = string_of_int (int_of_float x)
- type t_intervalle =
- { inf: float ;
- sup: float }
+(* Les trois premières fonctions demandées. *)
+letintervalle_image it = "[" ^ sof it.inf ^ ", " ^ sof it.sup ^ "]"
+letest_inclus a b = (a.inf >= b.inf && a.sup <= b.sup)
+letdisjoints a b = (a.sup < b.inf || a.inf > b.sup)
- letsof x = string_of_int (int_of_float x)
+(* Fonction d'affichage générique qui marchera pour t_intervalle et pour t_prod. *)
+letaffichage_gen f_inclus f_disjoint f_image i1 i2 =
+ lets1 = f_image i1
+ ands2 = f_image i2 in
+
+ if f_inclus i1 i2 thenPrintf.printf "%s est inclus dans %s\n" s1 s2
+ elseif f_inclus i2 i1 thenPrintf.printf "%s est inclus dans %s\n" s2 s1
+ elseif f_disjoint i1 i2 thenPrintf.printf "%s et %s sont disjoints\n" s1 s2
+ elsePrintf.printf "%s et %s ne sont pas disjoints, ni inclus\n" s1 s2
- (* Les trois premières fonctions demandées. *)
- letintervalle_image it = "[" ^ sof it.inf ^ ", " ^ sof it.sup ^ "]"
- letest_inclus a b = (a.inf >= b.inf && a.sup <= b.sup)
- letdisjoints a b = (a.sup < b.inf || a.inf > b.sup)
+(* Afficher_relation pour les intervalles. *)
+letafficher_relation = affichage_gen est_inclus disjoints intervalle_image
- (* Fonction d'affichage générique qui marchera pour t_intervalle et pour t_prod. *)
- letaffichage_gen f_inclus f_disjoint f_image i1 i2 =
- lets1 = f_image i1
- ands2 = f_image i2 in
+(* Produit cartésien *)
+type t_prod =
+ { left: t_intervalle ;
+ right: t_intervalle }
- if f_inclus i1 i2 thenPrintf.printf "%s est inclus dans %s\n" s1 s2
- elseif f_inclus i2 i1 thenPrintf.printf "%s est inclus dans %s\n" s2 s1
- elseif f_disjoint i1 i2 thenPrintf.printf "%s et %s sont disjoints\n" s1 s2
- elsePrintf.printf "%s et %s ne sont pas disjoints, ni inclus\n" s1 s2
+(* Les trois premières fonctions pour les produits cartésiens. *)
+letprod_image p = intervalle_image p.left ^ " x " ^ intervalle_image p.right
+letprod_est_inclus a b = est_inclus a.left b.left && est_inclus a.right b.right
+letprod_disjoints a b = disjoints a.left b.left || disjoints a.right b.right
- (* Afficher_relation pour les intervalles. *)
- letafficher_relation = affichage_gen est_inclus disjoints intervalle_image
+(* La fonction d'affichage demandée. *)
+letprod_afficher_relation = affichage_gen prod_est_inclus prod_disjoints prod_image
- (* Produit cartésien *)
- type t_prod =
- { left: t_intervalle ;
- right: t_intervalle }
+letprod a b = { left = a ; right = b }
+
+(* Test *)
+let () =
+ letc = { inf = 5.0 ; sup = 10.0 }
+ andd = { inf = 7.0 ; sup = 8.0 }
+ ande = { inf = 4.0 ; sup = 6.0 }
+ in
- (* Les trois premières fonctions pour les produits cartésiens. *)
- letprod_image p = intervalle_image p.left ^ " x " ^ intervalle_image p.right
- letprod_est_inclus a b = est_inclus a.left b.left && est_inclus a.right b.right
- letprod_disjoints a b = disjoints a.left b.left || disjoints a.right b.right
+ afficher_relation c d ;
+ afficher_relation d c ;
+ afficher_relation c e ;
+ afficher_relation d e ;
- (* La fonction d'affichage demandée. *)
- letprod_afficher_relation = affichage_gen prod_est_inclus prod_disjoints prod_image
+ prod_afficher_relation (prod c c) (prod d d) ;
+ prod_afficher_relation (prod c d) (prod d c) ;
+ prod_afficher_relation (prod d c) (prod e c) ;
+ ()
- letprod a b = { left = a ; right = b }
-
- (* Test *)
- let () =
- letc = { inf = 5.0 ; sup = 10.0 }
- andd = { inf = 7.0 ; sup = 8.0 }
- ande = { inf = 4.0 ; sup = 6.0 }
- in
-
- afficher_relation c d ;
- afficher_relation d c ;
- afficher_relation c e ;
- afficher_relation d e ;
-
- prod_afficher_relation (prod c c) (prod d d) ;
- prod_afficher_relation (prod c d) (prod d c) ;
- prod_afficher_relation (prod d c) (prod e c) ;
- ()
-
-
-
-
-
-
-
+
+
\ No newline at end of file