三角形を計算するプログラムを作成しようとしています。誰も私にこの計算のためにF#sharpで短いコードを与えることができますか?F#を使用して三角形を計算する
これは私がこれまで持っているものですが、私はそれが最善の方法だと確信していない:
let area a b c =
let s = sqrt((a + b + c)/2)
sqrt(s * (s - a) * (s - b) * (s - c))
三角形を計算するプログラムを作成しようとしています。誰も私にこの計算のためにF#sharpで短いコードを与えることができますか?F#を使用して三角形を計算する
これは私がこれまで持っているものですが、私はそれが最善の方法だと確信していない:
let area a b c =
let s = sqrt((a + b + c)/2)
sqrt(s * (s - a) * (s - b) * (s - c))
: は次のようなものであるべき。 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))
うわー...このソリューションPaoloにはありがとうございます。 – Kai
これらの式のジャスト翻訳?あなたが持っている三角形の種類に応じて異なる式を適用しようとしているようだ
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))
ありがとうございますグスタボ。それは私の解決策の近くで終了します。 – Kai
おそらく宿題ですか? – DOK
いいえ、宿題はありません。自分自身を試してみましたが、私はこれが最善の解決策ではないと確信しています。 – Kai
'code'let area abc = let s = sqrt((a + b + c)/ 2) sqrt(s *(s-b)*(s-c));'コード' – Kai