tema 21: el tad de los polinomios - informática (2013...
TRANSCRIPT
![Page 1: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/1.jpg)
Tema 21: El TAD de los polinomiosInformática (2013–14)
José A. Alonso Jiménez
Grupo de Lógica ComputacionalDepartamento de Ciencias de la Computación e I.A.
Universidad de Sevilla
![Page 2: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/2.jpg)
IM Tema 21: El TAD de los polinomios
Tema 21: El TAD de los polinomios1. Especificación del TAD de los polinomios
Signatura del TAD de los polinomiosPropiedades del TAD de los polinomios
2. Implementación del TAD de los polinomiosLos polinomios como tipo de dato algebraicoLos polinomios como listas dispersasLos polinomios como listas densas
3. Comprobación de las implementaciones con QuickCheckLibrerías auxiliaresGenerador de polinomiosEspecificación de las propiedades de los polinomiosComprobación de las propiedades
4. Operaciones con polinomiosOperaciones con polinomios
2 / 55
![Page 3: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/3.jpg)
IM Tema 21: El TAD de los polinomiosEspecificación del TAD de los polinomios
Signatura del TAD de los polinomios
Tema 21: El TAD de los polinomios
1. Especificación del TAD de los polinomiosSignatura del TAD de los polinomiosPropiedades del TAD de los polinomios
2. Implementación del TAD de los polinomios
3. Comprobación de las implementaciones con QuickCheck
4. Operaciones con polinomios
3 / 55
![Page 4: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/4.jpg)
IM Tema 21: El TAD de los polinomiosEspecificación del TAD de los polinomios
Signatura del TAD de los polinomios
Signatura del TAD de los polinomiosSignatura:polCero :: Polinomio a
esPolCero :: Polinomio a -> Bool
consPol :: (Num a, Eq a) => Int -> a -> Polinomio a -> Polinomio a
grado :: Polinomio a -> Int
coefLider :: Num a => Polinomio a -> a
restoPol :: (Num a, Eq a) => Polinomio a -> Polinomio a
Descripción de las operaciones:I polCero es el polinomio cero.I (esPolCero p) se verifica si p es el polinomio cero.I (consPol n b p) es el polinomio bxn + p.I (grado p) es el grado del polinomio p.I (coefLider p) es el coeficiente líder del polinomio p.I (restoPol p) es el resto del polinomio p.
4 / 55
![Page 5: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/5.jpg)
IM Tema 21: El TAD de los polinomiosEspecificación del TAD de los polinomios
Signatura del TAD de los polinomios
Ejemplos de polinomiosEjemplos de polinomios que se usarán en lo sucesivo.I Definición:
ejPol1, ejPol2, ejPol3, ejTerm:: Polinomio Int
ejPol1 = consPol 4 3 (consPol 2 (-5) (consPol 0 3 polCero))
ejPol2 = consPol 5 1 (consPol 2 5 (consPol 1 4 polCero))
ejPol3 = consPol 4 6 (consPol 1 2 polCero)
ejTerm = consPol 1 4 polCero
I Evaluación:ejPol1 3*x^4 + -5*x^2 + 3
ejPol2 x^5 + 5*x^2 + 4*x
ejPol3 6*x^4 + 2*x
ejTerm 4*x
5 / 55
![Page 6: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/6.jpg)
IM Tema 21: El TAD de los polinomiosEspecificación del TAD de los polinomios
Propiedades del TAD de los polinomios
Tema 21: El TAD de los polinomios
1. Especificación del TAD de los polinomiosSignatura del TAD de los polinomiosPropiedades del TAD de los polinomios
2. Implementación del TAD de los polinomios
3. Comprobación de las implementaciones con QuickCheck
4. Operaciones con polinomios
6 / 55
![Page 7: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/7.jpg)
IM Tema 21: El TAD de los polinomiosEspecificación del TAD de los polinomios
Propiedades del TAD de los polinomios
Propiedades del TAD de los polinomios1. esPolCero polCero
2. n > grado p && b /= 0 ==>not (esPolCero (consPol n b p))
3. consPol (grado p) (coefLider p) (restoPol p) == p
4. n > grado p && b /= 0 ==>grado (consPol n b p) == n
5. n > grado p && b /= 0 ==>coefLider (consPol n b p) == b
6. n > grado p && b /= 0 ==>restoPol (consPol n b p) == p
7 / 55
![Page 8: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/8.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como tipo de dato algebraico
Tema 21: El TAD de los polinomios
1. Especificación del TAD de los polinomios
2. Implementación del TAD de los polinomiosLos polinomios como tipo de dato algebraicoLos polinomios como listas dispersasLos polinomios como listas densas
3. Comprobación de las implementaciones con QuickCheck
4. Operaciones con polinomios
8 / 55
![Page 9: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/9.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como tipo de dato algebraico
Los polinomios como tipo de dato algebraicoCabecera del módulo:
module PolRepTDA
( Polinomio,
polCero, -- Polinomio a
esPolCero, -- Polinomio a -> Bool
consPol, -- (Num a, Eq a) => Int -> a -> Polinomio a
-- -> Polinomio a
grado, -- Polinomio a -> Int
coefLider, -- Num a => Polinomio a -> a
restoPol -- (Num a, Eq a) => Polinomio a -> Polinomio a
) where
9 / 55
![Page 10: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/10.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como tipo de dato algebraico
Los polinomios como tipo de dato algebraicoI Representamos un polinomio mediante los constructores ConsPol
y PolCero.I Por ejemplo, el polinomio
6x^4 -5x^2 + 4x -7
se representa porConsPol 4 6
(ConsPol 2 (-5)
(ConsPol 1 4
(ConsPol 0 (-7) PolCero)))
I El tipo de los polinomios.
data Polinomio a = PolCero
| ConsPol Int a (Polinomio a)
deriving Eq
10 / 55
![Page 11: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/11.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como tipo de dato algebraico
Los polinomios como tipo de dato algebraicoProcedimiento de escritura de los polinomios.
instance (Num a, Show a, Eq a) => Show (Polinomio a) where
show PolCero = "0"
show (ConsPol 0 b PolCero) = show b
show (ConsPol 0 b p) = concat [show b," + ",show p]
show (ConsPol 1 b PolCero) = concat [show b,"*x"]
show (ConsPol 1 b p) = concat [show b,"*x + ",show p]
show (ConsPol n 1 PolCero) = concat ["x^",show n]
show (ConsPol n b PolCero) = concat [show b,"*x^",show n]
show (ConsPol n 1 p) = concat ["x^",show n," + ",show p]
show (ConsPol n b p) = concat [show b,"*x^",show n," + ",show p]
11 / 55
![Page 12: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/12.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como tipo de dato algebraico
Los polinomios como tipo de dato algebraicoI polCero es el polinomio cero. Por ejemplo,
ghci> polCero
0
polCero :: Polinomio a
polCero = PolCero
I (esPolCero p) se verifica si p es el polinomio cero. Por ejemplo,esPolCero polCero True
esPolCero ejPol1 False
esPolCero :: Polinomio a -> Bool
esPolCero PolCero = True
esPolCero _ = False
12 / 55
![Page 13: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/13.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como tipo de dato algebraico
Los polinomios como tipo de dato algebraicoI polCero es el polinomio cero. Por ejemplo,
ghci> polCero
0
polCero :: Polinomio a
polCero = PolCero
I (esPolCero p) se verifica si p es el polinomio cero. Por ejemplo,esPolCero polCero True
esPolCero ejPol1 False
esPolCero :: Polinomio a -> Bool
esPolCero PolCero = True
esPolCero _ = False
12 / 55
![Page 14: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/14.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como tipo de dato algebraico
Los polinomios como tipo de dato algebraicoI polCero es el polinomio cero. Por ejemplo,
ghci> polCero
0
polCero :: Polinomio a
polCero = PolCero
I (esPolCero p) se verifica si p es el polinomio cero. Por ejemplo,esPolCero polCero True
esPolCero ejPol1 False
esPolCero :: Polinomio a -> Bool
esPolCero PolCero = True
esPolCero _ = False
12 / 55
![Page 15: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/15.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como tipo de dato algebraico
Los polinomios como tipo de dato algebraicoI (consPol n b p) es el polinomio bxn + p. Por ejemplo,
ejPol2 x^5 + 5*x^2 + 4*x
consPol 3 0 ejPol2 x^5 + 5*x^2 + 4*x
consPol 3 2 polCero 2*x^3
consPol 6 7 ejPol2 7*x^6 + x^5 + 5*x^2 + 4*x
consPol 4 7 ejPol2 x^5 + 7*x^4 + 5*x^2 + 4*x
consPol 5 7 ejPol2 8*x^5 + 5*x^2 + 4*x
consPol :: (Num a, Eq a) => Int -> a -> Polinomio a -> Polinomio a
consPol _ 0 p = p
consPol n b PolCero = ConsPol n b PolCero
consPol n b (ConsPol m c p)
| n > m = ConsPol n b (ConsPol m c p)
| n < m = ConsPol m c (consPol n b p)
| b+c == 0 = p
| otherwise = ConsPol n (b+c) p
13 / 55
![Page 16: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/16.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como tipo de dato algebraico
Los polinomios como tipo de dato algebraicoI (consPol n b p) es el polinomio bxn + p. Por ejemplo,
ejPol2 x^5 + 5*x^2 + 4*x
consPol 3 0 ejPol2 x^5 + 5*x^2 + 4*x
consPol 3 2 polCero 2*x^3
consPol 6 7 ejPol2 7*x^6 + x^5 + 5*x^2 + 4*x
consPol 4 7 ejPol2 x^5 + 7*x^4 + 5*x^2 + 4*x
consPol 5 7 ejPol2 8*x^5 + 5*x^2 + 4*x
consPol :: (Num a, Eq a) => Int -> a -> Polinomio a -> Polinomio a
consPol _ 0 p = p
consPol n b PolCero = ConsPol n b PolCero
consPol n b (ConsPol m c p)
| n > m = ConsPol n b (ConsPol m c p)
| n < m = ConsPol m c (consPol n b p)
| b+c == 0 = p
| otherwise = ConsPol n (b+c) p
13 / 55
![Page 17: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/17.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como tipo de dato algebraico
Los polinomios como tipo de dato algebraicoI (grado p) es el grado del polinomio p. Por ejemplo,
ejPol3 6*x^4 + 2*x
grado ejPol3 4
grado:: Polinomio a -> Int
grado PolCero = 0
grado (ConsPol n _ _) = n
I (coefLider p) es el coeficiente líder del polinomio p. Porejemplo,coefLider ejPol3 6
coefLider:: Num t => Polinomio t -> t
coefLider PolCero = 0
coefLider (ConsPol _ b _) = b14 / 55
![Page 18: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/18.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como tipo de dato algebraico
Los polinomios como tipo de dato algebraicoI (grado p) es el grado del polinomio p. Por ejemplo,
ejPol3 6*x^4 + 2*x
grado ejPol3 4
grado:: Polinomio a -> Int
grado PolCero = 0
grado (ConsPol n _ _) = n
I (coefLider p) es el coeficiente líder del polinomio p. Porejemplo,coefLider ejPol3 6
coefLider:: Num t => Polinomio t -> t
coefLider PolCero = 0
coefLider (ConsPol _ b _) = b14 / 55
![Page 19: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/19.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como tipo de dato algebraico
Los polinomios como tipo de dato algebraicoI (grado p) es el grado del polinomio p. Por ejemplo,
ejPol3 6*x^4 + 2*x
grado ejPol3 4
grado:: Polinomio a -> Int
grado PolCero = 0
grado (ConsPol n _ _) = n
I (coefLider p) es el coeficiente líder del polinomio p. Porejemplo,coefLider ejPol3 6
coefLider:: Num t => Polinomio t -> t
coefLider PolCero = 0
coefLider (ConsPol _ b _) = b14 / 55
![Page 20: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/20.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como tipo de dato algebraico
Los polinomios como tipo de dato algebraicoI (restoPol p) es el resto del polinomio p. Por ejemplo,
ejPol3 6*x^4 + 2*x
restoPol ejPol3 2*x
ejPol2 x^5 + 5*x^2 + 4*x
restoPol ejPol2 5*x^2 + 4*x
restoPol :: (Num a, Eq a) => Polinomio t -> Polinomio t
restoPol PolCero = PolCero
restoPol (ConsPol _ _ p) = p
15 / 55
![Page 21: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/21.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como tipo de dato algebraico
Los polinomios como tipo de dato algebraicoI (restoPol p) es el resto del polinomio p. Por ejemplo,
ejPol3 6*x^4 + 2*x
restoPol ejPol3 2*x
ejPol2 x^5 + 5*x^2 + 4*x
restoPol ejPol2 5*x^2 + 4*x
restoPol :: (Num a, Eq a) => Polinomio t -> Polinomio t
restoPol PolCero = PolCero
restoPol (ConsPol _ _ p) = p
15 / 55
![Page 22: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/22.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas dispersas
Tema 21: El TAD de los polinomios
1. Especificación del TAD de los polinomios
2. Implementación del TAD de los polinomiosLos polinomios como tipo de dato algebraicoLos polinomios como listas dispersasLos polinomios como listas densas
3. Comprobación de las implementaciones con QuickCheck
4. Operaciones con polinomios
16 / 55
![Page 23: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/23.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas dispersas
Los polinomios como listas dispersasCabecera del módulo
module PolRepDispersa
( Polinomio,
polCero, -- Polinomio a
esPolCero, -- Polinomio a -> Bool
consPol, -- (Num a, Eq a) => Int -> a -> Polinomio a
-- -> Polinomio a
grado, -- Polinomio a -> Int
coefLider, -- Num a => Polinomio a -> a
restoPol -- (Num a, Eq a) => Polinomio a -> Polinomio a
) where
17 / 55
![Page 24: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/24.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas dispersas
Los polinomios como tipo listas dispersasI Representaremos un polinomio por la lista de sus coeficientes
ordenados en orden decreciente según el grado.I Por ejemplo, el polinomio
6x^4 -5x^2 + 4x -7
se representa por la lista[6,0,-2,4,-7]
I Los polinomios como listas dispersas.
data Polinomio a = Pol [a]
deriving Eq
18 / 55
![Page 25: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/25.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas dispersas
Los polinomios como listas dispersasProcedimiento de escritura de los polinomios.
instance (Num a, Show a, Eq a) => Show (Polinomio a) where
show pol
| esPolCero pol = "0"
| n == 0 && esPolCero p = show a
| n == 0 = concat [show a," + ",show p]
| n == 1 && esPolCero p = concat [show a,"*x"]
| n == 1 = concat [show a,"*x + ",show p]
| a == 1 && esPolCero p = concat ["x^",show n]
| esPolCero p = concat [show a,"*x^",show n]
| a == 1 = concat ["x^",show n," + ",show p]
| otherwise = concat [show a,"*x^",show n," + ",show p]
where n = grado pol
a = coefLider pol
p = restoPol pol
19 / 55
![Page 26: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/26.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas dispersas
Los polinomios como tipo listas dispersasI polCero es el polinomio cero. Por ejemplo,
ghci> polCero
0
polCero :: Polinomio a
polCero = Pol []
I (esPolCero p) se verifica si p es el polinomio cero. Por ejemplo,esPolCero polCero True
esPolCero ejPol1 False
esPolCero :: Polinomio a -> Bool
esPolCero (Pol []) = True
esPolCero _ = False
20 / 55
![Page 27: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/27.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas dispersas
Los polinomios como tipo listas dispersasI polCero es el polinomio cero. Por ejemplo,
ghci> polCero
0
polCero :: Polinomio a
polCero = Pol []
I (esPolCero p) se verifica si p es el polinomio cero. Por ejemplo,esPolCero polCero True
esPolCero ejPol1 False
esPolCero :: Polinomio a -> Bool
esPolCero (Pol []) = True
esPolCero _ = False
20 / 55
![Page 28: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/28.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas dispersas
Los polinomios como tipo listas dispersasI polCero es el polinomio cero. Por ejemplo,
ghci> polCero
0
polCero :: Polinomio a
polCero = Pol []
I (esPolCero p) se verifica si p es el polinomio cero. Por ejemplo,esPolCero polCero True
esPolCero ejPol1 False
esPolCero :: Polinomio a -> Bool
esPolCero (Pol []) = True
esPolCero _ = False
20 / 55
![Page 29: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/29.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas dispersas
Los polinomios como tipo listas dispersasI (consPol n b p) es el polinomio bxn + p. Por ejemplo,
ejPol2 x^5 + 5*x^2 + 4*x
consPol 3 0 ejPol2 x^5 + 5*x^2 + 4*x
consPol 3 2 polCero 2*x^3
consPol 6 7 ejPol2 7*x^6 + x^5 + 5*x^2 + 4*x
consPol 4 7 ejPol2 x^5 + 7*x^4 + 5*x^2 + 4*x
consPol 5 7 ejPol2 8*x^5 + 5*x^2 + 4*x
consPol :: (Num a, Eq a) => Int -> a -> Polinomio a -> Polinomio a
consPol _ 0 p = p
consPol n b p@(Pol xs)
| esPolCero p = Pol (b:replicate n 0)
| n > m = Pol (b:(replicate (n-m-1) 0)++xs)
| n < m = consPol m c (consPol n b (restoPol p))
| b+c == 0 = Pol (dropWhile (==0) (tail xs))
| otherwise = Pol ((b+c):tail xs)
where
c = coefLider p
m = grado p
21 / 55
![Page 30: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/30.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas dispersas
Los polinomios como tipo listas dispersasI (consPol n b p) es el polinomio bxn + p. Por ejemplo,
ejPol2 x^5 + 5*x^2 + 4*x
consPol 3 0 ejPol2 x^5 + 5*x^2 + 4*x
consPol 3 2 polCero 2*x^3
consPol 6 7 ejPol2 7*x^6 + x^5 + 5*x^2 + 4*x
consPol 4 7 ejPol2 x^5 + 7*x^4 + 5*x^2 + 4*x
consPol 5 7 ejPol2 8*x^5 + 5*x^2 + 4*x
consPol :: (Num a, Eq a) => Int -> a -> Polinomio a -> Polinomio a
consPol _ 0 p = p
consPol n b p@(Pol xs)
| esPolCero p = Pol (b:replicate n 0)
| n > m = Pol (b:(replicate (n-m-1) 0)++xs)
| n < m = consPol m c (consPol n b (restoPol p))
| b+c == 0 = Pol (dropWhile (==0) (tail xs))
| otherwise = Pol ((b+c):tail xs)
where
c = coefLider p
m = grado p
21 / 55
![Page 31: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/31.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas dispersas
Los polinomios como tipo listas dispersasI (grado p) es el grado del polinomio p. Por ejemplo,
ejPol3 6*x^4 + 2*x
grado ejPol3 4
grado:: Polinomio a -> Int
grado (Pol []) = 0
grado (Pol xs) = length xs - 1
I (coefLider p) es el coeficiente líder del polinomio p. Porejemplo,coefLider ejPol3 6
coefLider:: Num t => Polinomio t -> t
coefLider (Pol []) = 0
coefLider (Pol (a:_)) = a22 / 55
![Page 32: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/32.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas dispersas
Los polinomios como tipo listas dispersasI (grado p) es el grado del polinomio p. Por ejemplo,
ejPol3 6*x^4 + 2*x
grado ejPol3 4
grado:: Polinomio a -> Int
grado (Pol []) = 0
grado (Pol xs) = length xs - 1
I (coefLider p) es el coeficiente líder del polinomio p. Porejemplo,coefLider ejPol3 6
coefLider:: Num t => Polinomio t -> t
coefLider (Pol []) = 0
coefLider (Pol (a:_)) = a22 / 55
![Page 33: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/33.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas dispersas
Los polinomios como tipo listas dispersasI (grado p) es el grado del polinomio p. Por ejemplo,
ejPol3 6*x^4 + 2*x
grado ejPol3 4
grado:: Polinomio a -> Int
grado (Pol []) = 0
grado (Pol xs) = length xs - 1
I (coefLider p) es el coeficiente líder del polinomio p. Porejemplo,coefLider ejPol3 6
coefLider:: Num t => Polinomio t -> t
coefLider (Pol []) = 0
coefLider (Pol (a:_)) = a22 / 55
![Page 34: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/34.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas dispersas
Los polinomios como tipo listas dispersasI (restoPol p) es el resto del polinomio p. Por ejemplo,
ejPol3 6*x^4 + 2*x
restoPol ejPol3 2*x
ejPol2 x^5 + 5*x^2 + 4*x
restoPol ejPol2 5*x^2 + 4*x
restoPol :: (Num t, Eq t) => Polinomio t -> Polinomio t
restoPol (Pol []) = polCero
restoPol (Pol [_]) = polCero
restoPol (Pol (_:b:as))
| b == 0 = Pol (dropWhile (==0) as)
| otherwise = Pol (b:as)
23 / 55
![Page 35: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/35.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas dispersas
Los polinomios como tipo listas dispersasI (restoPol p) es el resto del polinomio p. Por ejemplo,
ejPol3 6*x^4 + 2*x
restoPol ejPol3 2*x
ejPol2 x^5 + 5*x^2 + 4*x
restoPol ejPol2 5*x^2 + 4*x
restoPol :: (Num t, Eq t) => Polinomio t -> Polinomio t
restoPol (Pol []) = polCero
restoPol (Pol [_]) = polCero
restoPol (Pol (_:b:as))
| b == 0 = Pol (dropWhile (==0) as)
| otherwise = Pol (b:as)
23 / 55
![Page 36: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/36.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas densas
Tema 21: El TAD de los polinomios
1. Especificación del TAD de los polinomios
2. Implementación del TAD de los polinomiosLos polinomios como tipo de dato algebraicoLos polinomios como listas dispersasLos polinomios como listas densas
3. Comprobación de las implementaciones con QuickCheck
4. Operaciones con polinomios
24 / 55
![Page 37: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/37.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas densas
Los polinomios como tipo listas densasCabecera del módulo.
module PolRepDensa
( Polinomio,
polCero, -- Polinomio a
esPolCero, -- Polinomio a -> Bool
consPol, -- (Num a, Eq a) => Int -> a -> Polinomio a
-- -> Polinomio a
grado, -- Polinomio a -> Int
coefLider, -- Num a => Polinomio a -> a
restoPol -- (Num a, Eq a) => Polinomio a -> Polinomio a
) where
25 / 55
![Page 38: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/38.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas densas
Los polinomios como tipo listas densasI Representaremos un polinomio mediante una lista de pares
(grado,coef), ordenados en orden decreciente según el grado. Porejemplo, el polinomio6x^4 -5x^2 + 4x -7
se representa por la lista de pares[(4,6),(2,-5),(1,4),(0,-7)].
I Los polinomios como listas densas.
data Polinomio a = Pol [(Int,a)]
deriving Eq
26 / 55
![Page 39: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/39.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas densas
Los polinomios como tipo listas densasProcedimiento de escritura de polinomios
instance (Num a, Show a, Eq a) => Show (Polinomio a) where
show pol
| esPolCero pol = "0"
| n == 0 && esPolCero p = show a
| n == 0 = concat [show a," + ",show p]
| n == 1 && esPolCero p = concat [show a,"*x"]
| n == 1 = concat [show a,"*x + ",show p]
| a == 1 && esPolCero p = concat ["x^",show n]
| esPolCero p = concat [show a,"*x^",show n]
| a == 1 = concat ["x^",show n," + ",show p]
| otherwise = concat [show a,"*x^",show n," + ",show p]
where n = grado pol
a = coefLider pol
p = restoPol pol
27 / 55
![Page 40: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/40.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas densas
Los polinomios como tipo listas densasI polCero es el polinomio cero. Por ejemplo,
ghci> polCero
0
polCero :: Polinomio a
polCero = Pol []
I (esPolCero p) se verifica si p es el polinomio cero. Por ejemplo,esPolCero polCero True
esPolCero ejPol1 False
esPolCero :: Polinomio a -> Bool
esPolCero (Pol []) = True
esPolCero _ = False
28 / 55
![Page 41: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/41.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas densas
Los polinomios como tipo listas densasI polCero es el polinomio cero. Por ejemplo,
ghci> polCero
0
polCero :: Polinomio a
polCero = Pol []
I (esPolCero p) se verifica si p es el polinomio cero. Por ejemplo,esPolCero polCero True
esPolCero ejPol1 False
esPolCero :: Polinomio a -> Bool
esPolCero (Pol []) = True
esPolCero _ = False
28 / 55
![Page 42: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/42.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas densas
Los polinomios como tipo listas densasI polCero es el polinomio cero. Por ejemplo,
ghci> polCero
0
polCero :: Polinomio a
polCero = Pol []
I (esPolCero p) se verifica si p es el polinomio cero. Por ejemplo,esPolCero polCero True
esPolCero ejPol1 False
esPolCero :: Polinomio a -> Bool
esPolCero (Pol []) = True
esPolCero _ = False
28 / 55
![Page 43: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/43.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas densas
Los polinomios como tipo listas densasI (consPol n b p) es el polinomio bxn + p. Por ejemplo,
ejPol2 x^5 + 5*x^2 + 4*x
consPol 3 0 ejPol2 x^5 + 5*x^2 + 4*x
consPol 3 2 polCero 2*x^3
consPol 6 7 ejPol2 7*x^6 + x^5 + 5*x^2 + 4*x
consPol 4 7 ejPol2 x^5 + 7*x^4 + 5*x^2 + 4*x
consPol 5 7 ejPol2 8*x^5 + 5*x^2 + 4*x
consPol :: (Num a, Eq a) => Int -> a -> Polinomio a -> Polinomio a
consPol _ 0 p = p
consPol n b p@(Pol xs)
| esPolCero p = Pol [(n,b)]
| n > m = Pol ((n,b):xs)
| n < m = consPol m c (consPol n b (Pol (tail xs)))
| b+c == 0 = Pol (tail xs)
| otherwise = Pol ((n,b+c):(tail xs))
where
c = coefLider p
m = grado p
29 / 55
![Page 44: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/44.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas densas
Los polinomios como tipo listas densasI (consPol n b p) es el polinomio bxn + p. Por ejemplo,
ejPol2 x^5 + 5*x^2 + 4*x
consPol 3 0 ejPol2 x^5 + 5*x^2 + 4*x
consPol 3 2 polCero 2*x^3
consPol 6 7 ejPol2 7*x^6 + x^5 + 5*x^2 + 4*x
consPol 4 7 ejPol2 x^5 + 7*x^4 + 5*x^2 + 4*x
consPol 5 7 ejPol2 8*x^5 + 5*x^2 + 4*x
consPol :: (Num a, Eq a) => Int -> a -> Polinomio a -> Polinomio a
consPol _ 0 p = p
consPol n b p@(Pol xs)
| esPolCero p = Pol [(n,b)]
| n > m = Pol ((n,b):xs)
| n < m = consPol m c (consPol n b (Pol (tail xs)))
| b+c == 0 = Pol (tail xs)
| otherwise = Pol ((n,b+c):(tail xs))
where
c = coefLider p
m = grado p
29 / 55
![Page 45: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/45.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas densas
Los polinomios como tipo listas densasI (grado p) es el grado del polinomio p. Por ejemplo,
ejPol3 6*x^4 + 2*x
grado ejPol3 4
grado:: Polinomio a -> Int
grado (Pol []) = 0
grado (Pol ((n,_):_)) = n
I (coefLider p) es el coeficiente líder del polinomio p. Porejemplo,coefLider ejPol3 6
coefLider:: Num t => Polinomio t -> t
coefLider (Pol []) = 0
coefLider (Pol ((_,b):_)) = b30 / 55
![Page 46: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/46.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas densas
Los polinomios como tipo listas densasI (grado p) es el grado del polinomio p. Por ejemplo,
ejPol3 6*x^4 + 2*x
grado ejPol3 4
grado:: Polinomio a -> Int
grado (Pol []) = 0
grado (Pol ((n,_):_)) = n
I (coefLider p) es el coeficiente líder del polinomio p. Porejemplo,coefLider ejPol3 6
coefLider:: Num t => Polinomio t -> t
coefLider (Pol []) = 0
coefLider (Pol ((_,b):_)) = b30 / 55
![Page 47: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/47.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas densas
Los polinomios como tipo listas densasI (grado p) es el grado del polinomio p. Por ejemplo,
ejPol3 6*x^4 + 2*x
grado ejPol3 4
grado:: Polinomio a -> Int
grado (Pol []) = 0
grado (Pol ((n,_):_)) = n
I (coefLider p) es el coeficiente líder del polinomio p. Porejemplo,coefLider ejPol3 6
coefLider:: Num t => Polinomio t -> t
coefLider (Pol []) = 0
coefLider (Pol ((_,b):_)) = b30 / 55
![Page 48: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/48.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas densas
Los polinomios como tipo listas densasI (restoPol p) es el resto del polinomio p. Por ejemplo,
ejPol3 6*x^4 + 2*x
restoPol ejPol3 2*x
ejPol2 x^5 + 5*x^2 + 4*x
restoPol ejPol2 5*x^2 + 4*x
restoPol :: (Num t, Eq t) => Polinomio t -> Polinomio t
restoPol (Pol []) = polCero
restoPol (Pol [_]) = polCero
restoPol (Pol (_:xs)) = Pol xs
31 / 55
![Page 49: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/49.jpg)
IM Tema 21: El TAD de los polinomiosImplementación del TAD de los polinomios
Los polinomios como listas densas
Los polinomios como tipo listas densasI (restoPol p) es el resto del polinomio p. Por ejemplo,
ejPol3 6*x^4 + 2*x
restoPol ejPol3 2*x
ejPol2 x^5 + 5*x^2 + 4*x
restoPol ejPol2 5*x^2 + 4*x
restoPol :: (Num t, Eq t) => Polinomio t -> Polinomio t
restoPol (Pol []) = polCero
restoPol (Pol [_]) = polCero
restoPol (Pol (_:xs)) = Pol xs
31 / 55
![Page 50: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/50.jpg)
IM Tema 21: El TAD de los polinomiosComprobación de las implementaciones con QuickCheck
Librerías auxiliares
Tema 21: El TAD de los polinomios
1. Especificación del TAD de los polinomios
2. Implementación del TAD de los polinomios
3. Comprobación de las implementaciones con QuickCheckLibrerías auxiliaresGenerador de polinomiosEspecificación de las propiedades de los polinomiosComprobación de las propiedades
4. Operaciones con polinomios
32 / 55
![Page 51: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/51.jpg)
IM Tema 21: El TAD de los polinomiosComprobación de las implementaciones con QuickCheck
Librerías auxiliares
Comprobación de las propiedades del TAD de lospolinomiosI Importación de la implementación a verificar.
import PolRepTDA
-- import PolRepDispersa
-- import PolRepDensa
I Librerías auxiliares.
import Test.QuickCheck
import Test.Framework
import Test.Framework.Providers.QuickCheck2
33 / 55
![Page 52: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/52.jpg)
IM Tema 21: El TAD de los polinomiosComprobación de las implementaciones con QuickCheck
Generador de polinomios
Tema 21: El TAD de los polinomios
1. Especificación del TAD de los polinomios
2. Implementación del TAD de los polinomios
3. Comprobación de las implementaciones con QuickCheckLibrerías auxiliaresGenerador de polinomiosEspecificación de las propiedades de los polinomiosComprobación de las propiedades
4. Operaciones con polinomios
34 / 55
![Page 53: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/53.jpg)
IM Tema 21: El TAD de los polinomiosComprobación de las implementaciones con QuickCheck
Generador de polinomios
Generador de polinomiosI (genPol n) es un generador de polinomios. Por ejemplo,
ghci> sample (genPol 1)
7*x^9 + 9*x^8 + 10*x^7 + -14*x^5 + -15*x^2 + -10
-4*x^8 + 2*x
genPol :: Int -> Gen (Polinomio Int)
genPol 0 = return polCero
genPol n = do n <- choose (0,10)
b <- choose (-10,10)
p <- genPol (div n 2)
return (consPol n b p)
instance Arbitrary (Polinomio Int) where
arbitrary = sized genPol
35 / 55
![Page 54: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/54.jpg)
IM Tema 21: El TAD de los polinomiosComprobación de las implementaciones con QuickCheck
Especificación de las propiedades de los polinomios
Tema 21: El TAD de los polinomios
1. Especificación del TAD de los polinomios
2. Implementación del TAD de los polinomios
3. Comprobación de las implementaciones con QuickCheckLibrerías auxiliaresGenerador de polinomiosEspecificación de las propiedades de los polinomiosComprobación de las propiedades
4. Operaciones con polinomios
36 / 55
![Page 55: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/55.jpg)
IM Tema 21: El TAD de los polinomiosComprobación de las implementaciones con QuickCheck
Especificación de las propiedades de los polinomios
Especificación de las propiedades de los polinomiosI polCero es el polinomio cero.
prop_polCero_es_cero :: Bool
prop_polCero_es_cero =
esPolCero polCero
I Si n es mayor que el grado de p y b no es cero, entonces(consPol n b p) es un polinomio distinto del cero.
prop_consPol_no_cero :: Int -> Int -> Polinomio Int
-> Property
prop_consPol_no_cero n b p =
n > grado p && b /= 0 ==>
not (esPolCero (consPol n b p))
37 / 55
![Page 56: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/56.jpg)
IM Tema 21: El TAD de los polinomiosComprobación de las implementaciones con QuickCheck
Especificación de las propiedades de los polinomios
Especificación de las propiedades de los polinomiosI polCero es el polinomio cero.
prop_polCero_es_cero :: Bool
prop_polCero_es_cero =
esPolCero polCero
I Si n es mayor que el grado de p y b no es cero, entonces(consPol n b p) es un polinomio distinto del cero.
prop_consPol_no_cero :: Int -> Int -> Polinomio Int
-> Property
prop_consPol_no_cero n b p =
n > grado p && b /= 0 ==>
not (esPolCero (consPol n b p))
37 / 55
![Page 57: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/57.jpg)
IM Tema 21: El TAD de los polinomiosComprobación de las implementaciones con QuickCheck
Especificación de las propiedades de los polinomios
Especificación de las propiedades de los polinomiosI polCero es el polinomio cero.
prop_polCero_es_cero :: Bool
prop_polCero_es_cero =
esPolCero polCero
I Si n es mayor que el grado de p y b no es cero, entonces(consPol n b p) es un polinomio distinto del cero.
prop_consPol_no_cero :: Int -> Int -> Polinomio Int
-> Property
prop_consPol_no_cero n b p =
n > grado p && b /= 0 ==>
not (esPolCero (consPol n b p))
37 / 55
![Page 58: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/58.jpg)
IM Tema 21: El TAD de los polinomiosComprobación de las implementaciones con QuickCheck
Especificación de las propiedades de los polinomios
Especificación de las propiedades de los polinomiosI (consPol (grado p) (coefLider p) (restoPol p)) es
igual a p.
prop_consPol :: Polinomio Int -> Bool
prop_consPol p =
consPol (grado p) (coefLider p) (restoPol p) == p
I Si n es mayor que el grado de p y b no es cero, entonces el gradode (consPol n b p) es n.
prop_grado :: Int -> Int -> Polinomio Int -> Property
prop_grado n b p =
n > grado p && b /= 0 ==>
grado (consPol n b p) == n
38 / 55
![Page 59: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/59.jpg)
IM Tema 21: El TAD de los polinomiosComprobación de las implementaciones con QuickCheck
Especificación de las propiedades de los polinomios
Especificación de las propiedades de los polinomiosI (consPol (grado p) (coefLider p) (restoPol p)) es
igual a p.
prop_consPol :: Polinomio Int -> Bool
prop_consPol p =
consPol (grado p) (coefLider p) (restoPol p) == p
I Si n es mayor que el grado de p y b no es cero, entonces el gradode (consPol n b p) es n.
prop_grado :: Int -> Int -> Polinomio Int -> Property
prop_grado n b p =
n > grado p && b /= 0 ==>
grado (consPol n b p) == n
38 / 55
![Page 60: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/60.jpg)
IM Tema 21: El TAD de los polinomiosComprobación de las implementaciones con QuickCheck
Especificación de las propiedades de los polinomios
Especificación de las propiedades de los polinomiosI (consPol (grado p) (coefLider p) (restoPol p)) es
igual a p.
prop_consPol :: Polinomio Int -> Bool
prop_consPol p =
consPol (grado p) (coefLider p) (restoPol p) == p
I Si n es mayor que el grado de p y b no es cero, entonces el gradode (consPol n b p) es n.
prop_grado :: Int -> Int -> Polinomio Int -> Property
prop_grado n b p =
n > grado p && b /= 0 ==>
grado (consPol n b p) == n
38 / 55
![Page 61: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/61.jpg)
IM Tema 21: El TAD de los polinomiosComprobación de las implementaciones con QuickCheck
Especificación de las propiedades de los polinomios
Especificación de las propiedades de los polinomiosI Si n es mayor que el grado de p y b no es cero, entonces el
coeficiente líder de (consPol n b p) es b.
prop_coefLider :: Int -> Int -> Polinomio Int -> Property
prop_coefLider n b p =
n > grado p && b /= 0 ==>
coefLider (consPol n b p) == b
I Si n es mayor que el grado de p y b no es cero, entonces el restode (consPol n b p) es p.
prop_restoPol :: Int -> Int -> Polinomio Int -> Property
prop_restoPol n b p =
n > grado p && b /= 0 ==>
restoPol (consPol n b p) == p
39 / 55
![Page 62: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/62.jpg)
IM Tema 21: El TAD de los polinomiosComprobación de las implementaciones con QuickCheck
Especificación de las propiedades de los polinomios
Especificación de las propiedades de los polinomiosI Si n es mayor que el grado de p y b no es cero, entonces el
coeficiente líder de (consPol n b p) es b.
prop_coefLider :: Int -> Int -> Polinomio Int -> Property
prop_coefLider n b p =
n > grado p && b /= 0 ==>
coefLider (consPol n b p) == b
I Si n es mayor que el grado de p y b no es cero, entonces el restode (consPol n b p) es p.
prop_restoPol :: Int -> Int -> Polinomio Int -> Property
prop_restoPol n b p =
n > grado p && b /= 0 ==>
restoPol (consPol n b p) == p
39 / 55
![Page 63: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/63.jpg)
IM Tema 21: El TAD de los polinomiosComprobación de las implementaciones con QuickCheck
Especificación de las propiedades de los polinomios
Especificación de las propiedades de los polinomiosI Si n es mayor que el grado de p y b no es cero, entonces el
coeficiente líder de (consPol n b p) es b.
prop_coefLider :: Int -> Int -> Polinomio Int -> Property
prop_coefLider n b p =
n > grado p && b /= 0 ==>
coefLider (consPol n b p) == b
I Si n es mayor que el grado de p y b no es cero, entonces el restode (consPol n b p) es p.
prop_restoPol :: Int -> Int -> Polinomio Int -> Property
prop_restoPol n b p =
n > grado p && b /= 0 ==>
restoPol (consPol n b p) == p
39 / 55
![Page 64: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/64.jpg)
IM Tema 21: El TAD de los polinomiosComprobación de las implementaciones con QuickCheck
Comprobación de las propiedades
Tema 21: El TAD de los polinomios
1. Especificación del TAD de los polinomios
2. Implementación del TAD de los polinomios
3. Comprobación de las implementaciones con QuickCheckLibrerías auxiliaresGenerador de polinomiosEspecificación de las propiedades de los polinomiosComprobación de las propiedades
4. Operaciones con polinomios
40 / 55
![Page 65: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/65.jpg)
IM Tema 21: El TAD de los polinomiosComprobación de las implementaciones con QuickCheck
Comprobación de las propiedades
Procedimiento de comprobaciónI compruebaPropiedades comprueba todas las propiedades con la
plataforma de verificación. Por ejemplo,
compruebaPropiedades =
defaultMain
[testGroup "Propiedades del TAD polinomio:"
[testProperty "P1" prop_polCero_es_cero,
testProperty "P2" prop_consPol_no_cero,
testProperty "P3" prop_consPol,
testProperty "P4" prop_grado,
testProperty "P5" prop_coefLider,
testProperty "P6" prop_restoPol]]
41 / 55
![Page 66: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/66.jpg)
IM Tema 21: El TAD de los polinomiosComprobación de las implementaciones con QuickCheck
Comprobación de las propiedades
Comprobación de las propiedades de los polinomios
ghci> compruebaPropiedades
Propiedades del TAD polinomio::
P1: [OK, passed 100 tests]
P2: [OK, passed 100 tests]
P3: [OK, passed 100 tests]
P4: [OK, passed 100 tests]
P5: [OK, passed 100 tests]
P6: [OK, passed 100 tests]
Properties Total
Passed 6 6
Failed 0 0
Total 6 6
42 / 55
![Page 67: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/67.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Tema 21: El TAD de los polinomios
1. Especificación del TAD de los polinomios
2. Implementación del TAD de los polinomios
3. Comprobación de las implementaciones con QuickCheck
4. Operaciones con polinomiosOperaciones con polinomios
43 / 55
![Page 68: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/68.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Operaciones con polinomiosI Importación de la implementación a utilizar.
import PolRepTDA
-- import PolRepDispersa
-- import PolRepDensa
I Importación de librerías auxiliares.
import Test.QuickCheck
import Test.Framework
import Test.Framework.Providers.QuickCheck2
44 / 55
![Page 69: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/69.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Funciones sobre términosI (creaTermino n a) es el término axn. Por ejemplo,
creaTermino 2 5 5*x^2
creaTermino:: (Num t, Eq t) => Int -> t -> Polinomio t
creaTermino n a = consPol n a polCero
I (termLider p) es el término líder del polinomio p. Por ejemplo,ejPol2 x^5 + 5*x^2 + 4*x
termLider ejPol2 x^5
termLider:: (Num t, Eq t) => Polinomio t -> Polinomio t
termLider p = creaTermino (grado p) (coefLider p)
45 / 55
![Page 70: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/70.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Funciones sobre términosI (creaTermino n a) es el término axn. Por ejemplo,
creaTermino 2 5 5*x^2
creaTermino:: (Num t, Eq t) => Int -> t -> Polinomio t
creaTermino n a = consPol n a polCero
I (termLider p) es el término líder del polinomio p. Por ejemplo,ejPol2 x^5 + 5*x^2 + 4*x
termLider ejPol2 x^5
termLider:: (Num t, Eq t) => Polinomio t -> Polinomio t
termLider p = creaTermino (grado p) (coefLider p)
45 / 55
![Page 71: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/71.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Funciones sobre términosI (creaTermino n a) es el término axn. Por ejemplo,
creaTermino 2 5 5*x^2
creaTermino:: (Num t, Eq t) => Int -> t -> Polinomio t
creaTermino n a = consPol n a polCero
I (termLider p) es el término líder del polinomio p. Por ejemplo,ejPol2 x^5 + 5*x^2 + 4*x
termLider ejPol2 x^5
termLider:: (Num t, Eq t) => Polinomio t -> Polinomio t
termLider p = creaTermino (grado p) (coefLider p)
45 / 55
![Page 72: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/72.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Suma de polinomiosI (sumaPol p q) es la suma de los polinomios p y q. Por ejemplo,
ejPol1 3*x^4 + -5*x^2 + 3
ejPol2 x^5 + 5*x^2 + 4*x
sumaPol ejPol1 ejPol2 x^5 + 3*x^4 + 4*x + 3
sumaPol:: (Num a, Eq a) => Polinomio a -> Polinomio a -> Polinomio a
sumaPol p q
| esPolCero p = q
| esPolCero q = p
| n1 > n2 = consPol n1 a1 (sumaPol r1 q)
| n1 < n2 = consPol n2 a2 (sumaPol p r2)
| otherwise = consPol n1 (a1+a2) (sumaPol r1 r2)
where n1 = grado p
a1 = coefLider p
r1 = restoPol p
n2 = grado q
a2 = coefLider q
r2 = restoPol q
46 / 55
![Page 73: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/73.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Suma de polinomiosI (sumaPol p q) es la suma de los polinomios p y q. Por ejemplo,
ejPol1 3*x^4 + -5*x^2 + 3
ejPol2 x^5 + 5*x^2 + 4*x
sumaPol ejPol1 ejPol2 x^5 + 3*x^4 + 4*x + 3
sumaPol:: (Num a, Eq a) => Polinomio a -> Polinomio a -> Polinomio a
sumaPol p q
| esPolCero p = q
| esPolCero q = p
| n1 > n2 = consPol n1 a1 (sumaPol r1 q)
| n1 < n2 = consPol n2 a2 (sumaPol p r2)
| otherwise = consPol n1 (a1+a2) (sumaPol r1 r2)
where n1 = grado p
a1 = coefLider p
r1 = restoPol p
n2 = grado q
a2 = coefLider q
r2 = restoPol q
46 / 55
![Page 74: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/74.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Propiedades de la suma de polinomiosI El polinomio cero es el elemento neutro de la suma.
prop_neutroSumaPol :: Polinomio Int -> Bool
prop_neutroSumaPol p =
sumaPol polCero p == p
I La suma es conmutativa.
prop_conmutativaSuma :: Polinomio Int -> Polinomio Int
-> Bool
prop_conmutativaSuma p q =
sumaPol p q == sumaPol q p
47 / 55
![Page 75: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/75.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Propiedades de la suma de polinomiosI El polinomio cero es el elemento neutro de la suma.
prop_neutroSumaPol :: Polinomio Int -> Bool
prop_neutroSumaPol p =
sumaPol polCero p == p
I La suma es conmutativa.
prop_conmutativaSuma :: Polinomio Int -> Polinomio Int
-> Bool
prop_conmutativaSuma p q =
sumaPol p q == sumaPol q p
47 / 55
![Page 76: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/76.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Propiedades de la suma de polinomiosI El polinomio cero es el elemento neutro de la suma.
prop_neutroSumaPol :: Polinomio Int -> Bool
prop_neutroSumaPol p =
sumaPol polCero p == p
I La suma es conmutativa.
prop_conmutativaSuma :: Polinomio Int -> Polinomio Int
-> Bool
prop_conmutativaSuma p q =
sumaPol p q == sumaPol q p
47 / 55
![Page 77: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/77.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Producto de polinomiosI (multPorTerm t p) es el producto del término t por el polinomio
p. Por ejemplo,ejTerm 4*x
ejPol2 x^5 + 5*x^2 + 4*x
multPorTerm ejTerm ejPol2 4*x^6 + 20*x^3 + 16*x^2
multPorTerm :: (Num t, Eq t) => Polinomio t -> Polinomio t -> Polinomio t
multPorTerm term pol
| esPolCero pol = polCero
| otherwise = consPol (n+m) (a*b) (multPorTerm term r)
where n = grado term
a = coefLider term
m = grado pol
b = coefLider pol
r = restoPol pol
48 / 55
![Page 78: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/78.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Producto de polinomiosI (multPorTerm t p) es el producto del término t por el polinomio
p. Por ejemplo,ejTerm 4*x
ejPol2 x^5 + 5*x^2 + 4*x
multPorTerm ejTerm ejPol2 4*x^6 + 20*x^3 + 16*x^2
multPorTerm :: (Num t, Eq t) => Polinomio t -> Polinomio t -> Polinomio t
multPorTerm term pol
| esPolCero pol = polCero
| otherwise = consPol (n+m) (a*b) (multPorTerm term r)
where n = grado term
a = coefLider term
m = grado pol
b = coefLider pol
r = restoPol pol
48 / 55
![Page 79: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/79.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Producto de polinomiosI (multPol p q) es el producto de los polinomios p y q. Por ejemplo,
ghci> ejPol1
3*x^4 + -5*x^2 + 3
ghci> ejPol2
x^5 + 5*x^2 + 4*x
ghci> multPol ejPol1 ejPol2
3*x^9 + -5*x^7 + 15*x^6 + 15*x^5 + -25*x^4 + -20*x^3
+ 15*x^2 + 12*x
multPol :: (Num a, Eq a) => Polinomio a -> Polinomio a -> Polinomio a
multPol p q
| esPolCero p = polCero
| otherwise = sumaPol (multPorTerm (termLider p) q)
(multPol (restoPol p) q)
49 / 55
![Page 80: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/80.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Producto de polinomiosI (multPol p q) es el producto de los polinomios p y q. Por ejemplo,
ghci> ejPol1
3*x^4 + -5*x^2 + 3
ghci> ejPol2
x^5 + 5*x^2 + 4*x
ghci> multPol ejPol1 ejPol2
3*x^9 + -5*x^7 + 15*x^6 + 15*x^5 + -25*x^4 + -20*x^3
+ 15*x^2 + 12*x
multPol :: (Num a, Eq a) => Polinomio a -> Polinomio a -> Polinomio a
multPol p q
| esPolCero p = polCero
| otherwise = sumaPol (multPorTerm (termLider p) q)
(multPol (restoPol p) q)
49 / 55
![Page 81: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/81.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Propiedades del producto polinomiosI El producto de polinomios es conmutativo.
prop_conmutativaProducto :: Polinomio Int
-> Polinomio Int -> Bool
prop_conmutativaProducto p q =
multPol p q == multPol q p
I El producto es distributivo respecto de la suma.
prop_distributiva :: Polinomio Int -> Polinomio Int
-> Polinomio Int -> Bool
prop_distributiva p q r =
multPol p (sumaPol q r) ==
sumaPol (multPol p q) (multPol p r)
50 / 55
![Page 82: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/82.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Propiedades del producto polinomiosI El producto de polinomios es conmutativo.
prop_conmutativaProducto :: Polinomio Int
-> Polinomio Int -> Bool
prop_conmutativaProducto p q =
multPol p q == multPol q p
I El producto es distributivo respecto de la suma.
prop_distributiva :: Polinomio Int -> Polinomio Int
-> Polinomio Int -> Bool
prop_distributiva p q r =
multPol p (sumaPol q r) ==
sumaPol (multPol p q) (multPol p r)
50 / 55
![Page 83: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/83.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Propiedades del producto polinomiosI El producto de polinomios es conmutativo.
prop_conmutativaProducto :: Polinomio Int
-> Polinomio Int -> Bool
prop_conmutativaProducto p q =
multPol p q == multPol q p
I El producto es distributivo respecto de la suma.
prop_distributiva :: Polinomio Int -> Polinomio Int
-> Polinomio Int -> Bool
prop_distributiva p q r =
multPol p (sumaPol q r) ==
sumaPol (multPol p q) (multPol p r)
50 / 55
![Page 84: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/84.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Polinomio unidadI polUnidad es el polinomio unidad. Por ejemplo,
ghci> polUnidad
1
polUnidad:: (Num t, Eq t) => Polinomio t
polUnidad = consPol 0 1 polCero
I El polinomio unidad es el elemento neutro del producto.
prop_polUnidad :: Polinomio Int -> Bool
prop_polUnidad p =
multPol p polUnidad == p
51 / 55
![Page 85: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/85.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Polinomio unidadI polUnidad es el polinomio unidad. Por ejemplo,
ghci> polUnidad
1
polUnidad:: (Num t, Eq t) => Polinomio t
polUnidad = consPol 0 1 polCero
I El polinomio unidad es el elemento neutro del producto.
prop_polUnidad :: Polinomio Int -> Bool
prop_polUnidad p =
multPol p polUnidad == p
51 / 55
![Page 86: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/86.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Polinomio unidadI polUnidad es el polinomio unidad. Por ejemplo,
ghci> polUnidad
1
polUnidad:: (Num t, Eq t) => Polinomio t
polUnidad = consPol 0 1 polCero
I El polinomio unidad es el elemento neutro del producto.
prop_polUnidad :: Polinomio Int -> Bool
prop_polUnidad p =
multPol p polUnidad == p
51 / 55
![Page 87: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/87.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Valor de un polinomio en un puntoI (valor p c) es el valor del polinomio p al sustituir su variable
por c. Por ejemplo,ejPol1 3*x^4 + -5*x^2 + 3
valor ejPol1 0 3
valor ejPol1 1 1
valor ejPol1 (-2) 31
valor:: (Num a, Eq a) => Polinomio a -> a -> a
valor p c
| esPolCero p = 0
| otherwise = b*c^n + valor r c
where n = grado p
b = coefLider p
r = restoPol p
52 / 55
![Page 88: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/88.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Valor de un polinomio en un puntoI (valor p c) es el valor del polinomio p al sustituir su variable
por c. Por ejemplo,ejPol1 3*x^4 + -5*x^2 + 3
valor ejPol1 0 3
valor ejPol1 1 1
valor ejPol1 (-2) 31
valor:: (Num a, Eq a) => Polinomio a -> a -> a
valor p c
| esPolCero p = 0
| otherwise = b*c^n + valor r c
where n = grado p
b = coefLider p
r = restoPol p
52 / 55
![Page 89: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/89.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Verificación de raices de polinomiosI (esRaiz c p) se verifica si c es una raiz del polinomio p. por
ejemplo,ejPol3 6*x^4 + 2*x
esRaiz 1 ejPol3 False
esRaiz 0 ejPol3 True
esRaiz:: (Num a, Eq a) => a -> Polinomio a -> Bool
esRaiz c p = valor p c == 0
53 / 55
![Page 90: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/90.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Verificación de raices de polinomiosI (esRaiz c p) se verifica si c es una raiz del polinomio p. por
ejemplo,ejPol3 6*x^4 + 2*x
esRaiz 1 ejPol3 False
esRaiz 0 ejPol3 True
esRaiz:: (Num a, Eq a) => a -> Polinomio a -> Bool
esRaiz c p = valor p c == 0
53 / 55
![Page 91: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/91.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Derivación de polinomiosI (derivada p) es la derivada del polinomio p. Por ejemplo,
ejPol2 x^5 + 5*x^2 + 4*x
derivada ejPol2 5*x^4 + 10*x + 4
derivada :: Polinomio Int -> Polinomio Int
derivada p
| n == 0 = polCero
| otherwise = consPol (n-1) (n*b) (derivada r)
where n = grado p
b = coefLider p
r = restoPol p
54 / 55
![Page 92: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/92.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Derivación de polinomiosI (derivada p) es la derivada del polinomio p. Por ejemplo,
ejPol2 x^5 + 5*x^2 + 4*x
derivada ejPol2 5*x^4 + 10*x + 4
derivada :: Polinomio Int -> Polinomio Int
derivada p
| n == 0 = polCero
| otherwise = consPol (n-1) (n*b) (derivada r)
where n = grado p
b = coefLider p
r = restoPol p
54 / 55
![Page 93: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/93.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Propiedades de las derivadas de polinomiosI La derivada de la suma es la suma de las derivadas.
prop_derivada :: Polinomio Int -> Polinomio Int -> Bool
prop_derivada p q =
derivada (sumaPol p q) ==
sumaPol (derivada p) (derivada q)
55 / 55
![Page 94: Tema 21: El TAD de los polinomios - Informática (2013 14)jalonso/cursos/i1m-13/temas/tema...IMTema21: ElTADdelospolinomios EspecificacióndelTADdelospolinomios SignaturadelTADdelospolinomios](https://reader035.vdocuments.mx/reader035/viewer/2022062611/612fd8631ecc51586943b679/html5/thumbnails/94.jpg)
IM Tema 21: El TAD de los polinomiosOperaciones con polinomios
Operaciones con polinomios
Propiedades de las derivadas de polinomiosI La derivada de la suma es la suma de las derivadas.
prop_derivada :: Polinomio Int -> Polinomio Int -> Bool
prop_derivada p q =
derivada (sumaPol p q) ==
sumaPol (derivada p) (derivada q)
55 / 55