-1

これはStackoverflowに関する私の最初の質問です。何か間違ったことをしている場合は、すみません。:)このコードを手伝ってくれませんか?ありがとうございました!:)

#include <iostream>
using namespace std;

1)

int divisor(int a) // function that checks the divisors of a number *)
{
int i=1; // counter
while(i<=a) // while the counter is less than the number given
{
    int i;
    if(primes(i)) // here i get the error "primes was not declared in this scope
    {
        if(a%i==0) // if the remainder of the operation is 0, the number is a divisor
        {
            cout<<"The divisors of the number are: "<<i<<endl; // prints the divisors
            ++i; // counter is incremented
        }
    }
    else // else it is not, and the counter i is incremented
    {
        ++i;
    }
}
}

2)

int primes(int number) // checks if a number is prime
{
int i; 
for(i=2;i<number;i++) // for loop until the counter i is less than a number
{
    if(number%i==0) // if the remainder of the operation is 0, the number is not prime
    {
        break;
    }
    else //else the number is prime
                    cout<<number;
        break;
    }
}
}

3)

int main()
{
int n,i;
cout<<"Give the number: ";
cin>>n;
for(i=2;i<n;i++)
{
    divisor(n);
}

}
4

2 に答える 2

2

いくつかの問題があります。

primes()1) の前に前方宣言する必要がありますdivisors():

int primes(int number);

2)primes()関数が値を返さない。

3) すべてのコード パスがdivisor()インクリメントされているわけではありませんi

他にも問題があると思いますが、これで始められるはずです...

于 2013-03-02T10:33:38.607 に答える
0

上記の順序がファイルで使用する順序と同じであると仮定すると、問題は除数関数が最初に来て、後で宣言される素数関数を使用することです。最も簡単な(そして最も一般的だと思う)解決策は、「前方宣言」を使用することです。これは、ファイルの先頭に次のように記載することを意味します。

int divisor(int);
int primes(int);

さらに、primes() が値を返すことを忘れています。(この質問は C++ としてタグ付けされているため、int ではなく bool を返すことを検討することもできます)。

また、素数では、else 句がブレークを引き起こすようになりましたが、それが完全に賢明だとは思いません。9 のような数は、2 で割るとその節に入りますが、2 で割り切れないという事実は素数にはなりません...

素数を見つけることに関しては、他にも「スマートなトリック」がありますが、おそらくそれはこの質問の範囲外です。

于 2013-03-02T10:39:47.443 に答える