Twój ulubiony magazyn on-line

Kurs Visual Basic

Lekcja 9 - Kurs Visual Basic by SLASH

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 (100) !!!", 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 10 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.prv.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.

Lekcja 10 - Kurs Visual Basic by SLASH

Już dziesiąta lekcja przed nami. Trzeba się za nią wziąć ostro. Zaczynamy nowy dział - pętle. Jednak przed tym muszę wam wyjaśnić jak pisze się komentarze w VB.
Po co mi komentarze i co to w ogóle jest ? Komentarz jest to pomocniczy tekst w projekcie służacy jedynie dla nas ! Visual Basic w ogóle na to nie zwraca uwagi. Po co to stosować... Na razie piszemy małe programy i komentarz jest zbyteczny. Jeśli jednak będziesz musiał wykonać skomplikowany program, sam się w nim pogubisz. Do deklaracji przykładów stosujemy znak '
Wszystko co znajdzie się po tym znaku aż do końca linijki jest komentarzem i VB nie zwraca na to najmniejszej uwagi. Komentarze zostają zaznaczone przez VB na zielono. Przykład
If x=0 then end  'Jeśli zmienna x będzie równa zero to zakończ program
lub
If x=0 then end
'Jeśli zmienna x będzie równa zero to zakończ program
Jak widzisz oba przypadki są dobra i czytelne. Dobra, to tyle wstępem - zaczynamy pętle.
Pętla, jak sama nazwa mówi to kilkukrotne powtórzenie się tych samych instrukcji kodu. Ile ich będzie, to zależy od warunku pętli. Najprościej jest to wyjaśnić na przykładzie.
Napiszemy program pytający się nas o wiek. Po jego podaniu wyskoczy komunikat "Masz x lat". Oczywiście program musi być głupioodporny i jeśli podamy, że mamy 0 lub 123 lata powinien zapytać nas jeszcze raz o wiek.
Zabieramy się więc do roboty. Jak zwykle tworzymy przycisk i dodajemy kod:
Dim wiek as string
Dim b,c as byte
wiek = InputBox ("Podaj ile masz lat","Pytanie")  'Tutaj program pyta nas o wiek
If wiek = "" then end    ' Jeśli nacisnęliśmy Cancel
wiek = Val(wiek)  'opis poniższej funkcji pod przykładem, na razie musisz wiedzieć, że działa podobnie jak CSng( )
Do While wiek<=0 or wiek>120
b = MsgBox ("Musisz podać prawidłowy wiek",vbCritical,"Błąd")
wiek = InputBox ("Podaj jeszcze raz swój wiek","Pytanie")  'Tutaj program znów pyta nas o wiek
If wiek = "" then end    ' Jeśli nacisnęliśmy Cancel
wiek = Val(Wiek)
Loop
c = MsgBox("Masz " & wiek & " lat" , vbInformation, "Odpowiedź")
Ho, ho, ho - trzy nowości w programie. No to przetłumaczenie:
1. Dim wiek - deklarujemy zmienną wiek - czyli naszą odpowiedź
2. Dim x,y - deklaracja tego co zwraca MsgBox
3. Pytanie o wiek, który zostaje zapisany do zmiennej wiek
4. If... - jeśli naciśniemy cancel to koniec programu
5. wiek = Val(Wiek) - pierwsza nowość. Jest to funkcja bardzo podobna do CSng( ). W przyszłości właśnie ją będziemy używać. Ale czym się rożni? Jeśli byś napisał:
x = "12"
odp = CSng(x)
w zmiennej odp znalazło by się 12. Miałeś zapamiętać, że to co jest np. w polach tekstowych nazywa się stringami. Zapisuje się je właśnie w cudzysłowach. String "12" zostaje przekonwertowany na 12 i wszystko O.K. Ale zobaczmy co się teraz stanie:
x = "Tata i mama"
odp = CSng(x)

i w tym momencie wyskoczy błąd (13). Nie można przekonwertować "Tata i mama" na liczbę 9co jest chyba logiczne). Jednak funkcja VAL to potrafi...
x = "Tata i mama"
odp = Val(x)
teraz w zmiennej odp znajdzie się liczba 0.
No dobra - ale po co to mam stosować. Załużmy, że użyłeś funkcji CSng. Teraz program pyta się nas o wiek - ty mu podajesz jakiś string np. Ble, ble - i nagle błąd "Type mismath". Aby temu zapobiec zastosowałem funkcję VAL - która zwróci 0 i błędu nie będzie...
6. Do while wiek <= 0 or wiek >120 then
Jak widzisz funkcja jest bardzo podobna do funkcji IF - lecz nie oznacza ona jeśli a dopóki.
Czyli tłumacząc - dopóki wiek <= 0 lub wiek >120 wykonuj istrukcje do Loop. Innymi słowy mówiąc - jeśli podamy liczbę taką jak trzeba to program przeskoczy aż za funkcję Loop (Odpowiednik End IF). Jeśli jednak podamy np 140 to...
7. MesageBox, że zły wiek
8.InputBox - ponawiamy pytanie o wiek...
9. Znów sprawdzenie czy naciśnięto Cancel
10. Val - znów konwersja stringu Wiek na liczbę
11. Loop - funkcja która spowrotem przenosi nas do funkcji Do While
No to wracamy się, aż do linijki 6 i tu znowu rozstrzyga się czy będziemy już kończyć, czy jeszcze nie. Znów rozpatrzymy dwa przypadki:
a) Znów podaliśmy zły wiek, więc program ponownie wykonuje to co jest między Do While a Loop. Gdy dojdzie do końca to znów wraca do linii 6, i po raz kolejny rozstrzyga sprawę.
b) Podaliśmy dobry wiek - program więc przeskakuje przez funkcję Do While - Loop i lądujemy w linijce 12
12.MsgBox - w końcu dotarliśmy tutaj. Program daje nam odpowiedź ile mamy lat. Ale co tam znowu jest namieszane... Może przestraszyliście się troszkę wyrażenia "Masz " & wiek & " lat" - pamiętacie co robił symbol & - dla tych co zapomnieli:
x = "Mam " & 12 & " lat"
Dawało to w wyniku "Mam 12 lat"
No myślę, że wiesz o co tu chodzi...
--------------------------------------------------------------------------
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.prv.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.
--------------------------------------------------------------------------

