Odczytywanie danych z pliku - Znajdowanie błędów
Wyrażenia logiczne (operatory relacji) | Konstruowanie wyrażeń logicznych (operatory logiczne)
Wyrażenia logiczne
>Wyrażenia logiczne (operatory relacji)
Oprócz wyrażeń arytmetycznych wykorzystujących operatory arytmetyczne, Visual Basic daje możliwość konstruowania wyrażeń logicznych, zaczynając od prostych porównań, a kończąc na sprawdzeniu spełnienia skomplikowanych warunków, wykorzystując w tym celu operatory relacji i logiczne.
Visual Basic wyróżnia pełny zestaw operatorów relacji. Należą do ich:
- operator równa się "="
- operator nie równa się "<>"
- operator mniejsze niż "<"
- operator większe niż ">"
- operator mniejsze niż lub równe "<="
- operator większe niż lub równe ">="
Operatory relacji mogą działać na wszystkich typach danych, jednak najczęście odnioszą się do danych numerycznych oraz łańcuchowych. Porównanie danych numerycznych nie powinno budzić zastrzeżeń, ponieważ operacje wykonywane są w sposób naturalny. W przypadku łańcuchów wartość każdej litery w łańcuchu odnosi się do jej pozycji w alfabecie. Oznacza to, że litera "A" jest mniejsza od litery "B", ta zaś od "C", itd. Wszystkie małe litery mają większą wartość niż ich duże odpowiedniki. Ponadto porównanie łańcuchów następuje kolejno, litera po literze zaczynając od lewej strony do prawej. Oznacza to, że "Basia" jest większa od "Asi".
Wynikiem operacji relacji (czyli porównania) jest wartość logiczna True (prawda) lub False (fałsz).
>Konstruowanie wyrażeń logicznych (operatory logiczne)
Zarówno operacje relacji, jak również stałe i/lub zmienne logiczne (typu logical) mogą być wykorzystane do konstruowania wyrażeń logicznych. Visual Basic posiada następujące operatory logiczne, których używa się w wyrażeniach logicznych:
- and - koniunkcja,
- or - alternatywa,
- xor - alternatywa wyłączna,
- not - negacja.
Wyrażenia z operatorem koniunkcji and jest prawdziwe, gdy oba operandy (czyli
wyrażenia stojące po każdej stronie operatora and) są prawdziwe. Na przykład wyrażenie:
(5 < 3*2) and ("Lech" > "Adam")
jest prawdziwe ponieważ oba wyrażenia relacji są prawdziwe. Zatem wartość tego wyrażenia
logicznego wynosi True.
Wyrażenia z operatorem alternatywy or jest prawdziwe jeśli co najmniej jeden z
operandów jest prawdziwy. Możliwe jest również, że obydwa operandy są prawdziwe. Na przykład
następujące wyrażenie:
( 5 <> 3*2) or ("Lech" = "Adam")
jest prawdziwe, gdyż wyrażenie po lewej stronie operatora or jest prawdziwe.
Zatem wartość tego wyrażenia logicznego wynosi True
Wyrażenia z operatorem wyłącznej alternatywy xor jest prawdziwe, gdy dokładnie jeden
(i tylko jeden) z operandów stojącyhc po obu stronach operatora jest prawdziwy. Wyrażenie:
(5 <> 3*2) xor ("Lech" = "Adam")
jest prawdziwe, gdzyż jedynie operand stojący po lewej stronie operatora xor jest
prawdą, zaś ten stojący po prawej stronie jest jest fałszywy.
I na zakończenie wyrażenie z operatorem negacji not jest prawdziwe, gdy operand
stojący z prawej strony operatora not jest fałszywy (zauważmy, że operator
not jest operatorem jednoargumentowym, w przeciwieństwie do pozostałych operatorów
logicznych, które wymagają dwóch argumentów). Na przykład wyrażenie:
not(2+2=5)
jest prawdziwe, gdyż wyrażenie relacji 2+2=5 jest fałszywe.
Wykorzystując operatory logiczne oraz operatory relacji można budować skomplikowane wyrażenia logiczne.
Przykład 4
Sprawdzić czy podana liczba jest parzysta oraz czy pochodzi z zakresu od 11 do 23 lub jest większa od 50.
Dim liczba As Single
Dim parzy, zakres, wynik As Boolean
Liczba = 27
'nadanie wartości zmiennej liczba lub wczytanie danej
parzy = (liczba mod 2) = 0
'zmienna logiczna parzy przyjmuje wartość wyrażenia
'relacyjnego stojącego po znaku przypisania
zakres=((liczba >=11) and (liczba <=23)) or (liczba > 50)
'zmienna logiczna zakres przyjmuje wartość True
'jeśli wyrażenie po prawej stronie znaku przypisania
'jest prawdziwe
wynik = parzy and zakres
'zmienna logiczna wynik przyjmuje wartość True
'jeśli obie zmienne parzy i zakres są prawdziwe
Uwaga, należy pamiętać, że w powyższym przykładzie w instrukcji
parzy = ((liczba mod 2) = 0)
pierwszy znak równości jest znakiem instrukcji przypisania, natomiast drugi znak równości jest
operatorem relacji równa się. Zewnętrzne nawiasy mogą być pominięte, a zostały użyte
tylko dla jasności zaspisu. (Przypominam, że operacja mod daje w wyniku resztę
z dzielenia. W tym przypadku reszta dzielenia liczby przez 2 może być równa 0 albo 1. Jeśli
się rówana 0 to oznacza, że liczba ta jest parzysta, zatem zmienna parzy przyjmuje
wartość True).
Ćwiczenie 3
Zaprojektować formularz oraz oprogramować go w taki sposób, aby realizował spraedzanie waruków
z przykładu 4.
- Otówrz nowy projetk i na formularzu umieść pole tekstowe o nazwie txt_liczba,
opisane etykietą
Podaj liczbę
oraz dwa przyciski poleceń: Spradź, który będzie uruchamiał procedurę sprawdzania wymaganych warunków oraz przycisk Koniec, kóry będzie zamykał formularz.
Przykładowy formularz może wyglądać następująco:
- Po zaprojektowaniu formularza zaprogramuj obsługę zdarzeń związanych z poszczególnymi kontrolkami. Szybkim sposobem przejścia do okna kodu jest dwukrotne kliknięcie na kontrolkę. Pisząc kod należy pamiętać o deklarowaniu zmiennych i dobrym zwyczaju wmieszczania komentarzy.
- Program pozwalający na wprowadzanie danej oraz sprawdzenia warunków, czy jest to liczba parzysta z zakresu od 11 do 23 lub większa od 50 może mieć następującą postać:
Dim liczba As Integer
'Procedura obsługująca kliknięcie przycisku btn_koniec
Private Sub btn_koniec_Click()
'Usuwa formularz z pamięci
Unload Me
End Sub
'Procedura obsługująca kliknięcie przycisku btn_sprawdź
Private Sub btn_sprawdz_Click()
Dim parzy, zakres, wynik As Boolean
parzy = (liczba Mod 2) = 0
zakres = ((liczba >= 11) And (liczba <= 23)) Or (liczba > 50)
wynik = parzy And zakres
MsgBox (wynik)
End Sub
'Procedura obsługująca zmianę pola tekstowego txt_liczba
Private Sub txt_liczba_Click()
'Pobiera wartość pola tekstowego i zamienia go na typ numeryczny
liczba = Val(txt_liczba.Text)
End Sub
Zwróćmy uwagę na konieczność zadeklarowania zmiennej Liczba w górnej części kodu, co zapewnia, że zmienna ta jest zmienną globalną i jest widziana przez wszystkie procedury występujące w tym oknie kodu. Przy odczytywaniu liczby wprowadzonej do pola tekstowego txt_liczba wykorzystaliśmy funkcję konwersji wyrażeń tekstowych na liczby. Jest to wskazane, gdyż w polu tekstowym wprowadzany jest tekst, nawet jeśli tym tekstem jest liczba.