#include
#include
main()
{
int d,n;
cout << "Podaj liczbe: ";
cin >> n;
for (int i=1; d>=n; i++)
{
if (n%i==0) d=d+i;
}
if (d==n) cout << "Liczba doskonala."; else cout << "Liczba nie dosknala.";
getch();
}
Witam wie ktoś dlaczego ten program nie działa?? Według mnie wszystko jest dobrze a i tak 6 nie pokazuje jako liczby doskonałej. Prosił bym o pomoc w wskazaniu błędu.
#include
#include
main()
{
int d,n;
cout << "Podaj liczbe: ";
cin >> n;
for (int i=1; d<=n; i++)
{
if (n%i==0) d=d+i;
}
if (d==n) cout << "Liczba doskonala."; else cout << "Liczba nie dosknala.";
getch();
}
To dalej nie działa Mógłby mi ktoś podać gotowy kod? – Dodane 07.11.2010 (N) 15:25 – nie krzyczy nic nowy ale dale nie działa z łatwiejszymi programami sobie dałem rady
#include
#include
main()
{
int a,d,n;
cout << "Podaj liczbe: ";
cin >> n;
d=0;
for (int i=1; d<=n; i++)
{
if (n%i==0) d=d+i;
}
if (d==n) cout << "Liczba doskonala."; else cout << "Liczba nie dosknala.";
getch();
}
a warunkiem wykonywania pętli jest, że d<= n, a n jest właśnie liczbą 6, stąd pętla zrobi jeszcze jeden obieg, zwiększy i do 4, doda 4 do d (d = 10) i wtedy dopiero zakończy działanie. Potem sprawdza, czy d = 10 jest równe n = 6 i wykaże, że nie, stąd wynika, że 6 nie jest liczbą doskonałą. Gdyby była nierówność d < n, pętla skończyłaby obieg na i = 3 i wszystko byłoby w porządku.
Tak więc winno być:
for (int i=1; d < n; i++) {}
Przy okazji - powinno się robić odpowiednie wcięcia w celu poprawienia czytelności kodu. Nawet najkrótszych. I zmienna a nie jest do niczego potrzebna. Ale to już drobiazg.