pętla for, programowanie

0

Mam problem z programowania, może ktoś mnie oświeci..
Jak napisać pętlę
for, która drukuje ciąg wartości typu double postaci:
0.1, -0.2, 0.3, -0.4, 0.5, -0.6,..., -2.0.
Czyli co druga ma być ujemną.

2

Sprawdzaj parzystość liczby, po której iterujesz i w zależności od tego czy jest parzysta czy nie - mnóż przez 1 lub -1

2

Co drugą iterację mnóż przez -1?

1

Jedna zmienna ma wartości

0.1, 0.2, 0.3, ...

Druga ma wartości

1, -1, 1, -1, 1, -1, ...

Wynik to iloczyn tych dwóch zmiennych.

1

Można też tak, chociaż wygląda to średnio i nie jest zbyt szybkie.

for(double i = 0.1; std::abs(i)<2.0; i = (std::abs(i) + 0.1) * sign(i) * -1)
double sign(double i) {
    return i < 0 ? -1 : 1;
}

Nie znalazłem gotowej implementacji funkcji sign na cplusplus.com, jak istnieje to można zastąpić. Moja funkcja nie przewiduje wartości 0, bo nie powinna wystąpić.

Edit.
Nie zapomnij zaincludować cmath

0

To jest źle, bo nie kończy mi się pętla
ale czy idę dobrą drogą?

#include <iostream>

using namespace std;

int main()
{
    for(double i=0.0; i<=2.1; i+=0.1)
        {
        if ((int)i%2==0)
        {
            i*=(-1);
        }
        else i=i;

        cout<<i<<endl;

        }
    return 0;
} 
3

W miarę.

  1. Nie przypisuj i wewnątrz pętli
  2. użyj typu int dla i i dopiero potem przemnażaj
0

Bardzo proszę o komentarz z wytłumaczeniem krok po kroku co i jak źle robię.
Początki są trudne więc proszę o wyrozumiałość

 #include <iostream>
#include <cmath>

using namespace std;

int main()
{
    for(double i=0.1; i<=2.1; i+=0.1)
        {

        if ((int)i%2==0){
        cout<<i*(-1)<<endl;
        }
        else cout<<i<<endl;

        }
    return 0;
}
2

Punkt 2. wyżej. i niech będzie typu int

1
(int)i % 2

najpierw rzutuje, potem wykonuje modulo, więc

i = 0.1  => dostajesz 0 % 2
i = 0.2 => dostajesz 0 % 2
...
i >= 1 => dostajesz 1 % 2
0

ciąg wartości typu double postaci:
0.1, -0.2, 0.3, -0.4, 0.5, -0.6,..., -2.0.

#include <iostream>
using namespace std;

int main()
{
        for (int i=1; i<=5; i++)
                cout << (i&1 ? i/10.0 : -i/10.0) << ", ";

        cout << "-0.6,..., -2.0." << endl;
}
2

Sam jestem początkujący, ale taki sposób mi przyszedł jako pierwszy do głowy :P
Lekko zmodyfikowany kod autorki

int main()
{
    for(double i=1; i<=20; i++) {
       
        if ((int)i%2==0) {
            cout<<i*(-1)/10 << ", ";
        
        } else 
            cout<<i/10<< ", ";
        }
    return 0;
}

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