ZADANIE DOMOWE
Przepisz program który zrobiliśmy dzisiaj na lekcji. Fajnie się zaczyna, co ? No, ale to nie jest celem zadania. Twoim celem jest zmienienie tak kodu, aby po wpisaniu złego wieku program nie wyświetlał -  Musisz podać prawidłowy wiek, ale powiedział nam, że wiek który podaliśmy jest za mały, albo za duży.
Podpowiedź:
Musisz zastosować funkcję Case (If też by starczył, ale nie da się go wsadzić między Do While a Loop !!!)

Lekcja 11 - Kurs Visual Basic by SLASH

Czołem !!! Jak tam z zadaniem ? Uporaliście się z zadaniem, czy tylko bezmyślnie przepisaliście wszystko z przykładu ? Jeśli SAMEMU udało ci się to zrobić, to dobrze. Jeśli skopiowałeś, to i tak się nie przejmuj - po prostu pewnie to było za trudne. Ale jest to oznaka, że za mało chęci wkładasz w moje lekcje VB.
Dzisiaj poznamy przeciwność funkcji Do While, będzie to funkcja Do Until. Działa dokłanie odwrotnie. Oto przykład:
Zamiast:
Do While wiek<=0 or wiek>120
możemy zapisać:
Do Until wiek > 0 and wiek <= 120
Pamiętaj, że przeciwnością < jest >=, a <= jest >. Przeciwnością <> jest =.
Pamiętaj także o zmianie operatorów - Or zamienia się na End i odwrotnie.
Linie możemy przetłumaczyć tak:
Dopóki wiek  będzie nie większy niż 0 i nie mniejszy niż 120 to...
Myślisz pewnie, że nigdy nie zastosujesz tej funkcji - bo i po co? Skoro można ją zamienić na bardziej zrozumiałą Do While, to po co zaprzątać sobie głowę tym. Sam przyznaję, że funkcję Do Until będziesz używał znacznie rzadziej, ale będziemy pisać takie programy, że będzie ona najwygodniejszym sposobem.
I co tu więcej pisać. Praktyczne zastosowanie tej funkcji poznasz już za niedługo. Skoro mowa o pętlach to powiemy jeszcze coś o pętlach odwrotnych.
Pętla:         Do While... Loop
Odwrotna: Do... Loop While
Tak samo możemy postąpić z Until... Dobra, ale czym ona się różni od normalnej pętli ? Najlepiej zobrazować to na małym shemaciku...
Blok instrukcji (1)
Do While...
Blok instrukcji (2)
Loop
Blok instrukcji (3)
W przypadku normalnej pętli program wykonuje się tak:
Blok instrukcji (1), teraz albo blok instrukcji (2), albo po kilku (lub jednej) pętli blok instrukcji (3)
A teraz funkcja odwrotna do poprzedniej
Blok instrukcji (1)
Do
Blok instrukcji (2)
Loop While...
Blok instrukcji (3)
A teraz program wykonuje się tak:
Blok instrukcji (1), Blok instrukcji (2), teraz albo blok instrukcji (3), albo znów Blok instrukcji (2) i tak kilka razy (lub raz) i na koniec blok instrukcji (3)
Generalnie różni się to tym, że w funkcji Do While - Loop, program może, ale nie musi wykonąć tego co znajduje się między DO - LOOP. Zaś w funkcji odwrotnej program musi wykonać przynajmniej jeden raz instrukcję zawartą między DO - LOOP.
Funkcja jest rzadko stosowana (sam nigdy jej nie używałem), zawsze ją można zastąpić zwykłym ułożeniem. Ale warto wiedzieć, że coś takiego jest . Zawsze się może zdarzyć, że akurat będzie ona lepsza.
--------------------------------------------------------------------------
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.prv.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.
--------------------------------------------------------------------------

Ufff... Dobrnęliśmy do końca tej lekcji (właściwie to była sama teoria - dopełnienie poprzedniej lekcji). Trzeba by wypić jakieś piwo. Oczywiście bezalkoholowe ;) .Na następnej lekcji będziemy brać ostatnią z pętli... pętlę For. Lekcja będzie bardzo ważna. For jest najczęściej stosowaną pętlą w VB. Przed lekcją dobrze wypocznij.


Slash
e-mail: slash@ptik.ivg.pl




Stare Gry Na PC - stare gierki do pobrania

Copyright (c) 1999 - 2000 NoName