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

Елементи контролю за 2 модулем Термін: 29-й тиждень (24.11.08 – 28.11.08)

Модуль 2

Бали

 

Модульна робота на тему:"Специфікація та реалізація лінійних СД":

 

 

Максимальна кількість балів:

 

 

Шапка

1

 

Специфікація

2

 

Повнота типу

1

 

Функція абстракції

2

 

Функція інваріант подання

2

 

Реалізація

1

 

Демонстрація

1

 

Наявність мнорівневих описів

1

 

Якість звіту

2

 

ЗАГАЛОМ:

13

 

Термін здачі - 13-й тиждень (24.11.08 - 28.11.08)

 

 

Відвідування занять протягом модуля:

1

 

Робота на лекціях протягом модуля:

1

 

Семінар

 

 

Відвідування:

2

 

Активна робота:

3

 

ЗАГАЛОМ:

5

 

Система ШТРАФІВ: (за порушення графіка здачі на тиждень):

-1

 

ПРЕМІЯ за старанне виконання модульного завдання

 

 

та особливі заслуги (староста групи, учасник олімпіади

 

 

з програмування тощо) до 3-ти балів:

1

 

 

 

 

Термін пересдачі модуля: 14-й тиждень (01.12.08 -05.12.08)

 

Елементи контролю за 3 модулем Термін: 33-й тиждень (22.12.08 – 26.12.08)

Модуль 3

Бали

 

Модульна робота на тему:"Специфікація та реалізація дерев":

 

 

Шапка

1

 

Специфікація

2

 

Повнота типу

4

 

Функція абстракції

1

 

Функція інваріант подання

1

 

Реалізація

3

 

Демонстрація

3

 

Наявність мнорівневих описів

1

 

Якість звіту

1

 

ЗАГАЛОМ:

17

 

 

 

Термін здачі - 17-й тиждень (22.12.08 - 26.12.08)

 

 

Відвідування занять протягом модуля:

1

 

Робота на лекціях протягом модуля:

2

 

Система ШТРАФІВ: не передбачена:

 

 

ПРЕМІЯ за старанне виконання модульного завдання

 

 

та особливі заслуги (староста групи, учасник олімпіади

 

 

з програмування тощо) до 3-ти балів:

1

 

 

 

Термін здачі - 17-й тиждень (22.12.08 - 26.12.08)

 

Підсумковий контроль

Підсумковий контроль

 

 

 

Екзамен

Бали

 

Максимальна кількість балів:

 

 

Питання 1

10

 

Питання 2

10

 

Задача

20

 

 

 

ЗАГАЛОМ:

40

Перелік питань щодо підсумкового контролю:

ВСТУП У СТРУКТУРИ ДАНИХ

  1. Інформація і дані. Поняття про інформацію.

  2. Інформація і дані. Поняття про дані.

  3. Інформація і дані. Поняття про структуриданих.

  4. Структури даних та їх класифікація (послідовні структури, масиви).

  5. Структури даних та їх класифікація (списки, таблиці, дерева, мережі).

  6. Поняття про тип даних в мовах програмування (МП).

  7. Класифікація засобів визначення даних в МП.

ТЕХНОЛОГІЯ СТВОРЕННЯ СТРУКТУР ДАНИХ

  1. Поняття про абстрактному типі даних (А. Т. Д.). Кластер як мовнийзасіб роботи з А.Т.Д в мові CLU.

  2. Абстракція і декомпозиція. Їх взаємодіяпри проектуванні програм.

  3. Абстракція. Види та методи абстракції в програмуванні.

  4. Специфікації. Побудова специфікацій: критерії, властивості, характеристики специфікацій, що впливають на їх якість.

  5. Процедурна абстракція. Специфікація процедурних абстракцій. Взаємини між різними частинами специфікації (Заголовок, частиниRequires, Modifies, Signals і Effects).

  6. Процедурна абстракція. Специфікація і реалізація процедурних абстракцій.

  7. Абстракція даних. Специфікація абстракцій даних.

  8. Реалізація абстракцій даних. Функція абстракції. Операції Up і Down.

  9. Реалізація абстракцій даних. Функція інваріант подання. Збереження інваріантуподання.

  10. Аналіз абстракцій даних, що створюються. Класи операцій. Повнота типу.

  11. Аналіз абстракцій даних, що створюються.. Операції Equal, Similar і Copy.

  12. Поняття про винятковіситуації. Механізм виняткових ситуацій в мові CLU.

  13. Використання виняткових ситуацій при проектуванні програм.

  14. Абстракция через ітерацію та її специфікація.

  15. Реалізація ітераторівв мові CLU.

  16. Особливості реалізації методу програмування з використанням абстракцій в системі TURBO PASCAL (TP).

