В прилагаемом файле можно найти процедуры и функции, которые расширяют стандартные возможности Pascal:
Печать множества, определение длины множества (количества элементов в множестве), преобразование множества в массив и обратно.
Оказывается, элементами множества могут быть либо символы (тип char), либо числа, умещающие в тип byte (т.е. от 0 по 255). Элементами множеcтва в Pascal не могут быть типы String, shortint, integer, int64, real.
Объявление множеств производится директивой set of.
var m: set of integer; digits: set of 0..9; digits_str: set of '0'..'9'; symbols: set of 'a'..'z', '0'..'9', '.', '-', '_';
Примеры команд используемых со множествами:
if s[i] in ['0'.. '9'] then count:= count + 1;
if s[i] in ['a'..'z', '0'..'9', '.', '-', '_'] then { символ правильный }
Задача. Вывести все различные цифры, присутствующие в символьной строке s. (В пустое множество добавляется элемент)
var s: string; i: integer; c: char; digits: set of '0'..'9'; begin readln(s); digits:=[]; { пустое множество } for i:=1 to Length(s) do if s[i] in ['0'..'9'] then digits:= digits + [s[i]]; { добавление в множество } for c:='0' to '9' do if c in digits then writeln(c) end.
Таблица "Методы множеств"
Метод | Что делает |
---|---|
union = my_set1 + my_set2
| объединение множеств |
intersection = my_set1 * my_set2
| пересечение множеств |
diff = my_set1 - my_set2
| разность множеств (дополнение) |
include(имя_множества, элемент) |
include(chs1, 'g'); включение элемента в множество (аналогично chs1 + ['g']) |
exclude(имя_множества, элемент) |
exclude(chs2, 'a'); включение элемента в множество (аналогично chs2 - ['a']) |
= | сравнение множеств (тождество) |
<> | неравенство множеств (не тождественно) |
>= | означает «является надмножеством» (содержит другое множество) |
<= | означает «является подмножеством» (содержится в другом множестве) |
in | принадлежит ли элемент множеству |
include(chs1, 'g'); { аналогично chs1 + ['g'] } exclude(chs2, 'a'); { аналогично chs2 - ['a'] }
var ms: set of char; ch: char; begin . . . ch := ' '; ms := []; for i := 1 to n do ms := ms + [element[i]]; for i := 0 to 9 do begin Str(i, s); ch := s[1]; if ch in ms then write(ch, ', '); end; . . . end.
Реализованные функции по работе с множествами (в библиотеке во вложении):
type mn_char = set of char; mn_byte = set of byte; charArray = array of char; byteArray = array of byte;
Функция | Описание |
function array_to_mn(_carr: charArray): mn_char; | Преобразовать массив символов в множество символов |
function array_to_mn(_barr: byteArray): mn_byte; | Преобразовать массив байт в множество байт |
function string_to_mn(_str: String): mn_char; | Преобразовать строчку в множество символов |
function mn_to_array(_mn: mn_char): charArray; | Преобразовать множество символов в массив символов |
function mn_to_array(_mn: mn_byte): byteArray; | Преобразовать множество байт в массив байт |
procedure mn_print(_mn: mn_char; _mode: integer); | Распечатать множество |
procedure mn_print(_mn: mn_byte; _mode: integer); | Распечатать множество |
function mn_length(_mn: mn_char): integer; | Определить длину множества (кол-во элементов) |
function mn_length(_mn: mn_byte): integer; | Определить длину множества (кол-во элементов) |