private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                Data.a   = Convert.ToInt32(aInt.Text);
                Data.b   = Convert.ToInt32(bInt.Text);
                Data.c   = (Data.a + Data.b) / 2;
                Data.eps = Convert.ToDouble(eps.Text);
                if (SeconddegreeToolStripMenuItem2.Checked == true)
                {
                    Data.A = Convert.ToDouble(cCoeff.Text);
                    Data.B = Convert.ToDouble(dCoeff.Text);
                    Data.C = Convert.ToDouble(eCoeff.Text);
                }
                else if (ThirddegreeToolStripMenuItem1.Checked == true)
                {
                    Data.A = Convert.ToDouble(bCoeff.Text);
                    Data.B = Convert.ToDouble(cCoeff.Text);
                    Data.C = Convert.ToDouble(dCoeff.Text);
                    Data.D = Convert.ToDouble(eCoeff.Text);
                }
                else
                {
                    Data.A = Convert.ToDouble(aCoeff.Text);
                    Data.B = Convert.ToDouble(bCoeff.Text);
                    Data.C = Convert.ToDouble(cCoeff.Text);
                    Data.D = Convert.ToDouble(dCoeff.Text);
                    Data.E = Convert.ToDouble(eCoeff.Text);
                }
                Base obj = new Base();
                if (SeconddegreeToolStripMenuItem2.Checked == true)
                {
                    obj = new Derivative2();
                }
                if (ThirddegreeToolStripMenuItem1.Checked == true)
                {
                    obj = new Derivative3();
                }
                if (FourthdegreeToolStripMenuItem.Checked == true)
                {
                    obj = new Derivative4();
                }
                Data.f_a   = obj.f(Data.a);
                Data.f_b   = obj.f(Data.b);
                Data.f_c   = obj.f(Data.c);
                Data.fs_a  = obj.fs(Data.a);
                Data.fs_b  = obj.fs(Data.b);
                Data.fss_a = obj.fss(Data.a);
                Data.fss_b = obj.fss(Data.b);

                Hord();
                Bisec();
                Newthon();
                Graph();
            }
            catch
            {
                MessageBox.Show("Помилка вводу");
            }
        }
        private void Newthon()
        {
            double Xk;
            double Xknew = 0;
            double Xkold = 0;

            gridNewthon.Rows.Clear();
            Base obj = new Base();

            if (SeconddegreeToolStripMenuItem2.Checked == true)
            {
                obj = new Derivative2();
            }
            if (ThirddegreeToolStripMenuItem1.Checked == true)
            {
                obj = new Derivative3();
            }
            if (FourthdegreeToolStripMenuItem.Checked == true)
            {
                obj = new Derivative4();
            }
            Xk = Data.b;
            int    i   = 0;
            bool   end = true;
            double delta;

            while (end)
            {
                double fXk  = obj.f(Xk);
                double fsXk = obj.fs(Xk);

                Xknew = Xk - fXk / fsXk;
                if (i != 0)
                {
                    delta = Math.Abs(Xk - Xkold);
                }
                else
                {
                    delta = 0;
                }
                string[] row = { i.ToString(),    Math.Round(Xk, 4).ToString(), Math.Round(delta, 4).ToString(), Math.Round(fXk, 4).ToString(),
                                 Math.Round(fsXk, 4).ToString() };
                gridNewthon.Rows.Add(row);
                Xkold = Xk;
                Xk    = Xknew;
                if (i != 0)
                {
                    if (delta < 0.000001)
                    {
                        end = false;
                    }
                }
                i++;
            }
        }
        private void Hord()
        {
            Base obj = new Base();

            if (SeconddegreeToolStripMenuItem2.Checked == true)
            {
                obj = new Derivative2();
            }
            if (ThirddegreeToolStripMenuItem1.Checked == true)
            {
                obj = new Derivative3();
            }
            if (FourthdegreeToolStripMenuItem.Checked == true)
            {
                obj = new Derivative4();
            }
            double Xk    = 0;
            double XkNew = 0;
            double XkOld = 0;
            int    i     = 0;
            double delta;

            gridHord.Rows.Clear();
            bool formula;

            if (Data.f_a * Data.fss_a > 0)
            {
                formula = true;
            }
            else
            {
                formula = false;
            }
            if (formula)
            {
                Xk = Data.b;
            }
            else
            {
                Xk = Data.a;
            }
            bool end = true;

            while (end)
            {
                double fXk = obj.f(Xk);
                if (i != 0)
                {
                    delta = Math.Abs(Xk - XkOld);
                }
                else
                {
                    delta = 0;
                }
                string[] row = { i.ToString(), Math.Round(Xk, 4).ToString(), Math.Round(delta, 4).ToString(), Math.Round(fXk, 4).ToString() };
                gridHord.Rows.Add(row);
                if (!formula)
                {
                    XkNew = Xk - fXk * (Data.b - Xk) / (Data.f_b - fXk);
                }
                else
                {
                    XkNew = Data.a - Data.f_a * (Xk - Data.a) / (fXk - Data.f_a);
                }
                XkOld = Xk;
                Xk    = XkNew;
                if (i != 0)
                {
                    if (delta < Data.eps)
                    {
                        end = false;
                    }
                }
                i++;
            }
        }
        private void Bisec()
        {
            Base obj = new Base();

            if (SeconddegreeToolStripMenuItem2.Checked == true)
            {
                obj = new Derivative2();
            }
            if (ThirddegreeToolStripMenuItem1.Checked == true)
            {
                obj = new Derivative3();
            }
            if (FourthdegreeToolStripMenuItem.Checked == true)
            {
                obj = new Derivative4();
            }
            gridBisec.Rows.Clear();
            a = Data.a;
            b = Data.b;
            c = (b + a) / 2;
            int  i   = 0;
            bool end = true;

            while (end)
            {
                double fa = obj.f(a);
                double fb = obj.f(b);
                double fc = obj.f(c);
                double delta;
                i++;
                delta = Math.Abs(a - b);
                string[] row = { i.ToString(),  Math.Round(a,  3).ToString(), Math.Round(b,  3).ToString(), Math.Round(c,     4).ToString(),
                                 Math.Round(fa, 2).ToString(), Math.Round(fb, 2).ToString(), Math.Round(fc, 2).ToString(), Math.Round(delta, 4).ToString() };
                gridBisec.Rows.Add(row);
                if (Math.Abs(a - b) < Data.eps)
                {
                    end = false;
                }
                if (obj.f(a) * obj.f(c) < 0)
                {
                    b = c;
                    c = (a + b) / 2;
                    continue;
                }
                if (obj.f(a) * obj.f(c) > 0)
                {
                    a = c;
                    c = (a + b) / 2;
                    continue;
                }
                if (obj.f(a) * obj.f(b) == 0)
                {
                    break;
                }
            }
            if ((Math.Round(c, 2) == Data.a) || (Math.Round(c, 2) == Data.b))
            {
                gridBisec.Rows.Clear();
                gridBisec.Rows.Add("Змініть проміжок");
            }
        }