Перелік задач щодо підсумкового контролю:

З А Д А Ч А

(загальна постановка)

РЕАЛІЗУВАТИ підкреслені операції у відповідності із запропонованою специфікацією, функцією абстракції та інваріантом подання.

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

Розбити операції типу на класи.

Задача 1

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

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

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

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

equal, similar, copy, 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 - один и тот же объект intset.

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

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

copy = function (S: PIntset): PIntset;

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

destroy = procedure (var S: Pintset);

EFFECTSУничтожает объектS(с освобождением всей занимаемой памяти) и разрывает связьS(после вызоваdestroyS=nil).

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

Задача 2

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

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

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

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

equal, similar, copy, 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 - один и тот же объект intset.

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

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

copy = function (S: PIntset): PIntset;

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

destroy = procedure (var S: Pintset);

EFFECTSУничтожает объектS(с освобождением всей занимаемой памяти) и разрывает связьS(после вызоваdestroyS=nil).

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

Задача 3

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

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

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

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

equal, similar, copy, 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 - один и тот же объект intset.

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

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

copy = function (S: PIntset): PIntset;

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

destroy = procedure (var S: Pintset);

EFFECTSУничтожает объектS(с освобождением всей занимаемой памяти) и разрывает связьS(после вызоваdestroyS=nil).

END intset

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

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

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

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

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

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

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

S1-----+->¦ MaxSize ¦ - Max размер выделенной памяти ¦

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

¦ ¦ Size ¦ - Размер заполненной части массива ¦

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

¦ ¦ PBody ¦ ¦

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

¦ ¦ ¦

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

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

¦ ¦ ¦ ------------¬ (массив элементов,)¦ ¦

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

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

¦ ¦ ¦ ...¦-Свободно--¦ ¦ ¦

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

¦ ¦ ¦ ¦-----------¦ ¦ ¦

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

¦ ¦ ¦ Size ¦///////////¦ ¦ ¦

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

¦ ¦ ¦ 3 ¦/Заполнено/¦ ¦ ¦

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

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

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

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

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

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

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

Принимаем решение: Набор целых чисел храним в виде массива целых чисел с повторением, упорядоченного по возрастанию, начиная от первого элемента и до элемента с индексом Size (количество заполненных элементов массива).

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

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

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

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

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

A(r)= { <уникальные элементы массива> }

Для представления пустого набора принимаем Size = 0.

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

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

0 < MaxSize <= 65536 div 2 &

0 <= Size <= MaxSize &

Для всех i, j, таких, что 1 <= i < j <= Size

PBody^[i] <= PBody[j]

Задача 4

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

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

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

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

equal, similar, copy, 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 - один и тот же объект intset.

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

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

copy = function (S: PIntset): PIntset;

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

destroy = procedure (var S: Pintset);

EFFECTSУничтожает объектS(с освобождением всей занимаемой памяти) и разрывает связьS(после вызоваdestroyS=nil).

END intset

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

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

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

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

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

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

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

S1-----+->¦ MaxSize ¦ - Max размер выделенной памяти ¦

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

¦ ¦ Size ¦ - Размер заполненной части массива ¦

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

¦ ¦ PBody ¦ ¦

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

¦ ¦ ¦

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

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

¦ ¦ ¦ ------------¬ (массив элементов,)¦ ¦

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

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

¦ ¦ ¦ ...¦-Свободно--¦ ¦ ¦

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

¦ ¦ ¦ ¦-----------¦ ¦ ¦

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

¦ ¦ ¦ Size ¦///////////¦ ¦ ¦

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

¦ ¦ ¦ 3 ¦/Заполнено/¦ ¦ ¦

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

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

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

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

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

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

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

Принимаем решение: Набор целых чисел храним в виде массива целых чисел с повторением, упорядоченного по возрастанию, начиная от первого элемента и до элемента с индексом Size (количество заполненных элементов массива).

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

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

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

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

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

A(r)= { <уникальные элементы массива> }

Для представления пустого набора принимаем Size = 0.

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

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

0 < MaxSize <= 65536 div 2 &

0 <= Size <= MaxSize &

Для всех i, j, таких, что 1 <= i < j <= Size

PBody^[i] <= PBody[j]

Задача 5

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

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

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

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

equal, similar, copy, 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 - один и тот же объект intset.

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

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

copy = function (S: PIntset): PIntset;

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

destroy = procedure (var S: Pintset);

EFFECTSУничтожает объектS(с освобождением всей занимаемой памяти) и разрывает связьS(после вызоваdestroyS=nil).

END intset

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

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

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

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

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

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

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

