Читайте также: |
|
Применяются в ТП для организации передачи в качестве фактических параметров процедур и функций.
Существует два процедурных типа: тип-процедура и тип-функция. При объявлении процедурных типов используется заголовок процедуры, в котором опускается ее имя, например:
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.
В качестве параметров не могут передаваться рассмотренным способом стандартные процедуры (функции).
Файлы
Файл - именованная область внешней памяти ПК. Файлом может называться логическое устройство, потенциальный источник или приемник информации.
Файл характеризуется именем, содержит компоненты одного типа (типом может быть любой тип, кроме файлов). Длина вновь создаваемого файла не указывается при его объявлении.
Файлы делятся на типизированные, текстовые, нетипизированные. Определяются файловые типы в блоке 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
Дата добавления: 2015-09-05; просмотров: 56 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Program zapis; | | | Общие процедуры и функции для работы с файлами |