2011-12-20 15 views
1

三角形を計算するプログラムを作成しようとしています。誰も私にこの計算のためにF#sharpで短いコードを与えることができますか?F#を使用して三角形を計算する

enter image description here

これは私がこれまで持っているものですが、私はそれが最善の方法だと確信していない:

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

おそらく宿題ですか? – DOK

+0

いいえ、宿題はありません。自分自身を試してみましたが、私はこれが最善の解決策ではないと確信しています。 – Kai

+0

'code'let area abc = let s = sqrt((a + b + c)/ 2) sqrt(s *(s-b)*(s-c));'コード' – Kai

答えて

5

: は次のようなものであるべき。 3つの側面に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)) 
+0

うわー...このソリューションPaoloにはありがとうございます。 – Kai

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)) 
+0

ありがとうございますグスタボ。それは私の解決策の近くで終了します。 – Kai

関連する問題