Utworzenie funkcji użytkownika w Visual Basic

Transkrypt

Utworzenie funkcji użytkownika w Visual Basic
Utworzenie funkcji użytkownika w Visual Basic
Po co?
Potrzebna jest nam funkcja, która nie występuje w Excelu.
Zadanie 1.
Utwórz funkcję użytkownika kotek, która będzie funkcją dwóch zmiennych b i h i będzie opisana wzorem:
bh 3
kotek (b, h ) =
12
Rozwiązanie Zadania 1.
‘Pisanie funkcji zaczynamy od Function [nazwa funkcji] i w nawiasie definiujemy jej zmienne czyli (b, h)’
‘Przypominam, że instrukcje pisane od apostrofu są tekstem nie kolidującym z kodem programu
‘Oczywiście piszemy w utworzonym Module
Function kotek(b, h)
‘Definiujemy zmienną, czyli tak naprawdę wzór funkcji kotek
kotek = b * h ^ 3 / 12
‘No i koniec ☺ czyli
End Function
Wywołanie funkcji kotek – sposób pierwszy – z menu programu
tu można również podać adresy komórek ze zmiennymi zamiast wartości
Wywołanie funkcji kotek – sposób drugi – pisząc funkcję w komórce z podaniem wartości zmiennych po
średniku
Zadanie 2.
Utwórz funkcję użytkownika ola, która będzie funkcją dwóch zmiennych x i i oraz będzie opisana wzorem:
x

ola( x, i ) = 1 + 
i

i
Rozwiązanie Zadania 2.
‘Pisanie funkcji zaczynamy tak samo jak poprzednio
Function ola(x, i)
‘Przed zdefiniowaniem zmiennej czyli naszej funkcji dobrze by było się zabezpieczyć przed dzieleniem przez 0
– wtedy, gdy i=0
‘najszybciej zrobimy to poprzez funkcję If, symbol „<>” oznacza „różny od”
If i<>0 Then
ola = ( 1 + x / i ) ^ i
Else
ola = 0
‘opcjonalnie można dodać to, oznacza to o przewidywaniu programisty ☺
msgbox „Wybierz inną wartość i, ponieważ nie mogę dzielić przez 0”
‘oczywiście zakończenie polecenia If’
End If
End Function
Oczywiście wszystkie funkcje można pisać po sobie w jednym Module.
Wywołanie funkcji ola – 2 sposoby jak poprzednio – dodatkowo sprawdzenie działania
Teraz podstawiamy i=0
Dopiero po kliknięciu OK, w funkcji pojawia nam się wartość 0 (ale może również pojawić się „symbol
nieoznaczony”; „???”; „-” lub cokolwiek co będzie zaprogramowane)
Zadanie 3. – funkcja w funkcji
Utwórz funkcję użytkownika burek, która będzie funkcją dwóch zmiennych x i N oraz będzie wykorzystywała
funkcję ola. Funkcje są opisane wzorami:

ola( x, i ) = 1 +

x

