Serwis Edukacyjny w I-LO w Tarnowie ![]() Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Tłumaczenie: mgr Jerzy Wałaszek |
©2023 mgr Jerzy Wałaszek |
i wyrażenia logiczne
AND, OR, NOT
SPIS TREŚCI |
|
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 samy co:
NOT(pierwsze wyrażenie) OR NOT(drugie wyrażenie) |
oraz:
NOT(pierwsze wyrażenie OR drugie wyrażenie) |
jest tym samy 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ę nich 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) |
|
(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 |
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2023 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.