-1

わかりましたので、機能を維持しながらすでに単純化/要約しましたが、1か月半しかC++を実行していません.100行のコードでした.関数の引数で変数を宣言し、それらなしでそれらを呼び出すことは可能ですか?引数に値を渡しますか?

#include <iostream>
#include <windows.h>
using namespace std;


int primeCheck10 (int j)
{
    int count=0;
    cout<<"Enter a number between 1 and 10___";
    cin>>j;

    if(j<1 ||j>10)
    {
        cout<<"Invalid Value\n";
        return 0;
    }
    for(int i=2; i<j; i++)
    {
        if(j%i==0)
        {
         count++;
         break;
        }
    }
    if(count==0)
        cout<<"Prime number\n";
    else
        cout<<"Not a Prime number\n"; 
}
int primeCheck100(int j)
{
int count=0;
cout<<"Enter a number between 1 and 100___";
    cin>>j;

    if(j<1 || j>100){
        cout<<"Invalid Value\n";
        return 0;
    }
    for(int i=2; i<j; i++)
    {
        if(j%i==0)
        {
         count++;
         break;
        }
    }
    if(count==0)
        cout<<"Prime number\n";
    else
        cout<<"Not a Prime number\n";
}
int checkPrime1000(int j)
{
int count=0;
cout<<"Enter a number between 1 and 1000___";
    cin>>j;
    if(j<1 || j>1000){
        cout<<"Invalid Value\n";
        return 0;
    }
    for(int i=2; i<j; i++)
    {
        if(j%i==0)
        {
         count++;
         break;
        }
    }
    if(count==0)
        cout<<"Prime number\n";
    else
        cout<<"Not a Prime number\n"; 
}

int main ()
{
    system("pause");
    return 0;
}
4

3 に答える 3

3

はい、すべての主要なチェックを 1 つの関数に簡単に凝縮できます。コードの構造を変更して、特定の数値が素数かどうかをチェックし、素数かどうかを示すa を返すようにします。bool

bool isprime(int n) {
    int limit = sqrt(n)+1;   // only need to check up to sqrt(n)

    if (n == 2)
        return true;
    if (n == 1 || n % 2 == 0)  // check if it's 1 or even
        return false;
    for (int i = 3; i <= limit; i += 2) // not even -- only check odd numbers
        if (n % i == 0)
            return false;
    return true;
}

次に、入力を取得して結果を表示するコードは別になります。

void primecheck(int limit) {
    std::cout << "Please enter a number between 1 and " << limit;
    int j;
    std::cin >> j;
    if (j<1 || j > limit) 
        std::cerr << "Invalid value";
    static char const *labels [] = { "Not a prime number\n", "Prime number\n" };
    std::cout << labels[isprime(j)];
}

これ以上短くするのはさほど難しくないのですが、そうするとおそらく読みづらくなってしまうところまで来ています。

于 2013-11-14T23:39:12.613 に答える