28. Множества

 Понятие множества в языке ПАСКАЛЬ основывается  на математическом

представлении о  множествах: это ограниченная совокупность различных

элементов. Для построения конкретного множественного типа использует-

ся перечисляемый или интервальный тип данных. Тип элементов, состав-

ляющих множество, называется базовым типом.

 Множественный тип описывается с помощью служебных слов Set of,

например:

 

 type M= Set of B;

 

Здесь М - множественный тип, В - базовый тип.

 Пример описания переменной множественного типа:

 

 type

 M= Set of 'A'..'D';

 var

 MS: M;

 

 Принадлежность переменных к множественному типу может быть опреде-

лена прямо в разделе описания переменных:

 

 var

 C: Set of 0..7;

 

 Константы множественного типа записываются  в виде заключенной в

квадратные скобки последовательности элементов или интервалов базово-

го типа, разделенных запятыми, например:

 

 ['A', 'C'] [0, 2, 7] [3, 7, 11..14].

 

Константа вида

 

 [ ]

 

означает пустое подмножество.

 Множество включает в себя набор элементов базового типа, все подм-

ножества данного множества, а также пустое подмножество. Если базовый

тип, на котором строится множество, имеет К элементов, то число подм-

ножеств, входящих в это множество, равно 2 в степени К. Пусть имеется

переменная Р интервального типа:

 

 var P: 1..3;

 

 Эта переменная может принимать три различных значения - либо 1,

либо 2, либо 3. Переменная Т множественного типа

 

 var T: Set of 1..3;

 

может принимать восемь различных значений:

 

 [ ] [1,2]

 [1] [1,3]

 [2] [2,3]

 [3] [1,2,3]

 

 Порядок перечисления элементов базового типа в константах безраз-

личен.

 Значение переменной множественного типа может быть задано конс-

трукцией вида [T], где T - переменная базового типа.

 К переменным и константам множественного типа  применимы операции

присваивания(:=), объединения(+), пересечения(*) и вычитания(-):

 

 ['A','B'] + ['A','D'] даст ['A','B','D']

 ['A'] * ['A','B','C'] даст ['A']

 ['A','B','C'] - ['A','B'] даст ['C'].

 

 Результат выполнения этих операций  есть величина множественного

типа.

 К множественным величинам применимы операции: тождественность (=),

нетождественность (<>), содержится  в (<=), содержит (>=). Результат

выполнения этих операций имеет логический тип, например:

 

 ['A','B'] = ['A','C'] даст FALSE

 ['A','B'] <> ['A','C'] даст TRUE

 ['B'] <= ['B','C'] даст TRUE

 ['C','D'] >= ['A'] даст FALSE.

 

 Кроме этих операций для работы с величинами множественного типа в

языке ПАСКАЛЬ используется операция

 

 in

 

проверяющая принадлежность элемента базового типа,  стоящего слева

от знака операции, множеству, стоящему справа от знака операции. Ре-

зультат выполнения этой операции - булевский.  Операция проверки при-

надлежности элемента множеству часто используется вместо операций от-

ношения, например:

 

 A in ['A', 'B'] даст TRUE,

 2 in [1, 3, 6] даст FALSE.

 

 При использовании в программах данных множественного  типа

выполнение операций происходит над битовыми строками данных. Каждому

значению множественного типа в памяти ЭВМ соответствует один двоичный

разряд. Например, множество

 

 ['A','B','C','D']

 

представлено в памяти ЭВМ битовой строкой

 

 1 1 1 1.

 

Подмножества этого множества представлены строками:

 

 ['A','B','D'] 1 1 0 1

 ['B','C'] 0 1 1 0

 ['D'] 0 0 0 1

 

 Величины множественного типа не могут быть элементами списка вво-

да - вывода.

 В каждой конкретной  реализации транслятора с языка ПАСКАЛЬ коли-

чество элементов базового типа, на котором строится множество, огра-

ничено. В TURBO PASCAL количество базовых элементов не должно превы-

шать 256.

 Инициализация величин множественного типа производится с помощью

типизированных констант:

 

 const seLit: Set of 'A'..'D'= [];

 

 Проиллюстрируем применение данных множественного типа на примере.

 Пример. Составить программу, которая вырабатывает и выводит на эк-

ран дисплея наборы случайных чисел для игры в "Спортлото 5 из 36".

 Для заполнения каждой карточки спортлото необходимо получить набор

из пяти псевдослучайных чисел. К этим числам предъявляются два требо-

вания:

 -числа должны находиться в диапазоне 1..36;

 -числа не должны повторяться.

 

 Program Lotto;

 var

 nb, k: Set of 1..36;

 kol, l, i, n: Integer;

 begin

 Randomize;

 WriteLn('ВВЕДИ kol');

 ReadLn(kol);

 nb:=[1..36];

 for i:=1 to kol do

 begin

 k:=[];

 for l:=1 to 5 do

 begin

 repeat

 n:=Random(36)

 until (n in nb) and not (n in k);

 k:=k+[n];

 Write(n:4)

 end;

 WriteLn

 end

 end.

Электротехника курсовые, лабораторные, практика Математика, физика