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ą.
pętla for, programowanie
- Rejestracja: dni
- Ostatnio: dni
- Postów: 31
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Szczecin
Sprawdzaj parzystość liczby, po której iterujesz i w zależności od tego czy jest parzysta czy nie - mnóż przez 1 lub -1
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Warszawa
- Postów: 2255
Co drugą iterację mnóż przez -1?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2500
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.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wrocław
- Postów: 474
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
- Rejestracja: dni
- Ostatnio: dni
- Postów: 31
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;
}
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Szczecin
W miarę.
- Nie przypisuj
iwewnątrz pętli - użyj typu
intdlaii dopiero potem przemnażaj
- Rejestracja: dni
- Ostatnio: dni
- Postów: 31
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;
}
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Szczecin
Punkt 2. wyżej. i niech będzie typu int
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2500
(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
- Rejestracja: dni
- Ostatnio: dni
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;
}