Таблица степеней для полинома - 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();
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы