Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
выш.мат. методичка.DOC
Скачиваний:
31
Добавлен:
13.02.2015
Размер:
1.71 Mб
Скачать

10.5.6. Директива interrupt

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

Рrосеdure IntНаndler(Flags, СS, IP, АХ, ВХ, СХ, DХ, SI, DI, DS, ЕS, ВР: Word); interrupt;

begin

:

end;

В заголовке отдельные параметры можно опускать (но только с начала спис­ка), промежуточные параметры удалять нельзя, например:

Рrосеdure IntНаndler(DI, ЕS, ВР: Word); interrupt; {неправильный заголовок}

Рrосеdure IntНаndler(DI, DS, ЕS, ВР: Word); interrupt; {правильный заголовок}

Нельзя в заголовке процедуры обработки прерываний записывать и какие-ли­бо другие параметры.

10.6. Рекурсивные процедуры и функции

Язык Паскаль допускает, чтобы подпрограмма вызывала саму себя (рекурсив­ное обращение). Эта возможность связана с тем, что при каждом новом обраще­нии к подпрограмме параметры, которые она использует, заносятся в стек, причем параметры предыдущего обращения также сохраняются.

В ряде случаев (обычно для рекурсивных алгоритмов) рекурсивное оформле­ние подпрограммы может быть более компактным и эффективным, но не следует забывать об опасности переполнения стека.

Пример. Вариант функции, рекурсивно вычисляющей факториал числа N.

function Factorial(N:Byte): LongInt;

begin

if N in [0..1] then Factorial := 1

else Factorial: =N* Factorial(N-1)

end;

11 Организация ввода-вывода

В языке Паскаль ввод-вывод информации осуществляется через файловые переменные.

Перед тем, как осуществлять ввод-вывод, файловая переменная должна быть связана с конкретным внешним файлом с помощью процедуры Assign. Этим файлом может быть файл на магнитном диске или ленте, а также устройство вы­числительного комплекса (клавиатура, экран дисплея, принтер и т.д.). Затем файл должен быть открыт для чтения и/или записи. После этого можно осущест­влять организацию ввода-вывода.

В Turbo Pascal имеется 3 категории файлов: текстовые (тип Техt), типи­зированные (file of <тип>) и файлы без типа (file) (см. п. 6.6). Работа с этими категориями файлов несколько отличается друг от друга.

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

После работы с файлом он, как правило, должен быть закрыт процедурой С1оsе. Это требование обязательно должно соблюдаться для файла, в который производилась запись.

При работе с файлами автоматически проверяются ошибки ввода-вывода. Если проверка ошибки включена (по умолчанию или с помощью ключа компиля­тора {$I+}), то при возникновении ошибки выполнение программы автоматически завершается, если же проверка ошибки отключена (с помощью ключа {$I-}), программа продолжает выполняться и можно проверить результат ввода-вывода с помощью функции IOResult.

11.1. Стандартные процедуры и функции для всех файлов

В данном разделе будут кратко описаны процедуры и функции, которые применимы для всех файлов. Во всех этих процедурах и функциях F- файловая переменная, связанная с конкретным физическим файлом процедурой Assign.

ПРОЦЕДУРЫ

Аssign(F, Name) - связь файловой переменной с внешним файлом.

Связывает файловую переменную F с внешним файлом, имеющим имя Name. Name - переменная или константа типа string (или совместимого для присвания с ним типа) или типа РСhar. Имя типа должно быты написано в соответствии с правилами МS DOS, может включать путь и не должно превышать 79 символов. Если строка имени пустая, осуществляется связь со стандартным файлом ввода или вывода (как правило, консолью).

ChDir(Раth) - изменение текущей директории.

Устанавливает новый текущий каталог, путь к которому (включая, быть мо­жет, и имя устройства) находится в параметре Раth. Параметр Раth по своим характеристикам аналогичен параметру Nаmе в процедуре Аssign, но в него не должно входить имя файла и он может быть только типа string (или совмести­мого для присваивания с ним типа).

Сlоsе(F) - закрытие открытого файла.

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

Еrase(F)— уничтожение внешнего файла.

Удаляется внешний файл, с которым связана файловая переменная F.

GetDir(N,S) - получение текущего каталога накопителя. В переменную S типа string записывается текущий каталог накопителя, номер которого указан параметром N. Параметр N имеет следующие значения: 0 - текущий накопитель, 1 - накопитель А;, 2 - накопитель В: и т. д.

МkDir(Раth) - создание каталога. Создается новый каталог, путь до которого указан параметром Раth. Параметр Раth по своим характеристикам аналогичен параметру Name в процедуре Аssign, но в него не должно входить имя файла, и он может быть только типа string (или совместимого для присваивания с ним типа).

Rename(F,NewName) - переименование внешнего файла.

Внешний файл, с которым связана файловая переменная F, получает новое имя, заданное параметром NewName. Параметр NewName по своим характеристикам аналогичен параметру Name в процедуре Assign.

Reset(F[,Size]) - открытие существующего файла.

Открывается существующий файл, с которым связана файловая переменная F, и указатель текущей компоненты файла настраивается на начало файла. Нео­бязательный параметр целого типа Size используется только с файлами безти­па и задает размер пересылаемого элемента информации в байтах. По умолча­нию этот размер равен 128.

Rewrite(F[,Size]) - открытие нового файла.

Открывается новый пустой файл, и ему присваивается имя, заданное процедурой Аssign. Если файл с таким именем уже существует, то он уничтожается. Необязательный параметр Size имеет тот же смысл, что и в процедуре Reset.

RmDir(Раth) - удаление пустого каталога.

Удаляется пустой каталог, путь до которого указан параметром Раth. Параметр Раth по cвоим характеристикам аналогичен параметру Name в процедуре Аssign, но в него не должно входить имя файла, и он может быть только типа string (или совместимого для присваивания с ним типа).