⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csharpexample.cs

📁 一个解析数学表达式的c++程序
💻 CS
📖 第 1 页 / 共 2 页
字号:
				m_parser.defineVar(m_z as IMTVariable);
				
				// Define a shared double variable for test purpose
				MTDouble v = new MTDouble();				

				v.create("v", 1.0);
				m_parser.defineVar(v as IMTVariable);
				double r = 0;
								
				r = m_parser.evaluate("v");
				
				// Change the variable's value
				v.value = 10.0;				

				r = m_parser.evaluate("v");
				Console.Out.WriteLine( "r = {0}", r ) ;

				// Create another parser and copy the existing parser configuration
				MTParser p2 = new MTParser();
				p2.copy(m_parser);

				r = p2.evaluate("v");				

				// the shared variable has been copied
				// Changing the shared variable's value updates all parsers using this variable
				v.value = 3.0;
				r = p2.evaluate("v");
				r = m_parser.evaluate("v");

				// define a constant
				m_parser.defineConst("pi", 3.14159);

                // define  a user-defined function
                m_parser.defineFunc(new MySumFunction());
				
				// Load localized information
				string dir = System.AppDomain.CurrentDomain.BaseDirectory;				
				MTParserLocalizer localizer = new MTParserLocalizer();
				localizer.locale = "en";				
				localizer.registerAllLibraries( dir, "*.xml");								
				

				sMTSyntax syntax = m_parser.getSyntax();				
				syntax.decimalPoint = '.';
				syntax.argumentSeparator = ',';
				m_parser.setSyntax(ref syntax);
				
				// Load plug-ins				
				m_parser.loadAllPlugins( dir, "*.xml");

              
                
				
				
			}
			catch ( Exception )
			{
				MessageBox.Show("Error: " + getLastExcepText(m_parser), "Project1");
			}
		}

		string getLastExcepText(MTParser parser) 
		{			
			string msg = "";
			MTExcepData e = new MTExcepData();
			MTParserLocalizer loc = new MTParserLocalizer();
			
			do
			{
				parser.getLastExcep(e);
				if (e.getID() != "ok")
				{
					string desc = "";
					try
					{
						desc = loc.getExcep(e);
					}
					catch( Exception )
					{
						// No localized description available, so take the default text
						desc = e.getDescription();
					}

					msg = msg + desc;
					msg = msg + Environment.NewLine ;
				}
			} while(e.getID() != "ok");			
			
			return msg;
		}

		void Benchmark_Click(Object _sender, EventArgs _e1) 
		{		
			
			try
			{
				// For optimum performance evaluate in a batch...

				// Redefine vector variables to contain multiple values 
				MTParser benchParser = new MTParser();
				benchParser.copy( m_parser );
				
				MTDoubleVector x = new MTDoubleVector();
				MTDoubleVector y = new MTDoubleVector();
				MTDoubleVector z = new MTDoubleVector();
				x.create("x");
				y.create("y");
				z.create("z");
                
				benchParser.undefineAllVars();
				benchParser.defineVar(x as IMTVariable);
				benchParser.defineVar(y as IMTVariable);
				benchParser.defineVar(z as IMTVariable);			

				// Compile the expression only once
				benchParser.compile(Expr.Text);				
				
				// Generate random variable values...
				int nbEvals = 400000;				

				double[] xval = new double[nbEvals];
				double[] yval = new double[nbEvals];
				double[] zval = new double[nbEvals];
				System.Random r = new System.Random(100);

				for(int i = 0; i < nbEvals; i += 1)
				{					
					xval[i] = r.Next(0, 1000);
					yval[i] = r.Next(0, 1000);
					zval[i] = r.Next(0, 1000);
				}
				
				// Set values...				
				x.setValueVector(xval);
				y.setValueVector(yval);
				z.setValueVector(zval);				
				
				
				double[] results = new double[nbEvals];		// this will contain all the results after evaluations
				
				long beginTime = 0;
				long endTime = 0;				
				beginTime = GetTickCount();								// start the timer
				benchParser.evaluateCompiledBatch(nbEvals, results);	// do all evaluations in one call, avoiding multiple COM calls							
				endTime = GetTickCount();								// stop the timer

				long elapsedTime = 0;
				elapsedTime = endTime - beginTime;				

				long nbEvalSec = 0;
				double timePerEval = 0;
				timePerEval = elapsedTime / (double)nbEvals;
				nbEvalSec = (long)(nbEvals / elapsedTime * 1000.0);

				Msg.Text = "Nb. Evaluations: " + nbEvals;
				Msg.Text = Msg.Text + Environment.NewLine ;
				Msg.Text = Msg.Text + "Elapsed time (ms): " + elapsedTime;
				Msg.Text = Msg.Text + Environment.NewLine ;
				Msg.Text = Msg.Text + "Time per evaluation (ms): " + timePerEval;
				Msg.Text = Msg.Text + Environment.NewLine ;
				Msg.Text = Msg.Text + "Nb. Eval per sec: " + nbEvalSec;
			}
			catch ( Exception e)
			{
				Msg.Text = "Error: " + e.Message;
			}
		}

		void Evaluate_Click(Object _sender, EventArgs _e1) 
		{
			try
			{
				// Update the variable' values
				m_x.setValue(Convert.ToDouble(VarX.Text));
				m_y.setValue(Convert.ToDouble(VarY.Text));
				m_z.setValue(Convert.ToDouble(VarZ.Text));
				
				// Evaluate the expression with the current variable' values
				Result.Text = Convert.ToString(m_parser.evaluate(Expr.Text));

				// Print the used variables
				int nbUsedVars = 0;
				nbUsedVars = m_parser.getNbUsedVars();
				
				Msg.Text = "Used variables: ";
				string symbol;
				for(int t = 0; t <= nbUsedVars - 1; t += 1)
				{
					symbol = m_parser.getUsedVar(t);
					Msg.Text = Msg.Text + symbol;
					if (t != nbUsedVars - 1)
					{
						Msg.Text = Msg.Text + ", ";
					}
				}
			}
			catch ( Exception )
			{
				Msg.Text = "Syntax error: " + getLastExcepText(m_parser);
			}
		}

		void Index_Click(Object _sender, EventArgs _e1) 
		{
			IndexDlg frm = new IndexDlg();
			frm.SetParser( m_parser );
			frm.ShowDialog( this ) ;
		}

		void DefineMacro_Click(Object _sender, EventArgs _e1) 
		{
			_macroDefinition.ShowDialog( this ) ;
		}

		
	}


    /// <summary>
    /// Example of a user-defined function.  Implement only
    /// the evaluateX method specified by the getNbArgs method.
    /// </summary>
public class MySumFunction : IMTFunction
{
    public double evaluate0()
    {            
        throw new Exception("The method or operation is not implemented.");
    }

    public double evaluate1(double arg)
    {
        return arg;
    }

    public double evaluate2(double arg, double arg2)
    {
        return arg + arg2;
    }

    public double evaluate3(double arg, double arg2, double arg3)
    {
        return arg + arg2 + arg3;
    }

    public double evaluate(Array pArgs)
    {
        double sum = 0;
        for (int t = 0; t < pArgs.Length; t++)
        {
            sum += (double)pArgs.GetValue(t);
        }

        return sum;
    }

    public string getDescription()
    {
        return "Computes the sum of many values";
    }

    public string getHelpString()
    {
        return "slowsum(x,y,z,...)";
    }

    public int getNbArgs()
    {
        return -1;
    }

    public string getSymbol()
    {
        return "slowsum";
    }
}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -