
- •Лабораторный практикум
- •Лабораторный практикум
- •Содержание
- •Введение
- •61002, Харків, вул. Фрунзе, 21.
- •61002, Харків, вул. Фрунзе, 21.
- •Порядок выполнения работы
- •Теоретические сведения
- •Пример решения задачи
- •Индивидуальные задания
- •Порядок выполнения работы
- •Теоретические сведения
- •Пример решения задачи
- •Индивидуальные задания
- •Порядок выполнения работы
- •Теоретические сведения
- •Пример решения задачи
- •Индивидуальные задания
- •Порядок выполнения работы
- •Теоретические сведения
- •Пример решения задачи
- •Примеры решения задач
- •Индивидуальные задания
- •Порядок выполнения работы
- •Теоретические сведения
- •Пример решения задачи
- •Примеры решения задач
- •Индивидуальные задания
- •Константы цвета
- •Порядок выполнения работы
- •Теоретические сведения
- •Пример решения задачи
- •Примеры решения задач
- •Индивидуальные задания
- •Порядок выполнения работы
- •Теоретические сведения
- •Пример решения задачи
- •Текст программы
- •Примеры решения задач
- •Индивидуальные задания
- •Порядок выполнения работы
- •Теоретические сведения
- •Пример решения задачи
- •Текст программы
- •Примеры решения задач
- •Индивидуальные задания
Порядок выполнения работы
Выберите метод решения задачи.
Выберите стандартные функции, необходимые для решения задачи.
Выберите форму представления данных.
Разработайте алгоритм решения задачи. Для ввода данных
используйте диалоговый режим или вводите с помощью генератора
случайных чисел. Результат решения задачи выведите на экран
дисплея.
Теоретические сведения
Файловые переменные и типы
Для организации работы по вводу/выводу в программе могут быть определены специальные переменные файловых типов.
Использование переменных файловых типов предполагает интерпретацию файла как потенциального бесконечного списка значений одного и того же
(базового) типа. Например: описание переменной вида
F : FILE OF INTEGER ;
понимается как определение в программе под именем F списка неопределенного количества целых чисел, расположенного на некотором внешнем запоминающем устройстве (например на магнитном диске).
С каждой переменной файлового типа также связано понятие текущего указателя файла.
Текущий указатель можно понимать как скрытую переменную (т.е. неявно описанную вместе с файловой переменной, которая обозначает («указывает») на некоторый конкретный элемент файла. Таким образом можно графически представить интерпретацию файла связанного с переменной F, так:
целое |
целое |
целое |
. . . . . |
целое |
. . . . . |
целое |
. . . . . |
текущий
указатель
Как правило, все действия с файлом (чтение из файла, запись в файл) производятся поэлементно, причем в этих действиях участвует тот элемент файла, который обозначен текущим указателем.
В результате совершения операций текущий указатель может перемещаться, настраиваясь на тот или иной элемент файла.
Все элементы файла считаются пронумерованными. Начальный элемент имеет нулевой номер.
Итак:
файловый тип задается в программе с помощью служебных слов:
FILE и OF
за которыми следует тип элементов файла (базовый тип).
Базовый тип может быть любым типом, кроме файлового. Кроме того, в качестве базового типа не допускается комбинированный тип, одним из полей которого является файл. |
Операции над файлами
Над файлами допустимы следующие операции:
установочные и завершающие операции
собственно ввод - вывод
перемещения по файлу
специальные операции
Установочные и завершающие операции
В эту группу входят четыре операции, реализованные в виде стандартных процедур:
ASSIGN
RESET
REWRITE
FLUSH
CLOSE
Процедура ASSIGN предназначена для установления связи между конкретным физическим файлом на магнитном носителе и переменной файлового типа, которая будет являться представителем этого файла в программе.
Процедура имеет два параметра:
имя файловой переменной
строковое выражение, образующее литеральное имя файла
Пример:
ASSIGN ( F, ‘ MASSIV.DAT’) ;
Процедуры RESET и REWRITE имеют один параметр - файловую переменную и предназначены для открытия файлов (при этом файловая переменная, указываемая в качестве параметра должна быть уже связана с конкретным файлом с помощью процедуры ASSIGN ).
Разница между этими двумя процедурами заключается в начальных действиях с файлом.
Процедура RESET предполагает, что открываемый файл уже существует, в противном случае возникает ошибка.
Процедура REWRITE допускает, что открываемый файл может не существовать. В этом случае она создает заданный файл. Если же файл существует, то процедура REWRITE очищает его.
Процедура FLUSH (параметр - файловая переменная) используется для завершения обменов с файлом без его закрытия. Обмены с файлами всегда реализуются через некоторый буфер в операционной памяти, поэтому в процессе записи в файл последние записываемые элементы могут еще находиться ( «застрять» ) в буфере.
Процедура FLUSH вызывает принудительный сброс этих элементов в файл.
Эта процедура имеет смысл в том случае, если с файлом проводились операции записи, и используется редко, так как процедура CLOSE производит такие же действия.
Процедура CLOSE завершает действия с файлом, который указывается в качестве ее единственного параметра. При этом ликвидируются внутренние буфера, образованные при открытии этого файла.
После этого файловую переменную можно связать посредством процедуры ASSIGN с другим файлом.
Заметим, что при окончании работы всей программы происходит автоматическое закрытие всех файлов, открытых в программе. Однако хорошим правилом является явное закрытие файлов процедурой CLOSE после окончания работы с ними.
Ввод-вывод файлов
В эту группу входят две процедуры, которые, собственно, и реализуют действия по чтению информации из файла и записи информации в файл:
READ
WRITE
Процедура READ предназначена для чтения значений из файла в программу. Первым параметром должно быть имя файловой переменной, к которой была применена одна из операций открытия ( RESET или REWRITE ).
Далее должны следовать переменные, в которые будут помещаться читаемые из файла значения. Тип этих переменных должен совпадать с базовым типом файла из первого параметра.
Процедура WRITE имеет обратный смысл, позволяя записывать в файл информацию из программы. Первым параметром этой процедуры должна быть файловая переменная, предварительно открытая процедурой RESET или REWRITE.
Далее должен идти список выражений, тип которых совпадает с базовым типом файла из первого параметра.
Текстовые файлы
Структура текстовых файлов отличается от структуры обычных файлов (линейная последовательность элементов одного типа) тем, что содержимое текстового файла рассматривается как последовательность символьных строк переменной длины, разделенных специальной комбинацией, называемой «конец строки».
Представителем текстового файла в языке Паскаль - является переменная файлового типа, которая должна быть описана с указанием стандартного типа
TEXT :
Пример:
VAR
TEXTINF : TEXT ;
Слово TEXT не является зарезервированным словом, а считается идентификатором стандартного типа, наряду с идентификаторами:
INTEGER , REAL , CHAR и т.д.
Работа с текстовыми файлами организуется построчно, причем характер чтения и записи является строго последовательным.
Кроме того, для одного текстового файла нельзя одновременно производить операции и ввода и вывода.
Список операций над текстовыми файлами
Начальные операции
ASSIGN
RESET
Завершающие операции
REWRITE
CLOSE
Необходимо иметь ввиду, что операция RESET открывает текстовый файл для последовательного чтения из него, а операция REWRITE – для обновления файла ( т.е. записи в него ).
Эту разницу следует помнить, так как после открытия текстового файла можно либо только читать из него, либо только писать.
Если необходимо изменить характер работы с текстовым файлом, необходимо заново открыть его, используя нужную процедуру.
Дополнительные операции
APPEND
SETTEXTBUF
Процедура APPEND имеет один параметр – файловую переменную и предназначена, аналогично REWRITE, для открытия файла с последующей записью в него. Однако процедура APPEND не очищает файл, а только устанавливает текущий указатель файла в его конец. Таким образом процедуру APPEND удобно использовать, когда необходимо добавить новые строки в конец уже существующего файла.
Процедура SETTEXTBUF определяет буфер для обмена с текстовым файлом. Эта процедура носит альтернативный характер и используется для ускорения обмена с файлами. Дело в том, что с каждой переменной файлового типа связывается специальный системный буфер размером 128 байтов, через который реально и осуществляются обмены с этим файлом. Этот буфер отводится автоматически и непосредственный доступ к нему невозможен.
Процедура SETTEXTBUF позволяет сформировать этот буфер не в системной области, а в самой Паскаль-программе и при необходимости задать его размер. Форма вызова:
SETTEXTBUF ( VAR F : TEXT ; VAR BUF ) или
SETTEXTBUF ( VAR F : TEXT ; VAR BUF ; SIZE : WORD )
где :
F – переменная файлового типа (при этом файл не должен быть открыт); BUF – переменная для размещения буфера (параметр не типизированный); SIZE – размер буфера в байтах. Если не задан – по умолчанию
устанавливается размер 128 байтов.
Операции ввода-вывода
Ввод-вывод текстовых файлов осуществляется при помощи тех же процедур, что и обычных файлов. Описание данных процедур смотри выше.