
- •9. Перечисляемый тип данных. Строковый тип. Множества. Записи. Файлы
- •9.1. Перечисляемый тип данных
- •Var days: week;
- •9.2. Строковые данные. Типы Char и String
- •Var s1 : String[40];
- •Var Str1, Str2: String[20]; Ch1, Ch2 :Char;
- •Var s: String[20]; I:integer;
- •Var I: byte; begin
- •Var Str_1, Str_2, Str_3:string[10];
- •Insert('any', Str_3,5);
- •9.3. Множества
- •9.3.1. Описание и инициализация множеств
- •9.3.2. Предметные операции с множествами
- •9.3.3. Операции сравнения над множествами
- •9.3.4. Цикл типа For..In. Вывод множеств и их элементов.
- •Var d: week;
- •9.4. Записи
- •Var p_Data: Pers_Data;
- •Var p_Data: record fam:string[20]; adr:string[40]; tel:string[15];
- •Var woker_alpha: woker_firm;
- •Var woker_alpha: array [1..30] of Pers_Data;
- •9.5. Файлы
- •9.5.1. Описание файловых переменных
- •9.5.2. Стандартные операции с файлами. Связывание логических и физических файлов
- •9.5.3. Ввод и вывод данных из физических файлов. Вспомогательные действия
- •9.5.4. Примеры решения задач по обработке текстовых файлов
- •Var I:byte;n:integer; ft:text; FileName,st:string;
- •Var I,Lmas:integer; ft:text; FileName:string;
- •Var n,I:integer; ft:text; FileName:string;
- •Var str,w_s:string;
Var d: week;
begin
for d in week do writeln(d)
end.
Действие цикла эквивалентно обычному арифметическому циклу For...to вида:
for d:=Low(week) to High(week) do writeln(d);
Вторая возможность применения цикла For...in заключается в использовании в качестве перечисляемого типа массива (array).
Пример 9. Код программы, аналогичной примеру 8, с использованием массива:
var a: array[1..7] of string =(’monday’,’tuesday’,’wednesday’,’thursday’,’friday’,
’saturday’,’sunday’); s : String; begin
for s in a do writeln(s)
end.
Третья возможность применения цикла For...in заключается в использовании в качестве перечисляемого типа множества (set). В этом случае тело цикла выполняется для всех элементов множества.
Пример 10. Код программы, аналогичной примеру 8, с использованием множества:
var week:set of TWeekDay= [monday,tuesday,wednesday,thursday,friday]; d: TWeekday; begin
for d in week do writeln(d)
end.
Пример 11. Код программы, в которой:
1) на основе базового множества M байтового типа, содержащего все целые числа от 0 до 20, при помощи присваивания инициализируются простые множества байтового типа: M0={множество всех целых чисел от 5 до 15}, M2={ множество всех четных целых чисел от 0 до 20}, M3={ множество всех целых чисел от 0 до 20, кратных 3},
2) определяются три составных множества а) Ms1:=(M2+M3)-M0, б) Ms2:=M2*M3, в) Ms3:=M0-M3, которые выводятся на экран при помощи цикла For...in.
Текст программы дан с необходимыми комментариями:
type M = Set of 0..20; {описание базового множества М}
var element:byte; {описание вспомогательной величины байтового типа element}
M0,M2,M3,Ms1,Ms2,Ms3:M; {описание простых множеств M0,M2,M3 и составных Ms1,Ms2,Ms3}
begin
M0:=[5,6,7,8,9,10,11,12,13,14,15]; {инициализация простых множеств M0,M2,M3}
M2:=[0,2,4,6,8,10,12,14,16,18,20];
M3:=[0,3,6,9,12,15,18];
Ms1:=(M2+M3)-M0; {формирование составного множества Ms1}
Ms2:=M2*M3; {формирование составного множества Ms2}
Ms3:=M0-M3; {формирование составного множества Ms3}
writeln; write(’ SET Ms1: ’); {вывод составного множества Ms1}
for element in Ms1 do write(element,’ ’);
writeln; write(’ SET Ms2: ’); {вывод составного множества Ms2}
for element in Ms2 do write(element,’ ’);
writeln;write(’ SET Ms3: ’); {вывод составного множества Ms3}
for element in Ms3 do write(element,’ ’);
end.
Вопросы для проверки знаний.
1. В чем заключается математический смысл понятий множества, элемента и подмножества, составляющих основу множественного типа данных ?
2. Назовите основные отличия множеств от массивов.
3. Какие два способа описания применяют для переменных множественного типа и каков их синтаксис ?
4. Что называют битовым представлением множеств ?
5. Какие операции над множествами называют предметными, какой результат они дают и какие предметные операции применяют в Паскале ?
6. Что называют операциями сравнения, какой результат они дают и какие операции сравнения есть в Паскале ?
7. Определить результат применения операции объединения к парам множеств:
а) ['a','c','e'] и ['b','e']; б) ['с','e','g'] и ['b','c','d','e']; в) ['a','b','c'] и [0,1]; г) [1,3,5] и [2,3,4,5,6] ?
8. Определить результат применения операции пересечения к парам множеств:
а) ['a','c','e'] и ['b','e']; б) ['с','e','g'] и ['b','c','d','e']; в) ['a','b','c'] и [0,1]; г) [1,3,5] и [2,3,4,5,6] ?
9. Определить результат применения операции вычитания к парам множеств:
а) ['a','c','e'] и ['b','e']; б) ['с','e','g'] и ['b','c','d','e']; в) ['a','b','c'] и [0,1]; г) [1,3,5] и [2,3,4,5,6] ?
10. Для каких типов величин возможно применение цикла типа For...in?
11. Каков синтаксис цикла For...in ?
12. Можно ли применить цикл For...in к типу char?
Практическое задание.
1. Разработать программу, в которой:
1) вводится базовое множество М[0..10] и величина А типа М, содержащая все нечтные значения из М,
2) по запросу с клавиатуры вводятся две произвольные величины В и С типа М,
3) определяются составные множества, равные а) объединению А,В,С, б) пересечению и определяются числа элементов в них, которые выводятся на экран.