Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Tłumaczenie: mgr Jerzy Wałaszek

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

Rozdział 13

Warunki

i wyrażenia logiczne
AND, OR, NOT

SPIS TREŚCI

Rozdział 13: Warunki

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

 
  1. AND, OR i NOT są również operacjami o wartościach liczbowych.

         x AND y ma wartość

    obrazek

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

    obrazek

    1 (prawda), jeśli y jest prawdziwe (różne od 0)

    x, jeśli y jest fałszywe (zero)

         NOT x ma wartość

    obrazek

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

obrazek

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

  1. 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
Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2021 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.