TP-programmation-fonctionnelle/TP1/pgcd.ml
2023-06-21 20:13:54 +02:00

32 lines
912 B
OCaml

(**
pgcd : int -> int -> int
description : renvoie le pgcd de deux entiers non nuls
a : entier dont on cherche le pgcd avec b
b : entier dont on cherche le pgcd avec a
returns : pgcd(a, b)
précondition : a > 0 et b > 0
*)
let rec pgcd a b =
if a = 0 || b = 0 then failwith "entrer deux entiers non nuls";
let abs x = if x < 0 then -x else x in
let a = abs a in
let b = abs b in
if a = b then
a
else if a > b then
pgcd (a - b) b
else
pgcd a (b - a)
(* tests unitaires *)
let%test _ = pgcd 1 1 = 1
let%test _ = pgcd 10 25 = 5;;
let%test _ = pgcd (-10) 25 = 5;;
let%test _ = pgcd 10 (-25) = 5;;
let%test _ = pgcd (-10) (-25) = 5;;
(*
let%test _ = pgcd 0 25 = failwith "entrer deux entiers non nuls";;
let%test _ = pgcd 10 0 = failwith "entrer deux entiers non nuls";;
let%test _ = pgcd 0 = failwith "entrer deux entiers non nuls";;
*)