Множества

Множеством называется совокупность однотипных элементов, рассматриваемых как единое целое. В Паскале могут быть только конечные множества. В ТурбоПаскале множество может содержать от 0 до 255 элементов.

В отличие от массива элементы множества не пронумерованы и не упорядочены. Каждый отдельный элемент множества не идентифицируется и с ним нельзя выполнять какие-либо действия. Действия могут выполняться только над множеством в целом.

Тип элементов множества называется базовым типом. Базовым может быть любой скалярный тип за исключением типа Real. Конструктор множества. Конкретные значения множества задаются с помощью конструктора множества, представляющего собой список элементов, заключенный в квадратные скобки. Сами элементы могут быть либо константами, либо выражениями базового типа.

Приведем несколько примеров задания множеств с помощью конструктора:

[3, 4, 7, 9, 12] — множество из пяти целых чисел; [1. .100] — множество целых чисел от 1 до 100; [ ' а ' , ' b ' , ' с ' ] — множество, содержащее три литеры а, b, с; [' а '. . ' z ' , ' ? ' , ' ! ' ] — множество, содержащее все строчные латинские буквы, а также знаки ? и !.

Символом «[]» обозначают пустое множество, т.е. множество, не содержащее никаких элементов.

Не имеет значения порядок записи элементов множества внутри конструктора. Например, [1, 2, 3] и [3, 2, 1] — это эквивалентные множества.

Каждый элемент в множестве учитывается только один раз, поэтому множества [1, 2, 3, 4, 2, 3, 4, 5] и [1..5] эквивалентны.

Переменные множественного типа описываются следующим образом:

Var <идентификатор>: Set Of <базовый тип> Например: Var A, D: Set Of Byte; В: Set Of ' a ' . . ' z '; С: Set Of Boolean;

Нельзя вводить значения в множественную переменную оператором ввода и выводить оператором вывода. Множественная переменная может получить конкретное значение только в результате выполнения оператора присваивания следующего формата:

<множественная переменная> := <множественное выражение>

Например:

А:= [50,100,150,200]; В:= [' m ', ' n ', ' k ' ] ; С:= [True,False]; D:= А;

Кроме того, выражения могут включать в себя операции над множествами.

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

В Паскале реализованы основные операции математической теории множеств: объединение, пересечение, разность. Во всех этих операциях операнды и результаты есть множественные величины одинакового базового типа.

Объединением двух множеств A и B называется множество, состоящее из элементов, принадлежащих хотя бы одному из множеств A или B . Знак операции объединения в Паскале — это «+».

Например:

[1, 2, 3, 4] + [3, 4, 5, 6] → [1, 2, 3, 4, 5, 6].

Пересечением двух множеств A и B называется множество, состоящее из элементов, одновременно входящих и в множество A , и в множество B .

Например:

[1, 2, 3, 4] + [3, 4, 5, 6] → [3, 4].

Разностью двух множеств A и B называется множество, состоящее из элементов множества A , не входящих в множество B .

Например:

[1, 2, 3, 4] + [3, 4, 5, 6] → [1, 2]

[3, 4, 5, 6] - [1, 2, 3, 4] → [5, 6]

Операции объединения и пересечения перестановочные, а разность множеств — операция неперестановочная.

Множества можно сравнивать между собой, т.е. для них определены операции отношения. Результатом отношения, как известно, является логическая величина True или False. Для множеств применимы все операции отношения, за исключением «>» и «<».

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

При этом предполагается, что множества A и B содержат элементы одного типа.

Приведем примеры выполнения операций отношения. Пусть переменная M описана в программе следующим образом:

Var М: Set Of Byte ;

В разделе операторов ей присваивается значение

М := [3,4,7,9];

Тогда операции отношения дадут следующие результаты:

М = [4, 7, 3, 3, 9,] — True; М <> [7, 4, 3, 9, ] — False; [3, 4] <= М — True; [ ] <= М — True; М >= [1. .10] — False; М <= [3..9] — True;

Операция вхождения устанавливает связь между множеством и скалярной величиной, тип которой совпадает с базовым типом множества, т. е. если x — скалярная величина данного типа, а M — множество, то операция вхождения записывается в виде

X InM.

Результатом здесь будет логическая величина True, если значение x входит в множество M и False — в противном случае. Для описанного ранее множества

4 In M — True,

5 In M — False.

Рассмотрим несколько задач, для решения которых удобно использовать множества.

Пример 1. Дана символьная строка. Требуется определить в ней количество знаков препинания ( . — , * : ! ? ) .

Program P1; Var S: String; I, K: Byte; Begin ReadLn(S); K := 0; For I := 1 To Length(S) Do If S[I] In ['.','-',',',':','!','?'] Then K := K + 1; WriteLn('Число знаков препинания равно ', K) End. Program P1; Var S: String; I, K: Byte; Begin ReadLn(S); K := 0; For I := 1 To Length(S) Do If S[I] In ['.','-',',',':','!','?'] Then K := K + 1; WriteLn('Число знаков препинания равно ', K) End.

В этом примере использована множественная константа с символьным типом элементов. Однако задачу можно решить и без множества, записав в оператореIf длинное логическое выражение (S [ I ] = '.') Or (S [ I ] = ',') и т.д.

Использование множества сокращает запись.

Пример 2. Даны две символьные строки, содержащие строчные латинские буквы. Требуется построить строку S3, в которую войдут только общие символы S1 и S2 в алфавитном порядке и без повторений.

Program P2; Type Mset = Set Of 'a'..'z'; Var S1, S2, S3 : String; MS1, MS2, MS3 : Mset; C : Char; Procedure SM(S : String; Var MS : Mset); {Процедура формирует множество MS, содержащее все символы строки S} Var I: Byte; Begin MS := []; For I := 1 To Length(S) Do MS := MS + [S [I]] End; Begin {Ввод исходных строк} ReadLn(S1); ReadLn(S2); {Формирование множеств MSI и MS2 из символов строк S1 и S2} SM(S1, MS1); SM(S2, MS2) ; {Пересечение множеств - выделение общих элементов в множество MS3} MS3 := MS1*MS2; {Формирование результирующей строки S3} S3 :='' ; For C := 'а' to 'z' Do begin If C In MS3 Then S3 := S3 + C; end; WriteLn('Результат:', S3) End.

Тест.Блок-схема


    Инструкция
  1. Что такое Блок-схема
    Это определенный набор блоков и стандартных способов их соединения для выполнения типичных последовательностей действий.
    Формула
    Это определенным образом организованная последовательность действий, за конечное число шагов приводящая к решению задачи.
    Графический способ представления алгоритма, каждое действие при этом осуществляется рисованием последовательности геометрических фигур, каждая из которых подразумевает выполнение определенного действия алгоритма. Порядок выполнения действий указывается стрелками.

  2. Что НЕ является основным элементом блок-схемы
    Блок вычислений
    Логический блок
    Разделитель
    Соединитель

  3. Базовые структуры алгоритмов - ...
    Это определенный набор блоков и стандартных способов их соединения для выполнения типичных последовательностей действий
    Выборка определенных действий
    Алгоритм предназначенный для записи других алгоритмов
    Сложный код

  4. Как называется цикл с предусловием
    Цикл «Пока»
    Цикл «До»
    Цикл «После»
    Цикл «От»

  5. Какое правила НЕ нужно использовать для создания циклов с параметром
    Параметр цикла, его начальное и конечное значения и шаг должны быть одного типа
    Запрещено изменять в теле цикла значения начальное, текущее и конечное для параметра
    Запрещено входить в цикл, минуя блок модификации
    Запрещено выходить из цикла

    

Назад Далее
Наверх