Visual Basic #4

Lekcja 8

Wyspani ? No to do dzieła !!! Dzisiaj dowiesz się co to są operatory arytmetyczne i jak ich używać. Myślę, że umiesz już posługiwać się instrukcją IF. Będzie nam dzisiaj bardzo potrzebna. Dobra. Czy ktoś wie co to są operatory arytmetyczne? Nie? No to zaczynamy:

W Visual Basicu będziemy posługiwać się następującymi operatorami: And , Or, Not.
And to nasze polskie "i", Or to lub, a Not to nie. Ale o co tu właściwie chodzi. Wyjaśnię to na prostym przykładzie:

Mamy dwie firmy które przynoszą dochody. Tak więc uruchamiamy VB, tworzymy dwa pola tekstowe i przycisk. Pierwsze pole nazywamy txtFirma1, a drugi txtFirma2, oczywiście czyścimy ich zawartość (Text). Przycisk nazwijmy np. cmdWynik. Nadajmy mu etykietę (Caption) "I co ?". Teraz napiszemy procedurę, tak abyśmy dostali gratulacje jeśli dochody jednej i drugiej firmy przekroczą 5000 zł. No to do przycisku "I co?" dodajemy kod. No właśnie, ale jaki. Jak się pewnie domyślasz będziemy musieli użyć instrukcji IF. Czyli Jeżeli dochód pierwszej firmy będzie większy niż 5000 to komunikat... Zaraz, a co z drugą firmą? Pierwsza może przynieść zysk w wysokości 6000 zł, a druga straty w wysokości 9000 zł. I co? Program ma nam pogratulować ? Można by użyć prostej funkcji matematycznej. Mianowicie dodawania. Skoro i jedna i druga firma ma przynieść zysk pow. 5000 zł, no to w sumie mają przynieść zysk 10000 zł. No dobra. Ale jak pierwsza przyniesie zysk 20000 zł, a druga jakąkolwiek stratę to program też ma nam gratulować. Nie sądzę. My musimy zaznaczyć, że i jedna i druga ma być dochodowa i przynosić zysk pow. 5000 zł. Po polsku powiedzielibyśmy tak:

Jeżeli firma1 przyniesie zysk pow. 5000 i firma2 przyniesie zysk pow. 5000 zł to... gratulacje.

I tak właśnie będzie brzmiał Visual Basicowy język:

Dim x
IF txtfirma1 > 5000 and txtfirma2 > 5000 then
x = msgBox("Gratulacje",vbInformation,"Dochód")
End IF

Uruchom program i co? Wpisz obydwie dane pow. 5000. Otrzymujesz gratulacje. A zmień jedną z danych np. na 4000. Gratulacji już nie otrzymujemy. No więc program działa. Myślę, że już rozumiesz operator And. Jeśli tak, to nie będziesz mieć żadnych problemów z operatorem Or (lub). Spróbujmy zamienić w naszym programie and na or. Teraz rozumiemy to tak:

 Jeżeli firma1 przyniesie zysk pow. 5000 lub firma2 przyniesie zysk pow. 5000 zł to... gratulacje.

Uruchamiamy program wpisujemy np. 6000 i 7000. I co? Gratulacje. Tutaj działa tak samo jak z And. No dobra. Zmieńmy jedną daną np. na 2000. I co? Także gratulacje. W tym przypadku program szuka w obydwu polach tekstowych liczby większej od 5000. Jeśli znajdzie jakąkolwiek (czyli w txtFirma1 lub txtFirma2 lub w obydwu) to otrzymujemy gratulacje. No też myślę, że nie miałeś z tym większych problemów. Został nam jeszcze operator Not. Nie powinniśmy go stosować -bo gdzieś wyczytałem, że może doprowadzić do nieoczekiwanych wyników - sam jednak nigdy z nim nie miałem problemów. Faktycznie, lepiej zastępuje się go odwrotną instrukcją do danej. Oto przykład.

Mamy jedną firmę która powinna przynosić dochody. Gratulacje możemy wyświetlić na dwa sposoby.

1. Operator NOT

