W instrukcji warunkowej języka JavaScript należy sprawdzić przypadek, gdy wartość zmiennej a jest z przedziału (0, 100), natomiast wartość zmiennej b jest większa od zera. Warunek taki jest prawidłowo zapisany w następujący sposób
if (a>0 && a<100 && b>0)
&&: a większe od 0, a mniejsze od 100 i b większe od 0, wszystkie spełnione jednocześnie.if (a>0 || a<100 || b<0)
|| i odwrócony znak przy zmiennej b. Taki warunek przepuści prawie każde dane.if ((a>0 && a<100) || b<0)
b < 0 ma odwrotny znak, a || sprawia, że wystarczy spełnić tylko jedną połowę warunku.if ((a>0 || a<100) && b>0)
a > 0 || a < 100 jest prawdziwe dla każdej liczby, więc nie ogranicza zmiennej do przedziału (0, 100).Pytanie z egzaminu CKE, czerwiec 2016 (arkusz E.14-X-16.05).
Przedział otwarty (0, 100) oznacza, że zmienna musi być jednocześnie większa od 0 i mniejsza od 100. Oba warunki łączy się operatorem && (i): a > 0 && a < 100. Do tego dochodzi warunek dla drugiej zmiennej, b > 0, który również musi być spełniony, więc i on dołącza przez &&.
Reguła do zapamiętania: „i jednocześnie” to &&, „albo” to ||. Przedział zawsze zapisuje się dwoma porównaniami połączonymi &&, bo zapis matematyczny 0 < a < 100 w JavaScript nie działa: najpierw powstaje true albo false, a to porównane ze 100 daje zawsze true. Przedział domknięty [0, 100] zapisałbyś z >= i <=.
Sednem tego zadania jest operator ||. Warunek a > 0 || a < 100 jest prawdziwy dla każdej liczby, bo dowolna liczba jest większa od zera albo mniejsza od 100. Wartość -500 spełnia drugą część, 500 pierwszą. Taki zapis nie ogranicza zmiennej do przedziału.
Drugi błąd to porównanie b < 0 zamiast b > 0. Treść wymaga, by b było większe od zera, więc znak nierówności musi być skierowany w drugą stronę. Do tego połączenie tej części z resztą przez || sprawia, że wystarczy spełnić jedną połowę warunku, a zadanie wymaga obu naraz.
Sprawdzaj zapis na konkretnych liczbach: dla a = 150 i b = 5 dobry warunek musi dać false. Zapisy z || dadzą wtedy true i to od razu je wyklucza.
Nawiasy wokół części warunku nie zmieniają tu wyniku, decydują operatory. Nawias nie naprawi zapisu z ||.