(** Programmer avec des exceptions - Correction **) exception Success;; let contientNeg tab = try for i = 0 to Array.length tab - 1 do if tab.(i) < 0 then raise Success done; false with Success -> true ;; assert(not(contientNeg [| 1 ; 0 ; 1 ; 3|]));; (*tableau parcouru en entier *) assert(contientNeg [| -1 ; 0 ; 1 ; 3|]);; (* seul le premier element est examiné *) assert(contientNeg [| 1 ; -1 ; 1 ; 3|]);; (* seuls les deux premiers elements sont examinés *) assert(contientNeg [| 1 ; -1 ; 1 ; -3|]);; (* seuls les deux premiers elements sont examinés *) assert(contientNeg [| 1 ; 0 ; 1 ; -3|]);; (*tableau parcouru en entier *) let contientNeg2 tab = let ok = ref false in for i = 0 to Array.length tab - 1 do if tab.(i) < 0 then ok := true done; !ok ;; assert(not(contientNeg2 [| 1 ; 0 ; 1 ; 3|]));; assert(contientNeg2 [| -1 ; 0 ; 1 ; 3|]);; assert(contientNeg2 [| 1 ; -1 ; 1 ; 3|]);; assert(contientNeg2 [| 1 ; -1 ; 1 ; -3|]);; assert(contientNeg2 [| 1 ; 0 ; 1 ; -3|]);; let contientNeg3 tab = let ok = ref false in let i = ref 0 in while !i < Array.length tab && not !ok do if tab.(!i) < 0 then begin ok := true end; i := !i + 1 done; !ok ;; assert(not(contientNeg3 [| 1 ; 0 ; 1 ; 3|]));; assert(contientNeg3 [| -1 ; 0 ; 1 ; 3|]);; assert(contientNeg3 [| 1 ; -1 ; 1 ; 3|]);; assert(contientNeg3 [| 1 ; -1 ; 1 ; -3|]);; assert(contientNeg3 [| 1 ; 0 ; 1 ; -3|]);; let contientNeg4 tab = let n = Array.length tab in let rec aux i = (* teste l'élément i et la suite si besoin*) if i < n then (tab.(i) < 0) || (aux (i+1)) else false in aux 0 ;; assert(not(contientNeg4 [| 1 ; 0 ; 1 ; 3|]));; assert(contientNeg4 [| -1 ; 0 ; 1 ; 3|]);; assert(contientNeg4 [| 1 ; -1 ; 1 ; 3|]);; assert(contientNeg4 [| 1 ; -1 ; 1 ; -3|]);; assert(contientNeg4 [| 1 ; 0 ; 1 ; -3|]);; let contientNeg5 tab = Array.exists (fun x -> x < 0) tab ;; assert(not(contientNeg5 [| 1 ; 0 ; 1 ; 3|]));; assert(contientNeg5 [| -1 ; 0 ; 1 ; 3|]);; assert(contientNeg5 [| 1 ; -1 ; 1 ; 3|]);; assert(contientNeg5 [| 1 ; -1 ; 1 ; -3|]);; assert(contientNeg5 [| 1 ; 0 ; 1 ; -3|]);;