S1-----+->¦ MaxSize ¦ - Max размер выделенной памяти ¦

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

¦ ¦ Size ¦ - Размер заполненной части массива ¦

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

¦ ¦ PBody ¦ ¦

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

¦ ¦ ¦

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

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

¦ ¦ ¦ ------------¬ (массив элементов,)¦ ¦

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

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

¦ ¦ ¦ ...¦-Свободно--¦ ¦ ¦

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

¦ ¦ ¦ ¦-----------¦ ¦ ¦

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

¦ ¦ ¦ Size ¦///////////¦ ¦ ¦

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

¦ ¦ ¦ 3 ¦/Заполнено/¦ ¦ ¦

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

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

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

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

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

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

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

Принимаем решение: Набор целых чисел храним в виде массива целых чисел без повторения, упорядоченного по возрастанию, начиная от первого элемента и до элемента с индексом Size (количество заполненных элементов массива).

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

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

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

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

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

A(r) = { PBody^[1], PBody^[2], ..., PBody^[Size] }

Для представления пустого набора принимаем Size = 0.

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

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

0 < MaxSize <= 65536 div 2 &

0 <= Size <= MaxSize &

Для всех i, j, таких, что 1 <= i < j <= Size

PBody^[i] < PBody[j]

Задача 6

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

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

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

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

equal, similar, copy, 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 - один и тот же объект intset.

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

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

copy = function (S: PIntset): PIntset;

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

destroy = procedure (var S: Pintset);

EFFECTSУничтожает объектS(с освобождением всей занимаемой памяти) и разрывает связьS(после вызоваdestroyS=nil).

END intset

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

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

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

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

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

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

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

S1-----+->¦ MaxSize ¦ - Max размер выделенной памяти ¦

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

¦ ¦ Size ¦ - Размер заполненной части массива ¦

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

¦ ¦ PBody ¦ ¦

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

¦ ¦ ¦

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

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

¦ ¦ ¦ ------------¬ (массив элементов,)¦ ¦

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

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

¦ ¦ ¦ ...¦-Свободно--¦ ¦ ¦

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

¦ ¦ ¦ ¦-----------¦ ¦ ¦

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

¦ ¦ ¦ Size ¦///////////¦ ¦ ¦

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

¦ ¦ ¦ 3 ¦/Заполнено/¦ ¦ ¦

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

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

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

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

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

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

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

Принимаем решение: Набор целых чисел храним в виде массива целых чисел без повторения, упорядоченного по возрастанию, начиная от первого элемента и до элемента с индексом Size (количество заполненных элементов массива).

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

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

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

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

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

A(r) = { PBody^[1], PBody^[2], ..., PBody^[Size] }

Для представления пустого набора принимаем Size = 0.

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

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

0 < MaxSize <= 65536 div 2 &

0 <= Size <= MaxSize &

Для всех i, j, таких, что 1 <= i < j <= Size

PBody^[i] < PBody[j]

Задача 7

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

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

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

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

equal, similar, copy, 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 - один и тот же объект intset.

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

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

copy = function (S: PIntset): PIntset;

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

destroy = procedure (var S: Pintset);

EFFECTSУничтожает объектS(с освобождением всей занимаемой памяти) и разрывает связьS(после вызоваdestroyS=nil).

END intset

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

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

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

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

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

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

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

S1-----+->¦ MaxSize ¦ - Max размер выделенной памяти ¦

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

¦ ¦ Size ¦ - Размер заполненной части массива ¦

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

¦ ¦ PBody ¦ ¦

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

¦ ¦ ¦

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

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

¦ ¦ ¦ ------------¬ (массив элементов,)¦ ¦

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

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

¦ ¦ ¦ ...¦-Свободно--¦ ¦ ¦

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

¦ ¦ ¦ Size ¦///////////¦ ¦ ¦

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

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

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

¦ ¦ ¦ 3 ¦/Заполнено/¦ ¦ ¦

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

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

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

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

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

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

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

Принимаем решение: Набор целых чисел храним в виде массива целых чисел с повторением, упорядоченных по убыванию, начиная от первого элемента и до элемента с индексом Size (количество заполненных элементов массива).

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

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

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

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

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

A(r)= { <уникальные элементы массива> }

Для представления пустого набора принимаем Size = 0.

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

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

0 < MaxSize <= 65536 div 2 &

0 <= Size <= MaxSize &

Для всех i, j, таких, что 1 <= i < j <= Size

PBody^[i] >= PBody[j]

Задача 8

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

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

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

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

equal, similar, copy, 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 - один и тот же объект intset.

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

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

copy = function (S: PIntset): PIntset;

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

destroy = procedure (var S: Pintset);

