Visual Basic (9)
Lekcja 20
Witajcie wszyscy. Dziś przed wami kolejna dość prosta lekcja.
Poznamy kilkanaście funkcji. Dość gadania zaczynamy.
Visual Basic potrafi dobrze operować na godzinach:
1. Wyciąganie informacji o dacie - Stwórzmy mały programik, ułóżmy
przycisk i dodajmy do niego kod:
x = MsgBox(Date)
Uruchamiamy. Program w okienku pokazuje dzisiejszą datę w
formacie yy-mm-dd
(rok [dwie ostatnie cyfry]- miesiąc, dzień )
2.DateSerial zwraca w wewnętrznym formacie datę wpisaną przez
nas ręcznie np.
Dim MyDate
MyDate = DateSerial(1969, 2, 12)
x = MsgBox (MyDate)
Zwraca to 69-02-12
3.DateAdd - potrafi dodawać do podanej daty miesiące dni itd:
Zobaczmy jak to działa. Do przycisku dodajmy kod:
Dim DataPoczatek As Date ' Declare variables.
Dim TypDopisu As String
Dim Miesiace As Integer
Dim Odp
TypDopisu = "m"
DataPoczatek = InputBox("Podaj jakąś datę w formacie
yy-mm-dd")
Miesiace = InputBox("Ile miesięcy chcesz dodać")
Odp = "Nowa data: " & DateAdd(TypDopisu, Miesiace,
DataPoczatek)
x = MsgBox (Odp)
Uruchom go. Program najpierw pyta nas o datę, potem ile miesięcy
chcemy dodać, i w końcu dostajemy odpowiedź.
Składnia tej funkcji:
DateAdd (Jednostka, Ilość jednostek, Data)
yyyy |
Rok |
q |
Kwartał |
m |
Miesiąc |
y |
Dni w roku |
d |
Dni |
w |
Weekendy |
ww |
Tygodnie |
h |
Godziny |
n |
Minuty |
s |
Sekundy |
Zauważ, że w naszym przykładzie użyliśmy literału m - czyli
miesiące
4.DateDiff - zwraca ilość jednostek czasu między dwoma datami
Dim TheDate As Date
Dim Msg
TheDate = InputBox("Podaj jakąś przyszłościową datę")
Odp = "Będzie to za: " & DateDiff("d", Now,
TheDate) & " dni."
x = MsgBox (Odp)
Zauważ w tym programiku w linijce 4, że użyliśmy literki d co
oznacza ilość dni.
Składnia :
DateDiff ("jednostka", data1, data2)
5.DatePart - zwraca ilość jednostek licząc od początku roku.
np.
Dim TheDate As Date
Dim Odp
TheDate = InputBox("Podaj datę:")
Odp = "Od początku roki minęło: " &
DatePart("q", TheDate) & " kwartałów"
x = MsgBox (Odp)
Składnia:
DatePart ("jednostka", data)
6.Now - zwraca aktualną datę i czas
x = MsgBox (Now)
wyświetli to np. 00-06-15 11:12:34
7.Time - zwraca aktualny czas np.
x = msgBox(Time)
zwróci to np. 12:23:54
9. TimeSerial - zwraca w wewnętrznym formacie godzinę
MyTime = TimeSerial(16, 35, 17)
' Reprezentacja godziny 4:35:17 po południu.
Zwróci to 16:35:17
10. Timer - tą funkcją zajmiemy się trochę dokładnie, gdyż
jest ona używana dość często. Zwraca ona ilość sekund które
upłynęły od północy. No, ale po ci to ma być potrzebne ?
Napiszemy program który pyta się nas ile to jest 12*6. Po
podaniu prawidłowej odpowiedzi program wyświetli komunikat ile myśleliśmy
nad tym zadaniem...
Ale po co tu funkcja licząca sekundy od północy ?
Załóżmy, że uruchomiliśmy program dokładnie o północy -
funkcja timer wskazuje 0. Rozwiązujemy zadanie 10 sek, funkcja
timer wskaże 10 sek. Jeśli teraz odejmiemy czas odpowiedzi od
czasu zapytania otrzymamy czas ile spędziliśmy na rozwiązywaniu
zadania.
No dobra - inaczej. Zaczęliśmy w 12000 sekundzie od północy, po
10 sek. timer wskaże 12010 czyli 12010-12000 = 10 sek (myślenia).
Napiszmy program - może lepiej to zrozumiesz:
Na formularzu umieść przycisk i dodaj do niego kod:
Dim CzasPrzed, CzasPo, CzasRoznica as Single
Dim Odp as string
CzasPrzed = Timer ' Pobieramy czas początku testu
Do
Odp = InputBox ("Ile wynosi iloczyn 12 i 6 ?")
Loop Until Val(Odp) = 72
CzasPo = Timer '' Pobieramy czas końca testu
CzasRoznica = CzasPo - CzasPrzed
x = MsgBox("Zajęło ci to: " & CzasRoznica &
" sekund")
Przy okazji przypomniałeś sobie pętle. Program będzie wyświetlał
pytanie dopóki nie podamy prawidłowej odpowiedzi. Potem oblicza
czas i podaje wynik. Uruchom program i sam sprawdź...
Jak widzisz odpowiedź jest ułamkowa - ale o zaokrąglaniu liczb
dowiesz się na następnej lekcji.
Lekcja 21
Ostatnio poznaliśmy funkcje czasowe - dziś
czas na funkcje matematyczne. Do dzieła
1. Abs (liczba) - zwraca wartość bezwzględną z liczby np:
Abs(4) = 4
Abs(-4) = 4
Abs(0) = 0
2.Atn (liczba) - zwraca wartość arcusCotangens liczby wyrażoną
w radianach np.
4 * Atn(1) = pi
3.Cos (liczba) - zwraca cosinus z liczby
4.Exp(liczba) - e ^ liczba ; e - podstawa logarytmu naturalnego
5.Log (liczba) - zwraca wartość logarytmu naturalnego z liczby
6.Sng(liczba) - Dla liczby dodatniej zwraca 1, dla ujemnej -1, a
dla 0 - 0 np.
Sng(23) = 1
Sng(-29) = -1
Sng(0) = 0
7.Sin(liczba) - zwraca sinus z liczby
8.Sqr(liczba) - zwraca pierwiastek kwadratowy z liczby np.
Sqr(9) = 3
Jeśli chcesz wyliczać pierwiastki n-tego stopnia z liczby x to
musisz zastosować wzór:
x ^ (1/n)
9.Tan(liczba) - zwraca tangens liczby
10. INT((6 * RND) + 1) - całkowita liczba losowa z przedziału
od 1 do 6. No może nie całkiem losowa - sam zobacz. Uruchom VB, na
formie ułóż przycisk i dodaj do niego następujący kod:
Dim x
x = INT((6 * RND) + 1)
odp = MsgBox(x)
Wystartuj program. Po naciśnięciu przycisku pojawi się
pierwsza liczba - zapamiętaj ją. Teraz OK i jeszcze raz kliknij na
przycisk - tym razem inna (chyba) liczba, także ją zapamiętaj. Zrób
tak jeszcze kilka razy (zapamiętaj tylko te dwie pierwsze). No i co
? Są liczby losowe.
Teraz wyłącz program i włącz go jeszcze raz. Kliknij na przycisk
- pierwsza liczba jest taka sama jak poprzednio. Druga też... Jakbyś
sprawdzał dalej to wszystkie by się powtórzyły w tej samej
kolejności. Nie będę tłumaczył dlaczego bo tylko bym Wam pomącił
w głowie. Aby VB za każdym razem losował inne liczby należy
przed funkcją RND dopisać Randomize, będzie to wyglądało tak:
Dim x
Randomize
x = INT((6 * RND) + 1)
odp = MsgBox(x)
A jak np. zrobić Cotangensa z liczby ? Oto krótka ściągawka :
Secant Sec(X) = 1 / Cos(X)
Cosecant Cosec(X) = 1 / Sin(X)
Cotangent Cotan(X) = 1 / Tan(X)
Inverse Sine Arcsin(X) = Atn(X /
Sqr(-X * X + 1))
Inverse Cosine Arccos(X) =
Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Inverse Secant Arcsec(X) = Atn(X
/ Sqr(X * X – 1)) + Sgn((X) – 1) * (2 * Atn(1))
Inverse Cosecant Arccosec(X) =
Atn(X / Sqr(X * X - 1)) + (Sgn(X) – 1) * (2 * Atn(1))
Inverse Cotangent Arccotan(X) =
Atn(X) + 2 * Atn(1)
Hyperbolic Sine HSin(X) = (Exp(X)
– Exp(-X)) / 2
Hyperbolic Cosine HCos(X) = (Exp(X)
+ Exp(-X)) / 2
Hyperbolic Tangent HTan(X) = (Exp(X)
– Exp(-X)) / (Exp(X) + Exp(-X))
Hyperbolic Secant HSec(X) = 2 /
(Exp(X) + Exp(-X))
Hyperbolic Cosecant HCosec(X) =
2 / (Exp(X) – Exp(-X))
Hyperbolic Cotangent HCotan(X) =
(Exp(X) + Exp(-X)) / (Exp(X) – Exp(-X))
Inverse Hyperbolic Sine
HArcsin(X) = Log(X + Sqr(X * X + 1))
Inverse Hyperbolic Cosine
HArccos(X) = Log(X + Sqr(X * X – 1))
Inverse Hyperbolic Tangent
HArctan(X) = Log((1 + X) / (1 – X)) / 2
Inverse Hyperbolic Secant HArcsec(X)
= Log((Sqr(-X * X + 1) + 1) / X)
Inverse Hyperbolic Cosecant HArccosec(X)
= Log((Sgn(X) * Sqr(X * X + 1) + 1) / X)
Inverse Hyperbolic Cotangent
HArccotan(X) = Log((X + 1) / (X – 1)) / 2
Logarithm to base N LogN(X) =
Log(X) / Log(N)
Bardzo przepraszam, że ściągawka jest nie przetłumaczona na
polski. Wyciągnąłem ją żywcem z Helpa. Myślę, że zwykli użytkownicy
nigdy ich nie użyją - jest to dla matematyków (oni już sobie
poradzą z tymi funkcjami). Pewnie spytacie po co to tu umieściłem.
Skoro jest w helpie... Założę się, że większość z Was ma
pirackiego VB. Jeśli zakupiłeś 1 płytkę VB 6 to na pewno Helpa
nie posiadasz. No dobra - to tyle jeśli chodzi o funkcje
matematyczne
Dariusz "Slash" Wadowski
slash@at.bjn.pl
|