Obecny czas to Czw 5:47, 25 Kwi 2024 | Zaloguj się, by sprawdzić wiadomości
Zobacz posty bez odpowiedzi
Forum Forum hakerskie - najlepsze forum hakerskie Strona GłównaForum Forum hakerskie - najlepsze forum hakerskie Strona Główna
Użytkownicy Grupy Rejestracja Zaloguj

Instrukcje warunkowe
Napisz nowy temat   Odpowiedz do tematu    Forum Forum hakerskie - najlepsze forum hakerskie Strona Główna » Visual Basic
Zobacz poprzedni temat | Zobacz następny temat  
Autor Wiadomość
CodeLan
Administrator



Dołączył: 03 Lis 2006
Posty: 171
Przeczytał: 0 tematów

Pomógł: 3 razy
Ostrzeżeń: 0/5
Skąd: Z pod skrzydeł Google.pl

PostWysłany: Nie 6:58, 17 Cze 2007    Temat postu: Instrukcje warunkowe

Nie jest to zbytnio elegancji sposób sygnalizowania nieprawidłowości, szczególnie w przypadku większych aplikacji, gdzie np. wypełnia się bardzo wiele pól i później po pokazaniu błędu przez program i wyłączeniu się, użytkownik musiałby robić wszystko od nowa.

Instrukcja warunkowa polega na tym, że porównuje coś np. jakąś wartość ze zmiennej bądź z jakiegoś obiektu, i jeżeli warunek będzie spełniony, czyli porównywana wartość będzie równa założeniu, (lub np., jeżeli chcemy możemy założyć, że wartość ma być nie równa) instrukcja wykona funkcje zagnieżdżone w niej, czyli po spełnieniu warunku zostaną wykonane pożądane operacje. Dodatkowo możemy zrobić, że jeżeli warunek nie zostanie spełniony zostanie wykonana funkcja zapasowa (Else), czyli np. wyświetlenie komunikatu z błędem.

Trzeba się zastanowić jak zastosować instrukcje warunkowe do programu z ostatniej lekcji.
W naszym przypadku trzeba sprawdzić czy w polach TextBox na pewno są liczby.
Do sprawdzenia czy wartość danej zmiennej bądź zawartości obiektu służy porównanie IsNumeric czyli

If IsNumeric(Okres1Stan1.Text) Then
‘tutaj instrukcje liczenia
End If


Teraz omówie składnie.
Pierwsze słowo to if czyli angielskie jeśli i teraz załadamy -> IsNumeric(Okres1Stan1) czyli: jeżeli jest wartość numeryczna (w objekcie Okres1Stan1 w właściwości text) wtedy (Then), zostają wykonane funkcje objęte do End If..
Myślę, że to nawet bez omówienia jest jasne. Jednak powstaje pytanie. Sprawdzenie czy jest liczba musi zostać wykonane na pozostałych obiektach. Nie jest to problemem należy jedynie dodać poprzez operator "And" kolejne założenia, czyli powinno to wyglądać tak:

If IsNumeric(Okres1Stan1.Text) And IsNumeric(Okres1Stan2.Text) And IsNumeric(Okres2Stan1.Text) And IsNumeric(Okres2Stan2.Text) And IsNumeric(Okres3Stan1.Text) And IsNumeric(okres3Stan2.Text) Then
Dim roznica1, roznica2, roznica3
Dim wynik1, wynik2, wynik3, wynikcalkowity
roznica1 = Okres1Stan2.Text - Okres1Stan1.Text
roznica2 = Okres2Stan2.Text - Okres2Stan1.Text
roznica3 = okres3Stan2.Text - Okres3Stan1.Text
wynik1 = roznica1 * cena
wynik2 = roznica2 * cena
wynik3 = roznica3 * cena
wynikcalkowity = wynik1 + wynik2 + wynik3

MsgBox("Wynik to " & wynikcalkowity & " zł")
End if


Teraz został dodane kolejne założenia, czyli jeśli, w choć jednym polu nie będzie wartości numerycznej warunek nie zostanie spełniony. Czyli wszystko działa prawidłowo, aby funkcje przeliczające zostały uruchomione muszą być we wszystkich polach wartości liczbowe. Należy jeszcze jedno zrobić. We wszystkich obiektach TextBox zmienić wartość test na 0.
Teraz możesz przetestować program.
W przypadku kiedy wartość nie była by liczbowa nie zostanie wyrzucony błąd i program nie zostanie automatycznie zamkniety.
Jednak jeżeli chodzi o wyświetlenie błędu,. To chyba lepiej by było gdyby program jednak zakomunikował że nie wykonał operacji ze względu na to że wartości podane są nieprawidłowe. Do tego posłużymy się instrukcją else, służy ona do wykonywania funkcji kiedy instrukcja nie zostanie spełniona.
Teraz kod powinien wyglądać tak:
If IsNumeric(Okres1Stan1.Text) And IsNumeric(Okres1Stan2.Text) And IsNumeric(Okres2Stan1.Text) And IsNumeric(Okres2Stan2.Text) And IsNumeric(Okres3Stan1.Text) And IsNumeric(okres3Stan2.Text) Then
Dim roznica1, roznica2, roznica3
Dim wynik1, wynik2, wynik3, wynikcalkowity
roznica1 = Okres1Stan2.Text - Okres1Stan1.Text
roznica2 = Okres2Stan2.Text - Okres2Stan1.Text
roznica3 = okres3Stan2.Text - Okres3Stan1.Text
wynik1 = roznica1 * cena
wynik2 = roznica2 * cena
wynik3 = roznica3 * cena
wynikcalkowity = wynik1 + wynik2 + wynik3

