
- •Введение
- •Структурные типы данных
- •Множества
- •Массивы
- •Ввод-вывод массивов
- •Вставка и удаление элемента в массив
- •Поиск
- •Последовательный поиск.
- •Бинарный поиск
- •Интерполирующий поиск
- •Вставка элемента в отсортированный контейнер
- •Поиск максимального и минимального элементов массива
- •Сортировка
- •Пузырьковая сортировка
- •Сортировка перемешиванием
- •Сортировка методом прочесывания
- •Сортировка методом выбора
- •Сортировка вставками
- •Сортировка Шелла
- •Строки
- •Задания к лабораторной работе
- •Варианты заданий
- •Вопросы к лабораторной работе

Лабораторная работа № 5 Структурные типы данных. Множества. Массивы.
Введение
В лабораторной работе рассмотрен тип-множество, основные операторы для работы с этим типом. Рассмотрено описание массивов в языке Object Pascal. Рассмотрены алгоритмы ввода-вывода одно- и многомерных массивов, а также алгоритмы вставки и удаления элементов в массив. Рассмотрены некоторые алгоритмы сортировки и поиска данных в массивах.
Структурные типы данных
Структурные типы данных
Массивы Множества Записи |
Файлы |
Рисунок 1 – Структурные типы данных
В Object Pascal определено четыре структурных типа данных: массивы, записи, множества и файлы (Рисунок 1). Все эти типы характеризуются множественностью образующих их элементов. Каждая переменная структурного типа содержит в себе несколько компонентов, каждый компонент, в свою очередь, может также принадлежать к структурному типу. В Object Pascal допустима произвольная глубина вложенности типов, однако размер переменной не может превышать 2 Гб1.
Множества
Множества – это наборы однотипных логически связанных друг с другом объектов. Количество элементов, входящих в множество, может изменяться от 0 до 256. Два множества называются эквивалентными если все их элементы одинаковы, причем порядок следования элементов в множестве безразличен. Если все элементы одного множества входят также и в другое, то говорят о включении первого множества во второе. Пустое множество включается в любое другое. Синтаксис описания типа множества имеет вид
<имя типа> = set of <базовый тип>;
Здесь имя типа – правильный идентификатор;
set, of – зарезервированные слова (множество, из);
базовый тип – тип элементов множества в качестве которого может использоваться любой порядковый тип число значений которого не превосходит 256. Например:
type TChars |
= |
set |
of |
char; |
TDigitsChar |
= |
set |
of |
‘0’..’9’; |
1Это ограничение связано с ограничениями Windows. Для Windows 3.x это ограничение 64 Кб. Для Windows 9x, Windows NT/2000/XP это ограничение 2Гб. Для 64-х разрядных операционных систем ограничение составляет 264 байт.

TDigits = set of 0..9;
При объявлении типа TChars в качестве базового типа используется тип char т. к. число различных значений его не превосходит 256. Для остальных двух типов используется тип диапазон. Обратите внимание, что следующее определение типа ошибочно, т.к. тип Integer имеет более 256 различных значений.
type TInt = set of Integer;
Множество можно описать непосредственно при объявлении переменной, например
var s1: set of 0..9;
Заполнить множество элементами можно с помощью конструктора множества, конструктор множества имеет следующий синтаксис
<имя множества>:=[<список элементов множества>];
Например
var s1: TChars; s2: TDigits;
begin
…
s1:=[‘a’..’d’, ‘e’, ‘h’]; s2:=[1, 2, 5];
…
end.
Описание операций определенных над множествами приведено в таблице 1. Таблица 1 – Операции над множествами
Операция |
Описание |
|
|
|
|
* |
Пересечение множеств |
+ |
Объединение множеств |
- |
Разность множеств |
= |
Проверка эквивалентности, возвращает true если множества эквивалентны |
<> |
Проверка не эквивалентности |
<= |
Проверка вхождения, возвращает true, если первое множество включено во |
|
второе |
>= |
Проверка вхождения, возвращает true, если второе множество включено в |
|
первое |
in |
Проверка принадлежности, возвращает true, если элемент принадлежит |
|
множеству. |
Демонстрация некоторых операций со множествами приведена в листинге 1.
Листинг 1
{$IFDEF FPC}
{$MODE DELPHI} {$ENDIF}
{$APPTYPE CONSOLE} program Sets;
type TWeekDays=(mo, tu, we, th, fr, sa, su); TDays=set of TWeekDays;
var Days :TDays;
I :TWeekDays; begin

Days:=[mo..fr];
//вывод списка рабочих дней writeln('Rabochie dni:'); for i:=mo to su do
if i in Days then case i of
mo: writeln('monday'); tu: writeln('tuesday'); we: writeln('wednesday'); th: writeln('thursday'); fr: writeln('friday'); sa: writeln('saturday'); su: writeln('sunday');
end;{case}
readln;
end.
Глобальные переменные типа множество можно инициализировать, например
var map: set of char = ['a', 'b', 'c'];