3) ['B'] <= ['B','C'] даст TRUE;
4) ['C','D'] >= ['A'] даст FALSE.
Кроме этих операций, для работы с величинами множественного типа используется операция in, проверяющая принадлежность элемента базового типа, стоящего слева от знака операции, множеству, стоящему справа от знака операции. Результат выполнения этой операции – булевский. Операция проверки принадлежности элемента множеству часто используется вместо операций отношения.
При использовании в программах данных множественного типа выполнение операций происходит над битовыми строками данных. Каждому значению множественного типа в памяти ЭВМ соответствует один двоичный разряд.
Величины множественного типа не могут быть элементами списка ввода-вывода. В каждой конкретной реализации транслятора с языка Pascal количество элементов базового типа, на котором строится множество, ограниченно.
Инициализация величин множественного типа производится с помощью типизированных констант.
Приведем некоторые процедуры для работы с множествами.
1. Procedure Exclude(var S: Set of T; I:T);
Удаляет элемент I из множества S. S – переменная типа «множество», и I – выражение типа, совместимого с исходным типом S. Конструкция Exclude(S, I) соответствует S: = S – [I], но генерирует более эффективный код.
2. Procedure Include(var S: Set of T; I:T);
Добавляет элемент I к множеству S. S – переменная типа «множество», и I – выражение типа, совместимого с типом S. Конструкция Include(S, I) соответствует S: = S + [I], но генерирует более эффективный код.
ЛЕКЦИЯ № 6. Файлы
1. Файлы. Операции с файлами
Введение файлового типа в язык Pascal вызвано необходимостью обеспечить возможность работы с периферийными (внешними) устройствами ЭВМ, предназначенными для ввода, вывода и хранения данных.
Файловый тип данных (или файл) определяет упорядоченную совокупность произвольного числа однотипных компонент. Общее свойство массива, множества и записи заключается в том, что количество их компонент определено на этапе написания программы, тогда как количество компонент файла в тексте программы не определяется и может быть произвольным.
При работе с файлами выполняются операции ввода-вывода. Операция ввода означает перепись данных с внешнего устройства (из входного файла) в основную память ЭВМ, операция вывода – это пересылка данных из основной памяти на внешнее устройство (в выходной файл). Файлы на внешних устройствах часто называют физическими файлами. Их имена определяются операционной системой.
В программах на языке Pascal имена файлов задаются с помощью строк. Для работы с файлами в программе необходимо определить файловую переменную. Pascal поддерживает три файловых типа: текстовые файлы, компонентные файлы, бестиповые файлы.
Файловые переменные, которые описаны в программе, называют логическими файлами. Все основные процедуры и функции, обеспечивающие ввод-вывод данных, работают только с логическими файлами. Физический файл должен быть связан с логическим до выполнения процедур открытия файлов.
Текстовые файлы
Особое место в языке Pascal занимают текстовые файлы, компоненты которых имеют символьный тип. Для описания текстовых файлов в языке определен стандартный тип Text:
var TF1, TF2: Text;
Текстовые файлы представляют собой последовательность строк, а строки – последовательность символов. Строки имеют переменную длину, каждая строка завершается признаком конца строки.
Компонентные файлы
Компонентный, или типизированный файл, – это файл с объявленным типом его компонент. Компонентные файлы состоят из машинных представлений значений переменных, они хранят данные в том же виде, что и память ЭВМ.
Описание величин файлового типа имеет вид:
type М = File Of Т;
где М – имя файлового типа;
Т – тип компоненты.
Компонентами файла могут быть все скалярные типы, а из структурированных – массивы, множества, записи. Практически во всех конкретных реализациях языка Pascal конструкция «файл файлов» недопустима.
Все операции над компонентными файлами производятся с помощью стандартных процедур.
Write(f,X1,X2,...XK)
Бестиповые файлы
Бестиповые файлы позволяют записывать на диск произвольные участки памяти ЭВМ и считывать их с диска в память. Описываются бестиповые файлы следующим образом:
var f: File;
Теперь перечислим процедуры и функции для работы с различными видами файлов.
1. Procedure Assign(var F; FileName: String);
Процедура AssignFile сопоставляет имя внешнего файла с файловой переменной.
F – файловая переменная любого файлового типа, FileName – выражение типа String или выражение типа PChar, если допускается расширенный синтаксис. Все дальнейшие операции с F производятся с внешним файлом.
Нельзя использовать процедуру с уже открытой файловой переменной.
2. Procedure Close(var F);
Процедура разрывает связь между файловой переменной и внешним дисковым файлом и закрывает файл.
F – файловая переменная любого файлового типа, открытая процедурами Reset, Rewrite или Append. Внешний файл, связанный с F, полностью модифицируется и затем закрывается, освобождая дескриптор файла для повторного использования.
Директива {SI+} позволяет обрабатывать ошибки во время выполнения программы, используя обработку исключительных ситуаций. При выключенной директиве {$1—} необходимо использовать IOResult для проверки ошибок ввода-вывода.
3. Function Eof(var F): Boolean;
{Типизированные или нетипизированные файлы}
Function Eof[(var F: Text)]: Boolean;
{Текстовые файлы}
Проверяет, является или нет текущая позиция файла концом файла.
Eof(F) возвращает True, если текущая позиция файла находится за последним символом файла или если файл пуст; иначе Eof (F) возвращает False.
Директива {SI+} позволяет обрабатывать ошибки во время выполнения программы, используя обработку исключительных ситуаций. При выключенной директиве {SI—}, необходимо использовать IOResult для проверки ошибок ввода-вывода.