Member 13194996 Ответов: 2

Проблема с многочленами в C#


Моя цель-создать программу, которая создает два полинома, складывает их вместе и отображает результат. У меня возникли проблемы с конструкторами для создания двух полиномов, которые будут отображаться в методе ToString (), который я должен переопределить. У меня возникли проблемы с переопределением метода ToString () для возврата полинома и отображения его в методе Display.

static void Main(string[] args)
{

//create two polynomials that can be added together

Polynomial[] polCoefficents = new Polynomial[5]; //creates 5 spaces in array
polCoefficents.ToString();
Polynomial polynomialone = new Polynomial(); //creates first polynomial
Polynomial polynomialtwo = new Polynomial(); //creates second polynomial
Polynomial polDegrees = new Polynomial(); //set degress to length of coefficents

for (int x = 0; x < polCoefficents.Length; x++) //creates the coefficents
{
polCoefficents[x] = new Polynomial(x);
// numbers in brackets represent degrees
polCoefficents[0] = new Polynomial(0);
polCoefficents[0].Coefficents = 20; //the coefficent for x ^ 0 is 20
polCoefficents[1] = new Polynomial(1);
polCoefficents[1].Coefficents = -5; //the coefficent for x is -5
polCoefficents[2] = new Polynomial(2);
polCoefficents[2].Coefficents = 4; //the coefficent for x ^ 2 is 4
polCoefficents[3] = new Polynomial(3);
polCoefficents[3].Coefficents = 5; //the coefficent for x ^ 3 is 5
polCoefficents[4] = new Polynomial(4);
polCoefficents[4].Coefficents = 9; //the coefficent for x ^ 4 is 9
polCoefficents[x].ToString();
}

Console.WriteLine("");
Console.WriteLine("Press Enter to Exit");
Console.ReadLine();

}
}
class Polynomial: IComparable 
{
int intDegree;
int[] intCoefficents = new int[] { 1, 5, 10, 4, 8};

//sorts
int IComparable.CompareTo(Object B)
{
int returnVal;

Polynomial nextvalue = (Polynomial)B;
if (this.intDegree > nextvalue.intDegree)
{
returnVal = 1;
}
else if (this.intDegree < nextvalue.intDegree)
{
returnVal = -1;
}
else
{
returnVal = 0;
}
return returnVal;
}

public int Degree
{
get
{
return intDegree;
}
set
{
intDegree = value;
}
}
public int Coefficents
{
get
{
return intCoefficents[4];
}
set
{
intCoefficents[4] = value;
}
}
public Polynomial()
{
//creates polynomial 0
// intDegree = intCoefficents.Length;
for (int i = 0; i < intCoefficents.Length; i++)
{
intCoefficents[i] = 0;
}
}

//constructors
public Polynomial(int intDegree)
{
//this code will create the second polynomial (x^4)
this.intDegree = intDegree;
for (int x = 0; x < intCoefficents.Length; x++)
{
this.intCoefficents[x]=0;
}
this.intCoefficents[this.Degree] = 1;

ToString();
}
public Polynomial(int Degree, int[] intArrayIntegers)
{
intCoefficents = intArrayIntegers;
intDegree = intArrayIntegers.Length;
}

//displays a polynomial
public override string ToString()
{
for (int i = 0; i < intCoefficents.Length; i++) //has to be for loop, but confused on what goes inside
{
//confused on what goes in here
}
return string.Format("{0}x^{1} + ", intCoefficents, intDegree); //returns polynomial
}
public void Display()
{
//displays polynomial
Console.WriteLine();
} 


Что я уже пробовал:

Я смог заставить это работать, но теперь я запутался в том, что должно идти в цикле for, чтобы отобразить первый и второй полиномы, а затем добавить их.

Ralf Meier

Что именно вы хотите видеть в результате "ToString"?
Какие элементы должны работать с циклом ? (Я тоже немного сбит с толку)

2 Ответов

Рейтинг:
2

Jochen Arndt

Код не имеет смысла. Многочлен описывается его степенью и коэффициентами (значения степени + 1). Коэффициенты обычно являются значениями с плавающей запятой, а не целыми числами.

Нет необходимости хранить степень, потому что она может быть получена путем получения длины массива коэффициентов.

Непроверенный пример:

class Polynomial: IComparable 
{
    double[] Coefficents;
    
    public Polynomial(double[] coeffs)
    {
        Init(coeffs);
    }

    public void Init(double[] coeffs)
    {
        Coefficents = coeffs;
    }

    public int GetDegree()
    {
        return Coefficients.Length - 1;
    }
    
    public double Calculate(double x)
    {
        double y = 0;
        double px = 1;
        for (int i = 0; i < Coefficients.Length; i++)
        {
            y += px * Coefficients[i];
            px *= x;
        }
        return y;
    }

