background image

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.

background image

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.

background image

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.

background image

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.

background image

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

background image

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

background image

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.

background image

Ć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ć:

background image

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.

background image

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ż 

background image

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-

background image

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

.

background image

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.