Avatar billede hejhejhej Nybegynder
30. september 2004 - 22:38 Der er 8 kommentarer og
1 løsning

behandle udtryk som en "ligning"

Hvordan kan man behandle et ydtryk som en ligning med nogle ubekendte.
Jeg har tænkt mig at lave en funktion som givet en ligning samt outputtet fra ligningen når nogle værdier indsættes, fx
ligning = 2*x+y^2
call udregnOutput(ligning)

Private Function udregnOutput(ByVal ligning As Double) As Double
Dim x, y As Double
    x = 2
    y = 5
    Return ligning
End Function

er dette muligt på en eller anden måde ?
Avatar billede arne_v Ekspert
30. september 2004 - 22:43 #1
Vil du have:

"Y=X*X+2*X+1" og "X=1" -> "Y=4"

eller

"X*X+2*X+1=4" -> "X=1"

?
Avatar billede hejhejhej Nybegynder
30. september 2004 - 23:11 #2
jeg vil have den skal gøre flg:
ligning = 2 * x + y * y

private function hej(ligning)
x = 1
y = 2
return resultat, hvor resultat i det her tilfælde er 2*1+2*2 = 6
end function
Avatar billede arne_v Ekspert
01. oktober 2004 - 00:01 #3
Der er en eval funktion i JavaScript.

.NET har JScript.NET.

Man kan kalde fra et .NET sprog til et andet.

JScript.NET er ikke nem at kalde, men det kan gøres.

Her er lidt kode:

Imports System
Imports Microsoft.JScript
Imports Microsoft.JScript.Vsa

Public Class ExprCalc
    Public Shared Function Evaluate(ByVal s As String) As Double
        Return Double.Parse(Eval.JScriptEvaluate(s, VsaEngine.CreateEngine).ToString)
    End Function

    Public Shared Function EvaluateX(ByVal s As String, ByVal x As String) As Double
        Return Double.Parse(Eval.JScriptEvaluate(s.Replace("X", x), VsaEngine.CreateEngine).ToString)
    End Function

    Public Shared Function EvaluateXY(ByVal s As String, ByVal x As String, ByVal y As String) As Double
        Return Double.Parse(Eval.JScriptEvaluate(s.Replace("X", x).Replace("Y", y), VsaEngine.CreateEngine).ToString)
    End Function

    Public Shared Function EvaluateXYZ(ByVal s As String, ByVal x As String, ByVal y As String, ByVal z As String) As Double
        Return Double.Parse(Eval.JScriptEvaluate(s.Replace("X", x).Replace("Y", y).Replace("Z", z), VsaEngine.CreateEngine).ToString)
    End Function
End Class

Class MainClass
    Public Shared Sub Main(ByVal args As String())
        Console.WriteLine(ExprCalc.Evaluate("1+2+3"))
        Console.WriteLine(ExprCalc.EvaluateXY("2*X+Y*Y", "1", "2"))
    End Sub
End Class
Avatar billede jepsen999 Nybegynder
01. oktober 2004 - 07:19 #4
Hvad med at lave en klasse der indeholder den konstant der findes i ligningen og derefter definere en beregn-metode på klassen der tager x og y som input-parametre:
Public Class Ligning
    Dim a As Double
    Dim yExp As Integer

    Public Sub New(ByVal a As Double, ByVal yExp As Double)
        Me.a = a
        Me.yExp = yExp
    End Sub

    Public Function Beregn(ByVal x As Double, ByVal y As Double)
        Return a * x + Math.Pow(y, yExp)
    End Function
End Class

Herefter kan du beregne:
dim l as new Ligning(2,2)
dim resultat as double
resultat = l.Beregn(1,2)  ' = 6

Du kan evt. sende flere parametre med i konstruktoren til ligningen.
Avatar billede jepsen999 Nybegynder
01. oktober 2004 - 07:21 #5
Klassen ligning kan beregne udtryk der er på formen
a*x + y^yExp
men du kan jo udvide den hvis der er behov for det.
Avatar billede arne_v Ekspert
01. oktober 2004 - 19:20 #6
Det JScript trick kan faktisk forbedres !

Se:

Imports System
Imports Microsoft.JScript
Imports Microsoft.JScript.Vsa

Public Class ExprCalc
    Private Shared eng As VsaEngine = VsaEngine.CreateEngine
   
    Public Shared Function Evaluate(ByVal s As String) As Double
        Return Double.Parse(Eval.JScriptEvaluate(s, eng).ToString)
    End Function
End Class

Class MainClass
    Public Shared Sub Main(ByVal args As String())
        Console.WriteLine(ExprCalc.Evaluate("1+2+3"))
        Console.WriteLine(ExprCalc.Evaluate("var X=1;var Y=2;2*X+Y*Y"))
    End Sub
End Class
Avatar billede arne_v Ekspert
17. oktober 2004 - 17:56 #7
hejhejhej>

Tid at få afsluttet spørgsmålet ?
Avatar billede arne_v Ekspert
24. oktober 2004 - 21:47 #8
??
Avatar billede hejhejhej Nybegynder
12. februar 2005 - 09:24 #9
sry
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester