Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
(2011. 10. 22) КН (с. 126 - ).doc
Скачиваний:
15
Добавлен:
19.05.2015
Размер:
228.86 Кб
Скачать

§ 13. Множественные типы данных.

1. Множественный тип. Его описание и множество значений. Простейшие выражения.

Значениями того или иного множественного типа являются всевозможные подмножества некоторого типа, называемого базовым.

множественный тип

собственно

множественный тип

идентификатор

множественного типа

собственно множественный тип

базовый тип

Базовыми типами для множественного типа могут быть лишь типы BYTE, BOOLEAN, CHAR, перечислимые типы (каждый с числом элементов не более 256), а также любые типы, являющиеся ограниченными типами по отношению к вышеперечисленным.

Пример 1.

TYPE

TA = SET OF BYTE;

TB = SET OF BOOLEAN;

TC = SET OF CHAR;

TD = SET OF (RIGHT, LEFT, UP, DOWN);

TE = SET OF 1 .. 5;

Простейшим выражением множественного типа является так называемый конструктор множества.

конструктор множества

выражение

выражение

Выражения, перечисляемые в синтаксической диаграмме, задают элементы, составляющие множество.

Приведём примеры конструкторов множеств, являющихся выражениями типа TA(см. пример 1); нижеI иJ – это переменные типа BYTE.

[] // Пустое множество.

[1] // Множество {1}.

[1, 2] // Множество {1, 2}.

[2, 1] // Множество {1, 2}.

[1, 2, 1] // Множество {1, 2}.

[1 .. 3,7 .. 9, 12] // Множество {1, 2, 3, 7, 8, 9, 12}.

[I,J+1] // Множество {I,J+1}.

2. Переменные и константы множественного типа. Операции над данными множественного типа.

Переменные и константы множественного типа описываются в соответствии с общими правилами.

Рассмотрим операции, определённые для множественных типов. Представим эти операции в следующей таблице (далее A – это левый операнд операции, а B – правый).

Знак опера-ции.

Знак соответ-ствующей матема-тической операции.

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

Результат.

Запись соответ-ствующего выражения.

Значение результата.

*

Множества, базовые типы которых соответствуют друг другу.

A * B

A ∩ B

+

Множества, базовые типы которых соответствуют друг другу.

A + B

A  B

-

\

Множества, базовые типы которых соответствуют друг другу.

A - B

A \ B

=

=

Множества, базовые типы которых соответствуют друг другу.

A = B

A = B

<>

Множества, базовые типы которых соответствуют друг другу.

A <> B

A ≠ B

<=

Множества, базовые типы которых соответствуют друг другу.

A <= B

A  B

>=

Множества, базовые типы которых соответствуют друг другу.

A >= B

A B

IN

B – множественного типа,A– типа, соответствующего базовому типу дляB.

A IN B

A  B

3. Процедуры include и exclude.

У каждой из этих процедур по два параметра. Первый – параметр-переменная множественного типа, второй – параметр-значение типа, соответствующего базовому типу для первого параметра.

Положим, S– первый параметр, аI– второй. В результате выполнения

a) процедуры INCLUDE,

b)процедуры EXCLUDE

значение S становится равным

a) S + [I],

b)S - [I].

Добавление и удаление одиночного элемента с помощью INCLUDE и EXCLUDE реализуется быстрее по сравнению со способом, преполагающим использование операций + и - .

Рассмотрим ряд примеров.

Пример 1.

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

Приведём два варианта реализации данного задания.

Вариант 1.

PROCEDURE … ;

VAR

SL, S, G: STRING;

I, K: BYTE;

BEGIN

… // Задание значения переменнойSL.

S := ANSIUPPERCASE (SL);

G := ’АОЭУЫЯЁЕЮИ’;

K := 0;

FOR I := 1 TO LENGTH (S) DO

IF POS (S[I], G) > 0

THEN K := K + 1;

… // Вывод значения переменной K.

END;

Вариант 2.

PROCEDURE … ;

VAR

SL, S: STRING;

G: SET OF CHAR;

I, K: BYTE;

BEGIN

… // Задание значения переменнойSL.

S := ANSIUPPERCASE (SL);

G := [’А’, ’О’, ’Э’, ’У’, ’Ы’, ’Я’, ’Ё’, ’Е’, ’Ю’, ’И’];

K := 0;

FOR I := 1 TO LENGTH (S) DO

IF S[I] IN G

THEN K := K + 1;

… // Вывод значения переменной K.

END;

Пример 2.

Пусть дано слово, состоящее из русских букв. Необходимо найти мощность множества букв, являющихся гласными, входящими в слово.

Приведём два варианта реализации данного задания.

Вариант 1.

PROCEDURE … ;

VAR

SL, S: STRING;

G, A: SET OF CHAR;

I, K: BYTE;

C: CHAR;

BEGIN

… // Задание значения переменнойSL.

S := ANSIUPPERCASE (SL);

G := [’А’, ’О’, ’Э’, ’У’, ’Ы’, ’Я’, ’Ё’, ’Е’, ’Ю’, ’И’];

A := [];

FOR I := 1 TO LENGTH (S) DO

IF S[I] IN G

THEN INCLUDE (A, S[I]);

K := 0;

FOR C := ’А’ TO ’Я’ DO

IF C IN A

THEN K := K + 1;

… // Вывод значения переменной K.

END;

Вариант 2.

PROCEDURE … ;

VAR

SL, S: STRING;

G, A: SET OF CHAR;

I, K: BYTE;

BEGIN

… // Задание значения переменнойSL.

S := ANSIUPPERCASE (SL);

G := [’А’, ’О’, ’Э’, ’У’, ’Ы’, ’Я’, ’Ё’, ’Е’, ’Ю’, ’И’];

A := [];

K := 0;

FOR I := 1 TO LENGTH (S) DO

IF S[I] IN G

THEN IF S[I] IN A

THEN

ELSE BEGIN

INCLUDE (A, S[I]);

K := K + 1

END;

… // Вывод значения переменной K.

END;

Пример 3.

Пусть A – некоторое множество с элементами типаBYTE. Необходимо осуществить вывод элементов этого множества.

Приведём один из вариантов реализации данного задания.

PROCEDURE … ;

VAR

A: SET OF BYTE;

I: BYTE;

BEGIN

… // Задание значения переменнойA.

FOR I := 0 TO 255 DO

IF I IN A

THEN MEMO1. LINES. ADD (INTTOSTR (I))

END;