public static void Main(string[] args) { string expr1 = "3x^5 - x^2 - 5x + 13"; /* * Console.WriteLine("Parsing expression: " + expr1); * var parser = new Polinomio.Parser(expr1); * foreach (Polinomio.Termino term in parser) { * Console.WriteLine("coeficiente={0} exponente={1}", * term.coeficiente, term.exponente); * } * Console.WriteLine(); */ string expr2 = "x^8 - 4x^5 + 10x^3 + x^2 + x"; /* * Console.WriteLine("Parsing expression: " + expr2); * parser = new Polinomio.Parser(expr2); * foreach (Polinomio.Termino term in parser) { * Console.WriteLine("coeficiente={0} exponente={1}", * term.coeficiente, term.exponente); * } * Console.WriteLine(); */ var P1 = new Polinomio.Polinomio(expr1); var P2 = new Polinomio.Polinomio(expr2); P1.Add(P2); Console.WriteLine("Resultado: " + P1); Console.ReadKey(); }
/** * Agrega el polinompio 'P' al polinomio 'this'. * * Luego de esta operacion, el polinomio 'this' debe contener la suma * de los dos polinomios. */ public void Add(Polinomio P) { // TODO: Implementar // Complejidad esperada: O(N1 + N2) worst-case, donde N1 y N2 son las // cantidades de terminos en el polinomio 'this' // y P respectivamente // Restricciones: // 1) No se permite crear mas de N2 nuevos nodos // 2) En el polinomio resultante, debes mantener los terminos ordenados // de mayor exponente a menor exponente // 3) El polinomio resultante no puede contener mas de un termino con // el mismo exponente // 4) Si la suma arroja un coeficiente con valor 0, debes omitir dicho // termino del resultado (a menos que el polinomio consiste solo // del termino que es constante) // OJO: el polinomio P no debe modificarse // Valor: 5 puntos { LinkNode currentP = P.head; LinkNode current = head; while (current != null && currentP != null) { if (current.value.exponente < currentP.value.exponente) { LinkNode temp = currentP; if (current == head) { currentP = currentP.next; current.prev = temp; temp.next = current; head = temp; } else { currentP = currentP.next; current.prev.next = temp; temp.prev = current.prev; current.prev = temp; temp.next = current; } } else if (current.value.exponente > currentP.value.exponente) { LinkNode temp = current; if (currentP == P.head) { current = current.next; currentP.prev = temp; temp.next = currentP; head = temp; } else { current = current.next; currentP.prev.next = temp; temp.prev = currentP.prev; currentP.prev = temp; temp.next = currentP; } } else if (current.value.exponente == currentP.value.exponente) { int newvalue = current.value.coeficiente += currentP.value.coeficiente; if (newvalue == 0) { if (current == head) { current.next.prev = null; head = current.next; current = current.next; currentP = currentP.next; } else { current.prev.next = current.next; current.next.prev = current.prev; current = current.next; currentP = currentP.next; } } else { current.value.coeficiente = newvalue; current = current.next; currentP = currentP.next; } } } } }