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

Zadanie C++ Problem z zadaniem

Object Storage Arubacloud
0 głosów
253 wizyt
pytanie zadane 23 września 2022 w C i C++ przez Chomiczek06 Nowicjusz (140 p.)

Witam rozwiązuję zadania i na stronie są poprawne odpowiedzi. Tej odpowiedzi nie rozumiem... Najpierw próbuje sam rozwiązać zadanie bez patrzenia w odpowiedz i mi się udało stworzyć program, który działa do zadania, ale jest zupełnie inny niż ten w odpowiedzi. 

 

#include <iostream>

using namespace std;

int main()
{
    int x,y,suma;

    cout<<"Wprowadz x: "<<endl;
    cin>>x;
    cout<<"Wprowadz y: "<<endl;
    cin>>y;

    suma=x+y;
    while (suma%2==1)
    {
        cout<<"wynik jest nieparzysty "<<suma<<endl;
        return 0;
    }



    return 0;
}

Nie rozumiem tego kodu poniżej

  for(x;x<=y;x++)   // dlaczego zamiast int=1; pojawił sie x;, dlaczego x<=y; I dlaczego to jest  w pętli for, skoro while pasuje do tego zadania idealnie ? 

    {

        if(x%2==1)

            suma+=x; // dlaczego tutaj nie ma suma=x+y; , tylko suma+=x; Nie rozumiem :(

    }

    cout <<"wynik= "<< suma;

Jeśli ktoś ma troche cierpliwości i troche wolnego czasu to proszę o wytłumaczenie :) Pozdrawiam

2 odpowiedzi

+1 głos
odpowiedź 23 września 2022 przez Oscar Nałogowiec (29,290 p.)
edycja 23 września 2022 przez Oscar

Zadanie jest  takie: w przedziale <x,y> ( a więc domkniętym) znaleźć wszystkie liczby nieparzyste i zsumować je. Potem wypisać tę sumę. Liczby nieparzyste występują dość regularnie w zbiorze liczba całkowitych, są pewne, dość proste w sumie, metody by znaleźć taką sumę bez przejrzenia wszystkich licz w przedziale, jednak autorzy podali program, który robi wszystko dokładnie tak jak w treści.

W linii 12 zaczyna się pętla od x do y. Ponieważ używana jest zmienna x do ona już jest zainicjowana i nie potrzeba tego robić w pętli. W zasadzie ta pętla mogłaby być zapisana jeszcze prościej/krócej:

for (;x<=y;x++)

Skoro zmienna już instnieje i jest zainicjowana, to typowe podstawienie początkowe jest zbędne. Pamiętaj, że petla

for (A;B;C)

(gdzie A,B i C to dowolne wyrażenia (matematyczne?)) to to samo co kawałek kodu:

A;
while (B)
{
     kod wewnątrz pętli for;
     C;
}

Warunek jest nieostry (<=)  ponieważ przedział ma być domknięty - tj te skrajne wartości (tutaj y) też należą do przedziału. Jaki rodzaj pętli się użyje to w sumie jest kwestia wygody i czytelności. Jak podałem wyżej to jest częściowo wymienne.

W pętli sprawdza się czy kolejna liczba (tutaj x) jest nieparzysta (linia 14) i jeśli tak dodaje się ją do zmiennej suma. Oczywiście jeśli sumujemy jakieś wartości, to zmienna w której sumujemy, powinna być początkowo wyzerowana (zero to tzw niezmiennik dodawania - formalnie to matematyka - chyba teoria grup).

 

Twój kod w sumie żadnej pętli nie zawiera. Ten while tak naprawdę robi za if - albo się wykona jeden raz i od razu robi return albo nic nie zrobi. Poza tym sprawdza praktycznie czy suma x + y jest nieparzysta a nie o to chodzi w zadaniu.

Jednym z kluczowych zagadnień w nauce informatyki jest umięjętność dokładniego rozumienia treści zadań (w potem, w pracy: otrzymanego do wykonania zadania).

+1 głos
odpowiedź 23 września 2022 przez Sławomir Michajlidis Użytkownik (740 p.)

 for(x;x<=y;x++)   // dlaczego zamiast int=1; pojawił sie x;, dlaczego x<=y; I dlaczego to jest  w pętli for, skoro while pasuje do tego zadania idealnie ? 

Zazwyczaj do iteracji tworzymy zmienną 'i', której nadajemy wartość 0 albo 1. Wtedy nasza pętla iteruje od tej wartości,a po zakończeniu pętli przestaje istnieć. W Twoim jednak zadaniu autor sprytnie użył do tego celu zmiennej zadeklarowanej już wcześniej, bo przecież x jest pierwszą wartością z przedziału <x,y>. Równie dobrze mogłoby to wyglądać tak, ale sam pewnie zauważysz, że nie ma sensu się tak powtarzać:

for (int i = x; i <= y; i++)

Wyszłoby tutaj dokładnie na to samo, a można sprytniej - tak jak w rozwiązaniu.

suma+=x; // dlaczego tutaj nie ma suma=x+y; , tylko suma+=x; Nie rozumiem :(

W zadaniu chodzi o sumę wartości z zadanego przedziału. Gdyby przykładowo było to <1,6>, to mamy za zadanie sumować nieparzyste liczby ze zbioru: {1, 2, 3, 4, 5, 6}. W takim przypadku naszym x byłoby 1, a y - 6. Sam pewnie widzisz, że aby rozwiązać to zadanie, program powinien dodać do siebie 1, 3 i 5, a proponowane przez Ciebie "suma = x + y" dałoby zupełnie inny wynik.

Podobne pytania

0 głosów
1 odpowiedź 193 wizyt
pytanie zadane 22 sierpnia 2017 w C i C++ przez poczatkujacy12 Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 247 wizyt
pytanie zadane 16 grudnia 2018 w C i C++ przez kewin_kotowski Nowicjusz (120 p.)
0 głosów
5 odpowiedzi 2,093 wizyt
pytanie zadane 2 listopada 2016 w C i C++ przez Jedyn Obywatel (1,200 p.)

92,556 zapytań

141,404 odpowiedzi

319,563 komentarzy

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

...