III. Konstrukcje języka Visual Basic 2010 pozwalające
na rozgałęzianie programu
III.1.
Konstrukcja warunkowa
W poprzednich ćwiczeniach wykorzystane zostały zmienne typów łańcuchowych i liczbowych,
a realizowane zadania pozwalały na liniową strukturę programu. „Liniowość” oznacza w tym kontek-
ście fakt, że program, po uruchomieniu aplikacji, wykonywany jest instrukcja po instrukcji. Doświad-
czenie uczy, że działania zazwyczaj zachowują liniowość, aż do momentu gdy trzeba podjąć decyzję
o wyborze jednej z możliwych dróg (sposobów rozwiązania problemu).
Wprowadzenie konstrukcji warunkowej wymaga wcześniejszego zapoznania się z użyciem
zmiennych typu logicznego (
Boolean
) oraz wyrażeń, których wynik jest takiego właśnie typu.
Typ Boolean, zmienne i wyrażenia typu Boolean
Typ
Boolean
zdefiniowany jest w przestrzeni nazw System. Zmienne tego typu mogą przecho-
wywać wyłącznie jedną z dwóch wartości: True (Prawda) albo False (Fałsz). Jeśli programista nie za-
deklaruje wartości początkowej zmiennej typu
Boolean
, to posiada ona domyślnie wartość False.
Kolejne ćwiczenie obrazuje powyższe twierdzenia.
Ćwiczenie 29
Utworzyć projekt wykorzystujący zmienną typu Boolean.
1. Utwórz Projekt_029 aplikacji konsolowej.
2. Zadeklaruj w procedurze Main zmienną WartośćLogiczna typu Boolean.
Przykład.
Dim WartośćLogiczna As Boolean
3. Zaprogramuj:
◦
wyświetlenie w wierszu konsoli informacji o wartości zmiennej WartośćLogiczna,
◦
przypisanie zmiennej WartośćLogiczna wartości True,
◦
ponowne wyświetlenie w wierszu konsoli informacji o wartości zmiennej Warto-
śćLogiczna.
4. Skompiluj projekt i uruchom aplikację.
5. Zapoznaj się z zawartością konsoli i zakończ działanie aplikacji.
Wynik działania aplikacji mógł być podobny do przedstawionego poniżej:
Ze zmiennych typu logicznego można tworzyć wyrażenia przy użyciu operatorów logicznych (są
to jednocześnie słowa kluczowe języka):
Not
– wynikiem działania operatora jest wartość logiczna przeciwna do tej jaką posiada
wyrażenie po prawej stronie operatora.
And
,
AndAlso
– wynikiem działania operatora jest iloczyn logiczny wartości wyrażeń sto-
jących po lewej i po prawej stronie operatora.
Or
,
OrElse
– wynikiem działania operatora jest suma logiczna wartości wyrażeń stoją-
cych po lewej i po prawej stronie operatora.
Xor
– wynikiem działania operatora jest różnica symetryczna (alternatywa rozłączna)
wartości wyrażeń stojących po lewej i po prawej stronie operatora.
Poniżej przedstawiono tabelę wartości logicznych przedstawiających działanie operatorów lo-
gicznych:
Wartości logiczne
wyrażeń
Wartości logiczne wyników operacji
L
P
Not P
L And P
(L AndAlso P)
L Or P
(L OrElse P)
L Xor P
Fałsz
(ang. False)
Fałsz
Prawda
Fałsz
Fałsz
Fałsz
Fałsz
Prawda
(ang. True)
Fałsz
Fałsz
Prawda
Prawda
Prawda
Fałsz
Prawda
Fałsz
Prawda
Prawda
Prawda
Prawda
Fałsz
Prawda
Prawda
Fałsz
Ponieważ wartości wyrażeń L oraz P mogą być wyznaczane na podstawie czasochłonnych obli-
czeń występują wersje
AndAlso
oraz
OrElse
operatorów logicznych, odpowiednio,
And
oraz
Or
.
Dają one taki sam wynik. Jednak w przypadku operatora
AndAlso
, jeżeli wyrażenie stojące po lewej
stronie ma wartość Fałsz, to wartość wyrażenia po prawej stronie nie jest obliczana, gdyż nie może
wpłynąć na wynik. Podobnie w przypadku operatora
OrElse
, jeżeli wyrażenie stojące po lewej stro-
nie ma wartość Prawda, to wartość wyrażenia po prawej stornie nie jest obliczana, gdyż nie może
wpłynąć na wynik. Stosowanie tych „skróconych” operatorów może przynieść skrócenie czasu pracy
aplikacji. Można je jednak stosować tylko wtedy, gdy proces obliczania wyrażenia stojącego po pra-
Rysunek 12: Projekt_029 w czasie działania.
wej stronie operatora nie wpływa w inny sposób na działanie aplikacji. Kolejne ćwiczenie przedstawia
działanie operatorów
Not
,
And
i
Or
.
Ćwiczenie 30
Zapoznać się z działaniem operatorów logicznych.
1. Dodaj przed końcem procedury Main pusty wiersz i zadeklaruj w nim zmienną Warto-
śćLogiczna2 typu Boolean.
2. Zaprogramuj:
◦
przypisanie zmiennej WartośćLogiczna2 wyniku działania operatora Not na zmien-
ną WartośćLogiczna,
Przykład.
WartośćLogiczna2 = Not WartośćLogiczna
◦
wyświetlenie w wierszu konsoli informacji o wartości zmiennej WartośćLogiczna2.
3. Dodaj przed końcem procedury Main pusty wiersz i zadeklaruj w nim zmienną IloczynLo-
giczny typu Boolean.
4. Zaprogramuj:
◦
przypisanie zmiennej IloczynLogiczny wyniku działania operatora And na zmienne
WartośćLogiczna i WartośćLogiczna2,
Przykład.
IloczynLogiczny = WartośćLogiczna And WartośćLogiczna2
◦
wyświetlenie w wierszu konsoli informacji o wartości zmiennej IloczynLogiczny.
5. Dodaj przed końcem procedury Main pusty wiersz i zadeklaruj w nim zmienną SumaLo-
giczna typu Boolean.
6. Zaprogramuj:
◦
przypisanie zmiennej SumaLogiczna wyniku działania operatora Or na zmienne
WartośćLogiczna i WartośćLogiczna2,
Przykład.
SumaLogiczna = WartośćLogiczna Or WartośćLogiczna2
◦
wyświetlenie w wierszu konsoli informacji o wartości zmiennej SumaLogiczna.
7. Skompiluj projekt i uruchom aplikację.
8. Zapoznaj się z zawartością konsoli i zakończ działanie aplikacji.
Konsola może przedstawiać obraz, jak na rysunku poniżej:
Wartości logiczne oblicza się często jako wynik działania operatorów porównania:
=
,
<>
,
<
,
>
,
<=
,
>=
. Wartości logiczne będące wynikiem działania tych operatorów przedstawia poniższa tabela.
Wartości operandów
L
12
P
13
Wyrażenie porównania
Wartość logiczna wyrażenia porównania
L = P
False
L <> P
True
L < P
True
L > P
False
L <= P
True
L >= P
False
Porównywane wyrażenia mogą być wyrażeniami arytmetycznymi.
Przykład.
(intLiczba + 6) >= 13
Jeśli zmienna intLiczba ma wartość większą niż 7 lub równą tej liczbie, to wyrażenie porówna-
nia daje wartość True. W przypadku, gdy wyrażenie zawiera operatory arytmetyczne, logiczne, tek -
stowe i porównania, to wykonywane są one w następującej kolejności (operatory objęte nawiasami
posiadają taki sam priorytet i jeśli występują w jednym wyrażeniu, to wykonywane są w kolejności
występowania w wyrażeniu):
^
, (
*
,
/
),
\
,
Mod
, (
+
,
-
),
&
, operatory porównania,
Not
, (
And
,
AndAlso
),
(
Or
,
OrElse
),
Xor
.
Dodatkowo należy zapamiętać, że znaki + i – mogą wystąpić jako znak liczby, w takim przypad-
ku ich priorytet jest niższy jedynie od operatora potęgowania. Jest to niezwykle istotna uwaga –
w wyniku takiej kolejności wykonywania operatorów wyrażenie -2 ^ 4 daje w wyniku -16. Dzieje się
tak dlatego, że zmiana znaku następuje dopiero po obliczeniu potęgi liczby 2.
Rysunek 13: Wyniki działania operatorów logicznych.
Aby zmienić kolejność wykonywania operatorów należy użyć nawiasów okrągłych.
Przykład.
(-2) ^ 4
W przypadku zilustrowanym przykładem, najpierw zostanie wykonana operacja zmiany znaku
liczby 2, a dopiero wtedy nastąpi potęgowanie. Wynik to 16, co jest poprawne. Nawiasy można wyko-
rzystywać nawet w przypadku, gdy kolejność działań wynikająca z priorytetu operatorów i z logiki za-
dania jest identyczna. Nie wpływa to w żaden sposób na wydłużenie czasu obliczeń. Jeśli nawiasy
mogą poprawić czytelność kodu źródłowego, to wydaje się, że ich zastosowanie jest wskazane.
W kolejnym ćwiczeniu wykorzystane zostaną operatory arytmetyczne i porównania do sprawdzenia
wartości logicznej wyrażenia:
−
7
4
−
4
3
3
16
2
2
−
3
4
2
3
Ćwiczenie 31
Sprawdzić jaką wartość logiczną ma wyrażenie porównania przedstawione przed
nagłówkiem ćwiczenia.
1. Dodaj pusty wiersz przed końcem procedury Main modułu Module1 projektu Projekt_029
i umieść w nim kursor tekstowy.
2. Zadeklaruj zmienną blnPrawdziwośćWyrażenia typu Boolean.
3. Zaprogramuj obliczenie wartości blnPrawdziwośćWyrażenia, postaraj się użyć najmniej-
szej z możliwych liczby nawiasów.
4. Zaprogramuj wyświetlenie wartości zmiennej blnPrawdziwośćWyrażenia.
5. Skompiluj projekt i uruchom działanie aplikacji.
6. Zapoznaj się z zawartością konsoli i zakończ działanie aplikacji.
Sprawdzenie otrzymanej wartości pozostawia się ćwiczącym jako samodzielne zadanie.
Najprostsza postać konstrukcji warunkowej
Aplikacja Projekt_029 wyświetla wprawdzie wartość wyrażenia warunkowego, ale na tym koń-
czy się jej „logiczne” działanie. Załóżmy, że aplikacja może być wykorzystana tylko przez osobę
o określonym imieniu. „Grzeczne” działanie aplikacji polegać będzie na pobraniu od użytkownika
imienia i jeśli jest to imię niezgodne z wymaganym, aplikacja zakończy działanie, a w przeciwnym
wypadku wyświetli komunikat powitalny. Posłuży do tego celu najprostsza postać konstrukcji warun-
kowej pozwalająca wykonać jedną instrukcję, której wykonanie zależy od pewnego warunku:
If WyrażenieLogiczne Then Instrukcja
Logika tej konstrukcji jest następująca. Instrukcja zostanie wykonana tylko wtedy, gdy Wyraże-
nieLogiczne ma wartość True.
Wykonanie aplikacji kończy się wraz z zakończeniem procedury Main. Język Visual Basic 2010
zawiera słowo kluczowe
Exit
. Słowo to, pozwala zakończyć działanie pewnej grupy instrukcji, zwa-
nej blokiem. Aby wskazać, o który blok chodzi jego typ umieszcza się po słowie
Exit
. Przykładowo,
instrukcja
Exit Sub
powoduje przerwanie działania procedury. Kolejne ćwiczenie pokazuje w jaki
sposób zaprojektować aplikację spełniającą opisane wcześniej warunki.
Ćwiczenie 32
Zaprojektować aplikację, która sprawdza czy użytkownik ma prawo do jej użytkowania.
1. Utwórz nowy Projekt_032 aplikacji konsolowej.
2. Zadeklaruj w procedurze Main stałą strDobreImię typu String o wartości początkowej bę-
dącej łańcuchem znaków składających się na Twoje imię.
Przykład.
Const strDobreImię As String = "Krzysztof"
3. Zadeklaruj zmienną strImię typu String.
4. Zaprogramuj pobranie od użytkownika jego imienia i zapamiętanie go w zmiennej strImię
(patrz: ćwiczenie 28).
5. Zaprogramuj użycie konstrukcji warunkowej do przerwania pracy procedury Main w przy-
padku, gdy wartość zmiennej strImię nie jest równa wartości stałej strDobreImię.
Przykład.
If strImię <> strDobreImię Then Exit Sub
6. Zaprogramuj wyświetlenie w konsoli powitania użytkownika o imieniu strImię.
7. Skompiluj projekt i uruchom aplikację kilkakrotnie, podając różne imiona, w tym przynaj -
mniej raz to, które jest zapisane w stałej strDobreImię.
Przyjrzyjmy się przykładowemu kodowi źródłowemu procedury Main:
Sub Main()
Const strDobreImię As String = "Krzysztof"
Dim strImię As String
Console.Write("Podaj swoje imię: ")
strImię = Console.ReadLine()
If strImię <> strDobreImię Then Exit Sub
Console.WriteLine("Witaj {0}", strImię)
End Sub
Procedura Main zamknięta jest parą
Sub
…
End Sub
. Instrukcje występujące pomiędzy tymi
wierszami to blok (ciało) procedury. Po uruchomieniu aplikacji startuje wykonanie procedury Main.
Tworzona jest stała strDobreImię oraz zmienna strImię. W konsoli pojawia się tekst zachęty. Program
pobiera tekst wprowadzony przez użytkownika i zapamiętuje go w zmiennej strImię. Program działa
liniowo. W tym miejscu programista chce uzależnić dalsze działanie programu od tego, czy użytkow-
nik podał dobre imię (zgodne z wymaganym). Jeśli imię nie jest zgodne, procedura Main powinna
zakończyć działanie. Efekt taki pozwala uzyskać konstrukcja warunkowa. Warunek logiczny zbudo-
wany jest z operatora porównania i dwóch elementów (zmiennej i stałej), które są porównywane.
Łańcuchy tekstowe, są równe wtedy, gdy mają jednakową długość i posiadają na każdej pozycji jed-
nakowe znaki. Jeśli strImię ma wartość "Zenon", a strDobreImię – "Krzysztof", to ponieważ zastoso-
wano operator porównania „<>” wartością wyrażenia logicznego jest True, gdyż imiona „nie są rów-
ne”. Skoro wyrażenie logiczne ma wartość True, to zgodnie z zasadą zostanie wykonana instrukcja
występująca po słowie
Then
, czyli
Exit Sub
. Wykonanie tej instrukcji kończy działanie procedury
Main, a tym samym programu. Ostatnia instrukcja procedury nie zostanie wykonana.
Jeśli imiona będą „równe”, to wyrażenie logiczne ma wartość False, gdyż „nieprawdą jest, jako-
by identyczne imiona nie były identyczne”. W takim przypadku instrukcja
Exit Sub
nie zostanie wy-
konana. Program przejdzie do wykonania kolejnej instrukcji – wyświetlającej powitanie.
Użycie najprostszej postaci konstrukcji warunkowej ogranicza się do wykonania jednej tylko in-
strukcji zależnej od warunku logicznego.
Pełne wykorzystanie możliwości konstrukcji warunkowej
W poprzednim ćwiczeniu aplikacja kończyła działanie nie informując o tym użytkownika. Kon -
strukcja warunkowa posiada składnię pozwalającą naprawić ten błąd. Aby uzależnić od jednego wa -
runku wykonanie ciągu wielu instrukcji można się posłużyć następującą wersją:
If Warunek Then
Instrukcja_1
Kolejne_instrukcje
End If
Instrukcja_1 i Kolejne_instrukcje zostaną wykonane tylko wtedy, gdy Warunek ma wartość True.
Edytor tekstowy wspomaga programistę przy tworzeniu tego typu konstrukcji warunkowej. Wystarczy
wpisać słowo
If
oraz wyrażenie logiczne warunku i nacisnąć klawisz Enter. Środowisko automatycz-
nie doda słowo
Then
, pusty wiersz, w którym będzie można umieścić instrukcje, oraz słowa
End If
kończące blok konstrukcji warunkowej. Kolejne ćwiczenie obrazuje wykorzystanie opisanej postaci
konstrukcji warunkowej i automatyczne uzupełnianie kodu źródłowego przez edytor.
Ćwiczenie 33
Zapoznać się ze wspomagającym pracę programisty działaniem edytora tworząc
konstrukcję warunkową sprawdzającą, czy wiek użytkownika spełnia wymagania
stawiane przez aplikację.
1. Dodaj pusty wiersz przed końcem procedury Main.
2. Zadeklaruj stałą intMinimalnyWiek typu Integer (typ całkowity języka Visual Basic 2010,
odpowiednik typu Int32 zdefiniowanego w przestrzeni nazw System) o wartości 18.
3. Zadeklaruj zmienną intWiekUżytkownika typu Integer.
4. Zaprogramuj pobranie od użytkownika liczby całkowitej określającej jego wiek i zapamię-
tanie jej w zmiennej intWiekUżytkownika (pamiętaj o użyciu funkcji konwersji Cint). Wy-
korzystaj schemat z ćwiczenia 28.
5. Rozpocznij tworzenie konstrukcji warunkowej, która sprawdzi, czy wiek podany przez
użytkownika jest mniejszy niż minimalne wymagania, w tym celu:
◦
wpisz w kolejnym wierszu słowo If rozpoczynające konstrukcję warunkową i do-
pisz spację,
◦
wpisz warunek sprawdzający czy zmienna intWiekUżytkownika ma wartość mniej-
szą niż stała intMinimalnyWiek (użyj operatora porównania „<”) i naciśnij Enter.
Zauważ, że edytor dokończył budowanie konstrukcji zgodnie z wymaganiami
składni języka. Kursor tekstowy znajduje się wewnątrz bloku instrukcji konstrukcji
warunkowej.
6. Zaprogramuj wewnątrz konstrukcji warunkowej:
◦
wyświetlenie informacji o tym, że aplikacja zostanie zamknięta, ze względu na to,
że jedno z wymagań aplikacji nie zostało spełnione,
◦
zakończenie działania procedury Main (wykorzystaj Exit Sub).
7. Dodaj pusty wiersz po słowach End If kończących konstrukcję warunkową i zaprogramuj
wyświetlenie komunikatu o tym, że użytkownik przeszedł procedurę weryfikacyjną.
8. Skompiluj projekt i uruchom kilkakrotnie aplikację podając różne warianty danych (imiona
i wiek użytkownika).
Przykłady obejmowały takie zadania, w których wykonanie jednej, lub ciągu instrukcji zależy od
wartości warunku logicznego. Podkreślmy, spełnienie warunku (wartość True wyrażenia logicznego)
powoduje, że pewien ciąg instrukcji zostanie wykonany.
Zdarzają się sytuacje, gdy w przypadku spełnienia warunku należy przeprowadzić jeden rodzaj
działania, a w przypadku, gdy warunek nie jest spełniony, inny rodzaj działania. W takim przypadku
składania konstrukcji warunkowej przewiduje następującą postać:
If Warunek Then
InstrukcjeNaTrue
Else
InstrukcjeNaFalse
End If
Występuje tutaj dodatkowy blok instrukcji rozpoczynający się od słowa
Else
(Inaczej; w prze-
ciwnym przypadku). InstrukcjeNaTrue zostaną wykonane tylko wtedy, gdy warunek jest spełniony. In-
strukcjeNaFalse – tylko wtedy, gdy warunek nie jest spełniony (ma wartość False). Kolejne ćwiczenie
obrazuje użycie tego typu konstrukcji warunkowej do uzyskania informacji na temat parzystości, bądź
nieparzystości, liczby całkowitej podanej przez użytkownika.
Ćwiczenie 34
Użyć konstrukcji warunkowej ze słowem Else do wyświetlenia odpowiedniego
komunikatu w przypadku gdy podana przez użytkownika liczba jest (nie jest) parzysta.
Jako warunku użyj porównanie, reszty z dzielenia całkowitego liczby podanej prze
użytkownika przez 2, z liczbą zero – liczby parzyste dzielą się bez reszty, nieparzyste
dają resztę niezerową.
1. Utwórz Projekt_034 aplikacji konsolowej.
2. Zadeklaruj w procedurze Main zmienną intLiczbaUżytkownika typu Integer.
3. Zaprogramuj pobieranie liczby od użytkownika i zapamiętanie jej wartości w zmiennej in-
tLiczbaUżytkownika (pamiętaj o użyciu funkcji CInt).
4. Utwórz konstrukcję warunkową:
◦
wyrażenie logiczne będące warunkiem powinno być porównaniem reszty z dziele-
nia całkowitego przez 2 wartości zmiennej intLiczbaUżytkownika z liczbą zero,
Przykład.
intLiczbaUżytkownika Mod 2 = 0
'Nawiasy nie są konieczne "Mod" ma wyższy priorytet niż "="
◦
zaprogramuj:
▪
w części pomiędzy If, a Else, wyświetlenie w konsoli komunikatu o tym, że licz-
ba jest parzysta,
▪
w części pomiędzy Else, a End If, wyświetlenie w konsoli komunikatu o tym, że
liczba nie jest parzysta.
5. Skompiluj projekt i uruchom aplikację kilka razy podając różne liczby całkowite.
Zdarzają się również takie zadania, w których liczba możliwych dróg postępowania jest więk-
sza. Załóżmy, że pewien program powinien dzielić osoby pod względem wieku na: dzieci (poniżej 13
roku życia), młodzież (poniżej 18 roku życia), a reszta to dorośli.
Zadanie takie można rozwiązać przynajmniej dwoma sposobami, z których każdy ilustruje jedno
zagadnienie związane z konstrukcją warunkową:
Zagnieżdżanie konstrukcji warunkowej
Konstrukcja warunkowa ze słowem ElseIf
If intWiek >= 0 And intWiek < 13 Then
Console.WriteLine("Jesteś dzieckiem.")
Else
If intWiek >= 13 And intWiek < 18 Then
Console.WriteLine("Należysz do
młodzieży.")
Else
If intWiek >= 18 Then
Console.WriteLine("Jesteś dorosły(a).")
Else
Console.WriteLine("Niepoprawne dane.")
End If
End If
End If
If intWiek >= 0 And intWiek < 13 Then
Console.WriteLine("Jesteś dzieckiem.")
ElseIf intWiek >= 13 And intWiek < 18 Then
Console.WriteLine("Należysz do młodzie-
ży.")
ElseIf intWiek >= 18 Then
Console.WriteLine("Jesteś dorosły(a).")
Else
Console.WriteLine("Niepoprawne dane.")
End If
Puste miejsca w kodzie po prawej stronie nie są wymagane i zostały wprowadzone jedynie
w celu ułatwienia porównania obu struktur. Konstrukcje warunkowe przedstawione w tabeli są równo-
ważne. Na korzyść konstrukcji ze słowem kluczowym
ElseIf
(połączenie
Else
i następującego po
nim
If
) przemawia zwężenie szerokości zapisu, co poprawia czytelność kodu. Dodatkowo, puste
miejsca pokazują, że kod po prawej stronie jest krótszy – nie zawiera dwóch zakończeń
End If
,
a warunki występują w tym samym wierszu, w którym znajduje się połączone słowo kluczowe
El-
seIf
.
Ćwiczenie 35
Zastosować wybrany typ konstrukcji warunkowej do określenia przynależności
użytkownika do jednej z grup: Chorobliwie chudy, Zdrowy, Otyły, Chorobliwie otyły.
Wykorzystać przedstawioną poniżej tabelę.
Grupa
Przedział BMI
BMI =
Masa
Wzrost
2
Masa w kilogramach, wzrost w metrach
Chorobliwie chudzi
poniżej 20 kg/m
2
Zdrowi
poniżej 25 kg/m
2
Otyli
poniżej 30 kg/m
2
Chorobliwie otyli
pozostali
III.2.
Konstrukcja wyboru
Konstrukcja warunkowa
If
pozwala na wykonanie pewnej sekwencji instrukcji, gdy spełniony
jest określony warunek logiczny. Istnieje w języku Visual Basic 2010 druga konstrukcja pozwalająca
wybrać jedną z sekwencji instrukcji na podstawie obliczonej wartości wyrażenia. Przy tym obliczona
wartość może być dowolnego typu podstawowego (liczbowego, znakowego, logicznego). Ponieważ
znaczenie konstrukcji wyboru dla wykonywanego programu jest takie samo jak konstrukcji warunko-
wej, to zostanie ona przedstawiona od razu w pełnej postaci:
Select Case Wyrażenie
Case Lista_1_PotencjalnychWartościWyrażenia
Instrukcje_1
Case Lista_2_PotencjalnychWartościWyrażenia
Instrukcje_2
'Inne przypadki
Case Else
Instrukcje
End Select
Listy potencjalnych wartości wyrażenia Wyrażenie mogą zawierać:
•
wartości rozdzielone przecinkami, np. 1, 13, 15
•
przedziały wartości określone dwoma liczbami połączonymi słowem kluczowym
To
, np. 1
To 3,
•
wartość graniczna z operatorem porównania i słowem
Is
(Jest), np. Is > 12.
Przykład.
Select Case intWiekUżytkownika
Case 0 To 12
'Instrukcje dla „dzieci”
Case 13 To 17
'Instrukcje dla „młodzieży”
Case Is >= 18
'Instrukcje dla „dorosłych”
Case Else
'Instrukcje dla niepoprawnych danych
End Select
Wykonanie konstrukcji przedstawionej w przykładzie polegać będzie na obliczeniu wartości wy-
rażenia inWiekUżytkownika (w tym przypadku obliczenie ograniczy się do pobrania wartości zmien-
nej). Dalej nastąpi sprawdzenie, czy obliczona wartość wyrażenia zawiera się w przedziale <0, 12> i
jeśli tak, to zostaną wykonane „Instrukcje dla dzieci”. Jeśli sprawdzenie da wynik negatywny, nastąpi
kolejne sprawdzenie – czy wartość wyrażenia należy do przedziału <13, 17> i jeśli tak, to zostaną
wykonane „Instrukcje dla młodzieży”. Jeśli również drugie sprawdzenie da wynik negatywny, nastąpi
trzecie sprawdzenie. Warunek „Is >= 18” należy rozumieć dosłownie, to znaczy „Jest większy niż, lub
równy 18”. Jeśli również to sprawdzenie nie da pozytywnego rezultatu, wtedy zostaną wykonane „In-
strukcje dla niepoprawnych danych” występujące po słowie
Else
. Można zauważyć, że słowo
Else
,
stanowi swoisty „zawór bezpieczeństwa” – jeśli zawiodą wszystkie sprawdzenia, czyli nie zachodzi
żaden z przypadków przewidzianych przez programistę, wtedy wykonywane są instrukcje bloku
Case
Else
…
End Select
. Warto zawsze zastanowić się, czy użycie tego bloku, choćby w celu poinfor-
mowania użytkownika, że wprowadzone wcześniej dane i uzyskane wyniki obliczeń prowadzą
do wartości, dla których nie przewidziano odpowiedniej sekwencji instrukcji, nie będzie wskazane.
Kolejne ćwiczenie pozwala na samodzielne rozważenie tego problemu.
Ćwiczenie 36
Wykonać dwie wersje: Projekt_036_If oraz Projekt_036_SelectCase aplikacji
konsolowej, której zadaniem jest rozwiązanie równania kwadratowego i wyświetlenie
rozwiązań. Grupa wzorów umieszczonych poniżej może być pomocna w przygotowaniu
rozwiązań.
Równanie kwadratowe:
ax
2
bxc=0
Wyróżnik równania kwadratowego:
=
b
2
−
4ac
Występują trzy przypadki zależne od wartości
∆
:
∆
> 0, równanie ma dwa rozwiązania rzeczywiste o wartościach:
x
1
=
−
b−
2a
x
2
=
−
b
2a
∆
= 0, równanie ma jedno rozwiązanie o wartości:
x
1,2
=
−
b
2a
∆
< 0, równanie nie posiada rozwiązań rzeczywistych.
III.3.
Etykiety i instrukcja skoku
Oprócz opisanych wyżej sposobów zmiany przepływu sterowania w aplikacji istnieje metoda
oparta o wykorzystanie etykiet (ang. label) oraz instrukcję skoku
GoTo
(Idź do). Użycie tej metody
ograniczone jest do bloku procedury. W pierwszych wersjach języka Basic instrukcja skoku pozwala-
ła realizować schemat programowania proceduralnego. W wielu współczesnych pozycjach literatury
traktujących o języku Visual Basic 2010 metoda jest pomijana, a jeżeli jej opis występuje, to opatrzo -
ny jest komentarzem sugerującym, że jej użycie może prowadzić do utraty panowania nad kodem
źródłowym, a także do obniżenia jego czytelności. Wydaje się, że w związku z możliwością tworzenia
metod oraz schematem programowania obiektowego wszystkie te uwagi prowadzić będą do coraz
mniejszego znaczenia instrukcji
GoTo
.
Poniższy przykład obrazuje wykorzystanie instrukcji
GoTo
oraz etykiet.
Console.WriteLine("Program oblicza sumę liczb wprowadzonych przez użytkownika.")
Dim intLicznik As Integer = 1
Dim dblLiczba, dblSuma As Double
WprowadźNastępną:
'Napis zakończony dwukropkiem to etykieta
Console.WriteLine("Wprowadź liczbę nr {0}, wprowadzenie 0 kończy sumowanie.", _
intLicznik)
'Znak podkreślenia _ pozwala kontynuować kod źródłowy w kolejnym wierszu.
dblLiczba = CDbl(Console.ReadLine)
dblSuma += dblLiczba
If dblLiczba = 0 Then
GoTo PokażSumę
'Skok do wiersza z etykietą PokażSumę:
intLicznik += 1
GoTo WprowadźNastępną
'Skok do wiersza z etykietą WprowadźNastępną:
PokażSumę:
'Napis zakończony dwukropkiem to etykieta
intLicznik -= 1
Console.WriteLine("Suma {0} wprowadzonych liczb wynosi {1}", intLicznik, dblSuma)
Większą czcionką wyróżniono etykiety oraz instrukcje skoku. Jest to dobra ilustracja tego, jak
bardzo instrukcja
GoTo
może zaciemnić obraz kodu źródłowego. Ten sam efekt można uzyskać dużo
mniejszym nakładem pracy, wykorzystując konstrukcje pozwalające na powtarzanie zestawu instruk-
cji. Krotność powtarzania może być z góry określona, lub uwarunkowana pewnym wyrażeniem lo -
gicznym. Zagadnienie to rozwinięte jest w kolejnym rozdziale.