TAD de los polinomios - División de polinomios
Utilizando el tipo abstracto de datos de los polinomios definir las funciones
cociente :: (Fractional a, Eq a) => Polinomio a -> Polinomio a -> Polinomio a resto :: (Fractional a, Eq a) => Polinomio a -> Polinomio a -> Polinomio a
tales que
-
cociente p q
es el cociente de la división dep
entreq
. Por ejemplo,
λ> pol1 = consPol 3 2 (consPol 2 9 (consPol 1 10 (consPol 0 4 polCero))) λ> pol1 2*x^3 + 9*x^2 + 10*x + 4 λ> pol2 = consPol 2 1 (consPol 1 3 polCero) λ> pol2 x^2 + 3*x λ> cociente pol1 pol2 2.0*x + 3.0
-
resto p q
es el resto de la división dep
entreq
. Por ejemplo,
λ> resto pol1 pol2 1.0*x + 4.0
Soluciones
Se usarán la siguientes funciones
-
creaTermino
definida en el ejercicio Construcción de términos, -
multPorTerm
ymultPol
definidas en el ejercicio Producto de polinomios, -
restaPol
definida en el ejercicio Resta de polinomios y -
multEscalar
definida en el ejercicio Multiplicación de un polinomio por un número.
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
Soluciones en Haskell
import TAD.Polinomio (Polinomio, polCero, consPol, grado, coefLider) import Pol_Crea_termino (creaTermino) import Pol_Producto_polinomios (multPol, multPorTerm) import Pol_Resta_de_polinomios (restaPol) import Pol_Multiplicacion_de_un_polinomio_por_un_numero (multEscalar) cociente :: (Fractional a, Eq a) => Polinomio a -> Polinomio a -> Polinomio a cociente p q | n2 == 0 = multEscalar (1/a2) p | n1 < n2 = polCero | otherwise = consPol n3 a3 (cociente p3 q) where n1 = grado p a1 = coefLider p n2 = grado q a2 = coefLider q n3 = n1-n2 a3 = a1/a2 p3 = restaPol p (multPorTerm (creaTermino n3 a3) q) resto :: (Fractional a, Eq a) => Polinomio a -> Polinomio a -> Polinomio a resto p q = restaPol p (multPol (cociente p q) q)
Soluciones en Python
from src.Pol_Crea_termino import creaTermino from src.Pol_Multiplicacion_de_un_polinomio_por_un_numero import multEscalar from src.Pol_Producto_polinomios import multPol, multPorTerm from src.Pol_Resta_de_polinomios import restaPol from src.TAD.Polinomio import Polinomio, coefLider, consPol, grado, polCero def cociente(p: Polinomio[float], q: Polinomio[float]) -> Polinomio[float]: n1 = grado(p) a1 = coefLider(p) n2 = grado(q) a2 = coefLider(q) n3 = n1 - n2 a3 = a1 / a2 p3 = restaPol(p, multPorTerm(creaTermino(n3, a3), q)) if n2 == 0: return multEscalar(1 / a2, p) if n1 < n2: return polCero() return consPol(n3, a3, cociente(p3, q)) def resto(p: Polinomio[float], q: Polinomio[float]) -> Polinomio[float]: return restaPol(p, multPol(cociente(p, q), q))