Dzień Dobry,
Czy mógłby mi ktoś rozłożyć na czynniki pierwsze poniższy kod?
for (int m = 0; m < 3; ++m)
cout << m % 2 ? m : m + 2;
Dzień Dobry,
Czy mógłby mi ktoś rozłożyć na czynniki pierwsze poniższy kod?
for (int m = 0; m < 3; ++m)
cout << m % 2 ? m : m + 2;
Co konkretnie sprawia problem?
nie rozumiem dlaczego na wyjściu pojawia się 010 a nie 014.
A może std::cout << (m % 2 ? m : m + 2);
?
Nieposkromiony Lew napisał(a):
nie rozumiem dlaczego na wyjściu pojawia się 010 a nie 014.
<@KrzaQ> cxx --precedence cout << m % 2 ? m : m + 2
<+cxx> (cout << (m % 2)) ? m : (m + 2)
Czyli mam rozumieć że cout wypisze m%2 a nie wartość całego wyrażenia?
dlaczego tak się dzieje?
Bo takie są reguły języka. Jak kolejność wykonania Ci nie pasuje, to zrób tak jak polecił @pingwindyktator.
Ok, jednak to co napisał @pingwindyktator daje wyjście 214 a nie powinno przypadkiem dawać 014?
Nie, dlaczego?
for (int m = 0; m < 3; ++m)
std::cout << (m % 2 ? m : m + 2);
Przy pierwszym obrocie pętli m ma wartość 0, m%2 ma wartość 2 więc wyrażenie (m % 2 ? m : m + 2) powinno mieć wartość m czyli 0,
Przy drugim obrocie pętli m ma wartość 1, m%2 ma wartość 2 więc wyrażenie (m % 2 ? m : m + 2) powinno mieć wartość m czyli 1,
Przy trzecim obrocie pętli m ma wartość 2, m%2 ma wartość 0 więc wyrażenie (m % 2 ? m : m + 2) powinno mieć wartość m+2 czyli 4,
czyli zgodnie z powyższym wyjście powinno być 014 a nie 214.
m ma wartość 0, m%2 ma wartość 2
Nie, m%2
ma wartość 0
m ma wartość 1, m%2 ma wartość 2
Nie, m%2
ma wartość 1
m ma wartość 2, m%2 ma wartość 0
Tak.
@Nieposkromiony Lew: jeśli masz problem z rozgryzieniem tej konstrukcji to przerób ją sobie na podstawowe warunki, ew. dodaj kilka zmiennych lokalnych i sprawdź pod debuggerem co i jak się wykonuje, podglądając wartości tych dodatkowych zmiennych.
Ok, rozumiem, błędnie interpretowałem operator modulo.
dziękuję za pomoc :)
kq napisał(a):
m ma wartość 0, m%2 ma wartość 2
Nie,
m%2
ma wartość 0m ma wartość 1, m%2 ma wartość 2
Nie,
m%2
ma wartość 1m ma wartość 2, m%2 ma wartość 0
Tak.