|
|
|||
|
wm-help.net -> Электронная библиотека -> Pascal -> Pascal. Курс лекций. -> 28. Множества28. Множества
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. |
|
| бодибилдинг | Строим Домик | RU-домены за 170 рублей | Copyright © "В помощь Веб-Мастеру" (Alexander D. Belyaev) 2005-2009. При перепечатке любого материала видимая ссылка на источник "В помощь Веб-Мастеру" и все имена, ссылки авторов обязательны! Время генерации страницы: 0.049 |