2017-12-04 8 views
0

私は三角形がここに私のコードだ有効か無効
であるかどうかを発見するC++プログラムを書きたい:三角形が有効かどうかをどのように角度で知ることができますか?

#include <iostream> 
using namespace std; 
int main() { 
    int a,b,c; 
    cin>>a>>b>>c; 
    if (a+b+c==180) 
    cout <<"Yes"; 
    else 
    cout <<"No"; 
    return 0; 
} 

ユーザーが3つの角度を入力しますが、それははい、有効な印刷が、何彼場合だろう50 30 100を例えば入ります
0 0 180 1つの角度だけを入力して「はい」と印刷します。それは三角形ではなく、私のプログラムは「はい」と表示します。これを解決するにはどうすればよいですか?

+0

「0 0 180」を三角形とみなしているかどうかは任意であるため、余分なブランチでそのケースをキャッチする必要があります。 – user463035818

+7

btw私は、ユーザが「-20 -10 210」のようなものを入力することを心配しています。 ... – user463035818

+0

@ tobi303、はいこれらのケースについてはどうすればよいですか? –

答えて

1

ある意味、あなたは正しいです。三角形が無効であると判断するのに十分な情報があれば、プログラムを続行することはできません。したがって、私が下で提案するコードスニペットでは、ユーザーが値< 0または> 180を入力すると、プログラムは適切なエラーメッセージで終了することがわかります。同様に、一度実行合計が180を超えると、プログラムも早く終了します。

最後に、すべての値が三角形の有効な角度である角度に対して入力されると、それらの合計がチェックされます。

int main() 
{ 
    // assuming angles must be integers: 
    int angle, sum = 0; 
    for (int i = 0; i < 3; i++) { 
     cin >> angle; 
     if (angle <= 0 || angle >= 180) { 
      cout << "Error: Angle must be between 0 and 180\n"; 
      return 0; 
     } 

     sum += angle; 

     if (sum > 180) { 
      cout << "Error: angles too large\n"; 
      return 0; 
     } 
    } 

    if (sum == 180) { 
     cout << "Valid Triangle!\n"; 
    } else { 
     cout << "Error: angles must add up to 180\n"; 
    } 
    return 0; 
} 
+0

Downvoter、説明してください。この回答は正しいです。質問 –

+0

に記載されているすべてのケースに対処してください。コードのみの回答は長期間にはほとんど役に立ちません(つまり、OPコードのコピーと貼り付け以外のもの)。 – user463035818

+0

@ tobi303十分です。追加された説明 –

0

このコードでは、2つの問題について考える必要があります。最初:ユーザーが入力した角度が有効です(つまり、負ではなく、180度以下で、0ではない場合もあります)。次に、角度が有効であると判断したら、3つの角度を三角形の一部にすることができるかどうかを決定します。

入力を求めるプロンプトで角度を取得し、角度が有効であることを確認し、角度が有効でない場合はループバックするという2つの関数を記述します。 3つの有効な角度が三角形であるかどうかを決定するものとがある。その後、適切な接着剤でそれらを一緒に固定します。

+0

私はそれを得た、私は書いたif(a + b + c == 180 && a> 0 && b> 0 && c> 0) else cout << "いいえ"; –

+0

@AdamEve - クール!私はちょうど個人的なスタイルのヒント:私は別の方法でテストを書いて、最初に要件をテストしてから "本当の"テストをしたいと思います:if(a> 0 && b> 0 && c> 0 && a + b + c = = 180) 'である。あなたのものは正しいですが、他の文脈では、注文は重要です。次に例を示します。 'int * ip = 0; if(ip && * ip)... ' - ここで、ポインタの有効性をテストすると、最初に無効なポインタの逆参照が防止されます。 –

関連する問題