public static Polynomial operator *(Polynomial a, Polynomial b) { uint maxPower = a.MaxPower + b.MaxPower; List<Mononomial> mononomials = new List<Mononomial>(); foreach (var mononomialA in a.Mononomials) { foreach (var mononomialB in b.Mononomials) { decimal tempCoeff = mononomialA.Coefficient; tempCoeff *= mononomialB.Coefficient; uint tempPow = mononomialA.Power + mononomialB.Power; mononomials.Add(new Mononomial(tempCoeff, tempPow)); } } mononomials = mononomials.Where(x => x != null).ToList(); string literal = (a.Literal == b.Literal) ? b.Literal : a.Literal + b.Literal; Polynomial result = new Polynomial(literal); result.AddMononomials(mononomials); return result; }
static void Main(string[] args) { Polynomial a; Polynomial b; a = new Polynomial("x"); a.AddMononomial(new Mononomial(4, 2)); a.AddMononomial(new Mononomial(-3, 1)); a.AddMononomial(new Mononomial(2, 0)); b = new Polynomial("x"); b.AddMononomial(new Mononomial(5, 2)); b.AddMononomial(new Mononomial(2, 1)); b.AddMononomial(new Mononomial(-7, 0)); PrintResult(a, b, Operation.Addition); a = new Polynomial("x"); a.AddMononomial(new Mononomial(8, 2)); a.AddMononomial(new Mononomial(2, 1)); b = new Polynomial("x"); b.AddMononomial(new Mononomial(10, 2)); b.AddMononomial(new Mononomial(2, 1)); b.AddMononomial(new Mononomial(-9, 0)); PrintResult(a, b, Operation.Substraction); a = new Polynomial("x"); a.AddMononomial(new Mononomial(3, 1)); a.AddMononomial(new Mononomial(2, 0)); b = new Polynomial("x"); b.AddMononomial(new Mononomial(9, 2)); b.AddMononomial(new Mononomial(-6, 1)); b.AddMononomial(new Mononomial(4, 0)); PrintResult(a, b, Operation.Multiplication); }
private static void PrintResult(Polynomial a, Polynomial b, Operation operation) { Console.WriteLine("A = " + a); Console.WriteLine("B = " + b); switch (operation) { case Operation.Addition: Console.WriteLine("A + B = " + (a + b) + Environment.NewLine); break; case Operation.Substraction: Console.WriteLine("A - B = " + (a - b) + Environment.NewLine); break; case Operation.Multiplication: Console.WriteLine("A * B = " + (a * b) + Environment.NewLine); break; default: break; } }
public static Polynomial operator -(Polynomial a, Polynomial b) { Polynomial negativeB = new Polynomial(b.Literal); foreach (var mononomial in b.Mononomials) { negativeB.AddMononomial(new Mononomial(-mononomial.Coefficient, mononomial.Power)); } Polynomial result = a + negativeB; return result; }
public static Polynomial operator +(Polynomial a, Polynomial b) { if (!a.HasAnyMononomials() || !b.HasAnyMononomials()) { throw new ArgumentNullException("polynomial", "Both polynomials must have at least one mononomial."); } uint maxPower = Math.Max(a.MaxPower, b.MaxPower); List<Mononomial> mononomials = new List<Mononomial>(); for (uint pow = 0; pow <= maxPower; pow++) { decimal tempCoeff = 0.0m; tempCoeff += a.Mononomials.Where(x => x.Power == pow).Select(x => x.Coefficient).ToArray().Sum(); tempCoeff += b.Mononomials.Where(x => x.Power == pow).Select(x => x.Coefficient).ToArray().Sum(); mononomials.Add(new Mononomial(tempCoeff, pow)); } mononomials = mononomials.Where(x => x != null).ToList(); string literal = (a.Literal == b.Literal) ? b.Literal : a.Literal + b.Literal; Polynomial result = new Polynomial(literal); result.AddMononomials(mononomials); return result; }