Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
У_П_Инф1.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.88 Mб
Скачать

4.3. Множества

Тип-множество. В отличие от математического понятия множества множество в Turbo Pascal представляет собой совокупность элементов базового типа. Максимальный размер множества - 256 элементов, которые имеют порядковые номера от 0 до 255. Следовательно, в качестве базовых могут выступать стандартные типы данных byte и char, перечисляемые типы и их диапазоны.

Перечисляемый тип задается перечислением имен-значений типа, например так:

type den_nedeli=(poned, vtor, sreda, chet, pt, sub,vsk);

Нумерация значений типа начинается с нуля. Поскольку перечисляемые типы не являются стандартными, их значения нельзя вводить и выводить стандартными процедурами.

Множество включает в себя все возможные наборы элементов базового типа, т.е. все подмножества данного множества, включая пустое. Если базовый тип состоит из n элементов, то число всех подмножеств равно .

Описание типа-множества имеет вид:

type <имя типа> = set of <базовый тип>;

Приведем примеры правильного и неправильного описания.

type bukva = ‘a’..’z’; {Тип ‘строчная буква латинского алфавита’}

mn_bukv = set of bukva;

mn_byte = set of byte;

godi_ucheniya = set of 2002..2007; {неверное описание}

mn_nat_chisel = set of 1..256; {неверное описание}

Элементы в множестве располагаются произвольно и не повторяются. Задается множество с помощью конструктора множеств - [ ]. В нем через запятую перечисляются допустимые элементы, в том числе и диапазоны, например:

type vremena_goda = set of (vesna, leto, osen, zima); {Перечисляемый тип}

var q, s : vremena_goda; {Множество времен года}

mn : set of 1..100; {Множество целых чисел от 1 до 100}

begin s := [ ]; {Пустое множество}

q := [vesna, leto];

mn := [1, 5..13, 27..33] …

О перации над множествами:

  1. объединение множеств A и B - A + B 

например, s := [vesna] + [leto..zima]; (результат - [vesna..zima])

  1. пересечение множеств A и B - A * B 

например, q := [leto] * [vesna..osen]; ([leto])

  1. р азность множеств A и B - A - B 

например, q := [leto..zima] - [osen]; ([leto, zima])

  1. операции отношения:

- тождественность множеств A = B;

- не тождественность множеств A <> B;

- A является подмножеством B A <= B;

- B является подмножеством B A >= B.

Установить принадлежность некоторого элемента e множеству mn можно с помощью операции in: e in mn. Операция возвращает значение true, если элемент e присутствует в множестве mn, и false - в противном случае. Для включения элемента в множество можно использовать процедуру include(mn, e), а для исключения элемента из множества - процедуру exclude(mn, e).

Пример 15. Из строки символов s1 удалить повторно встречающиеся символы. Структурограмма алгоритма и программа приведены ниже.

Ввод (s1) {Исходная строка}

s2 := ‘’ {Результирующая строка}

mn := [ ] {Множество символов}

i := 1 (1) length(s1)

s1[i]  mn ДА

s2 := s2 + s1[i]

mn := mn + [s1[i]]

Вывод (s1, s2)

program Symbol_Odin_Raz;

var i byte;

s1, s2 : string;

mn : set of char;

begin writeln(‘Введите строку символов’);

readln(s1); s2 := ‘’; mn := [ ];

for i := 1 to length(s1) do begin

if not s1[i] in mn then s2 := s2 + s1[i];

mn := mn + [s1[i]] end;

writeln(‘Исходная строка: ‘, s1);

writeln(‘Результирующая строка: ‘, s2)

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]