EFFECTSУничтожает объектS(с освобождением всей занимаемой памяти) и разрывает связьS(после вызоваdestroyS=nil).

END intset

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

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

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

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

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

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

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

S1-----+->¦ MaxSize ¦ - Max размер выделенной памяти ¦

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

¦ ¦ Size ¦ - Размер заполненной части массива ¦

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

¦ ¦ PBody ¦ ¦

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

¦ ¦ ¦

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

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

¦ ¦ ¦ ------------¬ (массив элементов,)¦ ¦

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

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

¦ ¦ ¦ ...¦-Свободно--¦ ¦ ¦

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

¦ ¦ ¦ Size ¦///////////¦ ¦ ¦

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

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

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

¦ ¦ ¦ 3 ¦/Заполнено/¦ ¦ ¦

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

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

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

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

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

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

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

Принимаем решение: Набор целых чисел храним в виде массива целых чисел с повторением, упорядоченных по убыванию, начиная от первого элемента и до элемента с индексом Size (количество заполненных элементов массива).

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

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

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

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

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

A(r)= { <уникальные элементы массива> }

Для представления пустого набора принимаем Size = 0.

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

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

0 < MaxSize <= 65536 div 2 &

0 <= Size <= MaxSize &

Для всех i, j, таких, что 1 <= i < j <= Size

PBody^[i] >= PBody[j]

Задача 9

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

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

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

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

equal, similar, copy, 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 - один и тот же объект intset.

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

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

copy = function (S: PIntset): PIntset;

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

destroy = procedure (var S: Pintset);

EFFECTSУничтожает объектS(с освобождением всей занимаемой памяти) и разрывает связьS(после вызоваdestroyS=nil).

END intset

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

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

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

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

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

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

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

S1-----+->¦ MaxSize ¦ - Max размер выделенной памяти ¦

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

¦ ¦ Size ¦ - Размер заполненной части массива ¦

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

¦ ¦ PBody ¦ ¦

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

¦ ¦ ¦

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

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

¦ ¦ ¦ ------------¬ (массив элементов,)¦ ¦

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

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

¦ ¦ ¦ ...¦-Свободно--¦ ¦ ¦

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

¦ ¦ ¦ Size ¦///////////¦ ¦ ¦

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

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

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

¦ ¦ ¦ 3 ¦/Заполнено/¦ ¦ ¦

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

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

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

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

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

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

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

Принимаем решение: Набор целых чисел храним в виде массива целых чисел без повторения, упорядоченные по убыванию, начиная от первого элемента и до элемента с индексом Size (количество заполненных элементов массива).

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

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

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

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

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

A(r) = { PBody^[1], PBody^[2], ..., PBody^[Size] }

Для представления пустого набора принимаем Size = 0.

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

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

0 < MaxSize <= 65536 div 2 &

0 <= Size <= MaxSize &

Для всех i, j, таких, что 1 <= i < j <= Size

PBody^[i] > PBody[j]

Задача 10

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

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

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

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

equal, similar, copy, 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 - один и тот же объект intset.

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

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

copy = function (S: PIntset): PIntset;

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

destroy = procedure (var S: Pintset);

EFFECTSУничтожает объектS(с освобождением всей занимаемой памяти) и разрывает связьS(после вызоваdestroyS=nil).

END intset

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

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

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

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

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

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

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

S1-----+->¦ MaxSize ¦ - Max размер выделенной памяти ¦

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

¦ ¦ Size ¦ - Размер заполненной части массива ¦

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

¦ ¦ PBody ¦ ¦

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

¦ ¦ ¦

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

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

¦ ¦ ¦ ------------¬ (массив элементов,)¦ ¦

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

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

¦ ¦ ¦ ...¦-Свободно--¦ ¦ ¦

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

¦ ¦ ¦ Size ¦///////////¦ ¦ ¦

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

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

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

¦ ¦ ¦ 3 ¦/Заполнено/¦ ¦ ¦

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

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

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

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

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

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

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

Принимаем решение: Набор целых чисел храним в виде массива целых чисел без повторения, упорядоченные по убыванию, начиная от первого элемента и до элемента с индексом Size (количество заполненных элементов массива).

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

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

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

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

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

A(r) = { PBody^[1], PBody^[2], ..., PBody^[Size] }

Для представления пустого набора принимаем Size = 0.

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

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

0 < MaxSize <= 65536 div 2 &

0 <= Size <= MaxSize &

Для всех i, j, таких, что 1 <= i < j <= Size

PBody^[i] > PBody[j]

Задача 11

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

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

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

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

equal, similar, copy, 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 - один и тот же объект intset.

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

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

copy = function (S: PIntset): PIntset;

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

destroy = procedure (var S: Pintset);

EFFECTSУничтожает объектS(с освобождением всей занимаемой памяти) и разрывает связьS(после вызоваdestroyS=nil).

END intset

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

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

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

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

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

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

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

S1-----+->¦ MaxSize ¦ - Max размер выделенной памяти ¦

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

¦ ¦ Size ¦ - Размер заполненной части массива ¦

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

¦ ¦ PBody ¦ ¦

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

¦ ¦ ¦

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

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

¦ ¦ ¦ ------------¬ (массив элементов,)¦ ¦

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

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

¦ ¦ ¦ ...¦-Свободно--¦ ¦ ¦

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

¦ ¦ ¦ Size ¦///////////¦ ¦ ¦

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

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

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

¦ ¦ ¦ 3 ¦/Заполнено/¦ ¦ ¦

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

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

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

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

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

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

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

Принимаем решение: Набор целых чисел храним в виде массива целых чисел с повторением, начиная от первого элемента и до элемента с индексом Size (количество заполненных элементов массива).

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

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

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

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

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

A(r)= { <уникальные элементы массива> }

Для представления пустого набора принимаем Size = 0.

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

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

0 < MaxSize <= 65536 div 2 &

0 <= Size <= MaxSize

Задача 12

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

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

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

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

equal, similar, copy, 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 - один и тот же объект intset.

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

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

copy = function (S: PIntset): PIntset;

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

destroy = procedure (var S: Pintset);

EFFECTSУничтожает объектS(с освобождением всей занимаемой памяти) и разрывает связьS(после вызоваdestroyS=nil).

END intset

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

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

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

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

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

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

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

S1-----+->¦ MaxSize ¦ - Max размер выделенной памяти ¦

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

¦ ¦ Size ¦ - Размер заполненной части массива ¦

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

¦ ¦ PBody ¦ ¦

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

¦ ¦ ¦

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

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

¦ ¦ ¦ ------------¬ (массив элементов,)¦ ¦

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

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

¦ ¦ ¦ ...¦-Свободно--¦ ¦ ¦

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

¦ ¦ ¦ Size ¦///////////¦ ¦ ¦

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

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

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

¦ ¦ ¦ 3 ¦/Заполнено/¦ ¦ ¦

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

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

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

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

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

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

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

Принимаем решение: Набор целых чисел храним в виде массива целых чисел с повторением, начиная от первого элемента и до элемента с индексом Size (количество заполненных элементов массива).

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

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

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

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

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

A(r)= { <уникальные элементы массива> }

Для представления пустого набора принимаем Size = 0.

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

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

0 < MaxSize <= 65536 div 2 &

0 <= Size <= MaxSize

Задача 13

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

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

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

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

equal, similar, copy, 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 - один и тот же объект intset.

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

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

copy = function (S: PIntset): PIntset;

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

destroy = procedure (var S: Pintset);

EFFECTSУничтожает объектS(с освобождением всей занимаемой памяти) и разрывает связьS(после вызоваdestroyS=nil).

END intset

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

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

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

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

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

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

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

S1-----+->¦ MaxSize ¦ - Max размер выделенной памяти ¦

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

¦ ¦ Size ¦ - Размер заполненной части массива ¦

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

¦ ¦ PBody ¦ ¦

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

¦ ¦ ¦

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

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

¦ ¦ ¦ ------------¬ (массив элементов,)¦ ¦

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

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

¦ ¦ ¦ ...¦-Свободно--¦ ¦ ¦

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

¦ ¦ ¦ Size ¦///////////¦ ¦ ¦

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

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

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

¦ ¦ ¦ 3 ¦/Заполнено/¦ ¦ ¦

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

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

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

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

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

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

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

Принимаем решение: Набор целых чисел храним в виде массива целых чисел без повторения, начиная от первого элемента и до элемента с ин-

дексом Size (количество заполненных элементов массива).

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

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

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

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

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

{ PBody^[1], PBody^[2], ..., PBody^[Size] }

Для представления пустого набора принимаем Size = 0.

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

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

0 < MaxSize <= 65536 div 2 &

0 <= Size <= MaxSize &

Для всех i, j, таких, что 1 <= i < j <= Size

PBody^[i] <> PBody[j]

Задача 14

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

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

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

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

equal, similar, copy, 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 - один и тот же объект intset.

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

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

copy = function (S: PIntset): PIntset;

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

destroy = procedure (var S: Pintset);

EFFECTSУничтожает объектS(с освобождением всей занимаемой памяти) и разрывает связьS(после вызоваdestroyS=nil).

END intset

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

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

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

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

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

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

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

