C++ liczba doskonała- jak poprawić

Witam wszystkich.

Moje pytanie wiąże się z c++ i zrobieniem/ napisaniem programu, który będzie sprawdzał czy podana liczba jest doskonała.

Po usunięciu tej linijki " else cout<

Prosiłbym również, o ile to możliwe o to, żeby chętna osoba przekształciła to na program wyszukujący liczby doskonała w podawanym przedziale. Próbowałem to dzisiaj tzn. wczoraj zrobić, ale w ogóle mi nie wychodziło. Jak widać są to zagadnienia omawiane w szkole, ale ja po prostu chcę poćwiczyć żeby lepiej pojąć tego c++'a bo jak narazie widać- w ogóle tego nie “ogarniam”.

Oto co ja wytworzyłem w Dev c++

#include

#include

using namespace std;

int main()

{

int x, s;

cout<<“Witaj! Sprawdze dla Ciebie czy podana liczba jest liczba doskonala\n\n”;

cout<<“Podaj liczbe, ktora chcesz sprawdzic\n”;

cin>> x;

s = 0;

for (int i=1; i

{if (x%i==0)

{s=s+i;}

{if (x==s) {cout<

else cout<

}

system (“Pause”);

return main();

}

Dziękuję i pozdrawiam.

#include 


using namespace std;


int func(int x){

    int v = 0;

    for (int i = 1; i < x; i++){

        if (x % i == 0)

            v += i;

    }

    if (x == v)

        return 0;

    else

        return 1;

}


int main()

{

    int x, l_doskonala;

    cout << "Program sprawdza, czy podana liczba jest liczbą doskonala : " << endl;

    cout << "Podaj liczbe : ";

    cin >> x;

    l_doskonala = func(x);

    if (l_doskonala == 0)

        cout << x << " jest liczba doskonala " << endl;

    else

        cout << x << " nie jest liczba doskonala " << endl;

    cin.sync();

    cin.get();

    return 0;

}

#include 


using namespace std;


int func(int x){

    int v = 0;

    for (int i = 1; i < x; i++){

        if (x % i == 0)

            v += i;

    }

    if (x == v)

        return 0;

    else

        return 1;

}


int main()

{

    int l_doskonala;

    cout << "Program sprawdza, czy podana liczba jest liczbą doskonala : " << endl;

    for (int i = 1; i <= 30; i++){

        l_doskonala = func(i);

        if (l_doskonala == 0)

            cout << i << " jest liczba doskonala " << endl;

        else

            cout << i << " nie jest liczba doskonala " << endl;

    }

    cin.sync();

    cin.get();

    return 0;

}

Kilka uwag do twojego kodu, nowszą biblioteką jest z tego, co zrozumiałem piszesz w C++ a nie w C. Nie używaj

system("PAUSE");

ponieważ jest to pewnego rodzaju uzależnienie od Windows’a(było już tutaj powtarzane na forum) zamiast tego możesz użyć

cin.sync();

cin.get();

Tak, wiem czepiam się. Ale uważam, że tak jest jednak lepiej, decyzja należy do Ciebie, co wybierzesz. Dobrze by było tego typu zadania robić poprzez funkcje, kod źródłowy jest zazwyczaj czytelniejszy.

Pozdrawiam

protected

Jeśli masz zamiar sprawdzać duże liczby to zamiast int użyj long int.

Aby przyśpieszyć obliczenia można zastosować pewien zabieg. A dodatkowo trochę poprawek.

Dodatkowo trzeba zrobić zabezpieczenie dla zera, które nie jest liczbą doskonałą.

#include 


using namespace std;


bool func(int x){

    if(x==0) return false;

    long v = 1;

    long pol=x/2;

    for (long i = 2; i <= pol; i++){

        if (x % i == 0)

            v += i;

    }

    if (x == v)

        return true;

    else

        return false;

}


int main()

{

        long x;

        cout << "Program sprawdza, czy podana liczba jest liczbą doskonala : " << endl;

        cout << "Podaj liczbe : ";

        cin >> x;

        if (func(x))

            cout << x << " jest liczba doskonala " << endl;

        else

            cout << x << " nie jest liczba doskonala " << endl;

        cin.sync();

        cin.get();

        return 0;

}