Над множествами Паскаля определены общепринятые в математике операции: пересечение (*), объединение (+) и вычитание (-). В скобках указан знак операции. Кроме этого, определены следующие операции отношения:
1) равенство множеств (=);
2) неравенство множеств (<>);
3) левый операнд - подмножество правого операнда (<=);
4) правый операнд - подмножество левого операнда (>=);
5) принадлежность элемента множеству (in).
Логическое выражение «Символ сh - латинская буква» может быть компактно записано с помощью операции проверки принадлежности элемента множеству: сh in [‘a’..‘z’, ‘A’..‘Z’].
Для совместимости типов множество в операциях достаточно совместимости базовых типов множеств. Это условие выполняется, если базовые типы одинаковы, или один из них - поддиапазон другого, или оба являются поддиапазонами одного и того же типа.
В операции проверки принадлежности элемента множеству левый операнд должен иметь тип, совместимый с базовым типом множества, которое является правым операндом.
|
|
Приоритеты операций в порядке убывания:
1) пересечение;
2) объединение и вычитание;
3) операции отношения.
Для совместимости множеств по присваиванию необходима совместимость типов и присваиваемое значение должно быть подмножеством базового типа переменной.
Пример. Программа для решения следующей задачи. С клавиатуры вводятся символы. Признак конца ввода - точка. Вывести те символы, которые встречались во входной последовательности по одному разу.
Program single_char;
var c: char;
s, sd: set of char;
begin
s:=[ ]; {Инициализация множества входных символов}
sd:=[ ]; {Инициализация множества повторяющихся символов}
repeat
read(c);
if c in s
then sd:=sd+[c] {Накопление множества повторяющихся символов}
else s:=s+[c]; {Накопление множества всех символов}
until c='.';
s:=s-sd-[‘.’]; {Получение множества неповторяющихся символов}
writeln(‘ Неповторяющиеся символы входной последовательности:’)
for c:=#33 to #255 do
if (c in s) then write(c:3)
end.
25. ФАЙЛЫ
До сих пор исходные данные при выполнении программы вводились с клавиатуры, а результаты выводились на дисплей, то есть использовался стандартный ввод-вывод. Язык Паскаль предоставляет возможность обмена информацией с файлами. На физическом уровне файлом является поименованная область памяти на внешнем носителе. С точки зрения программиста, файл - это информация, хранящаяся в этой области.
Ввод из файла удобен, если число исходных данных велико. Данные можно подготовить заранее, проверить. К данным, хранящимся в файле, могут обращаться разные программы. Данные, записанные в файл, сохраняются и после завершения работы программы. Файлы удобно использовать для временного хранения информации, если данных много и все они одновременно не могут быть размещены в оперативной памяти.
|
|
По способу хранения информации файлы подразделяются на два вида: текстовые и двоичные. Текстовые могут быть созданы с помощью текстового редактора, они представляют собой последовательность символов. Их можно выводить на дисплей и на принтер. Двоичные файлы предназначены для обработки компьютером. Устройства ввода и вывода рассматриваются как текстовые файлы, они, так же как и обычные файлы, имеют имена, например: con - консоль, prn - принтер.
Файл состоит из последовательности записей. Записью называется порция данных. Разбиение файла на записи определяется способом его обработки и может меняться в зависимости от целей обращения к файлу.
По способу доступа к записям выделяют последовательные файлы и файлы прямого доступа.
Последовательный файл обрабатывается сначала. Нельзя обработать n-ю запись, не обработав (n-1)-ю. Обработка представляет собой или только чтение или только запись.
Файл прямого доступа позволяет обращаться к записи по ее номеру.