Strona:
13

Współpraca i reklama !
 

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