private void pbGause_Click(object sender, EventArgs e)
        {
            double[,] main = (double[, ])ReadDataGrid(dgvMain);
            double[] left = (double[])ReadDataGrid(dgvLeft);
            if (main == null)
            {
                MessageBox.Show("Ошибка ввода в главной матрице.");
                return;
            }
            if (left == null)
            {
                MessageBox.Show("Ошибка ввода в столбце значений.");
                return;
            }

            SoLE sole = new SoLE(main, left);

            double[] result = sole.SolveGause();

            double[,] arrMain = sole.Main;
            for (int i = 0; i < dgvMain.Rows.Count; i++)
            {
                for (int j = 0; j < dgvMain.Columns.Count; j++)
                {
                    dgvMain.Rows[i].Cells[j].Value = arrMain[i, j];
                }
            }

            double[] array = sole.Left;
            for (int i = 0; i < dgvLeft.Rows.Count; i++)
            {
                dgvLeft.Rows[i].Cells[0].Value = array[i];
            }

            if (sole.Status != SoLEStatus.Ok)
            {
                if (sole.Status == SoLEStatus.NoAnswer)
                {
                    MessageBox.Show("Нет решений.");
                }
                else if (sole.Status == SoLEStatus.ZeroDeterminant)
                {
                    MessageBox.Show("Определитель равен нулю.");
                }
                else if (sole.Status == SoLEStatus.ZeroesOnMain)
                {
                    MessageBox.Show("Нули на главной диагонали");
                }

                return;
            }

            for (int i = 0; i < dgvLeft.Rows.Count; i++)
            {
                dgvX.Rows[i].Cells[0].Value = result[i];
            }
        }
        private void pbZeidel_Click(object sender, EventArgs e)
        {
            double[,] main = (double[, ])ReadDataGrid(dgvMain);
            double[] left = (double[])ReadDataGrid(dgvLeft);
            if (main == null)
            {
                MessageBox.Show("Ошибка ввода в главной матрице.");
                return;
            }
            if (left == null)
            {
                MessageBox.Show("Ошибка ввода в столбце значений.");
                return;
            }

            double accuracy;

            while (!double.TryParse(Interaction.InputBox("Введите приближение", "", "0,0001", 100, 100), out accuracy))
            {
                MessageBox.Show("Ошибка ввода. Точность должна быть числом.");
            }

            SoLE sole = new SoLE(main, left);

            double[] result = sole.Zeidel(accuracy);

            double[,] arrMain = sole.Main;
            for (int i = 0; i < dgvMain.Rows.Count; i++)
            {
                for (int j = 0; j < dgvMain.Columns.Count; j++)
                {
                    dgvMain.Rows[i].Cells[j].Value = arrMain[i, j];
                }
            }

            double[] array = sole.Left;
            for (int i = 0; i < dgvLeft.Rows.Count; i++)
            {
                dgvLeft.Rows[i].Cells[0].Value = array[i];
            }

            if (sole.Status != SoLEStatus.Ok)
            {
                if (sole.Status == SoLEStatus.NoAnswer)
                {
                    MessageBox.Show("Нет решений.");
                }
                else if (sole.Status == SoLEStatus.Divergence)
                {
                    MessageBox.Show("Система расходится.");
                }
                else if (sole.Status == SoLEStatus.ZeroesOnMain)
                {
                    MessageBox.Show("Нули на главной диагонали");
                }

                return;
            }

            for (int i = 0; i < dgvLeft.Rows.Count; i++)
            {
                dgvX.Rows[i].Cells[0].Value = result[i];
            }
        }