Liczby parzyste (while)

0

Cześć
Mam taki kod:

 #include <iostream>

using namespace std;

int main()
{
    int i,g;

    cin >> g;
    i = 1;

    while(i <= g) cout << i++;

    cout << endl;
    return 0;
} 

Jego w miarę rozumiem, wiem co on robi i czemu. I teraz chciał bym go przerobić na coś co wyświetla mi liczby tylko parzyste. Szukałem już rozwiązań ale wszystkie zawierały elementy które są dla mnie nie jasne-użyte elementy w kodzie wykraczały za moją ubogą wiedzę. Według poradnika z którego się uczę, mając ten kod i wcześniejsze lekcje za sobą (if, else) powinienem być w stanie to przerobić.
Jeżeli ktoś z bardziej doświadczonych kolegów ma czas to proszę o napisanie takiego kodu na podstawie powyższego.

@EDIT: Zrobiłem coś takiego:

 #include <iostream>

using namespace std;

int main()
{
    unsigned int a,b;

    cin >> b;
    a = 10;
    if (b/2) do a+2; cout << b+2;
    while(a <= b);

    cout << endl;
    return 0;
}

Według mnie powinno działać... A jednak nie działa, czemu?

0

Najprostszy sposób to

 #include <iostream>

using namespace std;

int main()
{
    int i,g;

    cin >> g;
    i = 1;

    while(i <= g)
    {
        i++;
        cout << i++;

    }

    cout << endl;
    return 0;
}

możesz też skorzystać z % podaje on "resztę z dzielenia" jeśli wiec liczba%2==0, to jest parzysta (bo dzieli się przez 2 bez części ułamkowej)

0
sig napisał(a):

Najprostszy sposób to


#include <iostream>

using namespace std;

int main()
{
int i,g;

cin >> g;
i = 1;

while(i <= g)
{
    i++;
    cout << i++;

}

cout << endl;
return 0;

}


> 
> możesz też skorzystać z % podaje on "resztę z dzielenia" jeśli wiec liczba%2==0, to jest parzysta (bo dzieli się przez 2 bez części ułamkowej)

Co bym nie wpisał to i tak mi wyskakuje 2. I chodziło mi o coś takiego, żeby pokazywało 10 kolejnych parzystych liczb...
0
rubesom napisał(a):

A jednak nie działa, czemu?

Bo ten kod nie ma sensu. Nie mówiąc o tym, że masz tam nieskończoną pętlę.

0
 #include <iostream>

using namespace std;

int main()
{
    int i,g;

    cin >> g;
    i = 100;

    while(g <= i)
    {

        g++;
        cout << g++;

    }

    cout << endl;
    return 0;
} 

Ten działa tylko, że ma problem z 2. A jak napisać z elementem %?

0

Grypa.. najprościej będzie


 #include <iostream>

using namespace std;

int main()
{
    int maks=0,minim=1; //ważne, zawsze nadawaj zmiennym początkowe wartości bo inaczej mogą byc w nich "losowe" liczby, więc jeśli przez pomyłkę nic tam nie wczytasz program będzie dawał błędne wyniki

    cin >> maks;
    if (minim%2==1) minim++; //jeśli min jest nieparzyste, zwiększ je o jeden
    for (int i=minim;i<=maks;i=i+2) cout << i << " "; // od i równego minim dopóki i jest mniejsze lub równe maks, dodawaj do i 2 a potem wyśwtietl i oraz spację coby liczby na siebie nie nachodziły

}
0
 #include <iostream>

using namespace std;

int main()
{
    int i,g;

    cin >> g;
    i = 100;

    while(g <= i)
    {
        if (g%2==0) cout << g++;    
        g++;
        cout << g++;

    }

    cout << endl;
    return 0;
} 

