示例#1
0
    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();
    }
示例#2
0
        /**
         * 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;
                        }
                    }
                }
            }
        }