Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие Алгоритмизация и программирование.doc
Скачиваний:
107
Добавлен:
11.03.2015
Размер:
768.51 Кб
Скачать

24.1. Машинное представление множества

В памяти множества хранятся очень компактно: каждому элементу базового типа выделяется один бит. Таким образом, тип множество занимает (n-1)div8+1 байтов, гдеnчисло элементов базового типа. Значением типа множество является подмножество тех элементов базового типа, которым соответствуют ненулевые биты.

24.2. Операции над множествами

Над множествами Паскаля определены общепринятые в математике операции: пересечение (*), объединение (+) и вычитание (). В скобках указан знак операции. Кроме этого, определены следующие операции отношения:

  1. равенство множеств (=);

  2. неравенство множеств (<>);

  3. левый операнд подмножество правого операнда (<=);

  4. правый операнд подмножество левого операнда (>=);

  5. принадлежность элемента множеству (in).

Логическое выражение «Символ сhлатинская буква»может быть компактно записано с помощью операции проверки принадлежности элемента множеству: сh in [‘a’..‘z’, ‘A’..‘Z’].

Для совместимости типов множество в операциях достаточно совместимости базовых типов множеств. Это условие выполняется, если базовые типы одинаковы, или один из них поддиапазон другого, или оба являются поддиапазонами одного и того же типа.

В операции проверки принадлежности элемента множеству левый операнд должен иметь тип, совместимый с базовым типом множества, которое является правым операндом.

Приоритеты операций в порядке убывания:

  1. пересечение;

  2. объединение и вычитание;

  3. операции отношения.

Для совместимости множеств по присваиванию необходима совместимость типов и присваиваемое значение должно быть подмножеством базового типа переменной.

Пример. Программа для решения следующей задачи. С клавиатуры вводятся символы. Признак конца вводаточка. Вывести те символы, которые встречались во входной последовательности по одному разу.

Programsingle_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#255do

if (c in s) then write(c:3)

end.

25. Файлы

До сих пор исходные данные при выполнении программы вводились с клавиатуры, а результаты выводились на дисплей, то есть использовался стандартный ввод-вывод. Язык Паскаль предоставляет возможность обмена информацией с файлами. На физическом уровне файлом является поименованная область памяти на внешнем носителе. С точки зрения программиста, файл это информация, хранящаяся в этой области.

Ввод из файла удобен, если число исходных данных велико. Данные можно подготовить заранее, проверить. К данным, хранящимся в файле, могут обращаться разные программы. Данные, записанные в файл, сохраняются и после завершения работы программы. Файлы удобно использовать для временного хранения информации, если данных много и все они одновременно не могут быть размещены в оперативной памяти.

По способу хранения информации файлы подразделяются на два вида: текстовые и двоичные. Текстовые могут быть созданы с помощью текстового редактора, они представляют собой последовательность символов. Их можно выводить на дисплей и на принтер. Двоичные файлы предназначены для обработки компьютером. Устройства ввода и вывода рассматриваются как текстовые файлы, они, так же как и обычные файлы, имеют имена, например: conконсоль, prnпринтер.

Файл состоит из последовательности записей. Записью называется порция данных. Разбиение файла на записи определяется способом его обработки и может меняться в зависимости от целей обращения к файлу.

По способу доступа к записям выделяют последовательныефайлы и файлыпрямого доступа.

Последовательный файлобрабатывается сначала. Нельзя обработатьn-ю запись, не обработав (n-1)-ю. Обработка представляет собой или только чтение или только запись.

Файл прямого доступапозволяет обращаться к записи по ее номеру.