プロが教える店舗&オフィスのセキュリティ対策術

********************************************
int sankaku(double a,double b,double c){
double s,s2;
int flag=0;
s = a+b+c
s /= 2.0;
s2 = s*(s-a)*(s-b)*(s-c);
if(s2 <= 0.0) return(-1);
if(a==b)flag++;
if(b==c)flag++;
if(c==a)flag++;
return (flag);
}
********************************************

三角形の問題です。(*引数a,b,cは三角形の三辺の長さ(正値)を与えるの)
(1)戻り値(return value)が「-1」である場合何を意味するか
(2)二等辺三角形の場合の戻り値
(3)正三角形の場合の戻り値
についてお願いします。

A 回答 (1件)

(1)


if(s2 <= 0.0) return(-1);
から、s2<=0.0となる場合です。

…なんて書くと石が飛んできそうな気がするので、s2の計算を見てみます。
s = a+b+c;
s /= 2.0;
s2 = s*(s-a)*(s-b)*(s-c);
となっていますね。a,b,cは正ですからs2計算時のsも正になります。
したがって、s2<=0.0が成り立つにはs-a<=0.0かs-b<=0.0かs-c<=0.0が成り立つ必要があります。
s = a+b+c;s /= 2.0;ですから、s2<=0.0が成り立つには(-a+b+c)/2<=0.0か(a-b+c)/2<=0.0か(a+b-c)/2<=0.0、すなわち、b+c<=aかa+c<=bかa+b<=cが成り立つ必要があります。
これは、3角形の3辺とはならない値が関数に与えられたことを表します。

(2)、(3)
if(a==b)flag++;
if(b==c)flag++;
if(c==a)flag++;
の部分は、各辺のうち長さが一致する辺の個数を数えています。
したがって、二等辺三角形の場合は1、正三角形の場合は3が戻り値となります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!