Реализовать класс «Полином» (см. приложение 3). Дополнительные задания по вариантам:
67) Написать метод Process для выполнения над коэффициентами полинома требуемых преобразований. Вид преобразований должен быть представлен делегатом, передаваемым в этот метод в качестве параметра. Написать несколько предопределенных преобразований (для изменения знака коэффициентов, умножения или деления на константу и т.п.).
68) Реализовать еще одну версию объекта типа «Полином» в виде структуры. В комментариях пояснить, какие пришлось внести модификации в члены структуры по сравнению с членами класса.
69) Перегрузить для полиномов операторы «==» и «!=», а также метод Equals. Сравнение полиномов проводить поэлементно.
70) Определить в классе полинома еще один индексатор с параметром типа double, вычисляющий значение полинома в указанной точке.
71) Добиться того, чтобы оператор «&&» объединял полиномы. Результатом операции «x && y» должен быть полином, в котором коэффициенты полинома y располагаются правее коэффициентов полинома x.
72) Обеспечить возможность сложения и вычитания полиномов с операндами типа double и результатом типа полинома.
73) Добавить в класс метод, позволяющий брать производную любого порядка от полинома.
74) Добиться того, чтобы оператор «>>» понижал степень полинома на i, а оператор «<<» – увеличивал ее на i, где i – величина сдвига.
75) Обеспечить возможность сложения, вычитания и деления полиномов с операндами типа double и результатом типа double, допустимые в том случае, если полином состоит из единственного коэффициента.
76) Перегрузить для полинома операторы true, false и неявного преобразования полинома к типу bool. Будем считать, что полином = «ложь», если все его коэффициенты равны нулю, и «истина» в противном случае.
77) Добавить в класс метод, позволяющий найти первообразную полинома, а также метод, использующий первообразную для вычисления определенного интеграла полинома на указанном отрезке [a, b].
78) Обеспечить поиск требуемого коэффициента полинома. Критерий поиска должен задаваться в виде делегата, передаваемого в этот метод в качестве параметра. Например, поиск минимального или максимального коэффициента, минимального или максимального коэффициента по абсолютному значению, первого или последнего отрицательного, положительного или нулевого коэффициента и т.д.
79) Реализовать в классе интерфейс IEnumerable, позволяющий использовать полином в качестве итератора, например для извлечения его коэффициентов в цикле foreach.
80) Реализовать в классе интерфейс ICloneable, а также метод Copy, возвращающий копию полинома, и метод Assign, принимающий аргумент типа object. Если данный аргумент содержит ссылку на полином, скопировать его в текущий экземпляр полинома.
81) Перегрузить в полиноме операторы отношения и реализовать интерфейс IComparable. Сравнение полиномов осуществлять на основании значений их коэффициентов по абсолютному значению.
82) Реализовать в классе метод, формирующий полином степени n на основании значений n его корней.
83) Избавиться от хранения одинаковых копий полиномов. Для этого реализовать класс-регистратор, хранящий ссылки на все имеющиеся полиномы. Прямой вызов конструкторов полиномов запретить, вместо этого реализовать метод CreateInstance, возвращающий новый полином, если он уникален, и ссылку на имеющийся полином в противном случае. Экземпляр класса-регистратора создавать в статическом конструкторе полинома.
84) Используя оператор yield, реализовать в классе итератор для перечисления всех коэффициентов полинома.
85) Реализовать в классе проверку типа полинома – является ли он четным, нечетным или ни тем, ни другим. Результат возвращать в виде константы перечисления. Результат должен быть получен на основе анализа коэффициентов полинома.
86) Перегрузить для полинома унарные операторы «+» и «- » с сохранением их математического смысла.
87) Реализовать в классе интерфейс IList. Некоторые методы данного интерфейса можно сделать в виде заглушек (генерировать в них исключение NotSupportedException) – например, Insert, Remove и т.д.
88) Реализовать в классе интерфейс ICollection для возможности интерпретации полинома как коллекции.
89) Реализовать в классе интерфейс IFormattable для форматирования вывода коэффициентов полинома на экран.
90) Добавить в класс методы Split и Join. Первый должен возвращать два полинома, являющиеся частями исходного полинома (разделяя его по коэффициенту с указанной степенью). Второй метод должен реализовывать обратную операцию – соединять два полинома в один.
далее до 99