if ((a>=b && a<=c) || (digitalRead(INpin) == 0) && (sw == true)) { ... } chciałbym aby funkcja zadziałała jeśli a jest w przedziale pomiędzy b i c, lub odczyt pinu INpin jest równy 0 ale wyłącznie gdy w każdym z tych dwóch przypadków spełniony jest dodatkowy warunek sw == true
@p0mian: nie można łączyć tak operacji logicznych tzn || i && nie powinno byc koło siebie bo jest to błędy i niejednoznaczny zapis. operacje logiczne nie mają wag która jest ważniejsza i powinna zostać wykonana pierwsza. tym bardziej że przy operacji "lub" jeżeli zostaje spełniony pierwszy warunek to kolejne nie są już rozpatrywane
@asciiterror: chodzi o to że w takim wypadku nie rozpatrzy się && gdy pierwszy warunek zostanie spełniony. True or False and False da True bo program sprawdzi że pierwsza część "lub" jest spełniona i nie będzie się nawet zastanawiał co jest dalej
@p0mian: nawiasy mają największy priorytet, tak jak pisałem, to działa bardzo analogicznie do działań w matematyce ale dochodzi jeszcze coś takiego jak "short-circuiting", tzn. w if (function_a() || function_b()) jeżeli function_a zwróci true, to function_b w ogóle nie będzie zawołane.
@p0mian: a z nawiasami powinno być dobrze jeżeli i ja dobrze rozumiem. (True or False) and False da False. czyli sprawdzi czy pierwsze założenie sie zgada ale jeżeli ostatnie jest najważniejsze i bez niego nie powinno się spełnić to zwróci false.
if ((a>=b && a<=c) || (digitalRead(INpin) == 0) && (sw == true)) { ... }
chciałbym aby funkcja zadziałała jeśli a jest w przedziale pomiędzy b i c, lub odczyt pinu INpin jest równy 0 ale wyłącznie gdy w każdym z tych dwóch przypadków spełniony jest dodatkowy warunek sw == true
if ((a>=b && a<=c || digitalRead(INpin) == 0) && (sw == true)) { ... }
||
, bez niego wystarczy że a jest pomiędzy b i c.||
i&&
łączą się trochę tak jak dodawanie i mnożenietak?:
if (((a>=b && a<=c) || (digitalRead(INpin) == 0)) && (sw == true)) { ... }
false && false == false a 0*0=0
false && true == false a 0*1=0
true && true == true a 1*1=1
false || false == false a 0+0=0
false || true == true a 0+1=1
true || true == true a 1+1=1 (mod 2)
digitalRead(INpin)
robi to co chcesz (nie znam arduino)@daczka92: tzn? mają łączność i priorytety jak wszystkie działania
ale dochodzi jeszcze coś takiego jak "short-circuiting", tzn. w
if (function_a() || function_b())
jeżeli function_a zwróci true, to function_b w ogóle nie będzie zawołane.czyli sprawdzi czy pierwsze założenie sie zgada ale jeżeli ostatnie jest najważniejsze i bez niego nie powinno się spełnić to zwróci false.
@daczka92: It's not a bug - it's a feature.
https://en.wikipedia.org/wiki/Short-circuit_evaluation