
- •Міністерство освіти і науки україни Дніпропетровський національний університет
- •Кафедра математичного забезпечення еом
- •Робоча навчальна програма
- •Дніпропетровськ − 2010
- •Мета та задачі дисципліни
- •Зміст дисципліни
- •2.5. Тематичний план дисципліни:
- •2.6. Орієнтований перелік питань, які визначаються як питання Поточного та семестрового контролю.
- •Навчально-методичні матеріали з дисципліни
- •1. Навчальна та довідкова література:
- •3.2. Нормативна та інструктивна література
- •Елементи контролю за 1 модулем Термін: 25-й тиждень (27.10.08 – 31.10.08)
- •Елементи контролю за 2 модулем Термін: 29-й тиждень (24.11.08 – 28.11.08)
- •Елементи контролю за 3 модулем Термін: 33-й тиждень (22.12.08 – 26.12.08)
- •Підсумковий контроль
Елементи контролю за 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 |
Перелік питань щодо підсумкового контролю:
ВСТУП У СТРУКТУРИ ДАНИХ
Інформація і дані. Поняття про інформацію.
Інформація і дані. Поняття про дані.
Інформація і дані. Поняття про структуриданих.
Структури даних та їх класифікація (послідовні структури, масиви).
Структури даних та їх класифікація (списки, таблиці, дерева, мережі).
Поняття про тип даних в мовах програмування (МП).
Класифікація засобів визначення даних в МП.
ТЕХНОЛОГІЯ СТВОРЕННЯ СТРУКТУР ДАНИХ
Поняття про абстрактному типі даних (А. Т. Д.). Кластер як мовнийзасіб роботи з А.Т.Д в мові CLU.
Абстракція і декомпозиція. Їх взаємодіяпри проектуванні програм.
Абстракція. Види та методи абстракції в програмуванні.
Специфікації. Побудова специфікацій: критерії, властивості, характеристики специфікацій, що впливають на їх якість.
Процедурна абстракція. Специфікація процедурних абстракцій. Взаємини між різними частинами специфікації (Заголовок, частиниRequires, Modifies, Signals і Effects).
Процедурна абстракція. Специфікація і реалізація процедурних абстракцій.
Абстракція даних. Специфікація абстракцій даних.
Реалізація абстракцій даних. Функція абстракції. Операції Up і Down.
Реалізація абстракцій даних. Функція інваріант подання. Збереження інваріантуподання.
Аналіз абстракцій даних, що створюються. Класи операцій. Повнота типу.
Аналіз абстракцій даних, що створюються.. Операції Equal, Similar і Copy.
Поняття про винятковіситуації. Механізм виняткових ситуацій в мові CLU.
Використання виняткових ситуацій при проектуванні програм.
Абстракция через ітерацію та її специфікація.
Реалізація ітераторівв мові CLU.
Особливості реалізації методу програмування з використанням абстракцій в системі 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
Завідувач кафедри ___________________________________Байбуз О.Г.