// результат нажатия опорного элемента private void ClickedButton(string method, Button butt, List <Fraction[, ]> matrixs, Grid grid) { // определить какая матрица на экране в данный момент int nowNum = MAB_SM.getNowNum(lpp, method); // очистить хвост списка (все матрицы большие по номеру, чем текущая) int count = matrixs.Count - nowNum - 1; matrixs.RemoveRange(nowNum + 1, count); // определить координаты кнопки int row = Grid.GetRow(butt); int column = Grid.GetColumn(butt); // кол-во столбцов в матрице int columns = matrixs[nowNum].GetLength(0); MessageBox.Show("Вы выбрали опорным элемент,\n" + "расположенный на пересечении x" + column + " и x" + (row + columns - 2)); // сделать шаг мет.иск.баз./симп.метода MAB_SM.Step(lpp, column, row, method, nowNum, matrixs); // определить № последней матрицы в списке nowNum = matrixs.Count - 1; // проверка на положительность всех эл. в нижней строке IsBottomStringPositive(method, matrixs[nowNum]); switch (method) { case "SM": // проверка на отр. столбец IsContainNegativeColumn(method, matrixs[nowNum]); break; } // отобразить расчет Display.InitializeGrid_3_4(this, method, grid, matrixs[nowNum]); }
// симлекс метод private void autoButton2_Click(object sender, RoutedEventArgs e) { // очистить хвост списка int countMatrix = lpp.simplexMethod.Count - lpp.nowNumMatrixSM - 1; lpp.simplexMethod.RemoveRange(lpp.nowNumMatrixSM + 1, countMatrix); int column; int row; while (true) { MAB_SM.SelectSupportElem(lpp, out column, out row, "SM", lpp.simplexMethod[lpp.nowNumMatrixSM]); // рассчитать if (column > 0 && row > 0) { // проверка if (IsBottomStringPositive("SM", lpp.simplexMethod[lpp.nowNumMatrixSM]) || IsContainNegativeColumn("SM", lpp.simplexMethod[lpp.nowNumMatrixSM])) { // отобразить расчет Display.InitializeGrid_3_4(this, "SM", grid4, lpp.simplexMethod[lpp.nowNumMatrixSM]); break; } MAB_SM.Step(lpp, column, row, "SM", lpp.nowNumMatrixSM, lpp.simplexMethod); if (IsBottomStringPositive("SM", lpp.simplexMethod[lpp.nowNumMatrixSM]) || IsContainNegativeColumn("SM", lpp.simplexMethod[lpp.nowNumMatrixSM])) { // отобразить расчет Display.InitializeGrid_3_4(this, "SM", grid4, lpp.simplexMethod[lpp.nowNumMatrixSM]); break; } // отобразить расчет Display.InitializeGrid_3_4(this, "SM", grid4, lpp.simplexMethod[lpp.nowNumMatrixSM]); } else { if (message2.Content.Equals("")) { message2.Content = "Упс... См. autoButton2_Click"; } break; } } }
//// для метода иск. баз. private void autoButton_Click(object sender, RoutedEventArgs e) { // очистить хвост списка if (lpp.nowNumMatrixMAB % 2 != 0) { lpp.nowNumMatrixMAB++; } int countMatrix = lpp.methodOfArtificialBasis.Count - lpp.nowNumMatrixMAB - 1; lpp.methodOfArtificialBasis.RemoveRange(lpp.nowNumMatrixMAB + 1, countMatrix); int column; int row; // количество шагов int countStep = lpp.matrix2.GetLength(1) - (lpp.nowNumMatrixMAB / 2); for (int i = 0; i < countStep; i++) { // найти координаты опорного элемента MAB_SM.SelectSupportElem(lpp, out column, out row, "MAB", lpp.methodOfArtificialBasis[lpp.nowNumMatrixMAB]); // рассчитать if (column > 0 && row > 0) { MAB_SM.Step(lpp, column, row, "MAB", lpp.nowNumMatrixMAB, lpp.methodOfArtificialBasis); lpp.methodOfArtificialBasis[lpp.nowNumMatrixMAB][0, 0].Text = "№" + (lpp.nowNumMatrixMAB).ToString(); // проверка совместности системы IsBottomStringPositive("MAB", lpp.methodOfArtificialBasis[lpp.nowNumMatrixMAB]); // отобразить расчет Display.InitializeGrid_3_4(this, "MAB", grid3, lpp.methodOfArtificialBasis[lpp.nowNumMatrixMAB]); } else { if (message.Content.Equals("")) { message.Content = "Нет подходящего опорного элемента. Найден цикл"; } } } }