TAD de los polinomios - Término líder de un polinomio
Utilizando el tipo abstracto de datos de los polinomios definir las funciones
termLider :: (Num a, Eq a) => Polinomio a -> Polinomio a
tal que termLider p
es el término líder del polinomio p
. Por ejemplo,
λ> ejPol = consPol 5 1 (consPol 2 5 (consPol 1 4 polCero)) λ> ejPol x^5 + 5*x^2 + 4*x λ> termLider ejPol x^5
Soluciones
Se usará la función creaTermino
definida en el ejercicio Construcción de términos.
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
Soluciones en Haskell
import TAD.Polinomio (Polinomio, coefLider, grado, polCero, consPol) import Pol_Crea_termino (creaTermino) termLider :: (Num a, Eq a) => Polinomio a -> Polinomio a termLider p = creaTermino (grado p) (coefLider p)
Soluciones en Python
from typing import TypeVar from hypothesis import given from src.Pol_Crea_termino import creaTermino from src.TAD.Polinomio import (Polinomio, coefLider, consPol, grado, polCero, polinomioAleatorio) A = TypeVar('A', int, float, complex) # 1ª solución # =========== def termLider(p: Polinomio[A]) -> Polinomio[A]: return creaTermino(grado(p), coefLider(p)) # 2ª solución # =========== def termLider2(p: Polinomio[A]) -> Polinomio[A]: return creaTermino(p.grado(), p.coefLider()) # Equivalencia de las definiciones # ================================ # La propiedad es @given(p=polinomioAleatorio()) def test_termLider(p: Polinomio[int]) -> None: assert termLider(p) == termLider2(p) # La comprobación es # > poetry run pytest -q Pol_Termino_lider.py # 1 passed in 0.21s