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

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

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

"Набор целых чисел intset"

intset = DATA TYPE IS create, insert, delete, member, size, choose, equal, similar, copy

ОПИСАНИЕ

Наборы целых чисел intset - это неограниченные математические

множества целых чисел. Наборы целых чисел ИЗМЕНЯЕМЫЕ: операции

insert и delete добовляют и удаляют целые числа из набора.

ОПЕРАЦИИ

create = PROC () RETURNS (intset)

EFFECTS Возвращает новый, пустой набор intset

insert = PROC (S: intset, X: int)

MODIFIES S

EFFECTS Добавляет X к элементам S; после добавления - воз-

вращает Spost = S U {X}, где Spost - это набор зна-

чений в S при возврате из insert.

delete = PROC (S: intset, X: int)

MODIFIES s

EFFECTS Удаляет X из S (т.е. Spost = S - {X}).

member = PROC (S: intset, X: int) RETURNS (bool)

EFFECTS Возвращает значение true, если X Ї S.

size = PROC (S: intset) RETURNS (int)

EFFECTS Возвращает число элементов в S

choose = PROC (S: intset) RETURNS (int)

REQUIRES Набор S не пуст.

EFFECTS Возвращает произвольный элемент S

equal = PROC (S1, S2: intset) RETURNS (bool)

EFFECTS Возвращает значение true, если S1 и S2 - один и тот же

объект intset.

similar = PROC (S1, S2: intset) RETURNS (bool)

EFFECTS Возвращает значение true, если s1 и S2 содержат одинаковые элементы.

copy = PROC (S: intset) RETURNS (intset)

EFFECTS Возвращает новый объект intset, содержащий те же элементы, что и S.

END intset

Функция АБСТРАКЦИИ

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

"Набор целых чисел intset"

REP = record[ els: array[bool], other_els: array[int], size: int]

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

{ Типичный набор данных intset есть: {x1, x2, ..., xn} }

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

{ Функция АБСТРАКЦИИ есть }

{ A(r) = }

{ {r.other_els[i] | low(r.other_els) <= i <= high(r.other_els)} U }

{ {j | 1 <= j <= 100 & r.els[j]} }

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

{ ПОЯСНЕНИЯ: Набор целых чисел определяется как объединение двух мно-}

{ жеств: первое определяется элементами, хранящимися в }

{ массиве r.other_els (их r.size штук), а второе - }

{ индексами тех элементов r.els[j], значения которых }

{ есть true }

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

Функция ИНВАРИАНТ ПРЕДСТАВЛЕНИЯ

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

"Набор целых чисел intset"

REP = record[ els: array[bool], other_els: array[int], size: int]

Идея данного представления заключается в том, что для чисел из

диапазона 1..100 мы отмечаем их принадлежность набору, записывая значение true в r.els[i]. Остальные значения записываются в r.other_els

как и в обычной реализации на базе массива целых.

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

{ ИНВАРИАНТ ПРЕДСТАВЛЕНИЯ есть }

{ size(r.els)=100 & low(r.els)=1 }

{ & все элементы r.other_els не принадлежат диапазону 1..100 }

{ & в r.other_els нет дубликатов элементов }

{ & size(A) = size(r.other_els) + }

{ (число элементов в r.els со значением true) }

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

{ ПРИМЕЧАНИЕ: Здесь A - абстрактный объект (т.е. набор intset, а }

{ r - объект представления (т.е. record[els и т.д.]}

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

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