Kurs
Visual Basica by Slash - część 5
LEKCJA 10
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żący 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łóż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 istrukcję
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 z powrotem 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...
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
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 wykonać 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.
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.
LEKCJA 12
Dzieńdoberek !!! Jak tam samopoczucie? Dobrze? No to się cieszę !
Jak pisałem wcześniej przechodzimy dzisiaj do bardzo ważnego tematu - Pętli
FOR.
Czym różni się ona od pętli Do While, Do Until ? Otóż, jak pamiętasz
pętle Do - wykonywały się dopóki jej warunki nie zostały spełnione. Pętla
for wykonuje się zaś określoną ilość razy. Tak np.
Dim x,y as byte
For x = 1 to 5
y = MsgBox("To jest MessageBox nr. " & x,
vbinformation,"Przykład")
Next x
Ten program powoduje pięciokrotne wyświetlenie się MsgBox-a. Jak to działa
?
1. Dim - wiadomo co... ;)
2. Dla x = od 1 do 5
3. MsgBox...
4. Dodaj do x i wróć
No dobra, ale jak to działa ? Przeanalizujmy...
Najpierw zainicjowanie zmiennych x i y. Dalej jest instrukcja for. Decyduje
ona ile razy ma zostać wykonana pętla. W naszym przypadku jeśli x=6 to
przeskakuje za Next-a (Odpowiednik Loop-a z pętli DO-LOOP). Czyli tak -
obecnie w zmiennej x jest 1 - to jest ta pierwsza liczba w FOR. Wykonuje się
msgBox z wiadomością "To jest MessageBox nr 1". Program dochodzi
do funkcji Next x - oznacza ona - dodaj (1) i wróć . Tak więc program wraca
do For-a, tylko teraz w x jest liczba 2 - i znów MsgBox - To jest MessageBox
nr 2. I znów dodaj 1 i wróć, aż tak do 5. Ale co potem... Załóżmy, że
w x jest 5. Jesteśmy przy funkcji For - skoro do pięciu to jeszcze raz pętelka
- MessageBox i dochodzimy do Next x. Po tej operacji x = 6. Program wraca do
for-a i okazuje się, że x nie spełnia warunku pętli. Następuje przeskok
za instrukcję Next - i program w ten sposób kończy działanie.
Dokładne i praktyczne zastosowanie tej funkcji poznasz dużo później - gdy
będziemy mówić o dostępie do plików. Niemniej jednak będzie nam ona
bardzo potrzebna i musisz ją znać.
Myślę, że nie będziesz mieć z nią żadnych problemów.
Ach, zapomniałem napisać o pewnym dopełnieniu funkcji FOR - jest nią
Step (czyli krok). Po prostu do funkcji For dopisz jeszcze Step i pewną liczbę.
Zastosujmy to do wcześniej napisanego przykładu. Będzie to wyglądać więc
tak:
Dim x,y as byte
For x = 1 to 5 step 2
y = MsgBox("To jest MessageBox nr. " & x,
vbinformation,"Przykład")
Next x
I co się tu dzieje... Pomyślmy. Wchodzimy w funkcję FOR, następnie
zapisuje ona do zmiennej x wartość 1. Dostajemy wiadomość "To jest
MessageBox nr. 1". I zatrzymujemy się na next. Pamiętasz co on oznaczał
? Tak, dodaj do x (w tamtym przypadku 1) i wróć do FOR. Teraz sytuacja się
zmienia. Funkcja STEP nakazuje FOR-owi, aby teraz do x dodał 2. I co teraz.
Wracamy się, i w x znajduje się liczba 3 ! A więc nie dostaniemy
MessageBoxa z numerem 2 lecz 3. Znów NEXT czyli x+2 a to daje 5. Powrót,
MessageBox nr 5. Znów Next, teraz x=7, powrót do FOR - ale niestety (?) For
nie obejmuje już liczby 7, a więc przeskok za Next i koniec. programu...
Zauważyłeś różnicę? Chyba tak. Zamiast 5 Messag-ów otrzymałeś
tylko 3 !
Teraz zastosujmy funkcję for do liczenia silni danej liczby.
Dobra, dobra - ale większość osób pewnie nie wie co to jest silnia.
7! (czytaj. 7 silnia) - 1*2*3*4*5*6*7
No dobra skoro wiesz co to jest już silnia, bierzemy się do pisania
programu.
Na formie ułóż przycisk - jako wartość "Caption" wpisz
Silnia, i nazwij go cmdSilnia. No dobra, ale gdzie będziemy wpisywać liczbę...
Musimy zrobić textBox-a. Wyczyść wartość Caption i nazwij go txtSilnia.
Teraz dodaj do przycisku następujący kod:
Dim x, odp.
odp = 1
For x = 1 To txtSilnia
odp = odp * x
Next x
ss = MsgBox(txtSilnia & " ! to " & odp)
Czy potrafisz go przeanalizować? Przynajmniej powinieneś. Jeśli jednak
nie potrafisz tego zrobić przeanalizujmy razem:
1. Dim - zainicjowanie zmiennych
2. Na początek ustalamy zmienną początkową. Ale dlaczego nie 0. Pomyśl -
mnożenie przez 0 zawsze daje w wyniku 0 - a więc bez sensu. Przy dodawaniu
jako stałą musisz dać 0, a przy mnożeniu 1 !!!.
3. Instrukcja for - od 1 do... ile? txtsilnia to jest właśnie liczba którą
wpisałeś okienko.
4. Teraz następuje przemnożenie stałej przez x - czyli kolejną liczbę
naturalną zaczynając od 1, a kończąc na txtSilnia. Czyli nasze równanie
(załóżmy, że w okienko wpisałeś 7) 1*2*3*4*5*6*7 czyli 7!. Po 7 okrążeniach
otrzymujemy nasz wynik.
ZADANIE DOMOWE:
Napisz program z przyciskiem i polem tekstowym. Program ma dodawać tylko
liczby parzyste zaczynając od 2, a kończąc na liczbie wpisanej w pole
textowe.
Może trochę trudne więc daję 2 podpowiedzi:
Po pierwsze skoro dodawanie zaczynamy od 2 (bo 1 jest liczbą nieparzystą)
funkcję FOR też zaczniemy od 2.
Po drugie - liczby parzyste to co drugie liczby. Tak więc będziemy musieli użyć
funkcji STEP.
No to do dzieła!
Do następnego spotkania...
Slash
slash83@go2.pl
http://www.system.ivg.pl
|