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

question-closed Co jest nie tak w tym kodzie?

Object Storage Arubacloud
0 głosów
277 wizyt
pytanie zadane 11 września 2018 w C i C++ przez peropero Nowicjusz (170 p.)
zamknięte 11 września 2018 przez peropero

Witam, mam problem ze zrobieniem programu który został przedstawiony w algorytmie krokowym. Po wprowadzeniu n nic się nie dzieje.

Krok 0: wczytaj N

Krok 1: wyn := 0; d := 2;

Krok 2: Dopóki d ≤ (N div 2) wykonuj kroki 2.1 i 2.2;

Krok 2.1: Jeżeli N mod d = 0, to wyn := wyn +1;

Krok 2.2: d := d + 1;

Krok 3: wypisz na ekranie wyn

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int wyn, d, n;
    
    cout<<"Podaj wartość N= ";
    cin>>n;
    
    wyn=0;
    d=2;

    do
    {
    	if(n%d==0)
		{
      		wyn=wyn++;
        }
	d=d++;
	}
    while(d<=n/2);
    
    cout<<"wyn= "<<wyn;
	cout<<endl<<"d= "<<d<<endl;

    system("PAUSE");
    return EXIT_SUCCESS;
}

 

komentarz zamknięcia: Otrzymanie rozwiązania

2 odpowiedzi

+1 głos
odpowiedź 11 września 2018 przez draghan VIP (106,230 p.)
wybrane 11 września 2018 przez peropero
 
Najlepsza
d=d++;

Tutaj masz ciekawą konstrukcję, która uniemożliwia opuszczenie pętli.

Masz tutaj zastosowane dwa operatory - operator przypisania i operator postinkrementacji. Najpierw wykona się ten drugi - czyli zostanie zwiększona wartość 'd' o jeden, po czym zostanie zwrócona wartość sprzed inkrementacji (tak właśnie działa postinkrementacja).

Następnie zadziała operator przypisania i wartość sprzed inkrementacji, zwrócona z operatora ++, zostanie przypisana do zmiennej 'd'.

Jeśli pozbędziesz się operatora przypisania, pętla ruszy z miejsca. :)

komentarz 11 września 2018 przez peropero Nowicjusz (170 p.)
Dziękuję.
komentarz 12 września 2018 przez mokrowski Mędrzec (155,460 p.)

@draghan, poza tym wynik działania jest niezdefiniowany ze względu na punkt sekwencyjny: https://en.wikipedia.org/wiki/Sequence_point

komentarz 16 września 2018 przez draghan VIP (106,230 p.)

W C++17 wyrażenie jest 'well defined' [paragraf "Rules", punkt 20].

(tutaj kolega pisze, że C++11 [wzwyż] nie definiuje punktów sekwencyjnych)

komentarz 16 września 2018 przez mokrowski Mędrzec (155,460 p.)
Ok.. spoko...
+1 głos
odpowiedź 11 września 2018 przez criss Mędrzec (172,590 p.)

Niepotrzebnie użyłeś do..while zamiast while.
Druga sprawa:
 

d=d++;

Wiesz co tutaj robisz? Równie dobrze mógłbyś napisać `d=d;`. d++ zwiększa wartość `d` o 1, ale wynikiem wyrażenia d++ jest pierwotna wartość d. Zatem przypisujesz wartość d do d. Samo d++ lub ++d zrobi to co chcesz. To samo w linii 20. Nie jestem nawet pewien czy to co teraz robisz nie jest UB.

"Nic się nie dzieje", bo wpadasz w nieskończoną pętlę.

komentarz 11 września 2018 przez peropero Nowicjusz (170 p.)
Dziękuję.

Podobne pytania

0 głosów
2 odpowiedzi 395 wizyt
pytanie zadane 12 stycznia 2017 w C i C++ przez BinaryMan Stary wyjadacz (12,620 p.)
0 głosów
1 odpowiedź 457 wizyt
pytanie zadane 28 listopada 2016 w C i C++ przez ChiriChiri Obywatel (1,260 p.)
0 głosów
2 odpowiedzi 284 wizyt
pytanie zadane 18 stycznia 2016 w C i C++ przez huher Nowicjusz (120 p.)

92,573 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 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!

...