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

З А Д А Ч А №1

РЕАЛИЗОВАТЬ подчеркнутые операции в соответствии с предложенной спецификацией, функцией абстракции и инвариантом представления.

ПРОВЕСТИ анализ создаваемого типа на полноту, изменяемость, обобщенность (или частичность).

РАЗБИТЬ операции типа на классы.

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

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

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

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

equal, similar, copy, elems, destroy

ОПИСАНИЕ

Наборы целых чисел intset - это ограниченные математические множества целых чисел. Наборы целых чисел ИЗМЕНЯЕМЫЕ: операции insert и delete добавляют и удаляют целые числа из набора.

ОПЕРАЦИИ

create = function (SizeSet: word): PIntset

EFFECTS Возвращает указатель на новый, пустой набор intset размером SizeSet

insert = procedure (S: PIntset; X: integer);

MODIFIES S

EFFECTS Добавляет X к элементам S; после добавления - возвращает Spost = S U {X}, где Spost - это набор значений в S при возврате из insert.

delete = procedure (S: PIntset; X: integer);

MODIFIES S

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

member = function (S: PIntset; X: integer): boolean;

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

size = function (S: PIntset): word;

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

choose = function (S: PIntset): integer;

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

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

equal = function (S1, S2: PIntset): boolean;

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

similar = function (S1, S2: PIntset): boolean;

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

copy = function (S: PIntset): PIntset;

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

elems = iter (s: PIntset) yields (int)

REQUIRES S не модифицируется в теле цикла.

EFFECTS Выдает элементы S в некотором произвольном порядке, причем каждый элемент только один раз.

destroy = proc(S: PIntset)

EFFECTS Уничтожает объект S с освобождением всей занимаемой им памяти.

END intset

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

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

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

------------------------ ФУНКЦИЯ АБСТРАКЦИИ -------------------------

г========================================================¬

¦ Дескриптор набора REP (Представление набора) ¦

¦ -------------¬ ========================== ¦

S1-----+->¦ MaxSize ¦ - Диапазон 0..MaxSize, хранимых в мно- ¦

¦ +------------+ жестве целых чисел (битовая шкала)¦

¦ ¦ PBody ¦ ¦

¦ L-----+------- ¦

¦ ¦ ¦

¦ ------+---------------------------------------------¬ ¦

¦ ¦ ¦ Тело набора целых чисел ¦ ¦

¦ ¦ ¦ ------------¬ (массив из нулей ) ¦ ¦

¦ ¦ ¦ MaxSize ¦///////////¦ (и единиц, выде- ) ¦ ¦

¦ ¦ ¦ +-----------+ (ленный в куче ) ¦ ¦

¦ ¦ ¦ ¦///////////¦ ¦ ¦

¦ ¦ ¦ +-----------+ ¦ ¦

¦ ¦ ¦ ...¦///////////¦ ¦ ¦

¦ ¦ ¦ +-----------+ ¦ ¦

¦ ¦ ¦ 2 ¦///////////¦ ¦ ¦

¦ ¦ ¦ +-----------+ ¦ ¦

¦ ¦ L--------> 1 ¦///////////¦ ¦ ¦

¦ ¦ L------------ ¦ ¦

¦ L---------------------------------------------------- ¦

L========================================================-

Принимаем решение: Набор целых чисел храним в виде массива нулей и единиц, начиная от первого элемента и до элемента с индексом Size (количество элементов в массиве). Причем целое число i будет храниться в множестве, если соответствующий элемент PBody^[i]=1.

Опишем это формально:

---------------------------------------------------------------------

Типичный непустой набор целых есть {x1, x2, ..., xn}

---------------------------------------------------------------------

ФУНКЦИЯ АБСТРАКЦИИ есть:

A(r) = { i | PBody^[i]=1 }

---------------------------------------------------------------------

ФУНКЦИЯ ИНВАРИАНТ ПРЕДСТАВЛЕНИЯ есть:

0 < MaxSize <= 65535

Соседние файлы в папке ЗАДАЧИ