/// <summary>
        /// Конструктор для авто-режима с задачей
        /// </summary>
        /// <param name="problem"></param>
        public AutoStepWindow(LinearProgrammingProblem problem)
        {
            this.Problem = problem;

            // Инициализируем компоненты окна
            InitializeComponent();

            // Заносим параметры в ячейки
            DataGridWorker.SetParamToGrids(_dataGridViewProblem, Problem.Restrictions, true);

            if (Problem.CornerDot != null)
            {
                Problem.TransformColumnsForCornerDot(_dataGridViewProblem);
            }

            //Процесс выполнения.
            Implementation();
        }
        /// <summary>
        /// Конструктор для окна пошагового режима с задачей
        /// </summary>
        /// <param name="problem">Задача линейного программирования</param>
        public StepByStepWindow(LinearProgrammingProblem problem)
        {
            this.Problem = problem;

            // изначально мы на нулевом шаге
            this.Step = 0;

            // Инициализируем компоненты окна
            InitializeComponent();

            // Добавляем в ячейки данные
            tabControl.TabPages[0].Text = "Матрица коэффициентов системы ограничения равенств.";
            DataGridWorker.SetParamToGrids(_dataGridViewProblem, Problem.Restrictions, true);

            if (Problem.CornerDot != null)
            {
                Problem.TransformColumnsForCornerDot(_dataGridViewProblem);
            }
        }
        /// <summary>
        /// Кнопка "Решить"
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonSolve_Click(object sender, EventArgs e)
        {
            // Задача на минимум?
            bool min = radioButtonMin.Checked;
            // Пошаговый режим?
            bool stepByStepModeOn = radioButtonStepByStepMode.Checked;
            // Задана угловая точка?
            bool cornerDotOn = checkBoxCornerDot.Checked;

            // Создаём объект задачи
            LinearProgrammingProblem problem;

            // Инициализируем
            try
            {
                // Данные задачи
                List <List <string> > targetFunction = DataGridWorker.ReadGridsFrom(_dataGridViewTargetFunction);
                List <List <string> > retrictions    = DataGridWorker.ReadGridsFrom(_dataGridViewRestrictions);
                List <List <string> > cornerDot;

                // Если включена угловая точка
                if (cornerDotOn)
                {
                    cornerDot = DataGridWorker.ReadGridsFrom(_dataGridViewCornerDot);

                    problem = new LinearProgrammingProblem(targetFunction, retrictions, cornerDot, min);

                    // Использование LINQ
                    var query = problem.CornerDot[0].Where(fraction => !fraction.Equals(new Fraction(0)));
                    if (problem.Restrictions.Count != query.Count())
                    {
                        throw new Exception("Невозможно выразить базис с данной угловой точкой. " +
                                            "Количество ненулевых параметров начальной угловой точки не равно количеству линейно независимых строк");
                    }
                }
                else
                {
                    problem = new LinearProgrammingProblem(targetFunction, retrictions, null, min);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Ошибка при создании задачи!", MessageBoxButtons.OK);
                return;
            }

            // Меню
            // Проверяем режим
            switch (stepByStepModeOn)
            {
            // Если выбран пошаговый режим
            case true:

                StepByStepWindow stepByStepWindow = new StepByStepWindow(problem);
                stepByStepWindow.ShowDialog();

                break;


            // Если выбран авто-режим
            case false:

                AutoStepWindow autoStepWindow = new AutoStepWindow(problem);
                autoStepWindow.ShowDialog();

                break;
            }
        }