S1-----+->¦ MaxSize ¦ - Max размер выделенной памяти ¦

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

¦ ¦ Size ¦ - Размер заполненной части массива ¦

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

¦ ¦ PBody ¦ ¦

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

¦ ¦ ¦

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

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

¦ ¦ ¦ ------------¬ (массив элементов,)¦ ¦

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

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

¦ ¦ ¦ ...¦-Свободно--¦ ¦ ¦

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

¦ ¦ ¦ Size ¦///////////¦ ¦ ¦

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

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

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

¦ ¦ ¦ 3 ¦/Заполнено/¦ ¦ ¦

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

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

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

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

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

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

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

Принимаем решение: Набор целых чисел храним в виде массива целых чисел без повторения, начиная от первого элемента и до элемента с ин-

дексом Size (количество заполненных элементов массива).

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

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

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

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

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

{ PBody^[1], PBody^[2], ..., PBody^[Size] }

Для представления пустого набора принимаем Size = 0.

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

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

0 < MaxSize <= 65536 div 2 &

0 <= Size <= MaxSize &

Для всех i, j, таких, что 1 <= i < j <= Size

PBody^[i] <> PBody[j]

Задача 15

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

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

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

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 }

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

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

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

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

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

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

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

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

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

Задача 16

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

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

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

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 }

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

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

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

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

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

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

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

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

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

Задача 17

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

Stack_T = Data type is Create, Push, Pop, Top, IsEmpty, IsFull, Done

ОПИСАНИЕ: Стеки Stack_T - это ИЗМЕНЯЕМЫЕ ОГРАНИЧЕННЫЕ СТЕКИ эле-

ментов типа T. Операции Push и Pop добавляют и удаляют элементы из стека

ОПИСАНИЕ ПОВЕДЕНИЯ создаваемого типа

procedure Create(var S: Stack_T; SizeStack: word);

Required: 0 < SizeStack <= 65536 div SizeOf(T) и

в куче есть свободный участок размером

SizeStack * SizeOf(T)

Effects: Создает пустой Stack_T размером SizeStack

procedure Push(var S: Stack_T; El: T);

Required: not IsFull(S)

Modifies: S

Effects: Добавляет элемент в вершину стека S

procedure Pop(var S: Stack_T);

Required: not IsEmpty(S)

Modifies: S

Effects: Выталкивает элемент из вершины стека S

function Top(S: Stack_T): T;

Required: not IsEmpty(S)

Effects: Возвращает элемент, находящийся в вершине

стека S

function IsEmpty(S: Stack_T): boolean;

Effects: Возвращает True если стек S пустой и

False - в противном случае

function IsFull(S: Stack_T): boolean;

Effects: Возвращает True если стек S полный и

False - в противном случае

procedure Done(var S: Stack_T);

Effects: Освобождает память в куче, занимаемую сте-

ком и делает невозможным дальнейшее исполь-

зование данного стека

End Stack_T

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

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

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

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

S1-----+->¦ Size ¦ ¦

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

¦ ¦ TopInd ¦ ¦

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

¦ ¦ PBody ¦ ¦

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

¦ ¦ ¦

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

¦ ¦ ¦ Тело стека ¦ ¦

¦ ¦ ¦ ------------¬ (массив элементов,)¦ ¦

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

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

¦ ¦ ¦ ...¦-Свободно--¦ ¦ ¦

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

¦ ¦ ¦ TopInd ¦///////////¦ Вершина ¦ ¦

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

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

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

¦ ¦ ¦ 3 ¦/Заполнено/¦ ¦ ¦

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

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

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

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

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

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

¦ ¦ //// Дно стека //// ¦ ¦

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

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

Принимаем решение: Дно стека размещаем в области младших индексов, соответственно Вершина стека будет расти в сторону старших индексов.

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

ФУНКЦИЯ АБСТРАКЦИИ есть: Типичный непустой стек - это последовательность элементов e1, e2, ... en, где e1 - элемент на дне стека, а en - элемент в вершине.

e1 размещаем в PBody^[1]

e2 -//- в PBody^[2]

...

en -//- в PBody^[TopInd]

Для пустого стека примем TopInd = 0.

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

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

0 < Size <= 65536 div SizeOf(T) &

0 <= TopInd <= Size &

<Элемент в вершине стека> = PBody^[TopInd]

===================================================================

Задача 18

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

Stack_T = Data type is Create, Push, Pop, Top, IsEmpty, IsFull, Done

ОПИСАНИЕ: Стеки Stack_T - это ИЗМЕНЯЕМЫЕ ОГРАНИЧЕННЫЕ СТЕКИ эле-

ментов типа T. Операции Push и Pop добавляют и удаляют элементы из стека

