Podsumowanie
DIM,
OR
NOT
W rozdziale 3 zobaczyliśmy, że polecenie IF
przyjmuje postać:
IF warunek THEN ...
Warunkami były tam relacje (=, <, >, <=, >= i <>),
które porównują dwie liczby lub dwa łańcuchy. Za pomocą operacji logicznych
AND,
OR i NOT można te porównania łączyć ze sobą.
Jedno porównanie AND inne porównanie jest prawdziwe tylko wtedy, gdy
oba te porównania są prawdziwe, zatem możliwy jest poniższy wiersz:
IF a$="tak" AND x>0 THEN PRINT x
w którym x zostanie wydrukowane tylko wtedy, gdy jednocześnie
a$="tak" i x>0. Przy pomocy AND można połączyć ze
sobą wiele porównań, a całość będzie prawdziwa, jeśli prawdziwe jest każde z
nich.
Jedno porównanie OR inne porównanie jest prawdziwe, gdy przynajmniej
jedno z tych porównań jest prawdziwe (pamiętaj, że całość jest
również prawdziwa, gdy oba z tych porównań będą jednocześnie prawdziwe).
NOT odwraca wszystko do góry nogami. NOT porównanie jest
prawdziwe tylko wtedy, gdy samo porównanie jest fałszywe, a fałszywe, gdy
porównanie jest prawdziwe!
Wyrażenia logiczne mogą być tworzone warunków i AND, OR
oraz NOT tak samo, jak wyrażenia liczbowe tworzy się z liczb i
+,
- itd.; możesz nawet w razie potrzeby umieszczać je w nawiasach.
Posiadają one priorytety w taki sam sposób jak operacje +,
-, *, / i ↑: OR ma najniższy
priorytet, następnie AND, potem NOT, dalej relacje i zwykłe
operacje.
NOT jest w rzeczywistości funkcją posiadającą argument oraz wynik,
lecz jej priorytet jest dużo niższy od priorytetów innych funkcji. Dlatego jej
argument nie potrzebuje nawiasów, o ile nie zawiera
AND lub OR (albo obu). NOT a=b
oznacza to samo co
NOT(a=b) (i oczywiście to samo co a<>b).
<> jest negacją = w takim sensie, że jest tylko wtedy
prawdziwe, gdy = jest fałszywe i na odwrót. Innymi słowy:
a<>b jest tym samym co NOT a=b
a również:
NOT a<>b jest tym samym co a=b
Przekonaj się, że >= i <= są odpowiednio negacjami <
i >: w ten sposób zawsze możesz pozbyć się NOT z początku
relacji przez jej zmianę.
Również:
NOT(pierwsze wyrażenie AND drugie wyrażenie)
jest tym samym, co:
NOT(pierwsze wyrażenie) OR NOT(drugie wyrażenie)
oraz:
NOT(pierwsze wyrażenie OR drugie wyrażenie)
jest tym samym, co:
NOT(pierwsze wyrażenie) AND NOT(drugie wyrażenie)
Są to tzw. prawa De Morgana. Używając ich można przemieścić NOT
przed wyrażenia, a następnie pozbyć się ich przez odpowiednią zmianę
relacji. Mówiąc językiem logiki, NOT jest zbędne, chociaż użycie tej
funkcji wciąż może upraszczać program.
Następna część rozdziału jest dosyć skomplikowana i strachliwi mogą ją sobie
darować!
Wypróbuj:
PRINT 1=2,1<>2
gdzie mógłbyś oczekiwać, że powstanie błąd składni. W rzeczywistości, jeśli
chodzi o komputer, to nie istnieje coś takiego jak wartość logiczna: zamiast
niej wykorzystywane są zwykłe liczby podlegające kilku regułom.
(I) =, <, >, <=, >= i <>
dają wynik liczbowy: 1 dla prawdy, 0 dla fałszu. Stąd powyższy
rozkaz PRINT wyświetlił 0 dla '1=2', co jest fałszem, i 1 dla
'1<>2', co jest prawdą.
(II) W poleceniu
IF warunek THEN ...
warunek może właściwie być dowolnym wyrażeniem liczbowym.
Jeśli jego wartość wynosi 0, to zostaje potraktowany jak fałsz, a
jeśli jest to jakakolwiek inna wartość
(łącznie z wartością 1, którą dałaby
prawdziwa relacja), to zostanie potraktowana jako prawda.
Stąd polecenie
IF naprawdę znaczy tyle co
IF warunek <> 0 THEN ...
(III)
AND,
OR i
NOT są również operacjami o wartościach liczbowych.
|
x
AND y ma wartość |
 |
