Таблица степеней для полинома - C# (185748)
Формулировка задачи:
Есть программа, позволяющая делить многочлен на многочлен. Делит правильно. но делит только по одному элементу. необходимо записать сразу несколько многочленов в делимое, поделить на делитель. Результат сохранить и вывести на экран.
using System; using System.Collections.Generic; using System.Linq; namespace ca { class Program { [STAThread] static void Main(string[] args) { Polynom p1 = "x256"; Polynom p2 = "x128 + x7 + x2 + x + 1"; var res = p1 % p2;//получаем остаток от деления Console.WriteLine(res);// результат // Console.ReadLine(); } } /// <summary> /// Полином /// </summary> class Polynom : HashSet<int>//полином это множество степеней { public Polynom Clone() { var res = new Polynom(); foreach (var elem in this) res.Add(elem); return res; } public Polynom() { } public Polynom(params int[] powers) : base(powers) { } /// <summary> /// Максимальная степень /// </summary> public int MaxPower { get { return Count == 0 ? -1 : this.Max(); } } /// <summary> /// Парсим строку в полином /// </summary> public static Polynom Parse(string str) { var res = new Polynom(); foreach(var part in str.ToLower().Replace(" ", "").Trim().Split('+')) { if (part == "1") res.Add(0); else if (part == "x") res.Add(1); else if (part.StartsWith("x^")) res.Add(int.Parse(part.Substring(2))); else if (part.StartsWith("x")) res.Add(int.Parse(part.Substring(1))); else throw new Exception("Syntax error"); } return res; } /// <summary> /// Оператор вычитания /// </summary> public static Polynom operator -(Polynom p1, Polynom p2) { var res = new Polynom(); foreach (var elem in p1) if(!p2.Contains(elem)) res.Add(elem); foreach (var elem in p2) if (!p1.Contains(elem)) res.Add(elem); return res; } /// <summary> /// Оператор умножения /// </summary> public static Polynom operator *(Polynom p1, Polynom p2) { var res = new Polynom(); foreach (var elem in p1) foreach (var elem2 in p2) res.Add(elem + elem2);//степени складываются return res; } /// <summary> /// Остаток от деления /// </summary> public static Polynom operator %(Polynom dividend, Polynom divisor) { var res = dividend.Clone(); while (res.MaxPower >= divisor.MaxPower) { var m = res.MaxPower - divisor.MaxPower;//на какую степень нужно умножить делитель? var mm = divisor * new Polynom(m);//умножаем res -= mm;//отнимаем } return res; } /// <summary> /// Неявное преобразование из строки /// </summary> public static implicit operator Polynom(string str) { return Parse(str); } public override string ToString() { return string.Join(" + ", this.OrderBy(e => -e).Select(x=>x==0?"1":x==1?"x":("x^" + x)).ToArray()); } } }
Решение задачи: «Таблица степеней для полинома»
textual
Листинг программы
static void Main(string[] args) { var x = 1; for (int i = 0; i <= 15; i++) { Polynom p1 = new Polynom(x); Polynom p2 = "x128 + x7 + x2 + x + 1"; x *= 2; var res = p1 % p2; //получаем остаток от деления Console.WriteLine(p1 +": " + res); // результат } // Console.ReadLine(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д