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ą.
Sprawdzaj parzystość liczby, po której iterujesz i w zależności od tego czy jest parzysta czy nie - mnóż przez 1
lub -1
Co drugą iterację mnóż przez -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.
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
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;
}
W miarę.
- Nie przypisuj
i
wewnątrz pętli - użyj typu
int
dlai
i dopiero potem przemnażaj
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;
}
Punkt 2. wyżej. i
niech będzie typu int
(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
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;
}
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;
}