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