Множества на языке Паскаль
Под множеством в Pascal подразумевается совокупность взаимосвязанных элементов одинакового типа. Его элементы должны быть порядкового типа данных и описываться интервалом или перечислением. Служебные слова Set O дают сигнал об объявлении множественного типа.
Type <имя типа> = Set Of <базовый тип>;
О перечисляемых типах
Три скалярных перечисляемых типа boolean, char и integer могут задаваться следующим образом:
type
Boolean= (false, true);
char= #0..#255;
integer= -32768..32767;
(#xxx означает, что должен быть взят символ, код которого в таблице ASCII = xxx).
Они представляют собой базовые типы, которые не нужно задавать каждый раз. Они уже определены в системе таким образом. Помимо них есть еще несколько интервальных типов:
shortint>= -128..127;
longint= -2147483648..247483647;
byte= 0..255;
word= 0..65535;
Переменные с этими типами, могут принимать значения, которые лежат в границах соответствующих интервалов. С перечисляемыми типами используют следующие функции (они хранятся в библиотеке системных функций и у программиста есть к ним доступ):
- ord(N) – возвращает номер элемента N в множестве;
- succ(N) – возвращает следующее значение для N;
- pred(N) – возвращает предыдущее значение для N.
Пользователь может описать свой перечисляемый тип данных. Это описание в общем виде выглядит следующим образом:
type
<имя_типа>=(<идентификатор1>,<идентификатор2>, ..,<идентификаторN>);
В скобках перечислены все возможные значения, которые только может принимать переменная этого типа. Учтите, что название значений нельзя задавать по-русски. К примеру, вы можете описать тип данных color и перечислить 7 основных цветов:
type
color=(red, orange, yellow, green, blue, magenta);
Значения получают номера в порядке их перечисления (начало с 0). Поэтому для этого типа будет следующее отношения элементов:
red< orange< yellow< green< blue< magenta;
ord(red)=0;
succ(blue)= magenta;
pred(green)=yellow;
Множественный тип данных Паскаля
Что касается множественного типа данных Pascal, то он напоминает перечислимый. Кроме того множественный представляет собой набор элементов не организованных в порядке следования.
Множественный тип данных в математике представляет собой любое сочетание элементов произвольной природы. Операции, производящиеся над множеством, по существу заключаются во включении и исключении элементов из множества.
Под множественным типом в Pascal понимается конечная совокупность элементов, которые принадлежат некоторому базовому типу данных. В роли базовых типов могут применяться:
- символьный;
- перечислимые;
- байтовый;
- диапазонные основе перечисленных выше.
Эти ограничения связаны с формой представления множественного типа данных в Pascal и могут сводится к тому, чтобы функция ord() для используемого базового типа лежала в диапазоне от 0 до 255.
Когда базовый тип задан, совокупность значений множественного типа данных будет определен автоматически. Сюда входят все возможные множества, выступающие произвольными комбинациями значений базового типа. Эти множества представляют собой отдельные значения определенного множественного типа данных.
Описание множественного типа данных Pascal
Type <имя_типа>= set of <базовый_тип>
Пример множественного типа данных Паскаля
Type symbol= set of char; {описан множественный тип symol из букв}
Var letter, digits, sign: symbol; {описаны три переменные множественного типа}
Чтобы задать значение переменной множественного типа, применяют конструктор множества – элементы множества перечисляются в квадратных скобках через запятую. К примеру:
sign:= [‘+’, ‘-‘];
Конструктор множества может включать диапазон значений базового типа. В таком случае во множества включены все составляющие диапазона. К примеру:
digits:= [‘0’ .. ‘9’];
letter:= [‘a’ .. ‘z’];
При этом обе формы конструирования множеств сочетаются. Пример:
letter:= [‘a’ .. ‘z’, ‘A’ .. ‘Z’];
Конструктор вида [] обозначает пустые множества. Также в программе можно применять множественный тип как константы. В таком случае их определяют так:
Const YesOrNo= [‘Y’, ‘y’, ‘N’, ‘n’];
Пример определения множественного типа как тимизированную константу:
Const digits: set of char= [‘0’ .. ‘9’];
При этом допускается использование знака “+”, обозначающего слияние множеств. Пример:
Const Yes= [‘Y’, ‘y’]; No= [‘N’, ‘n’];
YesOrNo= Yes+ No;
Операции над множественными типами Pascal
Действия, которые можно выполнять с типами Pascal: объединение, пересечение и исключение.
Объединение множественных типов состоит из элементов, которые относятся хотя бы к одному множеству. Причем каждый элемент только один раз входит в объединение. Операция объединения обозначается знаком «+». Пример:
Type symbol= set of char;
Var small, capital, latin: symbol;
………………
small:= [‘a’ .. ‘z’];
capital:= [‘A’ .. ‘Z’];
latin:= small + capital; {образованы множества латинских букв путем объединения множеств small и capital}
Пример объединения отдельных элементов и множественных типов:
small:= [‘c’ .. ‘z’];
small:= small + [‘a’] +[‘b’];
Исключение – это разность множественных типов, где из уменьшаемого исключаются элементы, относящиеся к вычитаемом. Если в вычитаемое входят элементы, которых нет в уменьшаемом, то они не смогут повлиять на результат. Исключение обозначается знаком «-». Пример:
letter:= [‘a’ .. ‘z’]; {множества букв латинского алфавита}
glasn:= [‘a’, ‘e’, ‘o’, ‘u’, ‘i’, ‘y’]; {множества гласных букв}
soglasn:= letter-glasn; {образовано множества согласных букв путем исключения из множества всех букв множества гласных букв}
Пересечение «*» — множества, содержащие элементы, которые одновременно входят в оба множества. Пример:
Type chisla= set of byte;
Var z,x,y: chisla;
………..
x:= [0..150];
y:= [100..255];
z:= x*y {получено множества чисел из диапазона 100..150 в результате пересечения двух множеств}
Операции отношения множественных типов Паскаля
Вместе с рассмотренными операциями, над значениями множественного типа определены и определенные операции отношения. В общем случае операндами операций над множественными значениями являются множественные выражения. Среди операций отношения над значениями множественного типа особое место занимает операция проверки вхождения элемента во множества, которая обозначается символов in.
Первый операнд в операции in должен принадлежат базовому типу (в отличие от других операций отношения, в которых значения двух операндов относятся к одному множественному типу значений). Второй операнд должен принадлежать множественному типу значений, который выстроен на основе данного базового типа. Результат операции отношения – логическое значение false или true.
‘a’ in glasn значение операции true;
‘o’ in soglasn значение операции false;
Операция сравнения на равенством множественных типов Pascal. Множества считаются эквивалентными (равными), если все элементы одного множества есть в другом и наоборот. Для операции сравнения на неравенство или равенство применяются символы ‘=’ и ‘<>’.
A:= [2,1,3];
D:= [1,3,2];
В таком случае операция А=D имеет значение true, а операция A<>D — false. Как проверить включения? Одно множество считается включенным в другое, если все его элементы находятся во втором множестве. При этом обратное утверждения может быть и несправедливым. Проверка включения обозначается следующим образом: ‘<=’ и ‘>=’.
letter >= glasn;
soglan <= letter;
Стоит отметить, что использование операций < и > над операндами множественного типа является недопустимым.