Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Чернов Шафеева.doc
Скачиваний:
47
Добавлен:
21.05.2015
Размер:
1.39 Mб
Скачать

2.9. Изменение типа выражения

Тип значения, полученного в результате обработки выражения, мож­но явным образом изменить на другой (стандартный или объявленный в программе) с помощью операции преобразования (приведения) типа:

<имяТипа> (<выражение>);

например:

Var D, K: byte; B: boolean; C: char; R: real;

Begin

D := Byte('A');

C := Char(D);

K := Byte(Pi*10);

B := Boolean(100); {True}

End.

При явном преобразовании типа выражения может произойти изменение длины его машинного представления (длина увеличивается или уменьшает­ся).

2.10. Процедурные типы

Применяются в ТП для организации передачи в качестве фактических параметров процедур и функций.

Существует два процедурных типа: тип-процедура и тип-функция. При объявлении процедурных типов используется заголовок процедуры, в кото­ром опускается ее имя, например:

TYPE

Proc1=Procedure(a,b,c:real; var d:real);

Proc2=Procedure(var b1,b2:byte);

Proc3=Procedure;

Func=Function(x:real):real;

Func2=Function(s:string):string;

Для объявления переменных процедурного типа производится как

VAR pr: proc1;

f: func;

После описания заголовка функции (процедуры), которая является параметром, при ее определении должна следовать стандартная директива FAR, служащая для установления правильных связей параметра-функции (процедуры) с вызывающей подпрограммой. Такие параметры должны компи­лироваться с учетом на дальнюю модель памяти.

Пример определения параметра-функции:

Function F1(x: real): real; FAR; дальнее описание

Begin

. . .

end;

Procedure FF(n:byte;F:Func);

Var ...;

Begin

. . .

end;

BEGIN

. . .

FF(2,F1); ... FF(5,F1);

END.

В качестве параметров не могут передаваться рассмотренным спосо­бом стандартные процедуры (функции).

2.11. Файлы

Файл  именованная область внешней памяти ПК. Файлом может назы­ваться логическое устройство, потенциальный источник или приемник ин­формации.

Файл характеризуется именем, содержит компоненты одного ти­па (типом может быть любой тип, кроме файлов). Длина вновь создаваемого файла не указывается при его объявлении.

Файлы делятся на типизированные, текстовые, нетипизированные. Определяются файловые типы в блоке TYPE следующим способом:

Type

<имя>=FILE OF <тип>; {типизированный}

<имя>=TEXT; {текстовый}

<имя>=FILE; {нетипизированный}

где <имя>  имя файлового типа (правильный идентификатор);

FILE, OF  зарезервированные слова (файл, из),

TEXT  имя стандартного типа для текстовых файлов;

<тип>  любой тип, кроме файлов.

Например:

TYPE

FIL=file of char; {файл символов}

text30=file of string[30]; {файл строк }

Вид файла определяет способ хранения информации в файле. Переменные файловых типов объявляются в разделе VAR

VAR f: FIL;

ff: text30;

а также

f1: TEXT; {переменная текстового файлового типа}

f2: file of real; {переменная файла вещественных чисел}

f3: file; {переменная для нетипизированного файла}

т. е. сразу можно описывать файловые переменные без объявления типа:

VAR

<имя_переменной>: TEXT;

<имя_переменной>: FILE OF <тип>;

<имя_переменной>: FILE;

Некоторые файлы могут только выдавать информацию (клавиатура), другие только принимать ее (устройства печати), третьи позволяют и считывать, и записывать (файл на диске). Именно с помощью файловой системы осуществляется весь ввод и вывод информации программой.

Любой программе доступны два предварительно объявленных файла со стандартными файловыми переменными: INPUT  для чтения данных с клави­атуры и OUTPUT  для вывода на экран.

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

Связывание выполняется стандартной процедурой ASSIGN:

ASSIGN (<файловая_переменная>,<имя_файла_или_л.у.>);

