pętla for, programowanie

pętla for, programowanie
ZU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 31
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ą.

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
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

axelbest
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 2255
2

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

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
1

Jedna zmienna ma wartości

Kopiuj
0.1, 0.2, 0.3, ...

Druga ma wartości

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

Wynik to iloczyn tych dwóch zmiennych.

Zellus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 474
1

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

Kopiuj
for(double i = 0.1; std::abs(i)<2.0; i = (std::abs(i) + 0.1) * sign(i) * -1)
Kopiuj
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

ZU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 31
0

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

Kopiuj
#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;
} 
kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
3

W miarę.

  1. Nie przypisuj i wewnątrz pętli
  2. użyj typu int dla i i dopiero potem przemnażaj
ZU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 31
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ść

Kopiuj
 #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;
}
kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
2

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

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
1
Kopiuj
(int)i % 2

najpierw rzutuje, potem wykonuje modulo, więc

Kopiuj
i = 0.1  => dostajesz 0 % 2
i = 0.2 => dostajesz 0 % 2
...
i >= 1 => dostajesz 1 % 2
Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
#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;
}
nerdxg
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
2

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

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.