예제 #1
0
        private void continueButton_Click(object sender, EventArgs e)
        {
            int j = 0;

            try
            {
                for (j = 0; j < defaultSolution.Dimension; j++)
                {
                    defaultSolution[j] = Convert.ToDouble(defaultSolutionTextBoxes[j].Text);
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Введенная вами " + Convert.ToString(j + 1) + "-я компонента не является числом!");
                defaultSolutionTextBoxes[j].Text = "0";
                return;
            }
            catch (OverflowException)
            {
                MessageBox.Show("Введенная вами " + Convert.ToString(j + 1) + "-я компонента, к сожалению, является слишком большой!");
                defaultSolutionTextBoxes[j].Text = "0";
                return;
            }
            catch (Exception)
            {
                MessageBox.Show("Во время ввода " + Convert.ToString(j + 1) + "-й компоненты произошла неизвестная ошибка!");
                defaultSolutionTextBoxes[j].Text = "0";
                return;
            }
            try
            {
                canonicalProblem.SetDefaultBasisSolution(defaultSolution);
            }
            catch (ArgumentException)
            {
                MessageBox.Show("Введенный вектор, к сожалению, не может быть опорным!");
                return;
            }
            ResultForm result = new ResultForm(canonicalProblem, previousForm);

            Close();
            result.Show();
        }
예제 #2
0
        private void continueButton_Click(object sender, EventArgs e)
        {
            int checkedCount = 0;

            foreach (CheckBox checkBox in vectorCheckBoxes)
            {
                if (checkBox.Checked)
                {
                    checkedCount++;
                }
            }
            if (checkedCount != canonicalProblem.LimitationNumber)
            {
                MessageBox.Show("Вы указали недостаточное количество векторов, для того, чтобы они образовывали базис!");
                return;
            }
            for (int i = 0, indexBasis = 0; i < vectorCheckBoxes.Length; i++)
            {
                if (vectorCheckBoxes[i].Checked)
                {
                    defaultBasisIndexes[indexBasis++] = i;
                }
            }
            try
            {
                canonicalProblem.SetDefaultBasis(defaultBasisIndexes);
            }
            catch (ArgumentException)
            {
                MessageBox.Show("К сожалению указанные вами вектора линейно-зависимы и не могут образовывать базис!");
                return;
            }
            ResultForm result = new ResultForm(canonicalProblem, previousForm);

            Close();
            result.Show();
        }
예제 #3
0
        private void continueButton_Click(object sender, EventArgs e)
        {
            int i = 0, j = 0;

            try
            {
                for (j = 0; j < textBoxesObjectiveCoeffs.Length; j++)
                {
                    ObjectiveFunctionCoefficients[j] = Convert.ToDouble(textBoxesObjectiveCoeffs[j].Text);
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Коэффицинт введенный при x" + Convert.ToString(j + 1) + " в формуле целевой функции не является числом!");
                textBoxesObjectiveCoeffs[j].Text = "0";
                return;
            }
            catch (OverflowException)
            {
                MessageBox.Show("Коэффицинт введенный при x" + Convert.ToString(j + 1) + " в формуле целевой функции, к сожалению, слишком велик!");
                textBoxesObjectiveCoeffs[j].Text = "0";
                return;
            }
            catch (Exception)
            {
                MessageBox.Show("Во время введения коэффициента при x" + Convert.ToString(j + 1) + " в формуле целевой функции возникла неизвестная ошибка!");
                textBoxesObjectiveCoeffs[j].Text = "0";
                return;
            }
            if (comboBoxMax.Text.Replace(" ", "") == "max")
            {
                maxObj = true;
            }
            else if (comboBoxMax.Text.Replace(" ", "") == "min")
            {
                maxObj = false;
            }
            else
            {
                MessageBox.Show("Не указан экстремум целевой функции!");
                return;
            }
            try
            {
                for (i = 0; i < textBoxesLimitationMatrix.GetLength(0); i++)
                {
                    for (j = 0; j < textBoxesLimitationMatrix.GetLength(1); j++)
                    {
                        LimitationMatrix[i, j] = Convert.ToDouble(textBoxesLimitationMatrix[i, j].Text);
                    }
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Коэффицинт введенный при x" + Convert.ToString(j + 1) + " в уравнении/неравенстве №" + Convert.ToString(i + 1) + " не является числом!");
                textBoxesLimitationMatrix[i, j].Text = "0";
                return;
            }
            catch (OverflowException)
            {
                MessageBox.Show("Коэффицинт введенный при x" + Convert.ToString(j + 1) + " в уравнении/неравенстве №" + Convert.ToString(i + 1) + ", к сожалению, слишком велик!");
                textBoxesLimitationMatrix[i, j].Text = "0";
                return;
            }
            catch (Exception)
            {
                MessageBox.Show("Во время введения коэффициента при x" + Convert.ToString(j + 1) + " в уравнении/неравенстве №" + Convert.ToString(i + 1) + " возникла неизвестная ошибка!");
                textBoxesLimitationMatrix[i, j].Text = "0";
                return;
            }
            try
            {
                for (i = 0; i < textBoxesLimitationVector.Length; i++)
                {
                    LimitationVector[i] = Convert.ToDouble(textBoxesLimitationVector[i].Text);
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Свободный член введенный в уравнении/неравенстве №" + Convert.ToString(i + 1) + " не является числом!");
                textBoxesLimitationVector[i].Text = "0";
                return;
            }
            catch (OverflowException)
            {
                MessageBox.Show("Свободный член введенный в уравнении/неравенстве №" + Convert.ToString(i + 1) + ", к сожалению, слишком велик!");
                textBoxesLimitationVector[i].Text = "0";
                return;
            }
            catch (Exception)
            {
                MessageBox.Show("Во время введения свободного члена в уравнении/неравенстве №" + Convert.ToString(i + 1) + " возникла неизвестная ошибка!");
                textBoxesLimitationVector[i].Text = "0";
                return;
            }
            for (i = 0; i < comboBoxesRelations.Length; i++)
            {
                if (comboBoxesRelations[i].Text == "")
                {
                    MessageBox.Show("Не указан тип отношения в уравнении/неравенстве №" + Convert.ToString(i + 1) + "!");
                    return;
                }
            }
            for (i = 0; i < RelationArray.Length; i++)
            {
                if (comboBoxesRelations[i].Text.Replace(" ", "") == "<=")
                {
                    RelationArray[i] = -1;
                }
                else if (comboBoxesRelations[i].Text.Replace(" ", "") == ">=")
                {
                    RelationArray[i] = 1;
                }
                else
                {
                    RelationArray[i] = 0;
                }
            }
            for (j = 0; j < comboBoxesSigns.Length; j++)
            {
                if (comboBoxesSigns[j].Text == "")
                {
                    MessageBox.Show("Не указан знак для переменной x" + Convert.ToString(j + 1) + "!");
                    return;
                }
            }
            for (j = 0; j < SignArray.Length; j++)
            {
                if (comboBoxesSigns[j].Text.Replace(" ", "") == "<=0")
                {
                    SignArray[j] = -1;
                }
                else if (comboBoxesSigns[j].Text.Replace(" ", "") == ">=0")
                {
                    SignArray[j] = 1;
                }
                else
                {
                    SignArray[j] = 0;
                }
            }
            try
            {
                Problem = new LinearProgrammingProblem(LimitationMatrix, LimitationVector, ObjectiveFunctionCoefficients,
                                                       algorithmPrint, maxObj, RelationArray, SignArray);
            }
            catch (ArgumentException)
            {
                MessageBox.Show("Введенная ЗЛП не имеет смысла, или содержит ограничения, которые, очевидно, тождественно истинные или ложные!");
                return;
            }
            CanonicalProblem = new LinearProgrammingProblem(Problem.EqualCanonicalProblem);
            if (MethodNumber == 0)
            {
                Hide();
                DefaultBasisInput basisInput = new DefaultBasisInput(CanonicalProblem, this);
                basisInput.Show();
            }
            else if (MethodNumber == 1)
            {
                Hide();
                DefaultSolutionInput solutionInput = new DefaultSolutionInput(CanonicalProblem, this);
                solutionInput.Show();
            }
            else
            {
                Hide();
                ResultForm result = new ResultForm(Problem, this);
                result.Show();
            }
        }