x, jeśli y jest prawdziwe
(różne od 0) |
|
0
(fałsz), jeśli y jest fałszywe
(zero) |
|
x
OR y ma wartość |
 |
1
(prawda), jeśli y jest
prawdziwe
(różne od 0) |
|
x, jeśli y jest fałszywe
(zero) |
|
NOT x ma wartość |
 |
0
(fałsz), jeśli x jest prawdziwe
(różne od 0) |
|
1
(prawda), jeśli x jest fałszywe
(zero) |
(Zwróć uwagę, że 'prawda' znaczy 'nie zero' przy
sprawdzaniu danej wartości, lecz oznacza '1', gdy tworzymy nową wartość.)
W świetle tego objawienia przeczytaj ten rozdział jeszcze raz od początku i
upewnij się, że wszystko działa tak, jak powinno.
W wyrażeniach x AND y, x OR y i NOT x dane x
i y zwykle przyjmą wartości 0 i 1 dla fałszu i prawdy.
Przerób dziesięć różnych kombinacji (cztery dla AND,
cztery dla OR i dwie dla NOT) dla tych danych i sprawdź,
czy otrzymujesz takie wyniki, jak sugeruje ci ten rozdział.
Wypróbuj ten program:
10 INPUT a 20 INPUT b 30 PRINT (a AND a>=b)+(b
AND a<b) 40 GO TO 10 |
Za każdym razem wypisuje on większą z dwóch liczb a i b.
Przekonaj się, że potrafisz myśleć o:
x AND y
w znaczeniu:
x jeśli y (inaczej
wynikiem jest 0)
a o:
x OR y
w znaczeniu:
x o ile nie y (w którym
to przypadku wynikiem jest 1)
Wyrażenie używające w ten sposób AND i OR jest zwane
wyrażeniem warunkowym. Przykładem z OR mogłoby być:
LET cena=cena bez podatku*(1.22 OR v$="bez podatku")
Zwróć uwagę, że AND nadaje się do dodawania
(ponieważ standardowa wartość wynosi 0), a
OR nadaje się do mnożenia (ponieważ standardowa wartość
wynosi 1).
Możesz również otrzymać łańcuchowe wyrażenia warunkowe, lecz jedynie przy
użyciu AND.
| x$ AND y ma wartość |
 |
x$, jeśli
y jest różne od 0 |
|
"", jeśli
y jest równe zero |
zatem oznacza to x$ jeśli y (inaczej pusty
łańcuch).
Wypróbuj następujący program, który wczytuje dwa łańcuchy i wypisuje je w
kolejności alfabetycznej.
10 INPUT "wpisz dwa lancuchy"'a$,b$ 20 IF a$>b$
THEN LET c$=a$: LET a$=b$: LET b$=c$ 30 PRINT a$;" ";("<" AND
a$<b$)+("=" AND a$=b$);" ";b$ 40 GO TO 10 |
Ćwiczenie
BASIC czasami może działać inaczej od angielskiego. Rozważ przykładowo
zdanie angielskie 'if a doesn't equal b or c' (jeśli a nie
jest równe b lub c). Jak zapisałbyś to w języku BASIC? Odpowiedzią
nie jest
IF A<>B OR C
ani
IF A<>B OR A<>C