13. august 2002 - 21:50Der er
12 kommentarer og 1 løsning
Return flere værdier eller et array fra en funtion ??
Hej Eksperter ! Hvordan får jeg en funktion som denne her til at returner flere værdier:
Function CalcRoots(a, b, d) As Double If d >= 0 Then solutions(0) = (-b - Sqr(d)) / (2 * a) If d > 0 Then solutions(1) = (-b + Sqr(d)) / (2 * a) Else solutions(1) = solutions(0) End If End If
I C får jeg dem returneret med en "return solutions", men hvordan er det i Visual Basic ??
' Først med kald af funktion ***************************************
Sub form1_load() dim TestVar, var1, var2, var3
TestVar = CalcRoots(var1, var2, var3) Text1.text = TestVar End Sub
Function CalcRoots(a, b, d) As Double ' a,b,c skal også her dim'es
If d >= 0 Then solutions(0) = (-b - Sqr(d)) / (2 * a) If d > 0 Then solutions(1) = (-b + Sqr(d)) / (2 * a) Else solutions(1) = solutions(0) End If End If ' Her skal returværdien sættes ' ellers får du ingen returværdi
CalcRoots = solutions(1)
End function
' så med kald til Sub **********************************************
Sub form1_load() dim var1, var2, var3 var1=10 var2=56 var3=15
CalcRoots1(var1, var2, var3) Text1.text = var1 Text2.text = var2 Text3.text = var3 End Sub
Sub CalcRoots1(a, b, d) As Double ' a,b,c arver dim fra var1,var2, var3
If d >= 0 Then solutions(0) = (-b - Sqr(d)) / (2 * a) If d > 0 Then solutions(1) = (-b + Sqr(d)) / (2 * a) Else solutions(1) = solutions(0) End If End If
a = solution(0) b = solution(1) 'Der kan også returneres i d, men man behøver det ikke
Du kan godt returnere et array (variant) indeholdende begge resultater, problem er bare at bruge det. Efter kørslen vil Calcroots indeholde begge værdier i en Variant.
Option Base 1 Function CalcRoots(a As Double, b As Double, d As Double) As Variant Dim solutions(2) If d >= 0 Then solutions(1) = (-b - Sqr(d)) / (2 * a) If d > 0 Then solutions(2) = (-b + Sqr(d)) / (2 * a) Else solutions(2) = solutions(1) End If End If CalcRoots = solutions End Function
Du kan prøve at teste sådan her: Sub test() Dim result As Variant result = CalcRoots(3, 1, 5) MsgBox "Tal 1: " & result(1) & " Tal 2: " & result(2) End Sub
Kan ikke rigtig få det til at virke :-( Kan i se hvad jeg gøre galt ??
Private Sub CalcDeter_Click() Dim a, b, c As Double a = Text1.Text b = Text2.Text c = Text3.Text Text4.Text = CalcD(a, b, c) End Sub Public Sub CalcRoots_Click() Dim a, b, c, d As Double Dim result As Variant a = Text1.Text b = Text2.Text c = Text3.Text d = CalcD(a, b, c) result = CalcR(a, b, d) Text4.Text = result(0) & result(1) End Sub Function CalcD(a, b, c As Double) As Double CalcD = (b * b) - (4 * a * c) End Function
Function CalcR(a, b, d As Double) As Variant If d >= 0 Then solutions(0) = (-b - Sqr(d)) / (2 * a) If d > 0 Then solutions(1) = (-b + Sqr(d)) / (2 * a) Else solutions(1) = solutions(0) End If End If ClacR = solutions End Function
Option Base 1 Private Sub CalcRoots_Click() Dim a As Double, b As Double, c As Double, d As Double Dim result As Variant a = CDbl(TextBox1.Text) b = CDbl(TextBox2.Text) c = CDbl(TextBox3.Text) d = CalcD(a, b, c) result = CalcR(a, b, d) TextBox4 = result(1) & " " & result(2) End Sub
Private Sub CalcDeter_Click() Dim a As Double, b As Double, c As Double a = CDbl(Text1.Text) b = CDbl(Text2.Text) c = CDbl(Text3.Text) Text4.Text = CalcD(a, b, c) End Sub
Function CalcD(a As Double, b As Double, c As Double) As Double CalcD = (b * b) - (4 * a * c) End Function
Function CalcR(a As Double, b As Double, d As Double) As Variant Dim solutions(2) If d >= 0 Then solutions(1) = (-b - Sqr(d)) / (2 * a) If d > 0 Then solutions(2) = (-b + Sqr(d)) / (2 * a) Else solutions(2) = solutions(1) End If End If CalcR = solutions End Function
Hej igen. Det hjalp en del, men nu brikker den sig over min CalcR funktion. Den siger at den er gal med linien: solutions(1) = (-b - Sqr(d)) / (2 * a) Ved i hvorfor ??
Ovenstående problem er løst. Nu fejler den bare med udskrivningen af rødderne koden er her:
Public Sub CalcRoots_Click() Dim a As Double, b As Double, c As Double, d As Double Dim result As Variant a = CDbl(Text1.Text) b = CDbl(Text2.Text) c = CDbl(Text3.Text) d = CalcD(a, b, c) result = CalcR(a, b, d) Text4.Text = result(0) & " " & result(1) End Sub
Problemet er, at result er "Empty" og derfor kan den naturligvis ikke udskrive på den næste linie Nogen forslag ??
Måske fordi at en Variant ikke har et 0, men starter ved 1 altså result(0) findes ikke. Derfor har jeg også skrevet result(1) og (2) og for at være konsistent har jeg også option base 1 med således at miy array solutions også starter ved element 1
Så fandt jeg endelig ud af det :-) Takker mange gange for hjælpen...
Mvh.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.