Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прогр.на_ЯВУ_уч.пос.DOC
Скачиваний:
24
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

§6.3. Записи

Запись – это структура данных, состоящая из фиксированного числа элементов, называемых полями. При этом поля могут быть различных типов.

При выборе элементов применяется конкретное имя, которое дается каждому элементу и не может вычисляться, в отличие от массивов.

Общий вид описания типа «запись»:

Type T = Record

<список полей>

end;

Например:

Type Complex = Record

Re: real;

Im: real;

End;

Здесь Re и Im – имена полей. При наличии этого фрагмента программы в дальнейшем можно вводить переменные комплексного типа, например:

Var X, Y, Z: Complex;

При обращении к компонентам указывается имя переменной – записи, и через сочленяющую точку – имя поля:

X.Re:=5.2; X.Im:=3.1;

Пример подпрограмм арифметики комплексных чисел:

{ Функция сложения двух комплексных чисел }

Function CADD(A,B:Complex):Complex;

Begin

CADD.Re:=A.Re+B.Re;

CADD.Im:=A.Im+B.Im;

End;

{ Функция умножения }

Function CMUL(A,B:Complex):Complex;

Begin

CMUL.Re:=A.Re*B.Re-A.Im*B.Im;

CMUL.Im:=A.Re*B.Im+A.Im*B.Re;

End;

{ Функция деления }

Function CDIV(A,B:Complex):Complex;

Var x:real;

Begin

x:=sqr(B.Re)+sqr(B.Im);

CDIV.Re:=(A.Re*B.Re+A.Im*B.Im)/x;

CDIV.Im:=(B.Re*A.Im-A.Re*B.Im)/x;

End;

Пример вычисления выражения XY+XZ+YZ:

CADD(CMUL(X,Y),CADD(CMUL(X,Z),CMUL(Y,Z)))

В языке Паскаль разрешается использовать тип Record при описании других структур данных и наоборот, например:

{ Формирование одной строки таблицы дней рождения из максимально 100 строк }

Type

Data = Record

D:1..31;

M:string[10];

G:word;

End;

Rec = Record

FIO:string;

Dr:Data;

End;

Var List: array [1..100] of rec;

Begin

Z[1].FIO:=’Иванов Иван Иванович';

Z[1].Dr.D:=5;

Z[1].Dr.M:=’Май’;

Z[1].Dr.G:=’1975’;

…

В записях может использоваться не только фиксированная, но и вариантная часть, следующая за фиксированной (здесь не рассматривается). В итоге полная структура записи следующая.

TYPE T=Record

<список полей>:<тип>;

…

[Case <признак варианта> of

<список констант выбора>:

(<список полей>:<тип>;

…);]

…

end;

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

WITH <список переменных записи> DO <оператор>;

В качестве переменных записи используются имена полей, определенных при описании данной записи, например:

Begin

…

Z[1].FIO:='Иванов Иван Иванович';

With Z[1].Dr do

Begin

D:=5;

M:=’Май’;

G:=’1975’;

End;

…

Оператор With R1,R2,…,Rn do S; эквивалентен записи

With R1 do

With R2 do

…

With Rn S;

§6.4. Множества

Множество в математике – это произвольный набор объектов, понимаемый как единое целое. Два множества, отличающиеся только порядком следования элементов, считаются одинаковыми, например:

{A, B, C}, {A, C, B}, {B, C, A}

и т.д., то есть элементы множества не упорядочены.

На вид объектов и их число не накладываются никакие ограничения, но в языке Турбо-Паскаль это понятие существенно уже: в качестве базовых типов допускаются дискретные типы не более чем с 256 различными значениями, то есть типы byte, char, boolean, перечисляемый и диапазон.

Описание типа:

Туре <тип_множество> = SET OF <базовый_тип>

Var <список_переменных>: SET OF <базовый_тип>

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

[Blue, Yellow, Red] или [1,4..8,12,15].

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

Пусть есть описание:

Var A, B, C: Set of 0..9;

D, E: Set of '0'..'9';

F, G: Set of Boolean;

Тогда:

A:=[1, 3, 5];

D:=['3', '6'..'9'];

F:=[5, 7]; {неверная строка – «не то» множество}

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

Операции над множествами – обычные из теории множеств и математической логики. Пусть S1 и S2 – однотипные множества, тогда над ними можно выполнять следующие операции.

1. Объединение множеств.

S1+S2 содержит элементы, которые принадлежат либо S1, либо S2, либо и тому и другому:

A:=[1, 2, 3];

B:=[1, 5, 9];

C:=A+B;

что эквивалентно

C:=[1, 2, 3, 5, 9];

2. Пересечение множеств.

S1*S2 содержит элементы, которые принадлежат как S1, так и S2:

A:=[1, 2, 3];

B:=[1, 5, 9];

C:=A*B;

что эквивалентно

C:=[1];

Или выражение

C:=A*[8];

соответствует пустому множеству:

C:=[ ];

3. Относительное дополнение или разность множеств.

S1-S2 содержит элементы из S1, которые не принадлежат S2:

A:=[1, 2, 3];

B:=[1, 5, 9];

C:=A-B;

что эквивалентно

C:=[2, 3];

Или выражение

C:=A-[3..9];

соответствует:

C:=[1, 2 ];

4. Проверка на равенство, неравенство и включение множеств.

S1=S2 тогда и только тогда, когда S1 и S2 содержат одни и те же элементы. В противном случае истинно выражение S1<>S2. S1<=S2 принимает истинное значение, когда все элементы S1 являются элементами S2 (множество S2 включает в себя множество S1). Пусть

A:=[1..5];

B:=[1..5];

C:=[1..6];

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

A=B — истинно;

А=С — ложно;

B<>C — истинно;

A<=C — истинно (С включает А).

5. Проверка принадлежности множеству (включение во множество).

Эта логическая операция обозначается служебным словом in. Выражение X in S1 истинно, если элемент Х принадлежит множеству S1 и ложно в противном случае:

2 in A — истинно;

9 in A — ложно.

Этот тип данных используется довольно редко, за исключением операции проверки принадлежности к множеству. Например, нажата ли клавиша «p» в любом регистре и алфавите:

If CH in ['p', 'P', 'з', 'З'] then ... {нажата клавиша «р»}