예제 #1
0
        private void MakeExpressions()
        {
            int  uNum            = 1;
            var  noPrefferedRows = new List <int>();
            bool isChanged       = false;

            for (int row = 0; row < LimitsCount; row++)
            {
                if (exprSigns[row] != "=")
                {
                    isChanged = true;

                    var oldExpr = A[row].ExprView(varNames);

                    if (exprSigns[row] == "≥")
                    {
                        A.AddVariable(row, -1);
                    }
                    else if (exprSigns[row] == "≤")
                    {
                        A.AddVariable(row, 1);
                    }

                    C.AddVariable(0);

                    var varName = $"u{uNum++}";

                    varNames.Add(varName);
                    InsertDataGridColumn(dataGridView1, varName, A.VariablesCount - 1, Color.LightGray);

                    isNonNegative.Add(true);

                    if (!IsRightPartsNonNegative(row))
                    {
                        NegateExpression(row);
                    }

                    if (!IsExpressionPreffered(row, A.VariablesCount))
                    {
                        noPrefferedRows.Add(row);
                    }

                    var sign = exprSigns[row] == "≥" ? "-" : "+";

                    textBox1.Text += $"Выражение {oldExpr} является неравенством. "
                                     + Environment.NewLine
                                     + $"Так как знак {exprSigns[row]}, то введём новую переменную {varName} со знаком {sign}:"
                                     + Environment.NewLine
                                     + Environment.NewLine;

                    A[row].Sign    = "=";
                    exprSigns[row] = "=";
                }
                else if (!IsRightPartsNonNegative(row))
                {
                    NegateExpression(row);
                    isChanged = true;
                }
            }

            if (isChanged)
            {
                PrintLimits();
                isChanged = false;
            }

            for (int row = 0; row < noPrefferedRows.Count; row++)
            {
                MakePrefferedExpressions(noPrefferedRows[row]);
                isChanged = true;
            }

            if (isChanged)
            {
                PrintTargetFunction();
                PrintLimits();
            }
        }