Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
answ_infa (1).docx
Скачиваний:
8
Добавлен:
10.05.2015
Размер:
85.03 Кб
Скачать

Директивы far и near

Как правило, компилятор Turbo Pascal автоматически выбирает адресацию к подпрограмме. Например, если подпрограмма находится в одном файле с основной программой, то она компилируется с "ближним" (near) адресом входа и возврата, состоящим только из смещения в текущем сегменте, а если она находится и модуле, то формируется "дальний" (far) адрес, состоящий из адреса сегмента и смещения.

В некоторых случаях нужен нестандартный вариант компиляции. Так, например, если подпрограмма используется для переменных процедурного типа, она независимо от своего расположения должна компилироваться с получением "дальнего" адреса. В этом случае в подпрограмме можно использовать директиву far, которая сообщит компилятору, что нужно формировать именно такой адрес. Эта директива эквивалентна ключу компилятора {$F+}, однако в отличие от этого ключа действие директивы распространяется только на одну подпрограмму.

Реже используется директива near, которая сообщает компилятору, что подпрограмму следует компилировать с получением именно такого адреса. Эта директива эквивалентна ключу компилятора {$F-}, который выбирается по умолчанию. Действие директивы распространяется только на одну подпрограмму.

Директива EXTERNAL

Директива external позволяет использовать в программе подпрограммы, написанные на языке ассемблера и скомпилированные отдельно. Эти подпрограммы должны быть скомпонованы с основной программой, используя ключ {$L <имя файла>}. Здесь имя файла - имя того файла (с расширением .OBJ), в котором находятся скомпилированные объектные модули подпрограмм, написанных на языке ассемблера.

Директива ASSEMBLER

Директива assembler позволяет написать подпрограмму полностью на языке ассемблера. При этом во время компиляции подпрограмма будет автоматически скомпилирована встроенным ассемблером пакета Turbo Pascal. При отладке такой подпрограммы можно использовать встроенный отладчик пакета.

Директива INLINE

Директива позволяет включить в текст программы команды, записанные непосредственно в машинных кодах. В отличие от других подпрограмм подпрограмма с директивой inline непосредственно добавляется всюду, где есть ее вызов (фактически она является макроопределением). Такие подпрограммы могут иметь па параметры, которые можно использовать в тексте подпрограммы, получая их из стека.

Машинные коды в процедуре записываются в круглых скобках побайтно через прямой слэш (/).

Директива INTERRUPT

Директива interrupt предназначена для процедур, обрабатывающих прерывания.

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

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

В Turbo Pascal имеется 3 категории файлов: текстовые (тип Text), типизированные (file of <тип>) и файлы без типа (file)

 Работа с этими категориями файлов несколько отличается друг от друга.

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

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

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

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

ПРОЦЕДУРЫ

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

ChDir(Path) - изменение текущей директории. Устанавливает новый текущий каталог, путь к которому (включая, быть может, и имя устройства) находится в параметре Path. Параметр Path по своим характеристикам аналогичен параметру Name в процедуре Assign, но в него не должно входить имя файла и он может быть только типа string (или совместимого для присваивания с ним типа).

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

Erase (F) - уничтожение внешнего файла. Удаляется внешний файл, с которым связана файловая переменная F.

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

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

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

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

Rewrite(F[,Size]) - открытие нового файла. Открывается новый пустой файл, и ему присваивается имя, заданное процедурой Assign. Если файл с таким именем уже существует, то он уничтожается. Необязательный параметр Size имеет тот же смысл, что и в процедуре Reset.

RmDir(Path) - удаление пустого каталога. Удаляется пустой каталог, путь до которого указан параметром Path. Параметр Path по своим характеристикам аналогичен параметру Name в процедуре Assign, но в него не должно входить имя файла, и он может быть только типа string (или совместимого для присваивания с ним типа).

ФУНКЦИИ

Eof (F) - конец файла. Принимает значение True, если указатель текущей компоненты файла находится за последней компонентой файла (за последним символом, если файл текстовый) , и False - в противном случае.

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

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

