|
Poly.pas
Se discute cómo está construida la
implementación del
ADT TPoly ,
que sirve para usar polinomios en programas Pascal. La
implementación se ha realizado para el ambiente Turbo
Pascal v5.0, aunque para trabajar con ella es más
cómodo usar la versión v6.0 o una posterior.
|
We discuss the implementation for the
TPoly Abstract Data Type.
This ADT is usefull for Pascal programs where polynomials are
needed. This implementation has been made for the Turbo Pascal
v5.0 environment, even though it is less cumbersome to use version
v6.0 or later to work with it.
|
La unidad
poly.pas
es un módulo Pascal muy simple que sirve para manejar
polinomios. Esta implementación se ha hecho tomando como
base la implementación del ADT
Elem.pas
, la que
sirvió de
plantilla para crear
las operaciones de poly.pas
.
El
ADT elemental
Poly
tiene todas las operaciones que los
ADTs contenedores necesitan
para manipular al ADT elemental, por lo que puede ser almacenado
en cualquier
contenedor.
El valor didáctico de este ADT estriba en que, al
estudiarlo, el estudiante puede ver porqué es muy sencillo
usar a Elem.pas
como plantilla para crear nuevos
ADTs. Básicamente, el trabajo realizado consistió en
es usar el editor de textos para remplazar el nombre
TElem
por TPoly
, y luego agregar las
operaciones particulares sobre polinomios.
Como estos ADTs sirven como plantilla para crear los ADTs elementales que estarán almacenados en un contendor, su estudio tiene valor didáctico.
TPoly
El
ADT TPoly
sirve para represenar polinomio real de de una variable real. Un
polinomio es una función que tiene la siguiente forma:
p(x) = an* xn + ... + a1* x1 + a0
Cada término [ai * xi] del polinomio está caracterizado por dos números. El coeficiente del término es el número real "ai" que multilplica a la variable "x", y el grado del término es el exponente entero al que está elevada la variable. El grado del polinomio es el grado más alto de todos sus términos. Los números reales son polinimios de grado cero. El polinomio cero también tiene grado cero.
El
ADT TPoly
es
un ADT
elemental, pero no es
un
contenedor, pues los
contenedores son aquellos ADTs cuya razón de existencia es
almacenar a otros ADTs. Los más importantes contenedores
son la
Lista y el
Arbol). Los ADTs elementales existen
para independizar la implementación del contenedor del
elemento contenido. Todo ADT elemental tiene un conjunto de
operaciones básicas, que son las que usa el contenedores
puedan manipularlos, y otro conjunto de operaciones que lo
caracterizan. En el caso de TPoly
, en esta segunda
clase de operaciones se encuentra alguna de las operaciones
algebraicas más importantes sobre polinomios. Las
demás pueden implementarse en términos de
éstas.
Las
operaciones del ADT
TPoly
son las operaciones aritméticas.
Además,
TPoly
incluye todas
las
operaciones que un
contenedor necesita para manipular a su ADT elemental. Las
operaciones de TPoly
son las siguientes:
Init(q)
Clear(q)
Done(q)
Copy(x,y)
y
" en
"x
".Move(x,y)
x
" el valor del polinomio
"y
".Equal(x,y)
x
" con el de
"y
".Load(p,F)
p
" desde el archivo
"F
".Store(p,F)
p
" en el archivo
"F
".OK(r)
Fix(r)
Set_Term(p, c,n)
c * xn
en
p
.Degree(p)
p
.Coef(p, exp)
exp
.Add(p,q, r)
r := p+q;
Sub(p,q, r)
r := p-q;
Mult(p,q, r)
r := p*q;
Minus(p, r)
r := -p;
Is_ZERO(x)
x = 0
?Eval(p,x)
p(x)
To_STRING(r)
p
como una hilera
Las primeras
operaciones
[Init()
...Fix()
] son las que los
contenedores usan para manipular al ADT que contienen. Por si
solas no caracterizan al ADT TPoly
. Las que se lo
caracterizan son las otras, que sirven para cambiar el valor de un
polinomio.
Como Pascal no permite la Sobrecarga de Operadores, lo que si es permitido en Ada y C++, entonces las operaciones aritméticas se han definido como procedimientos que reciben en sus primeros argumentos los valores sobre los que operan, y retornan el resultado en el último argumento.
La operación Poly.Set_Term(p, c,n)
es la que
permite cambiarle el valor al polinomio cambiando cada uno de sus
términos. Las operaciones que complementan a
Set_Term()
son las funciones Degree()
y
Coef()
, que permiten saber el coeficiente de cada uno
de los términos del polinomio. Eval(p,x)
permite evaluar eficientemente el polinomio en el número
"x".
El
modelo del ADT es un
diagrama de la estructura de datos usado para implementarlo. El
modelo de TPoly
es un arreglo en donde se almacenan
todos los coeficientes del polinomio, junto al grado del
polinomio:
0 1 2 3 4 5 .. Max_Grado +--------+---+---+---+---+---+---+------+---+ |_coef[] | 4 | 0 | 2 | 0 | 0 | 1 | .... |#!@| x^5 + 2x^2 + 4 |--------+---+---+---+---+---+---+------+---+ |_grad ------------------------^ .... | +-------------------------------------------+
El tamaño del arreglo _coef[]
es
Poly.Max_Grado
y es el grado máximo que puede
representarse con este ADT.
Al definir este ADT no se le definieron comportamientos, pues en general, estos se usan para los ADT contenedores.
Esta implementación es muy simple. Lo único que
importa destacar es la necesidad de la operación
poly.Adjust(p)
, que se invoca al final de la
implementación de cada una de las operaciones de
TPoly
, para evitar que el grado del polinomio haya
disminuido.
Esta investigación se realizó dentro del proyecto de investigación 326-93-256 "DBgen: generación automática de programas a partir de su base de datos", inscrito ante la Vicerrectoría de Investigación de la Universidad de Costa Rica. La Escuela de Ciencias de la Computación e Informática también ha aportado fondos para este trabajo.
|
Di Mare, Adolfo:
La Implementación de Elem.pas ,
Reporte Técnico ECCI-94-02,
Proyecto 326-89-019,
Escuela de Ciencias de la Computación e Informática,
Universidad de Costa Rica,
1994.
http://www.di-mare.com/adolfo/p/elem.htm
|
|
Di Mare, Adolfo:
La Implementación de List.pas ,
Reporte Técnico ECCI-94-06,
Proyecto 326-89-019,
Escuela de Ciencias de la Computación e Informática,
Universidad de Costa Rica,
1994.
http://www.di-mare.com/adolfo/p/list.htm
|
[LG-86] | Liskov, Barbara & Guttag, John:
Abstraction and Specification in Program
Development,
McGraw-Hill, 1986.
|
[-] | Resumen
|
[1] | Abstracción de TPoly
|
[2] | Operaciones
|
[3] | Modelo
|
[4] | Comportamientos
|
[5] | Detalles de implementación
|
[-] | Reconocimientos
|
|
|
Bibliografía
|
|
Indice
|
|
Acerca del autor
|
|
Acerca de este documento
|
|
Principio
Indice
Final
|
Adolfo Di Mare <adolfo@di-mare.com>
Referencia: | Di Mare, Adolfo:
La Implementación de Poly.pas ,
Reporte Técnico ECCI-94-04
Proyecto 326-89-019,
Escuela de Ciencias de la Computación e Informática
(ECCI),
Universidad de Costa Rica
(UCR),
1994.
http://www.di-mare.com/adolfo/p/poly.htm
http://www.di-mare.com/adolfo/p/src/poly.zip
|
Autor: | Adolfo Di Mare
<adolfo@di-mare.com>
|
Contacto: | Apdo 4249-1000, San José Costa Rica Tel: (506) 207-4020 Fax: (506) 438-0139 |
Revisión: | ECCI-UCR, Marzo 1999
|
Visitantes: |
|
|