2016-06-01 11 views
-1

私は入力に続いて与えられる3つの辺を生成するプログラムを作ろうとしています:最も長い許容斜辺と必要な三角形の数。辺は整数だけです。 私が書いたプログラムはちょうど私の上にハングアップし、出力を返しません。 あなたがなぜ私をdownvoteするのか説明してください。直角三角形を生成するC++

#include <iostream> 
#include <cmath> 
#include <cstdlib> 

int generator(int number, int hypoth){ 

    int a,b,c; 

    while (number>0){ 
     c=rand()%(hypoth-1)+1; 
     for (a=1;a<hypoth-2;a++){ 
      for (b=1;pow(a,2)+pow(b,2)<=pow(c,2); b++){ 
       if (pow(a,2)+pow(b,2)==pow(c,2)){ 
        std::cout<<"sides: "<<a<<" "<<b<<" "<<c<<std::endl; 
        number--; 
       } 
      } 
     } 
    } 
    return 0; 
} 

int main(){ 
    int triangle_number, hypothenuse; 
    std::cout << "How many triangles to generate? "; 
    std::cin >> triangle_number; 
    std::cout << "How long is max hypothenuse?"; 
    std::cin >> hypothenuse; 
    generator(triangle_number, hypothenuse); 
    return 0; 
} 

私のアルゴリズムを改善する必要があると思う場合は、私に正しい方向を教えてください。 ありがとうございます。

+5

ようこそスタックオーバーフロー!デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。詳しい読書:** [小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

+0

あなたはどんな入力を使いましたか?多分それは仕上げには時間がかかりすぎる – user463035818

+0

@ tobi303入力1,6(1つの三角形、最も長い斜辺6)もぶら下がります。また、それが答えを見つけるなら、それはすぐにそれを掲示するので、私はそれが事実であると疑う。 – Sleepycoder

答えて

2

あなたの提供したコードは私のマシンで正常に動作します.1と6を入力すると出力はsides: 3 4 5になります。

ただし、この問題はおそらく次の行から発生します。pow(a,2)+pow(b,2)==pow(c,2)powdoubleを返します。平等のために浮動小数点数を比較することは滑りやすく、実際には決して良い考えではありません。なぜなら、それはわずかな量ではなく、誤っている可能性が高いからです。

a*a + b*b == c*c(とすぐ上のforループ内の条件はa*a + b*b <= c*c)に置き換えてください。