• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pętla while do podanej liczby

Object Storage Arubacloud
0 głosów
364 wizyt
pytanie zadane 22 października 2020 w C i C++ przez Reshian77 Nowicjusz (150 p.)

Witam.
Głowię się nad tym kodem i nie wiem jak to ugryźć, a poprzednie próby kończyły się niezamierzonym wynikiem. Muszę zrobić tak, żeby pętla while sprawdzała czy podane liczby są doskonałe, dopóki nie otrzymam ich podanej wartości. Szukałem na różnych stronach i nadal nie mam zielonego pojęcia jak to zrobić. Kod tutaj:

 

#include<iostream>
#include<cmath>
using namespace std;
bool czy_doskonala(int n)
{
int s = 1, p = sqrt(n);
for(int i=2; i<=p; i++)
if(n%i == 0)
s+= i + n/i;
if(n == p*p) s-=p;
if(n == s) return 1;
return 0;	
}
int main()
{
int i,n;
system("chcp 1250 > nul");
cout<<"Podaj ile liczb doskonałych chcesz uzyskać"<<endl;
cout<<"Ile = ";
cin>>i;
while(!czy_doskonala(n)){	
cout<<"Podaj liczbę n: "<<endl;
cout<<"n = ";
cin>>n;
if(czy_doskonala(n))
cout<<"Liczba "<<n<<" jest doskonała.\n";
else
cout<<"Liczba "<<n<<" nie jest doskonała.\n";
}
cout<<"Ilość liczb doskonałych: "<<czy_doskonala(n)<<endl;
return 0;
}

 

komentarz 22 października 2020 przez Mavannkas Bywalec (2,290 p.)
Trochę bałagan masz w tym kodzie. Po co pobierasz i od usera skoro nic z nim nie robisz? Po co tyle razy sprawdzasz czy liczba jest doskonała? Dlaczego za ilość liczb doskonałych bierzesz wartość logiczną? Czy pętla ma kończyć sę w momencie w którym wczytasz pierwszą doskonałą?

1 odpowiedź

0 głosów
odpowiedź 22 października 2020 przez Whiskey_Taster Pasjonat (15,610 p.)
wybrane 22 października 2020 przez Reshian77
 
Najlepsza

Trochę bez sensu. Po co warunek

while(!czy_doskonala(n))

Jeśli dobrze rozumiem, chcesz sprawdzić każdą z podanych liczb. Jednakże Ty sprawdzasz w warunku, czy liczba, która już została sprawdzona jest doskonała. I jeśli nie jest, to kontynuujesz. Ale jeśli jest doskonała, to wychodzisz z pętli nie dając nawet możliwości sprawdzenia innych liczb. Ponadto w Twoim programie można wpisywać tyle liczb, ile się chce, o ile nie są doskonałe. 
Ja bym zamienił to na: 
 

while(i > 0) // lub po prostu na while(i)
{
Twoje instrukcje;
i--;
}

W dodatku widzę, że na koniec podajesz ilość liczb doskonałych odwołując się do funkcji sprawdzającej, czy podana liczba jest doskonała. To nie ma najmniejszego sensu. 
Zainicjalizuj zmienną odpowiadającą za trzymanie informacji o ilości liczb doskonałych i pod koniec ją wyświetl. 

komentarz 22 października 2020 przez Reshian77 Nowicjusz (150 p.)

Jednakże Ty sprawdzasz w warunku, czy liczba, która już została sprawdzona jest doskonała. I jeśli nie jest, to kontynuujesz.

Właśnie o to chodzi w tym programie. I ma to się zapętlać. Dajmy na to, że chcę, żeby mi wyświetliło 3 liczby, które są doskonałe. Określam, że chcę trzy liczby. Wpiszę dwie, które są doskonałe i jedną, która nie jest. Powinno mi się to wtedy zapętlić do momentu, aż nie wpiszę kolejnej liczby doskonałej i wtedy program powinien zakończyć działanie.

1
komentarz 22 października 2020 przez Whiskey_Taster Pasjonat (15,610 p.)

Okej, nie doczytałem. Tylko w takim razie po co wypisywać na koniec ile liczb doskonałych wpisał użytkownik, skoro już na początku podajemy ile ich chcemy? 
Jeśli chcesz powiedzmy dokładnie 'i' liczb doskonałych, to wystarczy zmienną 'i' zmniejszać w tym if'ie, w którym wypisujesz, że liczba jest doskonała. 

while(i > 0)
{
coś tam coś tam;
if(czy_doskonala(n))
{
    cout<<"Liczba "<<n<<" jest doskonala.\n";
    i--;
}
coś tam coś tam
}

Wtedy tak jakby będziemy odhaczać ile tych liczb doskonałych już otrzymaliśmy. 

komentarz 22 października 2020 przez Reshian77 Nowicjusz (150 p.)
Dzięki wielkie. W końcu zadziałało.

Podobne pytania

0 głosów
2 odpowiedzi 229 wizyt
pytanie zadane 28 listopada 2019 w C i C++ przez Mała Mi Początkujący (270 p.)
+1 głos
2 odpowiedzi 172 wizyt
pytanie zadane 29 stycznia 2021 w C i C++ przez Irish Nowicjusz (130 p.)
0 głosów
4 odpowiedzi 667 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...