В прилагаемом файле можно найти процедуры и функции, которые расширяют стандартные возможности 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; | Определить длину множества (кол-во элементов) |
