let rd_couple () = Random.float 1000., Random.float 1000. ;; let rd_nuage n = let t= Array.make n (0.,0.) in for i = 0 to n-1 do t.(i) <- rd_couple () done ; t ;; let tab1 = [|(137.952822280455479, 579.517066764289893); (745.24288848465, 673.134497490137164); (466.113061566003125, 188.103956342865786); (944.098271788395095, 410.935431876780797); (186.89530977266773, 283.014495971758549); (136.342566575285474, 698.315452710874752); (345.004922664389085, 939.068336631267471); (891.680623462061476, 287.663161181994212)|] ;; (* #require "graphics" *) open Graphics ;; open_graph " 1000x1000" ;; (* ne l'executez qu'une seule fois, et ne fermez jamais la fenetre ! *) let round x = (* arrondi un flottant a l'entier le plus proche *) if x -. (floor x) < 0.5 then int_of_float (floor x) else int_of_float (floor x) + 1 ;; let trace_nuage nuage = for i=0 to Array.length nuage - 1 do let x,y=nuage.(i) in fill_circle (round x) (round y) 3 done ;; let coloration p q = let x1, y1 = p and x2, y2 = q in set_color red ; fill_circle (round x1) (round y1) 5 ; set_color blue ; fill_circle (round x2) (round y2) 5 ; set_color black ; ;; let tab_int = [|2;50;13;8;2;12;48;16;10;46;81;21;30|] ;; let tab1x = [|(136.342566575285474, 698.315452710874752); (137.952822280455479, 579.517066764289893); (186.89530977266773, 283.014495971758549); (345.004922664389085, 939.068336631267471); (466.113061566003125, 188.103956342865786); (745.24288848465, 673.134497490137164); (891.680623462061476, 287.663161181994212); (944.098271788395095, 410.935431876780797)|] ;; let tab1y = [|(466.113061566003125, 188.103956342865786); (186.89530977266773, 283.014495971758549); (891.680623462061476, 287.663161181994212); (944.098271788395095, 410.935431876780797); (137.952822280455479, 579.517066764289893); (745.24288848465, 673.134497490137164); (136.342566575285474, 698.315452710874752); (345.004922664389085, 939.068336631267471)|] ;; let tb1 = [|(466.113061566003125, 188.103956342865786); (345.004922664389085, 939.068336631267471)|] ;; (* début des questions *) (* Question 1 *) let distance (x1,y1) (x2,y2) = assert false (* A coder *) ;; distance tab1.(0) tab1.(1) ;; (* Question 2 *) let plus_proche_naif t = assert false (* A coder *) ;; plus_proche_naif tab1 ;; (* Question 3 *) let fission t = assert false (* A coder *) ;; fission tab_int ;; (* Question 4 *) let fusion t1 t2 inf = assert false (* A coder *) ;; fusion [|0;2;3;8|] [|1;5;7;9;11|] (fun x y -> x<=y) ;; fusion [|10;4|] [|5;3;1|] (fun x y -> x>=y) ;; (* Question 5 *) let rec tri_fusion t inf = assert false (* A coder *) ;; tri_fusion tab_int (fun x y -> x<=y) ;; tri_fusion tab_int (fun x y -> x>=y) ;; (* Question 6 *) let inf_x (a,b) (c,d) = assert false (* A coder *) ;; let inf_y (a,b) (c,d) = assert false (* A coder *) ;; tri_fusion tab1 inf_x ;; tri_fusion tab1 inf_y ;; (* Question 7 *) let decoupage tx = assert false (* A coder *) ;; decoupage tab1x ;; (* Question 8 *) let reparti ty c = assert false (* A coder *) ;; reparti tab1y tab1x.(4) ;; (* Question 9 *) let extrait_bande ty x0 d = assert false (* A coder *) ;; extrait_bande tab1y 400. 100. ;; (* Question 11 *) let parcours_bande tb d = assert false (* A coder *) ;; parcours_bande tb1 1000. ;; parcours_bande [||] 100. ;; (* Question 12 *) let plus_proche_efficace t = assert false (* A coder *) ;; (* test final *) let egal_couple (x1, y1) (x2, y2) = x1 = x2 && y1 = y2 || x1 = y2 && x2 = y1 ;; let temps f x = let t = Sys.time() in let fx = f x in Printf.printf "Temps d'execution: %fs\n" (Sys.time() -. t); fx ;; let test n = (* comparaison pour un nuage de taille n *) let tab = rd_nuage n in clear_graph () ; trace_nuage tab ; let p, q = temps plus_proche_naif tab in coloration p q ; egal_couple (p,q) (temps plus_proche_efficace tab) (* verification ! *) ;; test 10000 ;;