    // Create a string representation
    public override string ToString()
    {
        string result;
        if (Coefficients.Length)
            result = Double.ToString(Coefficients[0]);
        for (int i = 1; i < Coefficients.Length; i++)
        {
            if (Coefficients[i] < 0)
                result += " - ";
            else
                result += " + ";
            result += Double.ToString(Math.Abs(Coefficients[i]));
            result += "*x^";
            result += Int.ToString(i);
        }
        return result;
    }

}


Рейтинг:
2

CPallini

Попробуй

static void Main(string[] args)
{
  int[] ar = new int[] { 1, 0, 2 };
  Polynomial p = new Polynomial(3, ar);
  Console.WriteLine(p);
}


с

//displays a polynomial
public override string ToString()
{
  string s = string.Empty;

  for (int i = 0; i < intCoefficents.Length; i++)
  {
    if (intCoefficents[i] != 0)
      if ( s == string.Empty)
        s = string.Format("{0}x^{1}", intCoefficents[i], i);
      else
        s = string.Format("{0}x^{1} + ", intCoefficents[i], i) + " " + s;
  }
  if (s == string.Empty)
    s = "0";
  return s;
}


Member 13194996

Я посмотрел на оба представленных решения и попытался поместить их в код, но это не сработало, но похоже, что это близко к правильному ответу. Дисплей по-прежнему не работает, и я не знаю, как сложить полиномы.

использование системы;
использование системы.Коллекции.Общий;
использование System. Linq;
используя системы.Текст;

пространство имен TestCH7ChrisShaw
{
программа занятий
{
static void Main (string[] args)
{
// создайте два многочлена, которые можно сложить вместе

Int [] Coefficents = new int[] { 20, -5, 4, 5, 9 };
Polynomial polynomialone = новый Полином(коэффициенты.Длина, Коэффициенты);
Коэффициенты.Метод toString();

Polynomial[] polCoefficents = новый Полином[5]; / / создает 5 пробелов в массиве
полькоэффициенты.Метод toString();

//for (int x = 0; x < polCoefficents.Length; x++) / / создает коэффициенты
//{
// polCoefficents[x] = новый Полином(x);
// / / числа в скобках представляют Градусы
// polCoefficents[0] = новый Полином(0);
// polCoefficents[0].Коэффициенты = 20; / / коэффициент для x ^ 0 равен 20
// polCoefficents[1] = новый Полином(1);
// polCoefficents[1].Коэффициенты = -5; / / коэффициент для x равен -5
// polCoefficents[2] = новый Полином(2);
// polCoefficents[2].Коэффициенты = 4; / / коэффициент для x ^ 2 равен 4
// polCoefficents[3] = новый Полином(3);
// polCoefficents[3].Коэффициенты = 5; / / коэффициент для x ^ 3 равен 5
// polCoefficents[4] = новый Полином(4);
// polCoefficents[4].Коэффициенты = 9; / / коэффициент для x ^ 4 равен 9
// polCoefficents[x].Метод toString();
//}

Приставка.метод WriteLine("");
Приставка.WriteLine ("нажмите Enter для выхода");
Приставка.Линия чтения();

}
}
Полином класса: IComparable
{
инт intDegree;
int[] intCoefficents = new int[] { 1, 5, 10, 4, 8};

//всевозможный
инт интерфейса icomparable.CompareTo (Объект B)
{
int returnVal;

Полином nextvalue = (Полином)B;
если (это.intDegree &ГТ; nextvalue.intDegree)
{
returnVal = 1;
}
иначе если (this.intDegree &ЛТ; nextvalue.intDegree)
{
returnVal = -1;
}
ещё
{
returnVal = 0;
}
return returnVal;
}

степень общественной инт
{
получить
{
вернуться intDegree;
}
набор
{
intDegree = значение;
}
}
общественная int коэффициентов.
{
получить
{
возвратные инткоэффициенты[4];
}
набор
{
intCoefficents[4] = значение;
}
}
общественный Полином()
{
// создает полином 0
// intDegree = intCoefficents.Длина;
для (int i = 0; i < intCoefficents.Длина; i++)
{
intCoefficents[i] = 0;
}
}

// добавляет полиномы
//public int Calculate(int x)
//{
// int inty = 0;
// int intpx = 1;
// for (int i = 0; i < intCoefficents.Длина; i++)
// {
// inty += intpx * intCoefficents[i];
// intpx *= x;
// }
// возврат Инты;
//}

//проектировщики
публичный Полином(int intDegree)
{
//этот код создаст второй полином (x^4)
это.intDegree = intDegree;
для (int x = 0; x < intCoefficents.Длина; x++)
{