i
i
N
burek ( x, N ) = ∑ ola ( x, i )
i =1
Rozwiązanie Zadania 3.
‘Mamy funkcję w funkcji, ale dlaczego w funkcji burek nie definiujemy zmiennej i ? – dlatego, że i zmienia się
od wartości 1 do N co 1, ponieważ funkcja burek jest ciągiem
Function burek (x, N)
‘znowu, zabezpieczamy się przed ciekawskimi, którzy będą chcieli obliczyć sumę 21532432424324 wyrazów
ciągu czyli
If N>0 And N<100 Then
‘następnie wprowadzamy pętlę For, co oznacza mniej więcej tyle, że to, co jest w pętli będzie wykonywane aż
do spełnienia następującego warunku
For i=1 To N
‘suma ciągu równa się starej wartości sumy powiększonej o nowy, kolejny wyraz ciągu’
burek = burek + ola (x, i)
‘zakończamy pętlę poleceniem Next
Next
‘skoro użyliśmy polecenia If, musimy wprowadzić jego drugi człon Else czyli co, gdy N>100 lub N<0
Else
Msgbox „Podaj N z zakresu (0,100)”
‘dodatkowo czyścimy wartość funkcji
burek = „”
End If
End Function
Sprawdzenie działania funkcji
Teraz podajemy N spoza zakresu (0,100)
Po wciśnięciu OK, wartość funkcji jest czyszczona, inaczej pozostałby poprzedni wynik funkcji, który może
czasami wprowadzić w błąd
Zadanie 4.
Utwórz funkcję użytkownika, która będzie sprawdzać położenie punktu o współrzędnych x, y względem okręgu
o współrzędnych środka x0, y0 i promieniu r w punkcie oraz będą informować o położeniu punktu.
Przydatny wzór:
( x − x 0 )2 + ( y − y 0 )2 = r 2
oraz warianty do ropzatrzenia:
2
2
1. ( x − x0 ) + ( y − y 0 ) < r 2 - punkt leży wewnątrz okręgu
2. ( x − x0 ) + ( y − y 0 ) = r 2 - punkt leży na okręgu
2
2
3. ( x − x0 ) + ( y − y 0 ) > r 2 - punkt leży na zewnętrz okręgu
2
2
Przykładowe rozwiązanie zadania 4.
‘Jedyna nowość operator Or czyli jeśli jeden lub drugi warunek będzie spełniony to’
Function okrag1(x_0, y_0, x, y, r)
If r < 0 Or r = 0 Then
okrag1 = "???"
MsgBox "Promień musi mieć wartość dodatnią, różną od 0"
Else
If (x - x_0) ^ 2 + (y - y_0) ^ 2 > r ^ 2 Then
okrag1 = "Punkt leży poza okręgiem"
ElseIf (x - x_0) ^ 2 + (y - y_0) ^ 2 = r ^ 2 Then
okrag1 = "Punkt leży na okręgu"
ElseIf (x - x_0) ^ 2 + (y - y_0) ^ 2 < r ^ 2 Then
okrag1 = "Punkt leży wewnątrz okręgu"
End If
End If
End Function
Zadanie 5.
Utwórz funkcję użytkownika, która będzie sprawdzać pierwiastki równania kwadratowego postaci ax2 + bx + c
i informować użytkownika o wyniku sprawdzenia.
Przydatny wzór:
ax 2 + bx + c
oraz warianty do rozpatrzenia:
1. ∆ > 0 - dwa rozwiązania rzeczywiste, podana wartość x1 i x2,
2. ∆ = 0 - jedno rozwiązanie rzeczywiste, podana wartość x0,
3. ∆ < 0 - brak rozwiązań rzeczywistych
4. gdy a=0 - jest to funkcja liniowa i gdzie ma miejsce zerowe,
5. gdy a=0 oraz b=0 - jest to funkcja stała,
6. gdy wprowadzone będą dane nieliczbowe.
Przykładowe rozwiązanie zadania 5.
Function kwadrat(a, b, c)
'sprawdzanie czy są to liczby
If IsNumeric(a) And IsNumeric(b) And IsNumeric(c) Then
'sprawdzenie czy jest to funkcja liniowa
If a = 0 And b <> 0 Then
x0 = -c / b
MsgBox ("Jest to równanie prostej." & Chr(10) & "Jest jeden pierwiastek:" & Chr(10) & "x0 = " & x0)
'sprawdzenie czy jest to funkcja stała
ElseIf a = 0 And b = 0 Then
MsgBox ("Jest to funkcja stała.")
Else
'obliczanie delty
Delta = (b * b) - (4 * a * c)
'są 2 pierwiastki
If Delta > 0 Then
x1 = (-b + Sqr(Delta)) / (2 * a)
x2 = (-b - Sqr(Delta)) / (2 * a)
MsgBox ("Są dwa pierwiastki równania:" & Chr(10) & "x1 = " & x1 & Chr(10) & "x2 = " & x2)
'jest 1 pierwiastek
ElseIf Delta = 0 Then
x0 = -b / (2 * a)
MsgBox ("Jest jeden pierwiastek równania:" & Chr(10) & "x0 = " & x0)
'nie ma pierwiastków rzeczywistych
Else
MsgBox ("Nie ma pierwiastków rzeczywistych tego równania")
End If
End If
'gdy nie są to liczby
Else
MsgBox ("Parametry a, b i c muszą być liczbami")
End If
End Function
Zadanie 6.
Utwórz funkcję użytkownika, która będzie sprawdzać sumę kątów (α, β, γ, δ) w czworokącie i informować
użytkownika o wyniku sprawdzenia.
Przydatny wzór:
suma = α + β + γ + δ
oraz warianty do rozpatrzenia:
1. kąty są po 90° – z danych kątów można utworzyć prostokąt,
2. kąty α i β oraz γ i δ są sobie równe, ale inne niż 90° – z danych kątów można utworzyć trapez,
3. kąty α i γ oraz β i δ są sobie równe, ale inne niż 90° – z danych kątów można utworzyć romb,
4. kąty α , β , γ i δ są różne od siebie,– z danych kątów można utworzyć czworokąt,
5. gdy suma ≠ 360° - z danych kątów nie można utworzyć czworokąta,
6. gdy co najmniej jeden kąt = 0° - z danych kątów nie można utworzyć czworokąta,
7. gdy wprowadzone będą dane nieliczbowe.
Przykładowe rozwiązanie zadania 6.
Function czworokat(a, b, c, d)
If IsNumeric(a) And IsNumeric(b) And IsNumeric(c) And IsNumeric(d) Then
suma = a + b + c + d
If suma = 360 And a > 0 And b > 0 And c > 0 And d > 0 Then
If a = b And c = d And a = c Then
MsgBox ("Jest to prostokąt")
ElseIf a = c And b = d And a <> b Then
MsgBox ("Jest to prostokąt")
ElseIf a = b And c = d And a <> c Then
MsgBox ("Jest to trapez")
Else
MsgBox ("Jest to czworokąt")
End If
Else
MsgBox ("Nie jest to czworokąt")
End If
Else
MsgBox ("Podaj liczby")
End If
End Function