<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">#!/usr/bin/python
# -*- coding: utf-8 -*-

""" Bosquejo de un programa para manipular polinomios 
      Autor: Antonio Carrillo Ledesma
"""


class Poly:
    C = []  # Coeficientes del polinomio
    Dim = 10  # Guarda la dimension del arreglo de coeficientes

    def __init__(self, coef):
        """Cosntructor de la clase"""
        self.C = [0 for i in range(self.Dim)]
        for i in range(len(coef)):
            self.C[i] = coef[i]

    def __str__(self):
        """Visualiza el polinomio"""
        r = ""
        for i in range(self.Dim):
            if self.C[i] != 0:
                r += " + " + str(self.C[i])
                if i == 0:
                    continue
                r += "X^" + str(i)
        return r

    def visualiza(self):
        """Visualiza el polinomio"""
        print(self)

    def grado(self):
        """Grado del polinomio"""
        for i in range(self.Dim - 1, 0, -1):
            if self.C[i] != 0.0:
                return i
        return 0

    def __add__(self, b):
        """suma polinomios"""
        C = [0 for i in range(self.Dim)]
        for i in range(self.Dim):
            C[i] = self.C[i] + b.C[i]
        return Poly(C)

    def __mul__(self, b):
        """multiplica polinomios"""
        C = [0 for i in range(self.Dim)]
        for i in range(self.Dim // 2):
            for j in range(self.Dim // 2):
                C[i + j] += self.C[i] * b.C[j]
        return Poly(C)

    def deriva(self):
        """Deriva el polinomio"""
        C = [0 for i in range(self.Dim)]
        for i in range(1, self.Dim):
            C[i - 1] = self.C[i] * i
        return Poly(C)

    def integra(self):
        """Integra el polinomio"""
        C = [0 for i in range(self.Dim)]
        for i in range(self.Dim - 1):
            C[i + 1] = self.C[i] / (i + 1)
        return Poly(C)

    def evalua(self, x):
        """Evalua el polinomio"""
        r = 0
        P = 1
        for i in range(self.Dim):
            r += self.C[i] * P
            P *= x
        return r


"""
Prueba de las clases
"""
if __name__ == "__main__":
    print("\n\nENTERO")
    a = Poly([1, 2, 3])
    a.visualiza()

    b = Poly([4, 5])
    b.visualiza()

    print("Suma")
    c = Poly([0])
    c = a + b
    c.visualiza()

    print("MultiplicaciÃ³n")
    d = Poly([0])
    d = a * b
    d.visualiza()

    print("Derivada")
    a.visualiza()
    d = Poly([0])
    d = a.deriva()
    d.visualiza()

    print("Integral")
    d.visualiza()
    e = Poly([0])
    e = d.integra()
    e.visualiza()

    print("evalua")
    a.visualiza()
    print(a.evalua(10))

    print("\n\nDOUBLE")
    a = Poly([1.0, 2.0, 3.0])
    a.visualiza()

    b = Poly([4.0, 3.0])
    b.visualiza()

    print("Suma")
    c = Poly([0.0])
    c = a + b
    c.visualiza()

    print("MultiplicaciÃ³n")
    d = Poly([0.0])
    d = a * b
    d.visualiza()

    print("Derivada")
    a.visualiza()
    d = Poly([0])
    d = a.deriva()
    d.visualiza()

    print("Integral")
    d.visualiza()
    e = Poly([0])
    e = d.integra()
    e.visualiza()

    print("evalua")
    a.visualiza()
    print(a.evalua(10.0))

    print("\n\nComplejos")
    a = Poly([1.0 + 1.0j, 2.0 + 2.0j, 3.0 + 3.0j])
    a.visualiza()

    b = Poly([4.0 + 1.0j, 5.0 + 2.0j])
    b.visualiza()

    print("Suma")
    c = Poly([0.0j])
    c = a + b
    c.visualiza()

    print("MultiplicaciÃ³n")
    d = Poly([0.0j])
    d = a * b
    d.visualiza()

    print("Derivada")
    a.visualiza()
    d = Poly([0])
    d = a.deriva()
    d.visualiza()

    print("Integral")
    d.visualiza()
    e = Poly([0])
    e = d.integra()
    e.visualiza()

    print("evalua")
    a.visualiza()
    print(a.evalua(10 + 0j))

    import fractions

    print("\n\nFracciones")
    f1 = fractions.Fraction(1, 3)
    f2 = fractions.Fraction(2, 3)
    f3 = fractions.Fraction(3, 3)
    f4 = fractions.Fraction(0, 1)
    a = Poly([f1, f2, f3])
    a.visualiza()

    b = Poly([f2, f3])
    b.visualiza()

    print("Suma")
    c = Poly([f4])
    c = a + b
    c.visualiza()

    print("MultiplicaciÃ³n")
    d = Poly([f4])
    d = a * b
    d.visualiza()

    print("Derivada")
    a.visualiza()
    d = Poly([0])
    d = a.deriva()
    d.visualiza()

    print("Integral")
    d.visualiza()
    e = Poly([0])
    e = d.integra()
    e.visualiza()

    print("evalua en ", f3)
    a.visualiza()
    print(a.evalua(f3))

    import fractions

    print("\n\nComplejos Fraccionarios")
    f1 = fractions.Fraction(1, 3)
    f2 = fractions.Fraction(2, 3)
    f3 = fractions.Fraction(3, 3)
    f4 = fractions.Fraction(0, 1)
    c1 = complex(f1, f2)
    c2 = complex(f3, f2)
    c3 = complex(f1, f3)
    c4 = complex(f4, f4)

    a = Poly([c1, c2, c3])
    a.visualiza()

    b = Poly([c2, c3])
    b.visualiza()

    print("Suma")
    c = Poly([c4])
    c = a + b
    c.visualiza()

    print("MultiplicaciÃ³n")
    d = Poly([c4])
    d = a * b
    d.visualiza()

    print("Derivada")
    a.visualiza()
    d = Poly([0])
    d = a.deriva()
    d.visualiza()

    print("Integral")
    d.visualiza()
    e = Poly([0])
    e = d.integra()
    e.visualiza()

    print("evalua en ", c3)
    a.visualiza()
    print(a.evalua(c3))
</pre></body></html>