MsgBox("Wynik to" & wynikcalkowity & "zł")
Else
MsgBox("Wpisane wartości są błedne", vbCritical, "błąd wartości")
End If


Dodaliśmy funkcje, która wykona się w razie niespełnienia warunku. Dokładnie jest to okienko informujące, że wartości są błędne.

* w instrukcji warunkowej użyliśmy operatora And, przeciwieństwem do tego operatora jest Or, czyli lub, jeżeli chcielibyśmy go zastosowali do naszego programu zamiast And odwrócilibyśmy całą sytuację i teraz warunek byłby spełniony gdyby, w choć jednym polu pojawiła się wartość liczbowa, co w naszej sytuacji jest niepożądane.


Jednak to nie wszystko, zauważ że wartości w liczniku nie mogą się cofać (teoretycznie…) dlatego w polu Stan 2 danego okresu nie może być wartość większa niż w stanie 1.
Musimy się zastanowić gdzie tą instrukcje "włożyć". Ma on sprawdzić czy wartość w stanie 2 nie jest większ od wartości w stanie1.
Czy pierwsza instrukcją ma być sprawdzenie "czy liczba" czy sprawdzenie "czy dobra wartość"?
Otóż sprawdzenie "czy liczba" musi być pierwsze, bo jeżeli nawet chcemy sprawdzić czy wartość z danego pola jest odpowiednia z całą resztą to i tak musimy sprawdzić najpierw czy porównujemy liczbę.
Stąd wynika, że instrukcje warunkową sprawdzającą "czy wartość nie jest za mała lub za duża" musimy zagnieździć w instrukcji sprawdzającej "czy liczba"

Funkcja powinna wyglądać tak:

If IsNumeric(Okres1Stan1.Text) And IsNumeric(Okres1Stan2.Text) And IsNumeric(Okres2Stan1.Text) And IsNumeric(Okres2Stan2.Text) And IsNumeric(Okres3Stan1.Text) And IsNumeric(okres3Stan2.Text) Then
If Okres1Stan2.Text > Okres1Stan1.Text And Okres2Stan2.Text > Okres2Stan1.Text And okres3Stan2.Text > Okres3Stan1 Then
Dim roznica1, roznica2, roznica3
Dim wynik1, wynik2, wynik3, wynikcalkowity
roznica1 = Okres1Stan2.Text - Okres1Stan1.Text
roznica2 = Okres2Stan2.Text - Okres2Stan1.Text
roznica3 = okres3Stan2.Text - Okres3Stan1.Text
wynik1 = roznica1 * cena
wynik2 = roznica2 * cena
wynik3 = roznica3 * cena
wynikcalkowity = wynik1 + wynik2 + wynik3

MsgBox("Wynik to" & wynikcalkowity & "zł")
Else
MsgBox("Wpisane wartości nie zgadzają się", vbCritical, "błąd wartości")
End If

Else
MsgBox("Wpisane wartości są błedne", vbCritical, "błąd wartości")
End If

Widzimy tutaj jak jedna instrukcja warunkowa jest wpisana w drugą.
W tej drugiej jest sprawdzenie czy licznik się nie cofa, i jeżeli jest OK. to dopiero wtedy są wykonane kolejne funkcje, a jeżeli nie -> wyświetlany jest błąd.
Takie zagnieżdżanie jest dosyć częste w programach i pokazany tu przykład może być jeszcze bardziej rozbudowany na kolejne poziomy zagnieżdżenia.


Post został pochwalony 0 razy
...
Zobacz profil autora
Powrót do góry
jarek13
Newbie



Dołączył: 13 Lut 2010
Posty: 2
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Prądnik

PostWysłany: Wto 0:32, 02 Lis 2010    Temat postu:

Ważne, że skuteczne. Dzięki. Wink

Post został pochwalony 0 razy
...
Zobacz profil autora
Powrót do góry
Napisz nowy temat   Odpowiedz do tematu    Forum Forum hakerskie - najlepsze forum hakerskie Strona Główna » Visual Basic
Wyświetl posty z ostatnich:   
 
 
Wszystkie czasy w strefie EET (Europa)
Skocz do:  

Strona 1 z 1


Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2002 phpBB Group

Theme created OMI of Kyomii Designs for BRIX-CENTRAL.tk.