Читайте также:
|
|
Множества - наборы однотипных, логически связанных друг с другом обьектов. Характер связи обьектов определяется программистом и не контролируется Турбо Паскалем. Количество элементов в множестве может меняться от 0 до 256. Множество, которое не содержит элементов, называется пустым. От массивов множества отличаются тем, что количество элементов не постоянно. Его можно расширять и сокращать по ходу выполнения программы.
Описание типа производится в разделе TYPE в следующем виде:
<ИмяТипа> = SET of <базовый _ тип>,
где <ИмяТипа> - правильный идентификатор ТП; <базовый_тип> - тип элементов множества, в качестве которого может применяться любой порядковый тип кроме WORD, Integer, LogInt, ShortInt.
Пример:TYPE
dchar=SET of '1'..'9';
digit=SET of 1..9;
Переменные введенных типов-множеств описываются в разделе VAR. Пример:
VAR
S1, S2, S3: dchar;
S4, S5, S6, S7: digit;
Можно тип объявлять сразу при описании переменных, например:
VAR S1: set of '1'..'9';
Для задания множества может использоваться конструктор множества - список элементов множества, отделенных друг от друга запятыми. Список заключается в квадратные скобки. Спецификациями элементов могут быть константы или выражения базового типа, а также тип-диапазон того же базового типа, например:
S1:=['1','2','3']; S4:=[0..3,7];
S2:=['2','1','3']; S5:=[4,6];
S3:=['1','2']; S6:=[3..8];
S7:=[]; (пустое).
Два множества считаются эквивалентными тогда и только тогда, когда все их элементы одинаковы причем порядок следования в множестве безразличен (S1 и S2 эквивалентны).
Если все элементы одного множества входят в другое множество то говорят, что первое включено во второе (S3 включено в S1).
Пустое множество считается включенным в любое другое.
Над множествами определены следующие операции:
1. Пересечение множеств (*) содержит элементы, общие для обоих множеств. Например, S4*S6 содержит [3,7]; S4*S5 образует пустое множество.
2. Объединение множеств (+) содержит элементы первого множества, дополненные недостающими элементами второго. Например,
S4+S5 содержит [0,1,2,3,4,6,7], S5+S6 содержит [3,4,5,6,7,8].
3. Разность множеств (-) содержит элементы из первого множества, которые не принадлежат второму. Например, S6-S5 содержит [3,5,7,8]);
S4-S5 содержит [0,1,2,3,7]), [ ]-S4 даст [ ].
4. Операции отношений:
операция эквивалентности (=) возвращает значение TRUE, если оба множества эквивалентны, например, S1=S2;
проверки неэквивалентности (<>) дает TRUE, если множества неэквивалентны, например, [1,2] <> [1] и S3<>S2;
проверки вхождения (<=) принимает значение TRUE, если первое множество входит во второе, например, [1]<=[1,2];
проверки вхождения (>=) возвращает TRUE, если второе множество входит в первое;
проверки принадлежности (in) возвращает TRUE, если выражение имеет значение, принадлежащее множеству. Структура этой бинарной операции имеет вид
<выражение> in <множество>;
Примеры:
3 in S6, и [ ] in [0..5] возвращают TRUE;
2*2 in S4 дает FALSE.
Множества имеют компактное машинное представление.
Недостатком данного типа является невозможность вывода множеств на экран, поскольку отсутствует механизм изъятия элемента из множества. Ввод множества возможен только поэлементно.
Пример: Сформировать множество из введенных с клавиатуры символов до появления точки.
VAR S: SET of char; {объявленa переменная-множество S}
C: char; {элемент множества}
Begin
S:=[]; {обнуление значений}
while C <> '.' do {цикл до ввода "."}
begin
readln(C); {чтение символа в с}
S:=S+[C]; {добавление его к S}
end;
End.
Записи
Запись - описание комбинированного типа, состоящее из нескольких полей, каждое из которых имеет свой тип.
Структура записи аналогична таблице.
Записи состоят из фиксированного числа компонентов, называемых полями записи. В отличие от массива компоненты (поля) записи могут быть различного типа. Структура объявления типа "запись" имеет вид
TYPE
<ИмяТипа>=RECORD
<поле1>:<тип поля1>;
<поле2>:<тип поля2>;
...
<полеN>:<тип поляN>
End;
Если тип нескольких полей совпадает, то имена полей можно перечислить через запятую. <ИмяТипа> и поля являются правильными идентификаторами.
Например:
TYPE
DENROGD=RECORD
name:string; {фамилия или имя }
den,mes:byte; {день, месяц}
god:word {год}
end;
Объявление переменных производится, как и для других типов, в разделе VAR:
VAR a,b:DENROGD;
Доступ к каждой компоненте записи производится указанием составного имени: имени переменной и затем через точку имени поля, например:
a.name:= 'MARINA';
a.god:= 1981;
a.den: = 23;
a.mes:= 3;
Таким образом, в типе "запись" определена операция присваивания. Кроме того, как и в массиве, все значения переменных типа "запись" можно присваивать другим переменным того же типа: B:= A;.
Над полями можно выполнять действия, разрешенные для базового типа:
b.god:=а.god+1; {на год старше}.
В качестве переменной может быть объявлен массив записей:
VAR s: array[1..20] of STUDENT;
Пример. Разработать программу формирования списка студентов с указанием дат рождения. Распечатать список в алфавитном порядке.
Дата добавления: 2015-09-05; просмотров: 60 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Структурированные типы данных. Массивы | | | Program zapis; |