KURS VB #6 Lekcja 10Ju┐ 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│upio-odporny 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 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... Zadanie domowePrzepisz 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 11Jak 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 schemaciku... 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 Kurs zamieszczony na podstawie wymiany z magazynem @t - www.at.bjn.pl |