public void SimpleSum() { string testReqwest = "1 + 1.2"; var answer = MathParser.Parse(testReqwest); Assert.AreEqual(2.2, answer); }
public void ZeroPower() { string testReqwest = "2^0"; var answer = MathParser.Parse(testReqwest); Assert.AreEqual(1, answer); }
public void BracketsAndPower1() { string testReqwest = "(2^3)^2"; var answer = MathParser.Parse(testReqwest); Assert.AreEqual(64, answer); }
public void BracketsAndPower2() { string testReqwest = "2^(3^2)"; var answer = MathParser.Parse(testReqwest); Assert.AreEqual(512, answer); }
public void ComplexPriority() { string testReqwest = "100 * (1+1)^2"; var answer = MathParser.Parse(testReqwest); Assert.AreEqual(400, answer); }
public void BracketsPriority() { string testReqwest = "(7 + 3)*(5-2)"; var answer = MathParser.Parse(testReqwest); Assert.AreEqual(30, answer); }
public void PowerPriority() { string testReqwest = "2 * 3 ^ 2 + 2"; var answer = MathParser.Parse(testReqwest); Assert.AreEqual(20, answer); }
public void Power() { string testReqwest = "2^3^2"; var answer = MathParser.Parse(testReqwest); Assert.AreEqual(512, answer); }
static void Main(string[] args) { Console.WriteLine(MathParser.ParseToInt("10 + 10 ^ 2 ^ 2 + 10 * 10")); Console.WriteLine(MathParser.ParseToFloat("245.345 * 1032 + 834")); Console.WriteLine(MathParser.ParseToDouble("1 / 3")); Console.ReadLine( ); }
public static double Integral(string Expression, double LowerIndex, double UpperIndex, char IterationVariable, int Kind) { var parser = new MathParser(); var Var = new Variable<double>(IterationVariable.ToString()); parser.Variables.Add(Var); parser.Parse(Expression); Func<double,double> proc = x => { Var.Value = x; return parser.Evaluate(); }; switch (Kind) { case 0: return Integration.Trapezoidal(LowerIndex, UpperIndex, proc); case 1: return Integration.LeftHand(LowerIndex, UpperIndex, proc); default: return Integration.MidPoint(LowerIndex, UpperIndex, proc); } }
public void Add_Exp(string str) { if (chart1.Series.IndexOf(str) != -1) { chart1.Series[str].Points.Clear(); } else { chart1.Series.Add(str); } chart1.Series[str].ChartType = SeriesChartType.Line; str = graphAdd.get_Expression(); try { MathParser g = new MathParser(); double y; for (double i = xmin; i <= xmax; i += 0.01F) { g.setArgumentValue(i); y = g.Calculate(str); if (Math.Abs(y) > 99999 || Math.Abs(y) < -99999) { } else { if (y != double.NaN) { chart1.Series[str].Points.AddXY(i, y); } } } } catch {} }
public void BuiltInFunctions() { var parser = new MathParser(); Assert.AreEqual(21, parser.Parse("round(21.333333333333)")); Assert.AreEqual(1, parser.Parse("pow(2,0)")); }
public void CommaPiBug() { var parser = new MathParser(); var result = parser.Parse("pi"); Assert.AreEqual(result, parser.LocalVariables["pi"], 0.00000000000001); }
private double ParseCoefficient(string expression, string variable, List <string> variables) { var parser = new MathParser(); var variablePosition = expression.IndexOf(variable, StringComparison.Ordinal); if (variablePosition == 0) { return(1); } var leftVariables = variables .Where(x => x != variable && expression.Contains(x) && variablePosition - expression.IndexOf(x, StringComparison.Ordinal) > 0) .OrderBy(x => variablePosition - expression.IndexOf(x, StringComparison.Ordinal)); if (!leftVariables.Any()) { return((double)parser.Parse(expression.Substring(0, expression.IndexOf(variable, StringComparison.Ordinal)))); } var leftVariable = leftVariables.First(); var leftVariablePosition = expression.IndexOf(leftVariable, StringComparison.Ordinal); var str = leftVariablePosition < 0 ? expression.Substring(0, expression.IndexOf(variable, StringComparison.Ordinal)) : expression.Substring(leftVariablePosition + 2, variablePosition - leftVariablePosition - 2); if (str.Length == 1) { return(1); } return((double)parser.Parse(str)); }
public void TestTryParse(string input, bool result) { var returnValue = MathParser.TryEvaluate(input, out var mathResult); Assert.NotNull(mathResult); Assert.Equal(result, returnValue); }
private List <Func <double, double> > GetControl() { var controlTextBoxes = new[] { controlU1, controlU2, controlU3, controlU4 }; var parser = new MathParser(); return(controlTextBoxes .Select(currentControl => { currentControl.BorderBrush = Brushes.DarkGray; Func <double, double> currenControl = t => { if (string.IsNullOrEmpty(currentControl.Text)) { return 0; } try { var calcControlValue = currentControl.Text.Replace("t", t.ToString()); return (double)parser.Parse(calcControlValue); } catch (FormatException) { currentControl.BorderBrush = Brushes.Red; throw; } }; return currenControl; }) .ToList()); }
public Expression Parse(MathParser parser, Token <RMathToken> token) { var e = parser.ParseExpression(); parser.Take(RMathToken.RightParen); return(e); }
public void Parse() { var node = MathParser.Parse("3+3=2*3"); node = MathParser.Parse("sqrt(x) * sqrt(x) = 7"); node = MathParser.Parse("4 * x + 3 = 19"); }
public void AdvancedArithmetic() { var parser = new MathParser(); Assert.AreEqual(30, parser.Parse("3(7+3)")); Assert.AreEqual(20, parser.Parse("(2+3)(3+1)")); }
public void TestMathParser() { Assert.AreEqual(MathParser.Evaluate(0, 0, MathParser.ConvertToRPN("3^4")), 81f, 0.01, "Math Parser Test 1 Failed"); Assert.AreEqual(MathParser.Evaluate(0, 0, MathParser.ConvertToRPN("(2^2)^(2^2)")), 256f, 0.01, "Math Parser Test 2 Failed"); Assert.AreEqual(MathParser.Evaluate(0, 0, MathParser.ConvertToRPN("0.0001+(-0.4)")), -0.4f, 0.01, "Math Parser Test 3 Failed"); Assert.AreEqual(MathParser.Evaluate(2, 2, MathParser.ConvertToRPN("0.0001+(x * y)")), 4f, 0.01, "Math Parser Test 4 Failed"); }
static void Main(string[] args) { IContext context = new Context(); context.AddConst("a", 0.2); context.AddConst("b", 0.3); context.AddConst("c", -0.3); var mathParser = new MathParser(context); try { var result = mathParser.Calculate("2+3*4"); if (result.IsValid) { Console.WriteLine($"result = {result.Result}"); } else { Console.WriteLine(String.Join(Environment.NewLine, result.Errors)); } } catch (InvalidOperationException ex) { Console.WriteLine(ex.Message); } Console.ReadKey(); }
static void Main(string[] args) { Console.Write("Введите пример : "); try { string example = Console.ReadLine(); if (example == String.Empty) { throw new FormatException(); } else if (example == ".") { throw new ArgumentException(); } Console.Write("Ответ : "); Console.Write(MathParser.Example(example.ToCharArray()).ToString()); } catch (FormatException) { Console.WriteLine("Пустая строка"); } catch (ArgumentException) { Console.WriteLine("Недопустимый символ \".\""); } Console.Read(); }
public Expression Parse(MathParser parser, Token <RMathToken> token) { var e = new AbsExpression(parser.ParseExpression()); parser.Take(RMathToken.Pipe); return(e); }
public void ExceptionCatching() { var parser = new MathParser(); parser.Parse("(-1"); parser.Parse("rem(20,1,,,,)"); }
private void btnTongHop_Click(object sender, EventArgs e) { if (dtChiTiet != null && dtGiangVien != null) { int TyLe = 0; float TongDiem = 0; MathParser parser = new MathParser(); //DataRow[] dr; for (int i = 0; i < dtChiTiet.Rows.Count; i++) { TongDiem = 0; TyLe = 0; for (int j = 0; j < grbGiangVien.Columns.Count; j++) { // dr = dtChiTiet.Select(" SV_SinhVienID = " + dtChiTiet.Rows[i]["SV_SinhVienID"].ToString());// + " and KQHT_HoiDongMon_ChiTietID =" + dtGiangVien.Rows[j]["KQHT_HoiDongMon_ChiTietID"].ToString()); TongDiem += int.Parse(grbGiangVien.Columns[j].FieldName.Substring(grbGiangVien.Columns[j].FieldName.IndexOf("_") + 1)) * float.Parse("0" + dtChiTiet.Rows[i][grbGiangVien.Columns[j].FieldName].ToString()); TyLe += int.Parse(grbGiangVien.Columns[j].FieldName.Substring(grbGiangVien.Columns[j].FieldName.IndexOf("_") + 1)); } if (TongDiem > 0 && TyLe > 0) { dtChiTiet.Rows[i]["DiemTK"] = parser.Round(TongDiem / TyLe, 1, true); } } } }
public static double CalcStringFormula(List <string> Formulas) { double val = 0; if (Formulas != null) { if (parser == null) { parser = new MathParser(); } foreach (string f in Formulas) { if (string.IsNullOrEmpty(f)) { continue; } string F = f.Replace("\n", "").Replace("\r", "").Replace("\t", ""); double v = parser.Parse(F, new System.Collections.Hashtable()); if (double.IsInfinity(v) || double.IsNaN(v)) { v = 0; } val += v; } } return(val); }
public void CustomFunctions() { /* * This test demonstrates three ways of adding a function * to the Math Parser * * 1) directly pointing to the function * 2) lambda expression * 3) anonymous method */ MathParser parser = new MathParser(); //for long functions parser.LocalFunctions.Add("numberTimesTwo", NumberTimesTwoCustomFunction); // adding the function decimal resultA = parser.Parse("numberTimesTwo(3)"); //for short functions, use lambda expression, or anonymous method // 1) using lambda epxression (recommended) parser.LocalFunctions.Add("square", x => x[0] * x[0]); decimal resultB = parser.Parse("square(4)"); // 2) using anonymous method parser.LocalFunctions.Add("cube", delegate(decimal[] x) { return(x[0] * x[0] * x[0]); }); decimal resultC = parser.Parse("cube(2)"); }
public override double Evaluate(MathParser parser, VM ii) { var name = _right as NameExpression; switch (_token.ID) { case RMathToken.Minus: return(-_right.Evaluate(parser, ii)); case RMathToken.Increment: { if (name == null) { throw new RantException(parser.Source, _token, "Increment prefix could not find a variable."); } double d = name.Evaluate(parser, ii) + 1; ii.Engine.Variables.SetVar(name.Name, d); return(d); } case RMathToken.Decrement: { if (name == null) { throw new RantException(parser.Source, _token, "Decrement prefix could not find a variable."); } double d = name.Evaluate(parser, ii) - 1; ii.Engine.Variables.SetVar(name.Name, d); return(d); } default: throw new RantException(parser.Source, _token, "Invalid prefix operator '" + _token + "'."); } }
public void DetailedSpeedTestWithOptimization() { var mp = new MathParser(); mp.LocalVariables.Add("x", 5); var expr = "(3x+2)(2(2x+1))"; int itr = 3000; double creationTimeAndTokenization = BenchmarkUtil.Benchmark(() => mp.GetTokens(expr), 1); var tokens = mp.GetTokens(expr); double parsingTime = BenchmarkUtil.Benchmark(() => mp.Parse(tokens), itr); double totalTime = creationTimeAndTokenization + parsingTime; //var mp = new MathParser(); //mp.LocalVariables.Add("x", 5); //var expr = "(3x+2)(2(2x+1))"; //int itr = 50; double parsingTime2 = BenchmarkUtil.Benchmark(() => mp.Parse(expr), itr); double totalTime2 = parsingTime2; }
public void AdvancedArithmetics() { MathParser parser = new MathParser(); decimal resultA = parser.Parse("(2+3)(3+1)"); Assert.IsTrue(resultA == 20); }
public void CustomFunctionsWithSeverelArguments() { /* * This example demonstrates the "anonymous method" way of adding * a function that can take more than one agument. */ MathParser parser = new MathParser(loadPreDefinedFunctions: false); //for long functions parser.LocalFunctions.Add("log", delegate(decimal[] input) // adding the function { // input[0] is the number // input[1] is the base if (input.Length == 1) { return((decimal)Math.Log((double)input[0])); } else if (input.Length == 2) { return((decimal)Math.Log((double)input[0], (double)input[1])); } else { return(0); // false } }); decimal resultA = parser.Parse("log(2)"); decimal resultB = parser.Parse("log(2,3)"); }
public void NewOperator() { var p = new MathParser(); p.Operators.Add(new BinaryOperator<double>("$", 2, (x, y) => x * y)); Assert.AreEqual(p.Evaluate("3 $ 4"), 12); }
public void SetUp() { var expressionValidator = new MathRegex(); var expressionFixer = new ExpressionFixer(expressionValidator); this.lexer = new MathLexer(expressionValidator, expressionFixer); var limitsValidator = new LimitsValidator(-100, 100); var proxy = new CalculatorProxy(limitsValidator); var calculator = new Calculator(); var operatorFactory = new OperatorFactory(proxy, calculator); this.parser = new MathParser(this.lexer, operatorFactory); }
public void NewOperatorParsed() { var p = new MathParser(); p.Operators.Add(new BinaryOperator<double>("$", 2, (x, y) => { p.Manipulate("var x = " + x); p.Manipulate("var y = " + y); return p.Evaluate("x * y"); })); Assert.AreEqual(p.Evaluate("3 $ 4"), 12); }
public static void DumpTree(string mathCode) { Expression expression; var tokenizer = new MathTokenizer(); var parser = new MathParser(); using (var reader = new StringReader(mathCode)) { var tokens = tokenizer.Tokenize(reader); expression = parser.Parse(tokens); } Console.WriteLine(expression.ToString()); }
public ConsoleMathTypeChecker() { parser = new MathParser(); parser.Factory = factory = new MathFactory(); parser.OnReduction += OnReduction; parser.OnCompletion += OnCompletion; parser.OnGroupError += OnGroupError; parser.OnInternalError += OnInternalError; parser.OnNotLoadedError += OnNotLoadedError; parser.OnLexicalError += OnLexicalError; parser.OnSyntaxError += OnSyntaxError; Assembly a = typeof(ConsoleMathTypeChecker).Assembly; parser.LoadGrammar(new BinaryReader(a.GetManifestResourceStream("QL_ExtensionTest.Grammar.QL_Grammar.egt"))); parser.Parse("form Form1 { \"Power:\" << answer1:int = 5 ^ 2; \"Modulo:\" << 10 % 5; \"Modulo2:\" << 10 % true; }"); }
public static MathValue InterpretSingle(string mathCode) { Expression expression; var tokenizer = new MathTokenizer(); var parser = new MathParser(); using (var reader = new StringReader(mathCode)) { var tokens = tokenizer.Tokenize(reader); expression = parser.Parse(tokens); } var context = CreateGlobalContext(); var result = expression.Evaluate(context); return result; }
public static double Sigma(string Expression, double LowerIndex, double UpperIndex, char IterationVariable, double Step) { double Result = 0; var parser = new MathParser(); var Var = new Variable<double>(IterationVariable.ToString()); parser.Variables.Add(Var); parser.Parse(Expression); for (var i = LowerIndex; i <= UpperIndex; i += Step) { Var.Value = i; Result += parser.Evaluate(); } return Result; }
private void UpdateGraph() { zGraph.GraphPane.CurveList.Clear(); zGraph.RestoreScale(zGraph.GraphPane); PointPairList pointsH2 = new PointPairList(); PointPairList pointsO2 = new PointPairList(); PointPairList pointsCO = new PointPairList(); PointPairList pointsCO2 = new PointPairList(); PointPairList pointsN2 = new PointPairList(); PointPairList pointsAr = new PointPairList(); PointPairList pointsTemp = new PointPairList(); PointPairList pointsFlow = new PointPairList(); PointPairList pointsRealCO = new PointPairList(); PointPairList pointsRealCO2 = new PointPairList(); PointPairList pointsRealFlow = new PointPairList(); double time; foreach (OffGas og in CurrentListOfGas) { time = (og.Date - CurrentFussion.StartDate).TotalSeconds; pointsH2.Add(time, og.H2); pointsO2.Add(time, og.O2); pointsCO.Add(time, og.CO); pointsCO2.Add(time, og.CO2); pointsN2.Add(time, og.N2); pointsAr.Add(time, og.Ar); pointsTemp.Add(time, og.Temperature); pointsFlow.Add(time, og.Flow / 60); } foreach (OffGasAnalysisEvent ogaEvent in _heat.OffGasAnalysisHistory) { time = (ogaEvent.Time - CurrentFussion.StartDate).TotalSeconds; pointsRealCO.Add(time, ogaEvent.CO); pointsRealCO2.Add(time, ogaEvent.CO2); } foreach (OffGasEvent ogEvent in _heat.OffGasHistory) { time = (ogEvent.Time - CurrentFussion.StartDate).TotalSeconds; pointsRealFlow.Add(time, ogEvent.OffGasFlow / 60); } if (cbH2.Checked) { zGraph.GraphPane.AddCurve("H2", pointsH2, Color.Green, SymbolType.None); } if (cbO2.Checked) { zGraph.GraphPane.AddCurve("O2", pointsO2, Color.Blue, SymbolType.None); } if (cbCO.Checked) { zGraph.GraphPane.AddCurve("CO", pointsCO, Color.Red, SymbolType.None); } if (cbCO2.Checked) { zGraph.GraphPane.AddCurve("CO2", pointsCO2, Color.Orange, SymbolType.None); } if (cbN2.Checked) { zGraph.GraphPane.AddCurve("N2", pointsN2, Color.Black, SymbolType.None); } if (cbAr.Checked) { zGraph.GraphPane.AddCurve("Ar", pointsAr, Color.Turquoise, SymbolType.None); } if (cbFlow.Checked) { zGraph.GraphPane.AddCurve("Flow", pointsFlow, Color.SaddleBrown, SymbolType.None); } if (cbTemp.Checked) { zGraph.GraphPane.AddCurve("Temp", pointsTemp, Color.OliveDrab, SymbolType.None); } if (cbRealCO.Checked) { zGraph.GraphPane.AddCurve("RealCO", pointsRealCO, Color.DarkGray, SymbolType.None); } if (cbRealCO2.Checked) { zGraph.GraphPane.AddCurve("RealCO2", pointsRealCO2, Color.Fuchsia, SymbolType.None); } if (cbRealFlow.Checked) { zGraph.GraphPane.AddCurve("RealFlow", pointsRealFlow, Color.MidnightBlue, SymbolType.None); } PointPairList pointsLance = new PointPairList(); PointPairList pointsOFlow = new PointPairList(); List<Lance> lanceHeights = CurrentListLance;//m_Db.GetLance(CurrentFussion.Id); if (lanceHeights.Count > 0) { int lanceHeight = lanceHeights.First().Height; for (double second = (lanceHeights.First().Date - CurrentFussion.StartDate).TotalSeconds; second < (lanceHeights.Last().Date - CurrentFussion.StartDate).TotalSeconds; second++) { foreach (Lance lance in lanceHeights) { if (second > 0) { if ((int)(lance.Date - CurrentFussion.StartDate).TotalSeconds == (int)second) { pointsLance.Add(second, lance.Height * Zoom); pointsOFlow.Add(second, lance.O2Flow * Zoom); lanceHeight = lance.Height; continue; } pointsLance.Add(second, lanceHeight); } } } } if (cbLance.Checked) { zGraph.GraphPane.AddCurve("Фурма", pointsLance, Color.Lime, SymbolType.None); } if (cbOFlow.Checked) { zGraph.GraphPane.AddCurve("OFlow", pointsOFlow, Color.Magenta, SymbolType.None); } //PointPairList pointsAdditions = new PointPairList(); if (gbVars.Controls.Count > 0) { MathParser mathParser = new MathParser(); int varsCount = gbVars.Controls.Count / 3; for (int i = 0; i < varsCount; i++) { if ((gbVars.Controls.Find(string.Format("cb{0}", i), true)[0] as System.Windows.Forms.CheckBox).Checked) { PointPairList points = new PointPairList(); foreach (OffGas og in CurrentListOfGas) { mathParser.CreateVar("H2", og.H2, null); mathParser.CreateVar("O2", og.O2, null); mathParser.CreateVar("CO", og.CO, null); mathParser.CreateVar("CO2", og.CO2, null); mathParser.CreateVar("N2", og.N2, null); mathParser.CreateVar("Ar", og.Ar, null); mathParser.Expression = (gbVars.Controls.Find(string.Format("tb{0}", i), true)[0] as System.Windows.Forms.TextBox).Text; try { points.Add((og.Date - CurrentFussion.StartDate).TotalSeconds, mathParser.ValueAsDouble * Zoom); } catch (Exception) { MessageBox.Show(string.Format("Переменная {0} задана неверно, ошибка в формуле", (gbVars.Controls.Find(string.Format("lb{0}", i), true)[0] as System.Windows.Forms.Label).Text)); return; } } mathParser.CreateVar((gbVars.Controls.Find(string.Format("lb{0}", i), true)[0] as System.Windows.Forms.Label).Text, mathParser.ValueAsString, null); if ((gbVars.Controls.Find(string.Format("cb{0}", i), true)[0] as System.Windows.Forms.CheckBox).Checked) { zGraph.GraphPane.AddCurve((gbVars.Controls.Find(string.Format("lb{0}", i), true)[0] as System.Windows.Forms.Label).Text, points, Color.DeepPink, SymbolType.None); } } } } zGraph.GraphPane.Title.IsVisible = false; this.Text = string.Format("Плавка: {0} Марка: {1} Начало: {2}({3}) Бригада: {4} Конвертер:{5} Т зад={6} Т факт={7} С зад={8} С факт={9}", CurrentFussion.Number, CurrentFussion.Grade, ((HeatAttributes) CurrentFussion).StartDate, CurrentFussion.StartDate, CurrentFussion.TeamNumber, CurrentFussion.AggregateNumber, CurrentFussion.PlannedTemperature, CurrentFussion.FactTemperature, CurrentFussion.PlannedCarbon, CurrentFussion.FactCarbon); zGraph.AxisChange(); zGraph.Invalidate(); }
private void ButtonEquals_Click(object sender, RoutedEventArgs e) { Utils.log("ButtonEquals_Click", "Clicked Equals"); resetFlashTimer = true; // if just hit equals, re-evaluate expression; if (JUST_HIT_EQUALS) { Utils.log("ButtonEquals_Click", "Hit equals twice in a row"); ClearAllTokens(); this.TextBoxInputTokens.InsertRange(0, MEM_PREV_TOKENS); currentToken = MEM_PREV_TOKENS.Count; Utils.log("ButtonEquals_Click", "cToken = {0}", currentToken); } // Uncomment to view list of tokens. /*string str = ""; foreach (Token t in TextBoxInputTokens) { Debugger.Log(0, "[ButtonEquals]", t.ToString()); str += t.getRepresentation(); } Debugger.Log(0, "[ButtonEquals]", str);*/ this.TextBoxInputTokens.Add(new Token(TokenType.EOF, "Null")); currentToken += 1; Parser parser = new MathParser(this.TextBoxInputTokens); try { parser.term(); // remove top element. this.TextBoxInputTokens.RemoveAt(this.TextBoxInputTokens.Count - 1); currentToken -= 1; MEM_PREV_TOKENS = new List<Token>(new List<Token>(this.TextBoxInputTokens)); } catch (SyntaxException excp) { // remove EOF token and error this.TextBoxInputTokens.RemoveAt(this.TextBoxInputTokens.Count - 1); currentToken -= 1; MEM_ANS = 0; this.answerTokens.Add(new IdentToken("MATH ERROR")); DrawEquals(); this.currentToken = excp.getPosition(); UpdateTextBox(); return; } catch (Exception) { // remove EOF token and error this.TextBoxInputTokens.RemoveAt(this.TextBoxInputTokens.Count - 1); currentToken -= 1; MEM_ANS = 0; this.answerTokens.Add(new IdentToken("MATH ERROR")); DrawEquals(); return; } AST output; try { output = parser.Pop(); double answer = output.evaluate(); Utils.log("ButtonEquals_Click", "Answer = {0}", answer); // Handle infinite answers. if (Double.IsInfinity(answer)) { MEM_ANS = 0; this.answerTokens.Add(new IdentToken("MATH ERR (ANSWER TOO LARGE)")); } else { MEM_ANS = answer; foreach (char c in Convert.ToString(answer)) { if (c == '.') { this.answerTokens.Add(new DotToken()); } else if (c == 'E') { this.answerTokens.Add(new OperationToken("x10", TokenType.OP_POW10)); } else if (c == '-') { this.answerTokens.Add(new OperationToken("-", TokenType.OP_SUB)); } else { this.answerTokens.Add(new DigitToken(Convert.ToString(c))); } } } Utils.log("ButtonEquals_Click", "Drawing AnswerBox"); DrawEquals(); } catch (MathException) { // remove EOF token and error this.TextBoxInputTokens.RemoveAt(this.TextBoxInputTokens.Count - 1); currentToken -= 1; MEM_ANS = 0; this.answerTokens.Add(new IdentToken("MATH ERROR")); DrawEquals(); return; } catch (Exception) { // remove EOF token and error this.TextBoxInputTokens.RemoveAt(this.TextBoxInputTokens.Count - 1); currentToken -= 1; MEM_ANS = 0; this.answerTokens.Add(new IdentToken("MATH ERROR")); DrawEquals(); return; } }
public void ShowFusion(Fusion fusion) { lbH2Value.Text = ""; lbO2Value.Text = ""; lbCOValue.Text = ""; lbCO2Value.Text = ""; lbN2Value.Text = ""; lbArValue.Text = ""; zgMain.GraphPane.CurveList.Clear(); PointPairList pointsH2 = new PointPairList(); PointPairList pointsO2 = new PointPairList(); PointPairList pointsCO = new PointPairList(); PointPairList pointsCO2 = new PointPairList(); PointPairList pointsN2 = new PointPairList(); PointPairList pointsAr = new PointPairList(); foreach (TrendPoint tp in fusion.Points) { pointsH2.Add(tp.Time.TotalSeconds, tp.H2); pointsO2.Add(tp.Time.TotalSeconds, tp.O2); pointsCO.Add(tp.Time.TotalSeconds, tp.CO); pointsCO2.Add(tp.Time.TotalSeconds, tp.CO2); pointsN2.Add(tp.Time.TotalSeconds, tp.N2); pointsAr.Add(tp.Time.TotalSeconds, tp.Ar); } if (cbH2.Checked) { zgMain.GraphPane.AddCurve("H2", pointsH2, Color.Green, SymbolType.None); } if (cbO2.Checked) { zgMain.GraphPane.AddCurve("O2", pointsO2, Color.Blue, SymbolType.None); } if (cbCO.Checked) { zgMain.GraphPane.AddCurve("CO", pointsCO, Color.Red, SymbolType.None); } if (cbCO2.Checked) { zgMain.GraphPane.AddCurve("CO2", pointsCO2, Color.Orange, SymbolType.None); } if (cbN2.Checked) { zgMain.GraphPane.AddCurve("N2", pointsN2, Color.Black, SymbolType.None); } if (cbAr.Checked) { zgMain.GraphPane.AddCurve("Ar", pointsAr, Color.Turquoise, SymbolType.None); } zgMain.GraphPane.Title.FontSpec.Size = 6; zgMain.GraphPane.Title.Text = string.Format("Плавка: {0} Марка: {1} Начало: {2}({3}) Бригада: {4} Конвертер:{5} Т зад={6} Т факт={7} С зад={8} С факт={9}", fusion.Number, fusion.Grade, fusion.StartDate, fusion.StartDateDB, fusion.TeamNumber, fusion.ConverterNumber, fusion.PlannedTempereture, fusion.FactTemperature, fusion.PlannedC, fusion.FactC); // Отображаем график для введенных формул if (gbVars.Controls.Count > 0) { MathParser mathParser = new MathParser(); int varsCount = gbVars.Controls.Count / 3; for (int i = 0; i < varsCount; i++) { PointPairList points = new PointPairList(); foreach (TrendPoint tp in fusion.Points) { mathParser.CreateVar("H2", tp.H2, null); mathParser.CreateVar("O2", tp.O2, null); mathParser.CreateVar("CO", tp.CO, null); mathParser.CreateVar("CO2", tp.CO2, null); mathParser.CreateVar("N2", tp.N2, null); mathParser.CreateVar("Ar", tp.Ar, null); mathParser.Expression = (gbVars.Controls.Find(string.Format("tb{0}", i), true)[0] as System.Windows.Forms.TextBox).Text; try { points.Add(tp.Time.TotalSeconds, mathParser.ValueAsDouble); } catch (Exception e) { MessageBox.Show(string.Format("Переменная {0} задана неверно, ошибка в формуле", (gbVars.Controls.Find(string.Format("lb{0}", i), true)[0] as System.Windows.Forms.Label).Text)); return; } } mathParser.CreateVar((gbVars.Controls.Find(string.Format("lb{0}", i), true)[0] as System.Windows.Forms.Label).Text, mathParser.ValueAsString, null); if ((gbVars.Controls.Find(string.Format("cb{0}", i), true)[0] as System.Windows.Forms.CheckBox).Checked) { zgMain.GraphPane.AddCurve((gbVars.Controls.Find(string.Format("lb{0}", i), true)[0] as System.Windows.Forms.Label).Text, points, Color.DeepPink, SymbolType.None); } } } zgMain.GraphPane.Legend.IsVisible = false; zgMain.AxisChange(); zgMain.Invalidate(); zgMain.Visible = true; pAddVar.Visible = true; pVars.Visible = true; gbValues.Visible = true; }