using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; namespace GraphingCalculator.Controls { /// /// Interaction logic for LimitWindow.xaml /// public partial class IntegralWindow : Window { #region Properties public string ExpressionString { get { return inputExpression.Text; } set { inputExpression.Text = value; } } #endregion #region Constructors public IntegralWindow() { InitializeComponent(); ExpressionString = ""; } public IntegralWindow(string expression) { InitializeComponent(); ExpressionString = expression; } #endregion #region Other routines private void Result (string result, bool error = false) { outputResult.Text = result; if (error) outputResult.Foreground = Brushes.DarkRed; else outputResult.Foreground = Brushes.Black; } #endregion #region Button handlers private void buttonClose_Click(object sender, RoutedEventArgs e) { this.Close(); } private void buttonCalculate_Click(object sender, RoutedEventArgs e) { double val_beg, val_end, integr_res; Expression beg, end, expr; beg = new Expression(inputIntervalBeg.Text); end = new Expression(inputIntervalEnd.Text); expr = new Expression(inputExpression.Text); // Try to evaluate interval ends try { val_beg = beg.Evaluate(); } catch { Result("Failed to evaluate interval start.", true); return; } try { val_end = end.Evaluate(); } catch { Result("Failed to evaluate interval end.", true); return; } // Try to calculate the integral try { integr_res = Integrator.Integrate(expr, val_beg, val_end, "x"); } catch (Exception ex) { Result("Failed to evaluate expression. Message: " + ex.Message, true); Log.LogEvent("Failed to integrate expression: {0}", expr.ExpressionString); Log.LogEvent("> Interval: [{0}, {1}] = [{2}, {3}]", beg.ExpressionString, end.ExpressionString, val_beg, val_end); Log.LogEvent("> Message: {0}", ex.Message); Log.LogEvent("> Stack trace: {0}", ex.StackTrace); return; } // Show result Result(Math.Round(integr_res, 14).ToString()); Log.LogEvent("Integrated expression: {0}", expr.ExpressionString); Log.LogEvent("> Interval: [{0}, {1}] = [{2}, {3}]", beg.ExpressionString, end.ExpressionString, val_beg, val_end); Log.LogEvent("> Result: {0}", integr_res); } #endregion } }