2017-10-30 12 views
-4

私は大学のC++割り当てのコードを書いています。プログラムは、フィボナッチ配列の最初の5つの素数を印刷することになっています。私はこれまで何を持っていたのかを知っている。C++ bool関数がtrueを返すときの無限ループ

#include <iostream> 
#include <cmath> 
using namespace std; 
int fibonacci(int x){ 
int y=1, z=1, sum=0; 
    for(int a=1; a<=x;a++){ 
    sum=(z+y); 
z=y; 
y=sum; 
    } 
    return sum; 
} 
bool isPrime(int x){ 
    double z=x; 
    for(int y=2;y<=sqrt(z);y++){ 
    if(x%y==0){ 
     return false; 
    } 
    } 
    return true; 
} 
int main(){ 
    int primes=0, check=0; 
    for(int x=1;x<=10;x++){ 
    check=0; 
    while(primes<5 && check==0){ 
     if(isPrime(fibonacci(x))){ 
     cout<<fibonacci(x)<<endl; 
     primes++; 
     check=1; 
     } 
    } 
    } 
    return 0; 
} 

コードは、最初の3つのフィボナッチ素数2,3および5を返します。その後、プログラムは無限ループに入ります。 isPrime関数がtrueを返すようにすると、無限ループは解消されますが、明らかに必要な出力は生成されません。 ご協力いただければ幸いです。ありがとう。

+1

'isPrime'が' false'の場合、 'main'のループは何もしません。他に何が起こると予想されるかはわかりません。 –

+0

私は彼らが 'cout <<"を受け入れないだろうと思っています2 3 5 13 89 ";'? :) – kazemakase

+6

SOは、簡単なデバッグミスを修正するよう求めている場所ではありません。あなたが質問をするたびに、将来他の読者が自分自身から利益を得られるべきものでなければならない。私はデバッグモードを使用して、あなたの問題を解決するためにブレークポイントを設定するなど、あなたのコードをデバッグする一般的な方法についてお勧めします –

答えて

0

フィボナッチを見つけてプライムであるかどうかを確認する機能は問題ありません。彼らは効率のためにもう少し修正されたかもしれないが、彼らは大丈夫だった。問題は、あなたのmainの中で実行されているものでした。あなたはそこで不必要な変数や比較をあまりにも多くしました。 私はコードに取り組みましたが、今はうまくいくようです。私はクラスにいるので、いくつかのエラーがあるかもしれないことに留意してください。

#include <iostream> 
#include <cmath> 
using namespace std; 
int fibonacci(int x) { 
    int y = 1, z = 1, sum = 0; 
    for (int a = 1; a <= x; a++) { 
     sum = (z + y); 
     z = y; 
     y = sum; 
    } 
    return sum; 
} 
bool isPrime(int x) { 
    double z = x; 
    for (int y = 2; y <= sqrt(z); y++) { 

     if (x%y == 0) { 
      return false; 
     } 
    } 
    return true; 
} 
int main() { 
    int primes = 0, check = 0; 
    for (int x = 1; primes < 5; x++) { 

     if (isPrime(fibonacci(x))) 
     { 
      cout << fibonacci(x) << endl; 
      primes++; 
     } 
    } 
    system("PAUSE"); 
    return 0; 
} 

私はあなたのcheckが不適切な位置に配置し、無限ループを引き起こしたと考えています。