Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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");
            }
        }