Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000555.doc
Скачиваний:
31
Добавлен:
30.04.2022
Размер:
19.12 Mб
Скачать

2.8. Множества

2.8.1. Значения типа множество

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

В математике рассматривают конечные и бесконечные множества, состоящие из произвольных элементов. В Паскале множества всегда конечные, причем состоят из небольшого числа элементов (в Турбо-Паскале — до 256). Все элементы множества должны быть одного порядкового типа.

Множество - произвольная совокупность значений порядкового типа.

Постоянные множества и в математике, и в Паскале задаются перечнем их элементов (табл. 2.6).

Таблица 2.6

Математика

Паскаль

{1,2,3}

[1,2,3]

{'А',’К’,В',L'}

[‘A’,’K’,’B',’L’]

0 (пустое множество)

[]

(1,2 N

[1..N1

В квадратных скобках могут находиться не только константы, но и любые выражения типа элементов множества, например, [2+X,8-3].

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

TYPE

имя = SET OF базовый тип

где SET, OF - ключевые слова,

имя - имя типа,

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

Примеры TYPE

latchar = set of 'A'. .'Z'; (*множество прописных английских букв *)

numberl_100-set of 1..100;(*множество целых чисел от 1 до 100*)

seasons = set of (winter, spring, summer, autumn); (* множество времен года *)

chars = set of char; (* множество всех символов *)

Затем нужно объявить переменные типа множество.

VAR имя_переменной_множества:тип_множества;

Например,

VAR

vowelsilatchar; warmseasons:seasons;

Переменным типа множество можно присваивать конкретные значения

vowels:=['a','e','i','o','u','y']; warmseasons:=[ spring, summer];

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

Над переменными типа множества в Паскале допустимы следующие операции (табл. 2.7).

Таблица 2.7

Обозначение операции

Выполняемое действие

Приоритет

Тип операндов

Тип результата

in

принадлежность

4

левый -базовый тип; правый -

set

boolean

=

равно

4

set

boolean

<>

не равно

4

set

boolean

<=

подмножество

4

set

boolean

>=

надмножество

4

set

boolean

*

пересечение

2

set

set

+

объединение

3

set

set

-

вычитание

3

set

set

Пример. Найти все простые числа из отрезка 2..100 по методу решета Эратосфена.

program simple_numbers;

const N=100;

var

S: set of 2..N; {исходное множество чисел}

i,k: integer;

begin

S:= [2..N];

for i := 2 to N do

if i in S then begin

writeln (i); {выводим наименьший

из элементов S}

{убираем из S числа, кратные 1} for k := 1 for k:=1 to (N div i) do

S:=S-[k*i];

end {if}

end.

Пример. Во введенной строке определить количества цифр, латинских и русских букв,

program counters; type

charset = set of char;

var

Digits, Latchars,Ruschars:charset;

ch:char;

Count_Digit, Count_Latchar,Count_Ruschar:integer;

begin

Count_Digit :=0;

Count_Latchar :=0;

Count_Ruschar :=0;

Digits := Г0'..'9'];

Latchars ~ [‘a’.-'z,’A'..’Z'];

Ruschars := ['A'..'n’,p'..я];

while not eoln do

begin

read(ch);

if ch in Digits then Count_Digit := Count_Digit + 1;

if ch in Latchars then Count_Latchar := CountJLatchar + 1;

if ch in Ruschars then Count_Ruschar := Count_Ruschar + 1;

end;

writeln(Count_Digit,' ', Count_Latchar,' ',Count_Ruschar);

end.