Как грамотно реализововать класс c#

46
30 июля 2021, 12:00

Вот самое задание:

Описать класс для работы с многочленами от одной переменной, имеющими вещественные коэффициенты.Предусмотреть методы для:

  • Задания и получения степени, коэффициентов (здесь можно использовать свойства)
  • Вычисления значения многочлена при данном значении переменной
  • Получения производной данного многочлена в виде нового объекта-многочлена
  • Сложения и вычитание двух многочленов Необходимо учесть, что многочлен может иметь произвольную допустимую степень.

Напишите программу, которая демонстрирует работу с данным классом, решая следующие задачи:

  • Задать в программе два многочлена P(x) и Q(x), первый как минимум пятой степени, второй – минимум второй степени
  • Вычислить значения P(2) и Q(10)
  • Вывести P’(x) и Q’(x)+P(x)
  • Вычислить P’(3)-Q(-1)

Вот мой класс:

class Polynome
    {
        public int Degree { get; private set; }
        private List<double> Coefficients = new List<double>();
        public Polynome(int Degree, List<double> Coefficients)
        {
            this.Degree = Degree;
            this.Coefficients = Coefficients;
        }
        public Polynome() { }
        public void SetDegree()
        {
            Console.Write("Enter degree of polynome: ");
            string s = Console.ReadLine();
            while (Int32.TryParse(s, out Int32 d) != true ||  d < 1)
            {
                Console.Write("Error! Plese try again: ");
                s = Console.ReadLine();
            }
            Degree = Int32.Parse(s);
        }
        public void SetCoefficients()
        {
            Console.WriteLine("Enter coefficients from left to right!");
            for (int i = 0; i <= Degree; i++)
            {
                if (i != Degree)
                {
                    Console.Write($"Enter the {i + 1} coefficient: ");
                }
                else
                {
                    Console.Write("Enter free member: ");
                }
                string s = Console.ReadLine();
                while(double.TryParse(s, out double d) != true)
                {
                    Console.Write("Error! Plese try again: ");
                    s = Console.ReadLine();
                }
                Coefficients.Add(double.Parse(s));
            }
            Console.WriteLine();
        }
        public double CalculatePolynome(int X)
        {
            double Res = 0;
            for (int i = Degree, j = 0; i >= 0; i--, j++)
            {
                Res += Math.Pow(X, i) * Coefficients.ElementAt(j);
            }
            return Res;
        }
        public Polynome Derivative()
        {
            Polynome R = new Polynome();
            for (int i = 0, j = Degree; i < Degree; i++, j--)
            {
                R.Coefficients.Add(j * Coefficients.ElementAt(i));
            }
            R.Degree = Degree - 1;
            return R;
        }
        public void Display()
        {
            for (int i = 0; i <= Degree; i++)
            {
                if (i == Degree)
                {
                    Console.Write($"{Coefficients.ElementAt(i)}");
                    break;
                }
                Console.Write($"{Coefficients.ElementAt(i)}X^{Degree - i} ");
                if (i != Degree && (Coefficients.ElementAt(i + 1) >= 0))
                {
                    Console.Write("+ ");
                }
            }
            Console.Write(" = 0");
            Console.WriteLine();
        }
        public void FoldPolynomials(Polynome P)
        {
            Degree = P.Degree > Degree ? P.Degree : Degree;
            if (P.Degree > Degree)
            {
                while (P.Degree != Degree)
                {
                    Coefficients.Insert(0, 0);
                    Degree++;
                }
            }
            else if (P.Degree < Degree)
            {
                while (P.Degree != Degree)
                {
                    P.Coefficients.Insert(0, 0);
                    P.Degree++;
                }
            }
            for (int i = 0; i <= Degree; i++)
            {
                Coefficients.Add(P.Coefficients.ElementAt(i) + Coefficients.ElementAt(i));
            }
        }
        public void SubtractPolynomials(Polynome Subtrahend) 
        {
            Degree = Degree > Subtrahend.Degree ? Degree : Subtrahend.Degree;
            if (Degree > Subtrahend.Degree)
            {
                while (Degree != Subtrahend.Degree)
                {
                    Subtrahend.Coefficients.Insert(0, 0);
                    Subtrahend.Degree++;
                }
            }
            else if (Degree < Subtrahend.Degree)
            {
                while (Degree != Subtrahend.Degree)
                {
                    Coefficients.Insert(0, 0);
                    Degree++;
                }
            }
            for (int i = 0; i <= Degree; i++)
            {
                Coefficients.Add(Coefficients.ElementAt(i) - Subtrahend.Coefficients.ElementAt(i));
            }
        }
    }

Пожалуйста укажите мне на мои ошибки в плане ООП. Заранее спасибо!

READ ALSO
Где находится exe файл программы C# под Visual Studio?

Где находится exe файл программы C# под Visual Studio?

Поставлена последняя версия VS Community 2019Компилирую простенькую консольную программу

87
Session всегда является null

Session всегда является null

уважаемые форумчани!

26