Wyrażenie warunkowe – rozłożenie na czynniki pierwsze

0

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;
0

Co konkretnie sprawia problem?

0

nie rozumiem dlaczego na wyjściu pojawia się 010 a nie 014.

2

A może std::cout << (m % 2 ? m : m + 2);?

1
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)
0

Czyli mam rozumieć że cout wypisze m%2 a nie wartość całego wyrażenia?
dlaczego tak się dzieje?

0

Bo takie są reguły języka. Jak kolejność wykonania Ci nie pasuje, to zrób tak jak polecił @pingwindyktator.

0

Ok, jednak to co napisał @pingwindyktator daje wyjście 214 a nie powinno przypadkiem dawać 014?

0

Nie, dlaczego?

0
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.

2

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.

1

@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.

0

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ść 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.

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