Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Семестр1.doc
Скачиваний:
3
Добавлен:
19.09.2019
Размер:
1.03 Mб
Скачать

Лекция 8

8.1 Множества

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

SET OF базовый тип

Базовым типом может являться любой ординальный тип, содержащий не более 256 элементов. Например: VAR set1,set2,even,anyset: SET OF 0..100;

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

set1:=[1..20];

even:=[2,4,6,8,10,12,14,16,18,20];

set2:=[15..25];

anyset:=[3,3+2,11..15,17..4*5];

Над данными типа множество определены следующие операции:

  • set1=set2 - сравнение (результат операции - FALSE);

  • set1<>set2 - сравнение на несовпадение (TRUE);

  • set2<=set1- входит ли set2 как подмножество в set1? (FALSE);

  • set1>=even- содержит ли set1 как подмножество even? (TRUE);

  • 5 in set1 - является ли 5 элементом множества set1? (TRUE).

  • set1+set2 - объединение множеств - множество [1..25],

  • set1*set2 - пересечение множеств - множество [15..20],

  • set1-even - разность множеств - множество нечетных чисел меньших 20.

Вместо оператора cifra:=(c>='0') and (c<='9') в программе Enter_int (см. лекцию 7) можно использовать более ясную и лаконичную конструкцию cifra:=c in ['0'..'9'].

В TP множество реализуется как последовательность бит, с помощью которой устанавливается, принадлежит (1) или нет (0) элемент, номер которого совпадает с порядковым номером бита, данному множеству. Таким образом, для базового типа из K элементов каждое множество задается строкой из K бит.

8.2 Файлы

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

Все файлы можно разделить на типизированные, нетипизированные и текстовые.

Пример описаний файлов, в котором определены размеры буферов файлов различного типа:

program files;

var f1:file of real; {В стандарте f1^ - переменная типа real - типизированный файл}

f2:file; {нетипизированный файл}

f3:text; {текстовой файл}

begin

writeln(sizeof(f1),sizeof(f2),sizeof(f3))

end.

Результат: 128 128 256

Работа с файлами обеспечивается набором процедур и функций, обслуживающих файлы.

Описатель для типизированного файла выглядит так:

<имя>: file of <базовый тип>;

<имя> - файловая переменная. В стандарте файловая переменная является указателем на буфер файла. В ТР, как видно из примера, это не так.

<базовый тип> - любой, кроме файлового и записи, содержащей файловый тип.

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

assign (var f:text; <ИмяФайла>:string);

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

assign ( f, 'a:\result.txt');{Полное имя файла}

assign (f,'\students\ivanov\korni.txt'); {Указан путь относительно текущей директории}

Имя файла может быть задано строкой:

fname:='otchet.txt';

assign(f,fname);