
- •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;
9.3.2. Предметные операции с множествами
Допустим, некоторые множества А,В,С уже заданы, например, перечислением их элементов. Используя предметные операции, из данных простых множеств можно получить составные множества F(А,В,С), у которых автоматически будут определены составляющие их элементы. Предметными являются следующие операции.
1. Объединение. Операция обозначается (+). В результирующее множество входят все элементы из объединяемых множеств, например:
[0,2,4]+[1,3] равно [0,1,2,3,4]
['a','b'] + ['b','c','d'] равно ['a','b','c','d']
2. Пересечение. Операция обозначается (*). В результирующее множество входят только те элементы, которые присутствуют в каждом из пересекаемых множеств, например:
[0,2,4] * [1,3] равно []
['a','b'] * ['b','c','d'] равно ['b']
3. Вычитание. Если из множества А вычитается множество В, то в результирующее множество входят только те элементы, которые присутствуют в А, но отсутствуют в В (операция обозначается (-)), например:
[0,2,4] - [1,3] равно [0,2,4]
['a','b'] - ['b','c','d'] равно [' a ']
9.3.3. Операции сравнения над множествами
Если некоторые множества А,В,С уже заданы, то задачей операций сравнения является проверка выполнения ряда их свойств. Итогом выполнения данных операция всегда является логическое значение – Истина (True) или Ложь (False). В Паскале используются следующие операции сравнения множеств, в записи которых всегда входит левое и правое множество, разделенные знаком соответствующей операции.
1. Тождественность (=). Результат является истиной, если оба множества равны друг другу, т.е. состоят из одинаковых элементов, иначе – ложный результат, например:
[0,2,4] = [1,3] равно False
['a','b'] = ['b','a'] равно True
2. Нетождественность (<>). Результат является истиной, если множества не равны друг другу, иначе – ложный результат, например:
[0,2,4] = [1,3] равно True
['a','b'] = ['b','a'] равно False
3. Содержится в (<=). Результат - истина, если левое множество содержится в правом, иначе – ложь, например:
[0,2,4] <= [1,3] равно False
['a','b'] <= ['b','a','с'] равно True
4. Содержит (>=). Результат - истина, если левое множество содержит правое, иначе – ложь, например:
['a','b','с'] >= ['b','a'] равно False
['a','b','с'] >= ['b','a'] равно True
Помимо операций между множествами в Паскале есть операция in, применяемая к паре “элемент-множество ”, проверяющая принадлежность элемента базового типа (стоящего в левой части выражения) заданному множеству (правая часть), например:
0 in [1,3] равно False
'a' in ['b','a'] равно True
9.3.4. Цикл типа For..In. Вывод множеств и их элементов.
Переменные множественного типа являются подмножествами базового множества. В Паскале нет возможности обращаться к их элементам так же, как к отдельным символам строковых величин или элементам массива. Для осуществления действий, требующих перебора элементов множества проще всего использовать цикл типа For...in. Данный цикл применяется в тех случаях, когда необходимо выполнить фиксированное число вычислений для переменной цикла, которая принимает значения из перечислимого либо другого порядкового типа. Free Pascal поддерживает данный тип цикла, начиная с версии 2.4.2. Рассмотрим вначале синтаксис цикла и его применение к различным порядковым типам на примере перечисляемого типа week из примера 1 п. 9.1.
Цикл For...in имеет следующий синтаксис:
For переменная in тип do оператор
где For,in,do – служебные слова,
переменная – идентификатор языка Паскаль,
тип – порядковый тип языка Паскаль, все значения которого в заданном порядке должна пройти переменная,
оператор – оператор языка Паскаль (если требуется выполнить несколько действий, применить составной оператор).
Тип, применяемый в цикле For...in, должен быть упорядоченным и ограниченным. Рассмотрим простейший пример, в котором используется перечисляемый тип week из примера 1 п. 9.1.
Пример 8. Код программы, которая распечатывает все дни недели с новой строки:
type week = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday);