Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
6.DOC
Скачиваний:
0
Добавлен:
09.11.2018
Размер:
100.86 Кб
Скачать

6.4.3. Оператор присоединения

Упростить обозначения при использовании комбинированного типа можно с помощью оператора присоединения: WITH P1,P2,...Pn DO S , где P1,P2,...Pn - переменные типа "запись", S - оператор. Внутри оператора S указываются только имена полей.

Пример 6.4.2. Данные о студенте содержат фамилию и адрес (улица, дом, квартира) . Задание - в тексте программы . PROGRAM Stadr;

VAR one : RECORD

fam : STRING;

adr : RECORD

ul : STRING[20];

dom : integer;

kv : integer

END

END;

BEGIN

{ Ввод данных о студенте "one" }

Write('Фамилия : '); ReadLn(one.fam);

Write('Улица : '); ReadlLn(one.adr.ul);

Write('Дом : '); ReadLn(one.adr.dom);

Write('Квартира : '); ReadLn(one.adr.kv);

{ Можно и так:

WITH one, adr DO

BEGIN

Write('Фамилия : '); ReadLn(fam);

Write('Улица : '); ReadLn(ul);

Write('Дом : '); ReadLn(dom);

Write('Квартира : '); ReadLn(kv);

END;

}

{А теперь отпечатаем}

WITH one DO

BEGIN

WriteLn('Фамилия : ', fam);

WITH adr DO

BEGIN

WriteLn('Улица : ', ul);

WriteLn('Дом : ', dom);

WriteLn('Квартира : ', kv)

END

END

END.

Задачи

6.4.1. Имеются данные о группе студентов. Необходимо определить: 1) количество девушек 1979 года рождения; 2) количество студентов с фамилией на "И"; 3) фамилию самого молодого студента; 4) фамилию самой молодой девушки.

6.4.2. Имеется набор точек на плоскости, заданных своими коорди-натами. Определить: 1) координаты точки, наиболее близкой к осям x,y. 2) координаты точки, наиболее удаленной от центра координат.

6.4.3. В трехмерном пространстве имеется набор светящихся точек разной яркости и массы. Определить: 1) суммарную массу всех точек; 2) координаты наиболее яркой точки; 3) координаты наиболее тяжелой точки; 4) яркость наиболее удаленной от центра координат; 5) расстояние между самой яркой и самой тяжелой.

6.5. Множественные типы

Множество так же, как и массив, строится из элементов одного базо-вого типа. Особенность множества: оно может содержать любое количество элементов одного базового типа, но все они должны быть различными. Мак-симальный размер множества в каждой реализации различен. В Турбо Пас-кале он равен 256.

Множественный тип задается следующим образом: TYPE typnam = SET OF T ,

где typnam - имя типа "множество"; T - базовый тип.

В языке Турбо Паскаль в качестве базового допускается любой упоря-доченный тип с количеством элементов не более 256, для целого типа - диа-пазон 0..255 .

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

Примеры конструкторов множества: [1, 3, 11..44] [i+10, i-11] ['A'..'T', '+', '-'] [] . В последнем случае имеем дело с пустым множеством.

Для множеств определены операции:

* - пересечение,

+ - объединение,

- - разность, а также операции отношения:

= - равенство,

<> - неравенство,

- проверка на включение,

IN - проверка элемента на его принадлежность множеству (первый

операнд - базового, второй - множественного типа). Старшинство операций:

(пересечение) - (объединение, разность) - (отношения).

Пример 6.5.1. Вводить целые числа до тех пор, пока по крайней мере по разу будут введены числа из диапазона 0..9. Подсчитать общее количест-во введенных чисел из этого диапазона.

PROGRAM Diap;

VAR a,k : integer;

sint : SET OF 0..9;

BEGIN

sint:=[0..9];

k:=0;

WHILE sint<>[] DO

BEGIN

Write('Число: '); ReadLn(a);

IF a IN [0..9] THEN

BEGIN

sint:=sint-[a];

k:=k+1

END

END;

WriteLn('Количество из диапазона = ', k)

END.

А вот другой вариант программы :

PROGRAM Diap2;

VAR a,k : integer;

sint : SET OF 0..9;

BEGIN

sint:=[];

k:=0;

REPEAT

Write('Число : '); ReadLn(a);

IF a IN [0..9] THEN

BEGIN

sint:=sint+[a];

k:=k+1

END

UNTIL sint=[0..9];

WriteLn('Количество из диапазона = ', k)

END.

Пример 6.5.2. Ввести две строки символов. Выяснить, встречается ли каждый символ первой строки хотя бы один раз во второй строке. PROGRAM Every;

VAR a,b : STRING;

sa,sb : SET OF char;

k : integer;

BEGIN

Write('Строка 1:'); ReadLn(a);

Write('Строка 2:'); ReadLn(b);

sa:=[];

FOR k:=1 TO Length(a) DO

sa:=sa+[a[k]];

sb:=[];

FOR k:=1 TO Length(b) DO

sb:=sb+[b[k]];

IF sa <= sb { или sa*sb=sa }

THEN WriteLn('Да, встречаетя')

ELSE WriteLn('Нет, не встречается')

END.

Задачи

6.5.1. Отпечатать по одному разу все символы строки.

6.5.2. Имеется массив чисел, значения которых лежат в диапазоне 0..250. Определить, сколько среди них различных.

6.5.3. Имеется две строки символов. Определить те символы, которые присутствуют в обеих строках одновременно.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]