private void button1_Click(object sender, EventArgs e) { richTextBox1.Text = ""; Parser parserComp = new Parser(); //при помощи компонента-парсера преобразуем входные данные //в формат, используемый другими компонентами: //считаем пределы интегрирования и погрешность double a = 0, b = 0, eps = 0; if (!parserComp.ParseParam(ref a, ref b, ref eps, textBox2.Text, textBox3.Text, textBox4.Text)) { richTextBox1.Text += "Ошибка ввода параметров"; return; } parserComp.Dispose(); //преобразуем строку в очередь токенов в обратной польской нотации //для компонента, вычисляющего значения формулы при подстановке FormulaExecutor formulaComp = new FormulaExecutor(parserComp.ShuntingYard(textBox1.Text)); if (formulaComp.formula == null) { richTextBox1.Text += "Ошибка ввода выражения"; return; } //при помощи компонентов методов численного интегрирования вычислим значение опред. интеграла Container methodComponents = new Container(); if (checkBox1.Checked) { RectangleMethod rectangleComp = new RectangleMethod(); methodComponents.Add(rectangleComp); richTextBox1.Text += (rectangleComp.Integration(formulaComp, a, b, eps).ToString() + " (метод левых прямоугольников)\n"); } if (checkBox2.Checked) { TrapezoidalMethod trapezoidComp = new TrapezoidalMethod(); methodComponents.Add(trapezoidComp); richTextBox1.Text += (trapezoidComp.Integration(formulaComp, a, b, eps).ToString() + " (метод трапеций)\n"); } if (checkBox3.Checked) { SimpsonMethod simpsonComp = new SimpsonMethod(); methodComponents.Add(simpsonComp); richTextBox1.Text += (simpsonComp.Integration(formulaComp, a, b, eps).ToString() + " (метод Симпсона)\n"); } methodComponents.Dispose(); formulaComp.Dispose(); }
private void integrateButton_Click(object sender, RoutedEventArgs e) { try { var function = ExpressionParser.GetFunction(integrationFunctionInput.Text); double a = double.Parse(integrationInputA.Text); double b = double.Parse(integrationInputB.Text); if (b <= a) { throw new ArgumentException($"Incorrect interval: [{a}; {b}]\nb must be greater then a"); } int n = (int)integrNodesSlider.Value; IIntegrationMethod integrationMethod = null; if (integrationMethodSelect.SelectedIndex == 0) { integrationMethod = new RectangleMethod(); } else if (integrationMethodSelect.SelectedIndex == 1) { integrationMethod = new TrapezoidMethod(); } else if (integrationMethodSelect.SelectedIndex == 2) { integrationMethod = new SimpsonsMethod(); } double result = integrationMethod.Calculate(function, a, b, n); integrationResultText.Text = $"{result:f15}"; } catch (Exception ex) { MessageBox.Show(ex.Message, "Error"); } }