Реализация многочлена (класс на основе списка, бинарного или сбалансированного дерева) - C#
Формулировка задачи:
Здравствуйте! Скоро сдавать зачет и препод скорее всего попросит написать на листочке реализацию многочлена с помощью класса на основе списка или на основе бинарного дерева или на основе сбалансированного дерева. К тому же надо реализовать все основные арифметические операции плюс дифференцирование и интегрирование. И еще надо написать main для демонстрации возможности программы. Если вам нетрудно не могли бы помочь? C# у нас был только обзорно и я боюсь ошибиться в написании. Спасибо.
пожалуйста, закройте тему. Никто не откликается, я ее перенесу в другой раздел. Спасибо!
Решение задачи: «Реализация многочлена (класс на основе списка, бинарного или сбалансированного дерева)»
textual
Листинг программы
using System;
using System.Collections.Generic;
namespace PolynomForum
{
class Program
{
public static void Main(string[] args)
{
Polynom a = new Polynom(new int[5]{4,5,6,0,2});
Polynom b = new Polynom(new int[3]{5,0,2});
Console.WriteLine(a.ToString());
Console.WriteLine(b.ToString());
Polynom c = a + b;
Console.WriteLine();
Console.WriteLine(c.ToString());
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
//Класс описывающий многочлен
class Polynom
{
List<int> _polynom=new List<int>(); //Список элементов (членов)
int _ExtPolynom=0; //Степень многочлена
//Степень многочлена (количество элементов)
public int GetExtentPolynom
{
get{return _ExtPolynom;}
}
//Получение списка элементов
public List<int> GetItems()
{
return _polynom;
}
//Индексатор, для возможности обратиться к произвольному элементу многочлена
public int this [int i]
{
get
{
if (i > _polynom.Count-1) return 0;
return _polynom[i];
}
set
{
if (i > _polynom.Count-1) _polynom[i]=value;
}
}
//Базовые конструкторы
public Polynom(params int[] items)
{
for (int i = 0; i < items.Length; i++)
_polynom.Add(items[i]);
_ExtPolynom=items.Length;
}
public Polynom(List<int> items)
{
_polynom=items;
_ExtPolynom=items.Count;
}
//Перегрузки операторов (большим является многочлен с большей степенью)
public static bool operator > (Polynom x, Polynom y)
{
if (x.GetExtentPolynom > y.GetExtentPolynom) return true;
return false;
}
public static bool operator < (Polynom x, Polynom y)
{
return !(x > y);
}
public static Polynom operator + (Polynom x, Polynom y)
{
if (x < y)
{
Polynom tmp = new Polynom(x.GetItems());
x=y;
y=tmp;
}
List<int> ResItems = new List<int>();
int offset=x.GetExtentPolynom-y.GetExtentPolynom;
for (int i = 0; i < x.GetExtentPolynom; i++)
{
if (i>=offset)ResItems.Add(x[i]+y[i-offset]);
else ResItems.Add(x[i]);
}
Polynom Res=new Polynom(ResItems);
return Res;
}
//Перегрузка базового метода (для более удобного вывода, настраивается по желанию)
public override string ToString()
{
string res = string.Empty;
for (int i = 0; i < _polynom.Count; i++)
res +=_polynom[i] +
((_polynom.Count-(i+1) != 0 ) ? "x"+(_polynom.Count-(i+1)).ToString() : "") +
(i != (_polynom.Count-1) ? "+" : "");
return res;
}
}
}