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 

 


Copyright 2001 by magazyn @t.Wszelkie prawa zastrzeżone.