Тип данных как структура с функциями - C#
Формулировка задачи:
Тип многочлен от одной переменной, задаваемый степенью многочлена и массивом коэффициентов. Предусмотреть операцию
вычитания .
Как описать/реализовать структурой многочлен?
Решение задачи: «Тип данных как структура с функциями»
textual
Листинг программы
class Program
{
struct Polynomial
{
private readonly double[] _coefficients;
// Создание полинома на основе коэффициентов.
//<param name = "coefficients">Коэффициенты*полинома.</param>
public Polynomial(params double[] coefficients)
{
_coefficients = coefficients;
}
// Получение или установка значения коэффициента полинома.
//<param name = "n">Номер коэффициента.</param>
//<returns>Значение коэффициента.</returns>
public double this[int n]
{
get { return _coefficients[n]; }
set { _coefficients[n] = value; }
}
// Степень*полинома.
public int Order
{
get { return _coefficients.Length; }
}
public override string ToString()
{
return string.Format("Coefficients:*" + string.Join(";*", _coefficients));
}
// Быстрый расчет значения полинома по схеме Горнера.
//<param name = "x">Аргумент полинома.</param>
//<returns>Значение полинома.</returns>
public double Calculate(double x)
{
int n = _coefficients.Length - 1;
double result = _coefficients[n];
for (int i = n - 1; i >= 0; i--)
{
result = x * result + _coefficients[i];
}
return result;
}
// Вычитание полиномов.
public static Polynomial operator -(Polynomial pFirst, Polynomial pSecond)
{
int itemsCount = Math.Max(pFirst._coefficients.Length, pSecond._coefficients.Length);
var result = new double[itemsCount];
for (int i = 0; i < itemsCount; i++)
{
double a = 0;
double b = 0;
if (i < pFirst._coefficients.Length)
{
a = pFirst[i];
}
if (i < pSecond._coefficients.Length)
{
b = pSecond[i];
}
result[i] = a - b;
}
return new Polynomial(result);
}
}
static void Main(string[] args)
{
Polynomial p1 = new Polynomial(2, 1);
Polynomial p2 = new Polynomial(4, 3, 2, 1);
Console.WriteLine(p1 - p2);
Console.ReadLine();
}
}