Особенностью работы с текстовыми файлами является то, что параметры, значения которых вводятся и выводятся с помощью процедур Read или Write, могут быть не обязательно типа Char или string, а и других простых типов (целых, вещественных типов при вводе; целых, вещественных типов, типа Boolean - при выводе). Эти процедуры могут также работать и с ASCIIZ-строками.

Имеется две стандартные файловые переменные для текстового файла: Input и Output. Переменная Input по умолчанию связана с клавиатурой, a Output - с экраном дисплея. Эти устройства автоматически открываются при запуске программы, т. е. фактически выполняются процедуры:

Assign(Input,''); Reset(Input);

Assign(0utput,' ' ) ; Rewrite(Output);

Они также автоматически закрываются после работы программы.

Если при работе с файлами типа Text в процедуре или функции не указана файловая переменная, считается, что используется файловая переменная Input или Output.

Файл типа Text может быть открыт либо для чтения процедурой Reset, либо для записи процедурой Rewrite или Append.

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

ПРОЦЕДУРЫ

Append (F) - открытие файла для добавления в конец информации. Открывается существующий файл, с которым связана файловая переменная F, и указатель текущей компоненты файла настраивается на конец файла.

Flush (F) - освобождение буфера выходного файла. Информация из буфера вывода записывается в файл, с которым связана файловая переменная F.

Read(F, <список ввода>) - чтение информации из файла. Из файла, с которым связана файловая переменная F, читаются значения для одной или нескольких переменных списка ввода (см. ниже).

ReadLn(F, <список ввода>) - чтение строки из файла. То же, что и процедура Read, но непрочитанная часть строки, включая признак конца строки, пропускается.

SetTextBuf(F, Buf[, Size]) - назначение буфера ввода-вывода. Для файла, с которым связана файловая переменная F, назначается буфер ввода-вывода в виде переменной Buf (любого типа). Необязательный параметр Size задает размер буфера в байтах. Если этот параметр не указан, в качестве буфера используется вся переменная Buf. Если эта процедура не используется, для организации ввода-вывода берется стандартный буфер ввода-вывода размером в 128 байтов.

Write (F, <список вывода>) - запись информации в файл. В файл, с которым связана файловая переменная F, записываются значения выражений списка вывода (см. ниже).

WriteLn(F, <список вывода>) - запись строки в файл. То же, что и процедура Write, но выводимая информация завершается признаком конца строки.

ФУНКЦИИ

Eoln(F) - конец строки файла. Принимает значение True, если текущей компонентой файла является признак конца строки или если функция Eof (F) принимает значение True. В остальных случаях функция принимает значение False.

SeekEof (F) - конец файла. Отличается от Eof (F) тем, что стоящие в конце файла символы пробела и табуляции пропускаются.

SeekEoln(F) - конец строки файла. Отличается от Eoln(F) тем, что стоящие в конце строки символы пробела и табуляции пропускаются.

45) Ответ дан в 43 пункте

46) При работе с типизированными файлами используются следующие дополнительные процедуры и функции (здесь также F - файловая переменная, связанная с конкретным физическим файлом процедурой Assign).

ПРОЦЕДУРЫ

Read(F, <список ввода>) - чтение информации из файла. То же, что и процедура Read для текстовых файлов, но переменные, в которые читается информация, должны быть того же типа, что и компоненты файла.

Seek(F, Num) - настройка на требуемую компоненту файла. Осуществляется настройка на компоненту файла, с которым связана файловая переменная F. Компонента файла определяется номером Num, причем нумерация компонент начинается с нуля.

Truncate (F) - удаление части файла, начиная с текущей позиции. Удаляется часть файла, начиная с текущей позиции и до его конца.

Write (F, <список вывода>) - запись информации в файл. То же, что и процедура Write для текстовых файлов, но список вывода представляет собой переменные того же типа, что и компоненты файла.

ФУНКЦИИ

FilePos(F) - номер текущей компоненты файла. Функция возвращает номер текущей компоненты файла, с которым связана файловая переменная F. Нумерация компонент начинается с нуля.

FileSize(F) - текущий размер файла. Функция возвращает текущий размер файла, с которым связана файловая переменная F, в компонентах этого файла.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]