/// <summary>
        /// Prompts the user for the coefficients of a polynomial, and sets the
        /// the coefficientList field of the object.
        /// The isValidPolynomial method is used to check for the validity
        /// of the polynomial entered by the user, otherwise the field must
        /// not change.
        /// The acceptable format of the coefficients received from the user is
        /// a series of numbers (one for each coefficient) separated by spaces.
        /// All coefficients values must be entered even those that are zero.
        /// </summary>
        /// <returns>True if the polynomial is succeffully set, false otherwise.</returns>
        public bool SetPolynomial()
        {
            //instruction Statement.
            Console.WriteLine("\nEnter all coefficients for the polynomial seperted by a space (descending order).\nExample: Enter 2 0 3.5 -2 0 for the polynomial (2)*x^4 + (3.5)*x^2 + (-2)*x");


            //Converts the input to a char array in order to use DigitReader method from the Arithmatic class.
            string input = Console.ReadLine();

            char[] arr = input.ToCharArray();


            //checks for validity, and allows overwriting the set polynomolial.
            if (IsValidPolynomial(input) && input.Length != 0)
            {
                coefficientList.Clear();
            }
            else
            {
                return(false);
            }

            for (int index = 0; index < arr.Length; index++)
            {
                if (arr[index].Equals('-') && Char.IsDigit(arr[index + 1]) && (index == 0 || !char.IsDigit(arr[index - 1])))
                {
                    index++;
                    coefficientList.Add(-Arithmetic.DigitReader(arr, ref index));
                }
                else if (Char.IsDigit(arr[index]))
                {
                    coefficientList.Add(Arithmetic.DigitReader(arr, ref index));
                }
                else if (!char.IsWhiteSpace(arr[index]))
                {
                    return(false);
                }
            }

            return(true);
        }
        /// <summary>
        /// Checks if the passed polynomial string is valid.
        /// The acceptable format of the coefficient string is a series of
        /// numbers (one for each coefficient) separated by spaces.
        /// </summary>
        /// <example>
        /// Examples of valid strings: "2   3.5 0  ", or "-2 -3.5 0 0"
        /// Examples of invalid strings: "3..5", or "2x^2+1", or "a b c", or "3 - 5"
        /// </example>
        /// <param name="polynomial">
        /// A string containing the coefficient of a polynomial. The first value is the
        /// highest order, and all coefficients exist (even 0's).
        /// </param>
        /// <returns>True if a valid polynomial, false otherwise.</returns>
        public bool IsValidPolynomial(string polynomial)
        {
            char[] arr = polynomial.ToCharArray();

            for (int index = 0; index < arr.Length; index++)
            {
                //DigitReader is used although the return is not save because of its reference index function.
                if (arr[index].Equals('-') && Char.IsDigit(arr[index + 1]) && (index == 0 || !char.IsDigit(arr[index - 1])))
                {
                    index++;
                    Arithmetic.DigitReader(arr, ref index);
                }
                else if (Char.IsDigit(arr[index]))
                {
                    Arithmetic.DigitReader(arr, ref index);
                }
                else if (!char.IsWhiteSpace(arr[index]))
                {
                    return(false);
                }
            }

            return(true);
        }
        static void Main()
        {
            Calculus calculator = new Calculus();

            Console.WriteLine("Welcome to the calculator program! Select from the menu:");

            while (true)
            {
                Console.WriteLine();
                Console.Write("(a)rithmetic, (s)et polynomial, (g)et all roots, (p)rint polynomial, (d)ifferentiate, (i)ntegrate, (q)uit? ");
                string choice;

                try
                {
                    choice = Console.ReadLine().Trim().ToLower();
                }
                catch (System.IO.IOException e)
                {
                    Console.WriteLine($"IO Exception: {e.Message}");
                    continue;
                }

                string       result   = string.Empty;
                const double accuracy = 0.000001; //For simplcity, accuracy is set to a constant.

                if (choice.StartsWith("a"))
                {
                    result = Arithmetic.BasicArithmetic();
                }
                else if (choice.StartsWith("d"))
                {
                    result = Derivative(calculator);
                }
                else if (choice.StartsWith("i"))
                {
                    result = Integral(calculator);
                }
                else if (choice.StartsWith("g"))
                {
                    try
                    {
                        List <double> roots = calculator.GetAllRoots(accuracy);
                        if (roots.Count == 0)
                        {
                            result = "No real roots found.";
                        }
                        else
                        {
                            for (int i = 0; i < roots.Count; i++)
                            {
                                result += $"root{i} = {roots[i]}\n";
                            }
                        }
                    }
                    catch (InvalidOperationException e)
                    {
                        result = e.Message;
                    }
                }
                else if (choice.StartsWith("p"))
                {
                    try
                    {
                        result = calculator.GetPolynomial();
                    }
                    catch (InvalidOperationException e)
                    {
                        result = e.Message;
                    }
                }
                else if (choice.StartsWith("q"))
                {
                    break;
                }
                else if (choice.StartsWith("s"))
                {
                    if (calculator.SetPolynomial())
                    {
                        result = $"Polynomial saved successfully: {calculator.GetPolynomial()}";
                    }
                    else
                    {
                        result = "Not a valid polynomial.";
                    }
                }
                else
                {
                    result = "Please choose from the menu";
                }
                Console.WriteLine();
                Console.WriteLine(result);
            }
        }