AlgStr / Библиотека / ЗАДАЧИ / POLY / POLY
.DOC
СПЕЦИФИКАЦИЯ
абстракции данных
"Алгебраические полиномы с целыми коэффициентами"
poly = DATA TYPE IS create, degree, coeff, add, mul, sub, minus, equal
ОПИСАНИЕ
Полиномы poly - это неизменяемые полиномы с целыми коэффициентами.
ОПЕРАЦИИ
create = PROC (C, N: int) RETURNS (poly)
REQUIRES N >= 0
N
EFFECTS Возвращает полином CX .
Например,
3
poly$create(6,3) = 6X
poly$create(3,0) = 3
poly$create(0,0) = 0
degree = PROC (P: poly) RETURNS (int)
EFFECTS Возвращает степень p, т.е. наибольшую степень при ненулевом коэффициенте. Степень нулевого коэффициента равна 0.
Например,
2
poly$degree(X + 1) = 2
poly$degree(17) = 0
coef = PROC (P: poly, N: int) returns (int)
REQUIRES N >= 0
EFFECTS Возвращает коэффициент члена P со степенью N.
Возвращает 0, если N больше степени P.
Например,
3
poly$coeff(X + 2X + 1, 4) = 0
3
poly$coeff(X + 2X + 1, 1) = 2
add = PROC (P, Q: poly) returns (poly)
EFFECTS Возвращает полином, являющийся суммой полиномов P и Q.
mul = PROC (P, Q: poly) returns (poly)
EFFECTS Возвращает полином, являющийся произведением полиномов P и Q.
sub = PROC (P, Q: poly) returns (poly)
EFFECTS Возвращает полином, являющийся разностью полиномов P и Q.
minus = PROC (P: poly) returns (poly)
EFFECTS Возвращает полином, являющийся разностью полиномов Z и P,
где Z - нулевой полином.
equal = PROC (P, Q: poly) returns (bool)
EFFECTS Возвращает значение true, если P и Q имеют одинаковые
коэффициенты при соответствующих членах, и значение false -
в противном случае.
END poly
Функция АБСТРАКЦИИ
для абстракции данных
"Алгебраические полиномы с целыми коэффициентами"
REP = array [int]
{====================================================================}
{ Типичный полином есть: c0 + c1*x + c2*x^2 = ... }
{--------------------------------------------------------------------}
{ Функция АБСТРАКЦИИ для коэффициента ci есть }
{ ci = r[i], если low(r) <= i <= high(r) }
{ = 0 в противном случае }
{====================================================================}
Функция ИНВАРИАНТ ПРЕДСТАВЛЕНИЯ
для абстракции данных
"Алгебраические полиномы с целыми коэффициентами"
REP = array[int]
{====================================================================}
{ ИНВАРИАНТ ПРЕДСТАВЛЕНИЯ есть }
{ low(r) >= 0 & }
{ if empty(r) then high(r)=0 else r[low(r)] <> 0 & }
{ r[high(r)] <> 0 }
{--------------------------------------------------------------------}
{ ПОЯСНЕНИЯ: Т.к. мы не записываем нулевые коэффициенты слева и }
{ справа от значащих членов полинома и представляем нуле- }
{ вой полином пустым массивом, то мы предполагаем, что }
{ старший и младший элементы массива - не нули. Кроме }
{ того эти массивы имеют неотрицательную нижнюю границу. }
{ И, наконец, пустой массив должен иметь верхнюю границу, }
{ равную нулю }
{====================================================================}