private void buttonNext_Click(object sender, EventArgs e) { //для запоминания типа шага if (simplextable.ResponseCheck() == 1) { type_of_step.Add(false); } else { type_of_step.Add(true); } try { //выбран ли опорный элемент simplextable.ButtonPressedOrNot(dataGridView3); //смена местами переменной + буферизация simplextable.ChangeOfVisualizationVariables(dataGridView3); // Буферизируем визуализацию колонок simplextable.BufferingVariablevisualizationForDeleteColumns(dataGridView3); // Буферизируем визуализацию строк simplextable.BufferingVariablevisualizationForDeleteRows(dataGridView3); //буферизация элементов таблицы simplextable.BufferingSimplexTableValues_ForArtifical(); //удаляем подсвеченные simplextable.delete_green_grids(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); } // Если искусственный базис ещё не пришёл в ноль if (!ArtificalBasixGoToNull) { // создаём новую симплекс таблицу для дальнейшей работы if (Radical_or_Decimal) { simplextable1 = new Simplex(simplextable); } else { simplextable1 = new Simplex(simplextable); } } if (!ArtificalBasixGoToNull) { switch (simplextable1.ArtificialResponseCheck(variable_visualization, dataGridView3)) { case 1: step++; if (!ArtificalBasixGoToNull) { // Удаляем столбцы с искусственными переменными. simplextable.DeleteArtificalBasix(dataGridView3); // Считываем ограничения заного if (Radical_or_Decimal) { ogr = new List <List <double> >(); read_grids(dataGridView3, ogr); simplextable.simplex_elements = ogr; // удаляем строку с нулями из элементов симплекс таблицы simplextable.simplex_elements.RemoveAt(simplextable.simplex_elements.Count - 1); // удаляем последнюю строку с нулями из датаГрид dataGridView3.Rows.RemoveAt(dataGridView3.Rows.Count - 1); // отображаем новые данные addGridParam_for_simplex_elements(simplextable.simplex_elements, dataGridView3); } else { ogr_with_radicals = new List <List <Fractions> >(); read_grids(dataGridView3, ogr_with_radicals); simplextable.simplex_elements_with_radicals = ogr_with_radicals; // удаляем строку с нулями из элементов симплекс таблицы simplextable.simplex_elements_with_radicals.RemoveAt(simplextable.simplex_elements_with_radicals.Count - 1); // удаляем последнюю строку с нулями из датаГрид dataGridView3.Rows.RemoveAt(dataGridView3.Rows.Count - 1); // отображаем новые данные addGridParam_for_simplex_elements(simplextable.simplex_elements_with_radicals, dataGridView3); } // Высчитываем последнюю строку simplextable.CalculateCelRow(dataGridView3); } ArtificalBasixGoToNull = true; switch (simplextable.ResponseCheck()) { case 0: //выбор опорного simplextable.SelectionOfTheSupportElement(dataGridView3); label1.Text = "Симплекс таблица"; step_1++; break; case 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(simplextable.ResponseDot(dataGridView3), dataGridViewCornerDot); } groupBoxCornerDot.Visible = true; label_answer.Visible = true; buttonNext.Enabled = false; step_1++; break; case -1: label1.Text = "Линейная форма не ограничена на множестве планов задачи."; buttonNext.Enabled = false; MessageBox.Show("Линейная форма не ограничена на множестве планов задачи.", ""); step_1++; break; } break; case 0: if (simplextable.ResponseCheck() == 1) { // Если симплекс таблица решена step++; 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(simplextable.ResponseDot(dataGridView3), dataGridViewCornerDot); } groupBoxCornerDot.Visible = true; label_answer.Visible = true; buttonNext.Enabled = false; step_1++; } else { step++; label1.Text = "Метод искусственного базиса. Выбор опорного элемента."; //выбор опорного simplextable.SelectionOfTheSupportElement(dataGridView3); } break; case -1: MessageBox.Show("Решения нет"); break; } } // Симплекс метод else { switch (simplextable.ResponseCheck()) { case 0: //выбор опорного simplextable.SelectionOfTheSupportElement(dataGridView3); label1.Text = "Симплекс таблица"; step_1++; break; case 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(simplextable.ResponseDot(dataGridView3), dataGridViewCornerDot); } groupBoxCornerDot.Visible = true; label_answer.Visible = true; buttonNext.Enabled = false; step_1++; break; case -1: label1.Text = "Линейная форма не ограничена на множестве планов задачи."; MessageBox.Show("Линейная форма не ограничена на множестве планов задачи.", ""); buttonNext.Enabled = false; step_1++; break; } } } catch (Exception d) { MessageBox.Show(d.Message); } }
/// <summary> /// Выполнение. /// </summary> private void Implementation() { if (Radical_or_Decimal) { //создаём сиплекс-таблицу simplextable = new Simplex(number_of_basix, number_of_free_variables, ogr, cel_function, false, Radical_or_Decimal); //отрисовываем симплекс таблицу simplextable.DrawSimplexTable(ogr, dataGridView3); } else { //создаём сиплекс-таблицу simplextable = new Simplex(number_of_basix, number_of_free_variables, ogr_with_radicals, cel_function_with_radicals, false, Radical_or_Decimal); //отрисовываем симплекс таблицу simplextable.DrawSimplexTable(ogr_with_radicals, dataGridView3); } if (simplextable.ResponseCheck() == 1) { // tabControl1.TabPages[0].Text = "Холостой шаг: Метод искусственного базиса. Выбор опорного элемента."; //холостой шаг //simplextable.IdleStep(); } else { // tabControl1.TabPages[0].Text = "Шаг " + step + ": Метод искусственного базиса. Выбор опорного элемента."; //выбор опорного simplextable.SelectionRandomSupportElement(); } // Делаем пока таблица искус базиса не вышла в ноль while (ArtificalBasixGoToNull == false) { //смена местами переменной + буферизация simplextable.ChangeOfVisualizationVariables(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); } switch (simplextable.ArtificialResponseCheck(variable_visualization, dataGridView3)) { case 1: //MessageBox.Show("Таблица пришла в ноль!"); if (!ArtificalBasixGoToNull) { // Удаляем столбцы с искусственными переменными. simplextable.DeleteArtificalBasix(dataGridView3); // Считываем ограничения заного if (Radical_or_Decimal) { ogr = new List <List <double> >(); read_grids(dataGridView3, ogr); simplextable.simplex_elements = ogr; // удаляем строку с нулями из элементов симплекс таблицы simplextable.simplex_elements.RemoveAt(simplextable.simplex_elements.Count - 1); // удаляем последнюю строку с нулями из датаГрид dataGridView3.Rows.RemoveAt(dataGridView3.Rows.Count - 1); // отображаем новые данные addGridParam_for_simplex_elements(simplextable.simplex_elements, dataGridView3); } else { ogr_with_radicals = new List <List <Fractions> >(); read_grids(dataGridView3, ogr_with_radicals); simplextable.simplex_elements_with_radicals = ogr_with_radicals; // удаляем строку с нулями из элементов симплекс таблицы simplextable.simplex_elements_with_radicals.RemoveAt(simplextable.simplex_elements_with_radicals.Count - 1); // удаляем последнюю строку с нулями из датаГрид dataGridView3.Rows.RemoveAt(dataGridView3.Rows.Count - 1); // отображаем новые данные addGridParam_for_simplex_elements(simplextable.simplex_elements_with_radicals, dataGridView3); } // Высчитываем последнюю строку simplextable.CalculateCelRow(dataGridView3); } ArtificalBasixGoToNull = true; // Если ответ готов сразу же switch (simplextable.ResponseCheck()) { case 0: //выбор опорного simplextable.SelectionRandomSupportElement(); break; case 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(simplextable.ResponseDot(dataGridView3), dataGridViewCornerDot); } break; case -1: // tabControl1.TabPages[0].Text = "Линейная форма не ограничена сверху на множествен планов задачи."; MessageBox.Show("Линейная форма не ограничена сверху на множествен планов задачи", ""); break; } break; case 0: if (simplextable.ResponseCheck() == 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(simplextable.ResponseDot(dataGridView3), dataGridViewCornerDot); } } else { // tabControl1.TabPages[0].Text = "Шаг " + step + ": Метод искусственного базиса. Выбор опорного элемента."; //выбор опорного simplextable.SelectionRandomSupportElement(); } break; case -1: // MessageBox.Show("Решения не имеет"); break; } } // Переходим к симплекс таблице, если она не имеет решения или пока ещё не решена, и решаем её до тех пор while (simplextable.ResponseCheck() != 1 && simplextable.ResponseCheck() != -1) { //смена местами переменной + буферизация simplextable.ChangeOfVisualizationVariables(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); } switch (simplextable.ResponseCheck()) { case 0: //выбор опорного simplextable.SelectionRandomSupportElement(); break; case 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(simplextable.ResponseDot(dataGridView3), dataGridViewCornerDot); } break; case -1: // tabControl1.TabPages[0].Text = "Линейная форма не ограничена сверху на множествен планов задачи."; MessageBox.Show("Линейная форма не ограничена сверху на множествен планов задачи.", ""); break; } } }