Dim x
IF NOT txtFirma1 < 5000 then
x = msgBox("Gratulacje",vbInformation,"Dochód")
End IF

Jednak pisanie takich instrukcji jest bez sensu. Dlaczego ? Przetłumaczmy:

Jeśli dochód firmy1 NIE mniejszy niż 5000 to... gratulacje

Lepiej zapisać tak:

IF txtFirma1 >= 5000 then

Prawda, że bardziej czytelne. Staraj się nigdy niestosować tego operatora. Zawsze da się go zastąpić przez zmianę znaku na przeciwny.

Teraz jeszcze dopełnienie do InputBox-a. Zapomniałem Wam napisać, jak sprawić aby działał przycisk "Cancel" na InputBox-ie. Pokaże to na przykładzie z imieniem, który braliśmy na lekcji 6

Dim x,y as string
x = InputBox ("Jak masz na imię ?","Przywitanie","Może Marek...")
IF x = "" then end
y = MsgBox ("Witaj_" & x ,vbExclamation,"Przywitanie")

Wyjaśnienie do IF-a. Są tu pewnie dwie rzeczy których nie rozumiesz.
Po pierwsze. Dlaczego akurat x = "" ? Jeśli naciśniesz przycisk "Cancel" VB nie przypisuje nic do zmiennej x. Wykorzystuje to właśnie IF który kończy program w tym momencie.
Po drugie. Dlaczego po "then" nie zakończyłem linii i nie dałem instrukcji End IF.
Otóż, jeśli nie masz zamiaru użyć instrukcji Else, lub ElseIF, a twoja instrukcja warunkowa mieści się w jednej linijce. (jak np. moja - End) nie musisz rozpoczynać nowej linijki i co za tym idzie kończyć IF-a

Lekcja 9

Witam Was znowu, już w 9 lekcji kursu VB. Zastanawiałem się właśnie ile będzie tych lekcji. Z moich wyliczeń wynika, że nie mniej niż 50 !. Tak, tak ! To jest gorzka prawda. Visual Basic choć jest językiem programowania łatwym (czytaj najłatwiejszym), to jednak jego możliwości są bardzo duże. Te 50 lekcji to będą podstawy, a potem? Myślę, że potem będziemy mówić coś o bazach danych i API (o którym sam nie mam pojęcia - na razie). No dobra skupmy się jednak na dzisiejszej lekcji. Dowiesz się na niej coś o funkcji Select Case (Przypadek).

Funkcję Select Case zawsze można zastąpić funkcją IF - jednak funkcja Case ma dużo krótszy zapis. Pokażę to na przykładzie programu pytającego nas o wiek. 
Uruchamiamy VB - tworzymy przycisk i dodajemy do niego kod:

Dim wiek As Currency
wiek = InputBox("Podaj swój wiek...", "Pytanie o wiek")
If wiek <= 0 Then
x = MsgBox("To jest niemożliwe", vbCritical, "Błąd")
ElseIf wiek < 11 Then
x = MsgBox("Mniej niż 11 - jeszcze dziecko", vbInformation, "Odp")
ElseIf wiek < 18 Then
x = MsgBox("Młodzież", vbInformation, "Odp")
ElseIf wiek < 40 Then
x = MsgBox("Dorosły do 40", vbInformation, "Odp")
ElseIf wiek = 100 then
x = MsgBox("Piękny wiek !!!", vbInformation, "Odp")
ElseIf wiek < 110 Then
x = MsgBox("Pełnia wieku...", vbInformation, "Odp")
Else
x = MsgBox("Niemożliwe !!!", vbCritical, "Błąd")
End If

Chyba wiecie o co tu chodzi. W tym kodzie są błędy - ktoś może mi zarzucić. Dlaczego. Kilka lekcji wcześniej pisałem, że nie można kilku MsgBoxom przypisać jednej zmiennej (tutaj x). Ale zauważmy, że program wykonuje zapis tylko raz do x. To przecież jest zależne od IF-a. Nie prawdaż ?

