30. september 2004 - 22:38Der 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
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
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.
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
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.