- •Информатика
- •Введение
- •Алгоритм и программа
- •Интегрированная инструментальная среда turbo pascal 7.0.
- •Начало работы
- •Клавиатура
- •Диалоговые окна
- •Подготовка текста программы Начало работы
- •Ввод текста и внесение изменений в текст программы
- •Компиляция
- •Пробный запуск программы на выполнение
- •Буфер промежуточного хранения
- •Использование справочной системы
- •Сохранение текста программы в файле
- •Отладка программы
- •Завершение работы
- •Алфавит языка
- •Символы, используемые в идентификаторах
- •Разделители
- •Специальные символы
- •Знаки пунктуации
- •Основные типы данных
- •Описание переменных
- •Инструкция присваивания
- •Выражение
- •Тип выражения
- •Выполнение инструкции присваивания
- •Константы
- •Целые константы
- •Вещественные константы
- •Строковые и символьные константы
- •Константные выражения
- •Типизированные константы
- •Стандартные функции
- •Арифметические функции
- •Функции преобразования типа
- •Функции для величин порядкого типа
- •Ввод и вывод информации
- •Инструкции write и writeln
- •Инструкции read и readln
- •Общая структура программы
- •Раздел объявлений и соглашений
- •Заголовок
- •Глобальные директивы компилятора
- •Оператор uses
- •Объявления глобальных меток, констант, типов и переменных
- •Процедуры и функции
- •Заголовок процедуры или функции
- •Объявления локальных меток, констант, типов и переменных
- •Тело процедуры/функции
- •Основной блок программы
- •Управляющие структуры
- •Условие
- •Условный оператор if
- •Условный оператор case
- •Оператор цикла for
- •Оператор цикла repeat
- •Оператор цикла while
- •Оператор безусловного перехода goto
- •Пустой оператор
- •Составной оператор
- •Массивы
- •Объявление массива
- •Некоторые типичные действия с массивами
- •Вывод массива
- •Ввод массива
- •Сортировка массива
- •Сортировка методом прямого выбора
- •Сортировка методом прямого обмена
- •Поиск в массиве
- •Поиск минимального (максимального) элемента массива
- •Операции с матрицами
- •Сложение матриц
- •Транспонирование матрицы
- •Умножение матриц
- •Символы и строки
- •Символы
- •Массив символов
- •Функция length
- •Процедура delete
- •Функция pos
- •Функция copy
- •Процедуры и функции
- •Процедура
- •Функции
- •Параметры-процедуры и параметры-функции.
- •Процедура exit
- •Директивы подпрограмм
- •Директива forward
- •Директивы far и near
- •Директива external
- •Директива assembler
- •Директива inline
- •Директива interupt
- •Рекурсия Понятие рекурсии
- •Пример программы: поиск пути
- •Вывод в файл
- •Объявление файла
- •Назначение файла
- •Инструкции вывода в файл
- •Открытие файла для вывода
- •Ошибки открытия файла
- •Закрытие файла
- •Ввод из файла
- •Открытие файла
- •Чтение из файла
- •Конец файла и конец строки
- •Введение в структурное программирование
- •Рекомендательный библиографический список Основной:
- •Дополнительный:
Ошибки открытия файла
Попытка открыть файл может завершиться неудачей и вызвать ошибку времени выполнения программы. Причин неудачи открытия файлов может быть несколько. Например, если программа пытается открыть файл на гибком диске, который не готов к работе (не закрыта шторка накопителя или диск не вставлен в накопитель). Другая причина отсутствие открываемого в режиме добавления файла (файла нет добавлять некуда).
Выяснить, завершилась ли успехом процедура открытия файла, можно, проверив значение функции IOResult (Input-Output Result результат ввода-вывода). Функция IOResult() возвращает 0, если операция ввода-вывода завершилась успешно; в противном случае не ноль. Однако чтобы программа могла проверить результат выполнения операции ввода-вывода, нужно разрешить ей это делать, добавив перед вызовом процедуры открытия файла строку {$I-}. После инструкции открытия файла следует поместить {$I+}.
На рис. 27 приведена блок-схема алгоритма и фрагмента программы, обеспечивающего открытие файла для добавления, если файл уже есть на диске, или создание нового, если файла нет.
Рис. 27. Блок-схема алгоритма открытия файла с обработкой возможной ошибки
assign (f, filename) ;
{$I-} append(f) ;
{$I+} if IOResult<>0
then rewrite(f) ;
Закрытие файла
Перед завершением работы программа должна закрыть все открытые файлы. Это делается вызовом процедуры CLOSE. Процедура CLOSE имеет один параметр имя файловой переменной.
Пример использования процедуры: close(f) ;
Ввод из файла
Язык Паскаль позволяет вводить исходные данные для программы не только с клавиатуры, но и из текстового файла. Чтобы воспользоваться этой возможностью, нужно объявить файловую переменную типа TEXT, назначить ей при помощи инструкции ASSIGN имя файла, из которого будут читаться данные, открыть файл для чтения (ввода) и прочитать (ввести) данные, используя инструкцию READ или READLN.
Открытие файла
Открытие файла для ввода (чтения) выполняется вызовом процедуры RESET, имеющей один параметр файловую переменную. Перед вызовом процедуры RESET файловой переменной назначается имя файла вызовом процедуры ASSIGN.
Следующие инструкции открывают файл для ввода:
assign(f, ‘c:\data.txt’) ;
reset(f) ;
Если имя файла указано неверно, т. е. файла с таким именем на диске нет, то возникает ошибка времени выполнения программы. Следует отметить, что другой причиной возникновения ошибки при открытии файла, находящегося на гибком диске, может быть отсутствие готовности дисковода, проще говоря, отсутствие диска в накопителе (пользователь забыл вставить диск). Поэтому в программе следует предусмотреть возможность повторной попытки открытия файла после соответствующего ответа пользователя.
Как и при открытии файла для добавления, программа может взять на себя задачу обработки возможной ошибки при открытии файла, проверяя значение, возвращаемое функцией IOResult. Следующий фрагмент программы использует значение функции IOResult для проверки успеха открытия файла. Если попытка открыть файл вызывает ошибку, то запрашивается необходимость повторного открытия.
label
konec ;
var
f : text ;
fname : string[80] ; { имя файла }
res : integer ; { результата открытия файла }
otv : char ; {ответ на предложение повторить попытку открыть файл}
begin
fname := ‘a:\test.txt’ ;
assign ( f, fname ) ;
repeat
{$I-}
reset ( f ) ; { открыть файл для чтения }
{$I+}
res := IOResult ;
if res <> 0
then begin
write(‘ ОШИБКА: файл ‘,fname,’ не найден’) ;
writeln(‘ или диск не готов.’) ;
write(‘Повторить попытку ? (д/н)-> ‘) ;
readln ( otv ) ;
end ;
until ( res = 0 ) OR ( otv = ‘н’ ) ;
if res <> 0 then goto konec ;
{ здесь инструкции программы }
konec :
end.