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