(* ===================================================== *)
(* Apprentissage de la programmation avec OCaml *)
(* Catherine Dubois & Valérie Ménissier-Morain *)
(* Éditions Hermès Sciences *)
(* Mars 2004 *)
(* ===================================================== *)
(* Fichier MLSRC/nombre_en_lettres.ml *)
(* ===================================================== *)
let unité n = n mod 10;;
let dizaine n = (n / 10) mod 10;;
let centaine n = (n / 100) mod 10;;
let millier n = n / 1000;;
let espace = " " and tiret = "-" and vide ="";;
let chiffre n =
if n = 0 then vide else
if n = 1 then "un" else
if n = 2 then "deux" else
if n = 3 then "trois" else
if n = 4 then "quatre" else
if n = 5 then "cinq" else
if n = 6 then "six" else
if n = 7 then "sept" else
if n = 8 then "huit" else
if n = 9 then "neuf"
else failwith "chiffre : paramètre incorrect";;
let écrire_millier m =
if m = 0 then vide
else if m = 1 then "mille"
else (chiffre m) ^ espace ^ "mille";;
let écrire_centaine c avec_s =
if c = 0 then vide else
if c = 1 then "cent" else
if avec_s then (chiffre c) ^ espace ^ "cents"
else (chiffre c) ^ espace ^ "cent";;
let écrire_1_etc u =
if u = 0 then "dix" else
if u = 1 then "onze" else
if u = 2 then "douze" else
if u = 3 then "treize" else
if u = 4 then "quatorze" else
if u = 5 then "quinze" else
if u = 6 then "seize" else "dix-" ^ (chiffre u);;
let écrire_dizaine d =
if d = 1 then "dix" else
if d = 2 then "vingt" else
if d = 3 then "trente" else
if d = 4 then "quarante" else
if d = 5 then "cinquante" else
if d = 6 || d = 7 then "soixante" else
if d = 8 || d = 9 then "quatre-vingt"
else failwith "écrire_dizaine : paramètre incorrect";;
let écrire_dizaine_unité d u =
if d = 0 then chiffre u else
if d = 1 then écrire_1_etc u else
(écrire_dizaine d) ^
(if d = 9 then tiret ^ (écrire_1_etc u) else
if d = 7 then (if u = 1 then " et onze" else tiret ^ (écrire_1_etc u))
else if u = 0 then (if d = 8 then "s" else vide)
else if u = 1 then (if d = 8 then "-un" else " et un")
else tiret ^ (chiffre u));;
let en_lettres n =
if n < 1 || n > 9999 then failwith "en_lettres"
else
let m = millier n
and c = centaine n
and d = dizaine n
and u = unité n in
(écrire_millier m) ^ (if c > 0 then espace else vide) ^
(écrire_centaine c (c > 1 && d = 0 && u = 0)) ^ (if d > 0 || u > 0 then espace else vide) ^
(écrire_dizaine_unité d u);;
Ce document a été traduit de LATEX par
HEVEA.