To działa ale potrzebuje wyjaśnienia, bo nie na efekcie mi zależy a bardziej na zrozumieniu. g++ powoduje, że do podanej liczby zostanie dodana wartość 1, w tym kodzie jest użyte 3 razy g++ (linijka przy ifie, pod ifem, i przy cout). Podając liczbę np. 2 program doda 3 razy 1? A może to g++ napisane przy cout mówi, że ma tylko coś wyświetlić i nie jest brane pod uwagę jako dodanie wartości do g, ponieważ 2+3=5, a program mi wypisuje od dwójki? Bardzo proszę o wyjaśnienie tej kwestii i sorki za zaniżanie wiedzy na forum.

0

lub tak:

#include <iostream>

using namespace std;

int main()
  {
   int g; 
   cin>>g;
   g>>=1; 
   for(i=1;i<g;++i) cout<<(i<<1)<<' ';
   cout<<endl;
   return 0;
  }
0
rubesom napisał(a):

To działa ale potrzebuje wyjaśnienia, bo nie na efekcie mi zależy a bardziej na zrozumieniu. g++ powoduje, że do podanej liczby zostanie dodana wartość 1, w tym kodzie jest użyte 3 razy g++ (linijka przy ifie, pod ifem, i przy cout). Podając liczbę np. 2 program doda 3 razy 1? A może to g++ napisane przy cout mówi, że ma tylko coś wyświetlić i nie jest brane pod uwagę jako dodanie wartości do g, ponieważ 2+3=5, a program mi wypisuje od dwójki? Bardzo proszę o wyjaśnienie tej kwestii i sorki za zaniżanie wiedzy na forum.

i++ w couta-ch są dodawane po wyświetleniu liczby, ze względu na kolejność wykonywania działań ( od lewej do prawej). Gdyby miał najpierw dodać a potem wyświetlać zamień oba na ++i (wtedy najpierw się doda, a potem wyświetli, Swoją drogą nie za duża tych i++?
Tak więc doda 1 3 razy, ale 2 razy po wyświetleniu liczby, wiec zwiększenie zobaczysz do dopiero jak następny raz ją wyświetlisz.

edit: zawsze dodawaj jakiś separator po wyświetleniu czegoś, z wyjątkiem szczególnych sytuacji kiedy robisz "sklejankę" z wartośći. Aczkolwiek to sytuacja tak rzadkie że nawykiem powinien być separator a nie jego brak.

edit2: nie nie działa dobrze, przy nieparzystym wyświetla też wartość o jeden większą od niego.

editowy ps linijka if (g%2==0) cout << g++ << " "; nigdy się nie wykona

1

Prosze:

#include <iostream>

int
main(int, char**) {

    int min, max;
    std::cin >> min >> max;
    for(int i = min; i < max; ++i)
        if(i % 2 == 0)
            std::cout << i << " ";

    return 0;
}

Po kolei:

int min, max;

Definicja dwoch zmiennych, poczatek i koniec zakresu.

std::cin >> min >> max;

Pobranie wartosci z wejscia konsoli i przypisanie jej zmiennym min, max. Wartosci te w czasie podawania musza byc oddzielone spacja. Potwierdza sie enterem.

for(int i = min; i < max; ++i)

Petla for:

  • definiuje zmienna lokalna i z wartoscia poczatkowa rowna wartosci min.
  • przed kazdym obiegu sprawdza czy warunek i < max jest spelniony, jesli tak wykonuje sie cialo petli.
  • po kazdym obiegu zwieksza wartosc zmiennej i o 1. Preinkrementacja.

Cialo petli:

if(i % 2 == 0)

Wykonanie dzialania i % 2 i porownanie wyniku z zerem. Dzialanie to zwraca reszte z dzielenia liczby pierwszej przez liczbe druga. Jesli liczba dzieli sie bez reszty zwraca zero. Co tez jest wynikiem pozadanym poniewaz szukamy liczb parzystych.

Cialo instrukcji warunkowej:

std::cout << i << " ";

Wyswietlenie zmiennej i oraz separatora w postaci spacji.

Przedrostki "std::" wystepuja ze wzgledu na obecnosc przestrzeni nazw w C++. std - nazwa przestrzeni, :: - operator zasiegu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0