
- •Федеральное агентство по образованию
- •Структурированные типы данных. Классификация
- •Массивы Определение массива
- •Обращение к элементу массива. Хранение элементов массива. Доступ к элементам массива
- •Действия над массивами
- •Поиск элемента (одномерного ) массива Поиск среди неупорядоченных элементов массива
- •Поиск среди упорядоченных элементов массива
- •Сортировка элементов (одномерного) массива
- •Линейная сортировка (сортировка отбором)
- •Сортировка методом пузырька
- •5 4 3 1 2
- •5 4 3 2 1 Метод быстрой сортировки с разделением
- •Множества
- •Объявление множеств
- •Представление в памяти переменной типа множество
- •Операторы для работы с множествами Проверка принадлежности элемента множеству
- •Операции над множествами
- •Сравнение множеств
- •Применение множеств
- •Процедуры и структурное программирование
- •Преимущества структурного программирования
- •Планирование структурированной программы
- •Метод программирования сверху вниз
- •Определение процедуры
- •Передача управления при вызовах процедур и функций
- •Функции: подпрограммы,возвращающие единственный результат
- •Понятие блока
- •Область действия и время жизни переменных
- •Особенности локальных переменных
- •Особенности глобальных переменных
- •Особенности использования процедур и функций в турбо паскале
- •Опережающее определение процедур и функций
- •Рекурсия и итерация
- •Процедуры и функции как параметры
- •Директивы подпрограмм
- •Отладка и тестирование программ, содержащих подпрограммы
- •Нисходящее тестирование и подпрограммы-заглушки
- •Восходящее тестирование и программы-тестеры
- •Рекомендации по отладке программ, содержащих подпрограммы
- •Использование отладчикадля трассировки процедур
- •Запуск внешних программ
- •Стандартные модули
- •Модуль Crt
- •Модуль Graph
- •Функции
- •Текстовые файлы
- •Нетипизированные файлы
- •Типизированные файлы
- •Прямой доступ
- •Дополнительные функции работы с файлами
- •Обработка ошибок ввода-вывода
- •Указатели и динамические переменные Статические и динамические переменные
- •Адресация памяти в Турбо Паскале
- •Карта памяти Турбо Паскаля
- •Указатели
- •Операция для получения адреса
- •Функции для работы с адресами
- •Процедуры для работы с указателями
- •Присваивание значений указателям
- •Организация ссылок
- •Динамические структурированные переменные Динамические записи
- •Динамические массивы
- •Массивы размером более 64 кбайт
- •Строки с завершающим нулем (asciiz)
- •Процедуры и функции модуля strings
- •Указатели на процедуры и функции
- •Динамические структуры данных
- •Линейные списки
- •60 Лекции по курсу «Языки программирования» Часть II
Дополнительные функции работы с файлами
Модуль System | |
ChDir |
Выполняет смену текущего каталога |
MkDir |
Создает подкаталог |
RmDir |
Удаляет подкаталог (пустой) |
GetDir |
Получить текущий каталог на заданном диске |
Модуль DOS | |
DiskFree |
Число свободных байтов на диске |
DiskSize |
Размер диска в байтах |
GetFAttr |
Получение атрибутов неоткрытого файла |
SetFAttr |
Задание атрибутов неоткрытого файла |
FSplit |
Получение составных частей имени файла |
FExpand |
Формирование полного имени файла |
FSearch |
Поиск файла в списке католога |
FindFirst |
Поиск в указанном или текущем каталоге первого файла, соответствующего заданному шаблону и атрибутам |
FindNext |
Поиск следующего файла, соответствующего шаблону и атрибутам, заданным в последнем обращении к FindFirst |
Прототипы процедур FindFirst и FindNext имеют вид:
FindFirst(Path: String; Attrib: Word; Var SR: SearchRec);
FindNext(Var SR: SearchRec);
Для работы с этими подпрограммами требуются следующие предопределенные описания:
Константы
Const
ReadOnly = $01; только для чтения
Hidden = $02; скрытый
SysFile = $04; системный (непереносимый)
Volume ID = $08; метка диска
Directory = $10; подкаталог
Archive = $20; архивный
AnyFile = $3F; сумма всех предыдущих
Эти атрибуты можно складывать или вычитать (из anyfile).
Переменная DOSError. Она используется для анализа ошибок MS DOS. Значение этой переменной, равное нулю, соответствует отсутствию ошибки. Смысл некоторых ненулевых кодов следующий:
2 – файл не найден
3 – маршрут не найден
5 – доступ к файлу запрещен
6 – неправильная обработка
8 – недостаточно памяти
10 – неверные установки значений параметров среды
11 – неправильный формат
18 – файлов нет
При работе процедуры FindFirst возможны ошибки с номерами 2 и 18, а при работе FindNext – только 18.
3) Тип
Type
SearchRec = record
Fill: array[1..21] of byte; {системное поле}
attr: byte; {байт атрибутов}
time: longint; {время создания}
size: longint; {размер файла}
name: string[12]; {имя файла}
end;
Поля переменной этого типа содержат информацию о последнем файле, найденном с помощью FindFirst и FindNext.
Процедура FindFirst при заданных имени файла и атрибутах должна вызываться лишь один раз. Она записывает в поля переданной ей переменной SR типа SearchRec информацию о первом найденном файле, удовлетворяющем заданным условиям. Эта информация в дальнейшем будет использоваться процедурой FindNext, которая всегда вызывается после FindFirst и заполняет поля переменной SR информацией о следующем найденном файле.
Контроль работы этих процедур ведется с помощью переменной DOSError: если файла нет, то DOSError<>0.
Обработка ошибок ввода-вывода
Все рассмотренные ранее программы были написаны так, что возможные ошибки ввода-вывода игнорировались. Однако реально это не так. В ТР стандартной реакцией на наличие ошибок в вашей программе является следующее: ваша программа аварийно завершается и выдает сообщение:
Runtime error <номер> <смещение>.
Такое сообщение буде полезно вам как программистам при поиске места и причины ошибки в программе. Однако показывать такое сообщение пользователю вашей программы будет не совсем дружественно.
Для того, чтобы ваша программа из-за ошибки аварийно не завершалась и для того, чтобы не пугать пользователей непонятными им сообщениями, вам необходимо перехватить инициативу по обработке ошибок у системы и писать собственные обработчики ошибок стадии выполнения (исключений). Традиционно обработка ошибок в программах осуществляется с помощью установки флагов (в случае ошибки) и последующего анализа этих флагов. Для перехвата ошибок ввода-вывода на Паскале необходимо:
Специальным образом оформить каждый фрагмент программы, которые потенциально могут вызвать ошибку. К таким фрагментам относятся - открытие файда, чтение из файла, запись в файл.
При наличии такого специального оформления необходимо по завершению фрагмента проверить: была ошибка или нет. Если была, то вы должны выполнить ее обработку (хотя бы вывести свое сообщение).
Пример:
reset(f);
при попытки открытия файла физически файл может отсутствовать на диске. Этот оператор в программе является потенциальным источником ошибки.
Специальное оформление потенциально опасных участков программы состоит в том, что вы должны как бы завернуть каждый опасный участок в специальный код: выше и ниже опасного фрагмента программы вы должны расположить две директивы компилятора:
{$I-} - указывает на то, что необходимо отключить системный контроль ошибок
reset(f);
{$I+} - указывает на то, что необходимо включить системный контроль ошибок
При наличии директивы компилятора {$I-} даже при наличии ошибок в/в программа аварийно не завершается и ход выполнения программы не нарушается.
Замечание: По умолчанию действует директива {$i+}.
Контроль ошибок в/в производится с помощью функции IOResult . Если ошибка имеет место, то значение этой функции отлично от нуля. Поэтому типичный шаблон обработки ошибки ввода-вывода имеет вид:
If IOResult <> 0 Then {обработка ошибки};
Обычно обработка ошибки сводится к сообщению об ошибки и завершению вашей программы (с помощью процедуры HALT или EXIT).
Замечание: Опросить функцию IOResult можно лишь один раз после каждой операции ввода-вывода, т.к. она обнуляет свое значение перед каждым вызовом. Поэтому целесообразно сохранять значение, возвращенное IOResult, в специально выделенной переменной.
Пример.
{$I-}
reset(f);
{$I+}
If IOResult <> 0
then begin
Writeln(‘Ошибка открытия файла’);
Halt;
end;