Menu Close

Polinomios pares

Un polinomio de coeficientes enteros se dirá par si todos sus coeficientes son números pares. Por ejemplo, el polinomio 2x³ – 4x² + 8 es par y el x² + 2x + 10 no lo es.

Definir el predicado

   parPol :: Integral a => Polinomio a -> Bool

tal que (parPol p) se verifica si p es un polinomio par. Por ejemplo,

   ghci> parPol (consPol 3 2 (consPol 2 (-4) (consPol 0 8 polCero)))
   True
   ghci> parPol (consPol 2 1 (consPol 1 2 (consPol 0 10 polCero)))
   False

Comprobar con QuickCheck que la suma de un polinomio con él mismo es un polinomio par.

Nota: Este ejercicio debe realizarse usando la librería I1M.Pol que se encuentra aquí y se describe aquí.

Soluciones

import I1M.PolOperaciones
import Test.QuickCheck
 
parPol :: Integral a => Polinomio a -> Bool
parPol p = esPolCero p || (even (coefLider p) && parPol (restoPol p))
 
-- La propiedad es
prop_parPol :: Integral a => Polinomio a -> Bool
prop_parPol p =
    parPol (sumaPol p p)
 
-- La comprobación es 
--    ghci> quickCheck prop_parPol
--    +++ OK, passed 100 tests.
Posted in Inicial

3 Comments

  1. M Miranda
    import I1M.PolOperaciones
     
    parPol :: Integral a => Polinomio a -> Bool
    parPol p = all (even) (coeficientes p)
        where coeficientes p | esPolCero p = []
                             | otherwise = [coefLider p]++ coeficientes (restoPol p)
  2. Pedro Martín Chávez
    import I1M.Pol
     
    parPol :: Integral a => Polinomio a -> Bool
    parPol p = esPolCero p || (even . coefLider) p && (parPol . restoPol) p
  3. José María Verde López
    parPol p |esPolCero p = True
             |even c = parPol r
             |otherwise = False
                          where r = restoPol p
                                c = coefLider p

Escribe tu solución

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.