Instrukcja IF nie oferuje czegoś takiego jak przedziały. Tak np. nie możemy napisać instrukcji IF z przedziałem (np. od 20 do 70). Operujemy tylko operatorami (>,<,=,<=,>=,<>). Taki komfort daje nam za to funkcja Case. Teraz napiszemy ten sam program z użyciem właśnie tej funkcji:

Dim wiek As Currency
wiek = InputBox("Podaj swój wiek...", "Pytanie o wiek")
Select Case wiek
Case is < 0 : x=MsgBox("To jest niemożliwe", vbCritical, "Błąd")
Case 0 to 10: x=MsgBox("Mniej niż 11 - jeszcze dziecko", vbInformation, "Odp")
Case 10 to 18: x = MsgBox("Młodzież", vbInformation, "Odp")
Case 18 to 40: x = MsgBox("Dorosły do 40", vbInformation, "Odp")
Case 100: x = MsgBox("Piękny wiek !!!", vbInformation, "Odp")
Case is <= 110: x = MsgBox("Pełnia wieku...", vbInformation, "Odp")
Case else: x = MsgBox("Niemożliwe !!!", vbCritical, "Błąd")
End Select

Uruchamiamy - i co? Działa tak samo ? No właśnie , tak ma działać. Program stał się dużo czytelniejszy, nie prawdaż ? No to teraz tłumaczę o co chodzi:

1. Dim - wiadomo, nakazujemy programowi pamiętać wiek
2.wiek=InputBox... - Pytanie o wiek, który zostaje zapisany do zmiennej wiek
3.W odróżnieniu od IF-a, Case należy zacząć - podajemy tutaj co będzie wchodziło w rachubę (w naszym przypadku wiek)
4.Jeśli mniejsze niż zero (oczywiście wiek) to MsgBox - "To jest niemożliwe..."
5.Jeśli od 0 do 11 to MsgBox - "Mniej niż..."
6,7 - tak samo
8. Jeśli 100 to MsgBox - "Piękny wiek"
9. Jeśli mniej niż 110 to MsgBox "Pełnia wieku..."
10 Case Else - Jeśli inaczej to MsgBox "Niemożliwe..."
11 End Select - Zakańczamy Case (Odpowiednik End IF)

Myślę, że wszyscy zrozumieli o co chodzi. I tutaj jedna uwaga - jeśli będziesz używał operatorów większy - mniejszy itp. to po instrukcji Case musisz dać słowo is - jednak nie przejmuj się tym zbytnio. Jeśli zapomnisz napisać tego słowa, VB zrobi to za ciebie (sprytne, nie? ;) ). Dwukropek jest odpowiednikiem If-owego Then. Tak więc instrukcja Case jest dużo bardziej uproszczona, chociaż ma większe możliwości niż IF. 
Kiedy jej używać ? Wtedy gdy masz dużo rozpatrzeń do obsłużenia. Jak sam widziałeś na przykładzie - dużo szybciej i milej jest pisać program z Case. Jednak gdy masz tylko dwie opcje do rozpatrzenia to funkcja IF jest całkowicie wystarczająca...

-----------------------------------------------------------
Pamiętaj, że jeśli masz jakikolwiek problem z wyżej zamieszczonym kursem lub masz jakieś pytanie nie krępuj się - pisz do mnie na adres: slash@ptik.ivg.pl .Twój list nie zostanie bez odpowiedzi. Jeśli nawet nie masz pytań to i tak napisz czy podoba ci się ten kurs, co chciałbyś w nim zmienić. Napisz w ogóle cokolwiek, abym wiedział, że ktoś ten kurs czyta.
----------------------------------------------------------

Może jakieś zadanie ? Etam, myślę zrozumiałeś i sam jeszcze raz przeanalizujesz dokładnie tą lekcję. Jednak jeśli czegoś nie zrozumiesz napisz do mnie. Na dzisiaj to by było na tyle. Do następnej lekcji... 

Slash
slash@ptik.ivg.pl
http://www.system.ivg.pl 

 

 Copyright © 2000 SYSTEM. Wszystkie prawa zastrzeżone.
 Kopiowanie tekstów w całości lub we fragmentach bez zgody redakcji i autorów zabronione.