我正在尝试编写一个程序来计算三角形。对于这个计算,有人能给我一个F#sharp的短代码吗?
这是我到目前为止所做的,但我不相信这是最好的方式:
let area a b c =
let s = sqrt((a + b + c) / 2)
sqrt(s * (s - a) * (s - b) * (s - c))
答案 0 :(得分:5)
根据您所拥有的三角形类型,您似乎正在尝试应用不同的公式。如果你有三个边,你使用Heron's formula,如果你有一边你假设三角形是等边的,如果你有两边你假设三角形是正确的,两边是导管。 如果我正确解释,我会定义一个有区别的联合,如下所示:
type Triangle =
| Generic of float * float * float
| Equilateral of float
| Right of float * float
let area (t : Triangle) : float =
match t with
| Generic (a, b, c) -> let s = (a + b + c) / 2.
sqrt(s*(s-a)*(s-b)*(s-c))
| Equilateral a -> sqrt(3.) * (a ** 2.) / 4.
| Right (a, b) -> (a * b) / 2.
// testing
let triangles = [Generic (2., 3., 4.); Equilateral 2.; Right (2., 3.)]
triangles |>
List.iter (fun t -> Console.WriteLine(area t))
答案 1 :(得分:3)
只是翻译那些公式? 应该是这样的:
let area a = (a ** 2. / 4.) * sqrt 3.
let area' a b = a * b / 2.
let area'' a b c =
let s = (a + b + c) / 2.
sqrt(s * (s - a) * (s - b) * (s - c))