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”;
#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.
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;
}