где <файловая_переменная>  правильный идентификатор, обьявленный как переменная файлового типа; <имя_файла_или_л.у.>  текстовое выражение, содержащее имя файла или логического устройства (заключается в апост­рофы).

Пример. VAR

f,f1, f2:text; {объявление файловых переменных}

Begin

ASSIGN(f, 'nameF.txt'); связывание с файлом nameF.txt

ASSIGN(f1, 'PRN'); связывание с принтером

Если имя файла задается в виде пустой строки

ASSIGN(f2, ''),

то в зависимости от направления обмена данными файловая переменная связывается со стандартным файлом INPUT или OUTPUT.

<Имя_файла>  это любое выражение строкового типа, которое стро­ится по правилам определения имен в MS DOS:

 содержит до 8 разрешенных символов: прописные и строчные ла­тинские буквы, цифры и следующие символы ! @ # $ % ^ & ( ) ' ~ - _ ;

 начинается с любого разрешенного символа;

 за именем может следовать расширение  последовательность до трех разрешенных символов. Расширение, если оно есть отделяется от имени точкой, например: Lab1.pas date.txt.

Имя физического файла должно быть корректным и уникальным. Нельзя вставлять символы шаблонов '*' и '?' в имя файла, но можно связывать файловые переменные с несуществующими пока на диске файлами (для их создания).

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

Имя диска  это один из символов А: В: С: ... Z: А: и В: относят­ся к дисковым накопителям на гибких дискетах, С:, D: и т.д. к жестким и виртуальным дискам. Если имя диска не указано, подразумевается по умолчанию устройство, установленной в операционной системе перед нача­лом работы программы.

Максимальная длина имени вместе с путем  79 символов, например:

VAR

f1, f2: text;

...

Assign(f1,'d:\V-129\date.txt');

Assign(f2, name.dat); {текущий каталог}

Логические устройства в ТурбоПаскале - это стандартные аппаратные средства (клавиатура, экран дисплея, принтер, коммуникационные каналы ввода-вывода). За каждым логическим устройством закреплено имя, кото­рое связывается с файловой переменной текстового типа:

CON  (консоль) клавиатура (для чтения) или экран дисплея (для записи);

PRN  логическое имя принтера; если принтеров несколько, то дос­туп осуществляется по логическим именам LPT1(синоним PRN), LPT2, LPT3.

Стандартный библиотечный модуль PRINTER, входящий в библиотеку TURBO.TPL, объявляет имя файловой переменной LST и связывает его с ло­гическим устройством LPT1. Например, следующая программы выдает на принтер указанный текст:

Uses Printer;

Begin

Writeln(LST,'печатаемый текст');

End.

AUX  логическое имя коммуникационного канала. Обычно использует­ся для связи с другими компьютерами. Может выполнять и прием, и пере­дачу информации (но не две функции одновременно). Как правило, в соста­ве ПК имеется два канала COM1 (AUX) и COM2.

NUL  логическое имя пустого устройства, используется в отладоч­ном режиме и трактуется как устройство-приемник информации неограни­ченной емкости. При обращении к NUL как к источнику информации выдает­ся признак конца файла (EOF).

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

Следующие процедуры открывают логический файл с файловой перемен­ной <ф.п.>, связанной ранее с уже существующим файлом или логическим устройством:

RESET(<ф.п.>) - для чтения, REWRITE(<ф.п.>) - для записи.

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

Процедуры открытия могут применяться многократно к одному и тому же файлу. Если файл был до этого открыт, то он автоматически предвари­тельно закрывается. Повторный вызов RESET переустановит последователь­ность чтения вновь на самый первый элемент файла (потеря данных исклю­чена). Но повторное обращение в REWRITE сотрет текущее содержимое фай­ла и подготовит файл к заполнению с первого элемента.

В таблице 7 сведены общие процедуры и функции для работы с файлами, наиболее применимые на практике.

Таблица 7