Esempio n. 1
0
        // результат нажатия опорного элемента
        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]);
        }
Esempio n. 2
0
        // все ли числа (кроме посл. эл.) в нижней строке положительны
        // 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);
        }