ОПИСАНИЕ ПОВЕДЕНИЯ создаваемого типа

procedure Create(var S: Stack_T; SizeStack: word);

Required: 0 < SizeStack <= 65536 div SizeOf(T) и

в куче есть свободный участок размером

SizeStack * SizeOf(T)

Effects: Создает пустой Stack_T размером SizeStack

procedure Push(var S: Stack_T; El: T);

Required: not IsFull(S)

Modifies: S

Effects: Добавляет элемент в вершину стека S

procedure Pop(var S: Stack_T);

Required: not IsEmpty(S)

Modifies: S

Effects: Выталкивает элемент из вершины стека S

function Top(S: Stack_T): T;

Required: not IsEmpty(S)

Effects: Возвращает элемент, находящийся в вершине

стека S

function IsEmpty(S: Stack_T): boolean;

Effects: Возвращает True если стек S пустой и

False - в противном случае

function IsFull(S: Stack_T): boolean;

Effects: Возвращает True если стек S полный и

False - в противном случае

procedure Done(var S: Stack_T);

Effects: Освобождает память в куче, занимаемую сте-

ком и делает невозможным дальнейшее исполь-

зование данного стека

End Stack_T

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

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

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

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

S1-----+->¦ Size ¦ ¦

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

¦ ¦ TopInd ¦ ¦

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

¦ ¦ PBody ¦ ¦

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

¦ ¦ ¦

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

¦ ¦ ¦ Тело стека ¦ ¦

¦ ¦ ¦ ------------¬ (массив элементов,)¦ ¦

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

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

¦ ¦ ¦ ...¦-Свободно--¦ ¦ ¦

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

¦ ¦ ¦ TopInd ¦///////////¦ Вершина ¦ ¦

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

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

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

¦ ¦ ¦ 3 ¦/Заполнено/¦ ¦ ¦

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

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

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

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

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

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

¦ ¦ //// Дно стека //// ¦ ¦

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

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

Принимаем решение: Дно стека размещаем в области младших индексов, соответственно Вершина стека будет расти в сторону старших индексов.

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

ФУНКЦИЯ АБСТРАКЦИИ есть: Типичный непустой стек - это последовательность элементов e1, e2, ... en, где e1 - элемент на дне стека, а en - элемент в вершине.

e1 размещаем в PBody^[1]

e2 -//- в PBody^[2]

...

en -//- в PBody^[TopInd]

Для пустого стека примем TopInd = 0.

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

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

0 < Size <= 65536 div SizeOf(T) &

0 <= TopInd <= Size &

<Элемент в вершине стека> = PBody^[TopInd]

===================================================================

Задача 19

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

Stack_T = Data type is Create, Push, Pop, Top, IsEmpty, IsFull, Done

ОПИСАНИЕ: Стеки Stack_T - это ИЗМЕНЯЕМЫЕ ОГРАНИЧЕННЫЕ СТЕКИ эле-

ментов типа T. Операции Push и Pop добавляют и удаляют элементы из стека

ОПИСАНИЕ ПОВЕДЕНИЯ создаваемого типа

procedure Create(var S: Stack_T; SizeStack: word);

Required: 0 < SizeStack <= 65536 div SizeOf(T) и

в куче есть свободный участок размером

SizeStack * SizeOf(T)

Effects: Создает пустой Stack_T размером SizeStack

procedure Push(var S: Stack_T; El: T);

Required: not IsFull(S)

Modifies: S

Effects: Добавляет элемент в вершину стека S

procedure Pop(var S: Stack_T);

Required: not IsEmpty(S)

Modifies: S

Effects: Выталкивает элемент из вершины стека S

function Top(S: Stack_T): T;

Required: not IsEmpty(S)

Effects: Возвращает элемент, находящийся в вершине

стека S

function IsEmpty(S: Stack_T): boolean;

Effects: Возвращает True если стек S пустой и

False - в противном случае

function IsFull(S: Stack_T): boolean;

Effects: Возвращает True если стек S полный и

False - в противном случае

procedure Done(var S: Stack_T);

Effects: Освобождает память в куче, занимаемую сте-

ком и делает невозможным дальнейшее исполь-

зование данного стека

End Stack_T

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

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

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

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

S1-----+->¦ Size ¦ ¦

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

¦ ¦ TopInd ¦ ¦

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

¦ ¦ PBody ¦ ¦

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

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

¦ ¦ ¦ Тело стека ¦ ¦

¦ ¦ ¦ ------------¬ (массив элементов,)¦ ¦

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

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

¦ ¦ ¦ ...¦-Свободно--¦ ¦ ¦

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

