/// <summary> /// Выполнение. /// </summary> private void Implementation() { //Прямой ход метода Гаусса для приведения к треугольному виду. MatrixTransformation.Gauss(elements, CornerDot, variable_visualization); //Выражение базисных переменных. MatrixTransformation.HoistingMatrix(elements, number_of_basix); //создаём сиплекс-таблицу simplextable = new SimplexTable(number_of_basix, number_of_free_variables, variable_visualization, elements, target_function_elements, true); MainGrid.Children.Add(simplextable); int responce; int step = 1; while (true) { if ((responce = simplextable.ResponseCheck()) == 0) { //выбор любого опорного simplextable.SelectionRandomSupportElement(); //смена визуализации переменных в симплек-таблице simplextable.ChangeOfVisualWithoutBuffer(); //вычисление согласно выбранному опорному элементу simplextable.CalculateSimplexTable(); //обновление данных сиплекс-таблицы simplextable.UpdateSimplexTableValues(); //номер угловой точки simplextable.CornerPoint(step); step++; } else if (responce == 1) { if (MinMax == 0) { labelanswer.Content = "Ответ :" + simplextable.Response() * (-1); } else { labelanswer.Content = "Ответ :" + simplextable.Response(); } //добавляем точку corner_dot = simplextable.ResponseCornerDot(step - 1); MainGrid.Children.Add(corner_dot); buttonToMainWindow.Visibility = Visibility.Visible; break; } else if (responce == -1) { labelanswer.Content = "Задача не разрешима!"; buttonToMainWindow.Visibility = Visibility.Visible; break; } } }
/// <summary> /// Кнопка "вперёд". /// </summary> private void buttonNext_Click(object sender, RoutedEventArgs e) { switch (step) { case 0: //буферизация данных BufferingTableValues(); try { buffer_variable_visualization = new int[variable_visualization.Length]; for (int i = 0; i < variable_visualization.Length; i++) { buffer_variable_visualization[i] = variable_visualization[i]; } //прямой ход Гаусса MatrixTransformation.Gauss(elements, CornerDot, variable_visualization); } catch (Exception d) { MessageBox.Show(d.Message); buttonToMainWindow.Visibility = Visibility.Visible; } //Обновление визуализации переменных. UpdateVisualVariables(); //обновление таблицы UpdateTableValues(); step++; labelsteps.Content = "Шаг 1: Прямой ход метода Гаусса."; break; case 1: //буферизация данных BufferingTableValues(); //Выражение базисных переменных. MatrixTransformation.HoistingMatrix(elements, number_of_permutations); //обновление таблицы UpdateTableValues(); step++; labelsteps.Content = "Шаг 2: Выражение базисных переменных."; break; case 2: //скрываем матрицу scrollgaussgrid.Visibility = Visibility.Hidden; if (simplex_table_was_draw == false) { simplextable = new SimplexTable(number_of_permutations, number_of_free_variables, variable_visualization, elements, target_function_elements, true); MainGrid.Children.Add(simplextable); //Симплекс-таблица была создана simplex_table_was_draw = true; } //показываем симплекс-таблицу simplextable.Visibility = Visibility.Visible; switch (simplextable.ResponseCheck()) { case 0: step++; labelsteps.Content = "Шаг 3: Симплекс-таблица."; break; case 1: step++; if (MinMax == 0) { labelsteps.Content = "Ответ :" + simplextable.Response() * (-1); } else { labelsteps.Content = "Ответ :" + simplextable.Response(); } if (corner_dot_was_added == false) { //добавляем точку corner_dot = simplextable.ResponseCornerDot(step); MainGrid.Children.Add(corner_dot); corner_dot_was_added = true; } //показываем угловую точку решения corner_dot.Visibility = Visibility.Hidden; buttonToMainWindow.Visibility = Visibility.Visible; break; case -1: step++; labelsteps.Content = "Задача не разрешима!"; buttonToMainWindow.Visibility = Visibility.Visible; break; } break; case 3: //выбор опорного simplextable.SelectionOfTheSupportElement(); //обновление данных сиплекс-таблицы simplextable.UpdateSimplexTableValues(); step++; labelsteps.Content = "Шаг " + step + ": Симплекс-таблица. Выбор опорного элемента."; break; default: try { //выбран ли опорный элемент simplextable.ButtonPressedOrNot(); //Смена местами визуализаций переменных(после выбора опорного элемента) + буферизация. simplextable.ChangeOfVisualizationVariables(); //буферизация данных simplextable.BufferingSimplexTableValues(step); //удаляем кнопки simplextable.DeleteButtons(); //вычисление согласно выбранному опорному элементу simplextable.CalculateSimplexTable(); //обновление данных сиплекс-таблицы simplextable.UpdateSimplexTableValues(); switch (simplextable.ResponseCheck()) { case 0: step++; labelsteps.Content = "Шаг " + step + ": Симплекс-таблица. Выбор опорного элемента."; //выбор опорного simplextable.SelectionOfTheSupportElement(); break; case 1: step++; if (MinMax == 0) { labelsteps.Content = "Ответ :" + simplextable.Response() * (-1); } else { labelsteps.Content = "Ответ :" + simplextable.Response(); } //если не была добавлена, то добавляем if (corner_dot_was_added == false) { //добавляем точку corner_dot = simplextable.ResponseCornerDot(step - 4); MainGrid.Children.Add(corner_dot); corner_dot_was_added = true; } //показываем угловую точку решения corner_dot.Visibility = Visibility.Visible; buttonToMainWindow.Visibility = Visibility.Visible; break; case -1: step++; labelsteps.Content = "Задача не разрешима!"; buttonToMainWindow.Visibility = Visibility.Visible; break; } simplextable.CornerPoint(step - 4); } catch (Exception d) { MessageBox.Show(d.Message); } break; } }