Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
29
Добавлен:
23.03.2015
Размер:
29.18 Кб
Скачать

СПЕЦИФИКАЦИЯ

абстракции данных

"Алгебраические полиномы с целыми коэффициентами"

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 }

{--------------------------------------------------------------------}

{ ПОЯСНЕНИЯ: Т.к. мы не записываем нулевые коэффициенты слева и }

{ справа от значащих членов полинома и представляем нуле- }

{ вой полином пустым массивом, то мы предполагаем, что }

{ старший и младший элементы массива - не нули. Кроме }

{ того эти массивы имеют неотрицательную нижнюю границу. }

{ И, наконец, пустой массив должен иметь верхнюю границу, }

{ равную нулю }

{====================================================================}

Соседние файлы в папке POLY