// результат нажатия опорного элемента 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]); }
// все ли числа (кроме посл. эл.) в нижней строке положительны // true - если >= 0 private bool IsBottomStringPositive(string method, Fraction[,] matrix) { int nowNum = MAB_SM.getNowNum(lpp, method); int columns = matrix.GetLength(0); int rows = matrix.GetLength(1); bool flagNegative = false; bool flagPositive = false; for (int i = 1; i < columns - 1; i++) { if (matrix[i, rows - 1].Numerator < 0) { flagNegative = true; } if (matrix[i, rows - 1].Numerator > 0) { flagPositive = true; } } // >=0 if (!flagNegative && flagPositive) { switch (method) { case "MAB": message.Content = "Система условий несовместна"; break; case "SM": message2.Content = "Найдено решение"; TakeAnswer(method, matrix); break; } return(true); } // =0 if (!flagNegative && !flagPositive) { switch (method) { case "MAB": message.Content = "Найден базис"; TakeAnswer(method, matrix); break; case "SM": message2.Content = "Найдено решение"; TakeAnswer(method, matrix); break; } return(true); } return(false); }