Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
0043234_0ADD1_ayap.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
682.5 Кб
Скачать

Множества

Множественный тип данных в языке Паскаль соответствует математическому представлению о множествах: это ограниченная совокупность различных элементов. Множество создается на основе элементов базового типа, он может быть перечисляемым, интервальным или byte. В множестве не может быть более 256 элементов.

Множество описывается с помощью служебных слов set of:

type имя_типа = set of базовый_тип;

Примеры:

type Caps = set of 'A' .. 'Z';

Colors = set of (RED, GREEN, BLUE);

Numbers = set of byte;

Принадлежность переменных к множественному типу может быть определена прямо в разделе описания переменных, например:

var oct : set of 0 .. 7;

Константы множественного типа записываются в виде заключенной в квадратные скобки последовательности элементов или интервалов базового типа, разделенных запятыми, например:

['A', 'D'] [1, 3, 6] [2, 3, 10 .. 13].

Константа вида [ ] означает пустое подмножество.

Тип "множество" задает набор всех возможных подмножеств его элементов, включая пустое. Если базовый тип, на котором строится множество, имеет k элементов, то число подмножеств, входящих в это множество, равно 2k.

Переменная множественного типа содержит одно конкретное подмножество значений множества. Пусть имеется переменная b интервального типа:

var b : 1 .. 3;

Эта переменная может принимать три различных значения: 1, 2 или 3. Переменная m множественного типа

var m : set of 1 .. 3;

может принимать восемь различных значений:

[ ] [1] [2] [3] [1, 2] [1, 3] [2, 3] [1, 2, 3]

Порядок перечисления элементов базового типа в константах безразличен.

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

Величины множественного типа не могут быть элементами списка ввода-вывода. Допустимые операции над множествами перечислены в таблице:

Знак

Название

Математическая запись

Результат

:=

присваивание

 

 

+

объединение

È

множество

*

пересечение

Ç

множество

-

дополнение

\

множество

=

тождественность

=

логический

<>

нетождественность

¹

логический

<=

содержится в

Í

логический

>=

содержит

Ê

логический

in

принадлежность

 

логический

Пример #2.

Рассмотрим примеры применения операций. Пусть задано множество, основанное на значениях прописных латинских букв:

type Caps = set of 'A' .. 'Z';

var a, b, c : Caps;

begin

a := ['A', 'U' .. 'Z'];

b := [ 'M' .. 'Z'];

c := a; { присваивание }

c := a + b; { объединение, результат ['A', 'M' .. 'Z'] }

c := a * b; { пересечение, результат ['U' .. 'Z'] }

c := b - a; { вычитание, результат ['M' .. 'T'] }

c := a - b; { вычитание, результат ['A'] }

if a = b then writeln ('тождественны'); { не выполнится }

if a <> b then writeln ('не тождественны'); { выполнится }

if c <= a then writeln ('c содержится в а'); { выполнится }

ша эТэ шт и ерут цкшеудт (эв и есть Тэ)ж Х выполнится Ъ

утвю

Файлы

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

Файловые типы языка Паскаль бывают стандартные и определяемые программистом. Стандартными являются текстовый файл (text) и бестиповой файл(file). Они описываются в программе, например, так:

var ft : text;

fb : file;

Программист может определить файл, состоящий из элементов определенного типа. Такой файл называется компонентным, или типизированным:

var fc : file of <тип_компонент>

Компоненты могут быть любого типа, кроме файлового. Любой файл, в отличие от массива и записи, может содержать неограниченное количество элементов.

Текстовые файлы предназначены для хранения информации в виде строк символов. При выводе в текстовый файл данные преобразуются из внутренней формы представления в символьную, понятную человеку, при вводе выполняется обратное преобразование. Бестиповые и компонентные файлы хранят данные в том же виде, в котором они представлены в оперативной памяти.

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

Чтобы не путать файлы в программе и файлы на диске, переменные файлового типа называют логическими файлами, а реальные устройства и файлы на диске - физическими файлами. Их имена задаются с помощью строк символов, например:

'primer.pas' - имя файла в текущем каталоге

'd:\pascal\input.txt' - полное имя файла

'CON' 'NUL' 'COM1' 'PRN' - имена устройств

Для организации ввода-вывода в программе необходимо выполнить следующие действия:

  • объявить файловую переменную;

  • связать ее с физическим файлом;

  • открыть файл для чтения и/или записи;

  • выполнить операции ввода-вывода;

  • закрыть файл.

Ввод-вывод выполняется не непосредственно между внешним устройством и переменными программы, а через так называемый буфер - специальную область оперативной памяти. Буфер выделяется для каждого открытого файла. При записи в файл вся информация сначала направляется в буфер и там накапливается до тех пор, пока весь буфер не заполнится. Только после этого или после специальной команды сброса происходит передача данных на внешнее устройство. При чтении из файла данные вначале считываются в буфер, причем данных считывается не столько, сколько запрашивается, а сколько поместится в буфер.