¦ ¦ ¦ TopInd ¦///////////¦ Вершина ¦ ¦

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

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

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

¦ ¦ ¦ Size-2 ¦/Заполнено/¦ ¦ ¦

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

¦ ¦ ¦ Size-1 ¦///////////¦ ¦ ¦

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

¦ ¦ L-----> Size ¦///////////¦ ¦ ¦

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

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

¦ ¦ //// Дно стека //// ¦ ¦

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

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

Принимаем решение: Дно стека размещаем в области старших индексов, соответственно Вершина стека будет расти в сторону младших индексов.

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

ФУНКЦИЯ АБСТРАКЦИИ есть: Типичный непустой стек - это последовательность элементов e1, e2, ... en, где e1 - элемент на дне стека, а en - элемент в вершине.

e1 размещаем в PBody^[Size]

e2 -//- в PBody^[Size-1]

...

en -//- в PBody^[TopInd]

Для пустого стека примем TopInd = 0.

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

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

0 < Size <= 65536 div SizeOf(T) &

0 <= TopInd <= Size &

<Элемент в вершине стека> = PBody^[TopInd]

Задача 20

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

Stack_T = Data type is Create, Push, Pop, Top, IsEmpty, IsFull, Done

ОПИСАНИЕ: Стеки Stack_T - это ИЗМЕНЯЕМЫЕ ОГРАНИЧЕННЫЕ СТЕКИ эле-

ментов типа T. Операции Push и Pop добавляют и удаляют элементы из стека

ОПИСАНИЕ ПОВЕДЕНИЯ создаваемого типа

procedure Create(var S: Stack_T; SizeStack: word);

Required: 0 < SizeStack <= 65536 div SizeOf(T) и

в куче есть свободный участок размером

SizeStack * SizeOf(T)

Effects: Создает пустой Stack_T размером SizeStack

procedure Push(var S: Stack_T; El: T);

Required: not IsFull(S)

Modifies: S

Effects: Добавляет элемент в вершину стека S

procedure Pop(var S: Stack_T);

Required: not IsEmpty(S)

Modifies: S

Effects: Выталкивает элемент из вершины стека S

function Top(S: Stack_T): T;

Required: not IsEmpty(S)

Effects: Возвращает элемент, находящийся в вершине

стека S

function IsEmpty(S: Stack_T): boolean;

Effects: Возвращает True если стек S пустой и

False - в противном случае

function IsFull(S: Stack_T): boolean;

Effects: Возвращает True если стек S полный и

False - в противном случае

procedure Done(var S: Stack_T);

Effects: Освобождает память в куче, занимаемую сте-

ком и делает невозможным дальнейшее исполь-

зование данного стека

End Stack_T

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

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

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

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

S1-----+->¦ Size ¦ ¦

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

¦ ¦ TopInd ¦ ¦

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

¦ ¦ PBody ¦ ¦

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

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

¦ ¦ ¦ Тело стека ¦ ¦

¦ ¦ ¦ ------------¬ (массив элементов,)¦ ¦

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

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

¦ ¦ ¦ ...¦-Свободно--¦ ¦ ¦

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

¦ ¦ ¦ TopInd ¦///////////¦ Вершина ¦ ¦

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

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

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

¦ ¦ ¦ Size-2 ¦/Заполнено/¦ ¦ ¦

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

¦ ¦ ¦ Size-1 ¦///////////¦ ¦ ¦

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

¦ ¦ L-----> Size ¦///////////¦ ¦ ¦

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

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

¦ ¦ //// Дно стека //// ¦ ¦

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

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

Принимаем решение: Дно стека размещаем в области старших индексов, соответственно Вершина стека будет расти в сторону младших индексов.

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

ФУНКЦИЯ АБСТРАКЦИИ есть: Типичный непустой стек - это последовательность элементов e1, e2, ... en, где e1 - элемент на дне стека, а en - элемент в вершине.

e1 размещаем в PBody^[Size]

e2 -//- в PBody^[Size-1]

...

en -//- в PBody^[TopInd]

Для пустого стека примем TopInd = 0.

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

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

0 < Size <= 65536 div SizeOf(T) &

0 <= TopInd <= Size &

<Элемент в вершине стека> = PBody^[TopInd]

Викладач-екзаменатор: ст. викл. каф. МЗ ЕОМ Єфімов В.М.

Викладач(і), який(і) проводить(ять) практичні (семінарські) та лабораторні заняття: ст. викл. каф. МЗ ЕОМ Єфімов В.М., ас. Архангельська Ю.М.

Затверджено на засіданні кафедри, протокол від « 27 » травня 2010 р. № 13

Завідувач кафедри ___________________________________Байбуз О.Г.

7

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