Используя F # для вычисления треугольника - PullRequest
1 голос
/ 20 декабря 2011

Я пытаюсь написать программу для расчета треугольников. Кто-нибудь может дать мне короткий код на F # Darp для этого расчета?

enter image description here

Это то, что я имею до сих пор, но я не уверен, что это лучший способ:

let area a b c = 
  let s = sqrt((a + b + c) / 2) 
  sqrt(s * (s - a) * (s - b) * (s - c))

Ответы [ 2 ]

5 голосов
/ 20 декабря 2011

Кажется, вы пытаетесь применить различные формулы в зависимости от типа вашего треугольника. Если у вас есть три стороны, вы используете формула Герона , если у вас есть одна сторона, вы предполагаете, что треугольник равносторонний, если у вас есть две стороны, вы полагаете, что треугольник прав, а две стороны являются катетерами. , Если бы я правильно истолковал, я бы определил дискриминационный союз, например:

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))
3 голосов
/ 20 декабря 2011

Просто перевод этих формул? Должно быть что-то вроде этого:

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...