Exemplo n.º 1
0
        private void Implementation()
        {
            if (Radical_or_Decimal)
            {
                //Прямой ход метода Гаусса для приведения к треугольному виду.
                StepsSolve.Gauss(ogr, CornerDot);
                //Выражение базисных переменных и приведение к диагональному виду.
                StepsSolve.HoistingMatrix(ogr, number_of_basix);
                // Обновляем данные на таблице
                //Обновление визуализации переменных.
                if (CornerDot)
                {
                    addGridParam(ogr, dataGridView3, variable_visualization);
                }
                else
                {
                    addGridParam(ogr, dataGridView3);
                }
                //создаём сиплекс-таблицу
                simplextable = new Simplex(number_of_basix, number_of_free_variables, ogr, cel_function, true, Radical_or_Decimal);
                DrawSimplexTable(ogr);
            }
            else
            {
                //Прямой ход метода Гаусса для приведения к треугольному виду.
                StepsSolve.Gauss(ogr_with_radicals, CornerDot);
                //Выражение базисных переменных и приведение к диагональному виду.
                StepsSolve.HoistingMatrix(ogr_with_radicals, number_of_basix);
                //Обновление визуализации переменных.
                if (CornerDot)
                {
                    addGridParam(ogr_with_radicals, dataGridView3, variable_visualization);
                }
                else
                {
                    addGridParam(ogr_with_radicals, dataGridView3);
                }
                //создаём сиплекс-таблицу
                simplextable = new Simplex(number_of_basix, number_of_free_variables, ogr_with_radicals, cel_function_with_radicals, true, Radical_or_Decimal);
                DrawSimplexTable(ogr_with_radicals);
            }

            int responce;
            int step = 1;

            while (true)
            {
                if ((responce = simplextable.ResponseCheck()) == 0)
                {
                    //выбор любого опорного
                    simplextable.SelectionRandomSupportElement();
                    //меняем местами переменные
                    simplextable.ChangeOfVisualWithoutBuffer(dataGridView3);
                    // высчитывание по опорному
                    simplextable.CalculateSimplexTable(simplextable.row_of_the_support_element, simplextable.column_of_the_support_element);
                    // обновление данных симплекс таблицы
                    if (Radical_or_Decimal)
                    {
                        addGridParam_for_simplex_elements(simplextable.simplex_elements, dataGridView3);
                    }
                    else
                    {
                        addGridParam_for_simplex_elements(simplextable.simplex_elements_with_radicals, dataGridView3);
                    }
                    step++;
                }
                else if (responce == 1)
                {
                    if (MinMax == 0)
                    {
                        if (Radical_or_Decimal)
                        {
                            label_answer.Text = "Ответ :" + simplextable.Response();
                        }
                        else
                        {
                            label_answer.Text = "Ответ :" + simplextable.Responce_for_radicals().Reduction();
                        }
                    }
                    else
                    {
                        if (Radical_or_Decimal)
                        {
                            label_answer.Text = "Ответ: " + simplextable.Response() * (-1);
                        }
                        else
                        {
                            label_answer.Text = "Ответ :" + simplextable.Responce_for_radicals().Reduction() * (-1);
                        }
                    }
                    // Выводим точку X*
                    if (corner_dot_was_added == false)
                    {
                        corner_dot_was_added = true;
                        //добавляем точку
                        addGridParam(ResponseDot(), dataGridViewCornerDot);
                    }
                    break;
                }
                else if (responce == -1)
                {
                    MessageBox.Show("Задача не разрешима");
                    //  tabControl1.TabPages[0].Text = "Задача не разрешима!";
                    break;
                }
            }
        }