- •64 Жегуло а.И. Компьютерные науки 2-й семестр 2011-2012 гг. Компьютерные науки Лекции для студентов 1 курса мехмата, 2011-2012 уч. Г.
- •2 Семестр
- •16.Модули
- •16.1.Модуль и модульное программирование
- •16.2.Структура модуля
- •Interface //Раздел интерфейса
- •Implementation //Раздел реализации
- •Initialization //Раздел инициализации
- •Пример модуля и его использования
- •Interface //Раздел интерфейса
- •Implementation //Раздел реализации
- •Заголовок модуля
- •Раздел интерфейса interface
- •Раздел реализации implementation
- •Раздел инициализации initialization
- •16.4.Использование объявленных в модуле объектов
- •17.Файлы
- •17.1.Файлы. Классификация файлов
- •17.2.Организация работы с файлами
- •17.3.Подпрограммы для работы с файлами любых типов Связывание файловой переменной с файлом
- •Запись в файл
- •17.5.Обработка ошибок ввода-вывода
- •17.6.Текстовые файлы
- •17.6.1.Структура текстового файла
- •17.6.2.Особенности открытия текстовых файлов
- •17.6.3.Особенности чтения и записи для текстовых файлов
- •17.6.7.Поэлементная обработка текстовых файлов, состоящих из строковых значений и чисел
- •17.7.Типизированные файлы
- •17.7.1.Описание и структура типизированного файла
- •17.7.5.Сравнение текстовых и типизированных файлов
- •17.7.6.Пример работы с типизированными файлами из записей
- •18.Процедурные типы
- •18.1.Назначение процедурных типов
- •18.2.Описание процедурных типов и процедурных переменных
- •18.3.Присваивание процедурным переменным. Вызов подпрограмм через процедурные переменные
- •18.4.Процедурные переменные в качестве параметров
- •19.Рекурсия
- •19.1.Что такое рекурсия
- •19.2.Рекурсивные подпрограммы
- •19.3.Прямая и косвенная рекурсия
- •19.4.Предварительное (опережающее) описание подпрограммы
- •19.5.Опасности рекурсии
- •19.5.1.Бесконечная рекурсия
- •19.5.2.Глубокая рекурсия
- •19.5.3.Итерация и рекурсия, необоснованное применение рекурсии
- •19.6.Когда использовать рекурсию
- •19.7.Формы рекурсивных подпрограмм
- •19.8.Примеры рекурсивных программ
- •19.8.1.Вывод цифр целого числа в прямом порядке
- •19.8.2.Поиск максимального элемента массива
- •19.9.Задача о Ханойских башнях
- •20.Указатели
- •20.1.Указательные типы
- •Описание типизированного указателя
- •20.2.Операции с указателями
- •20.3.Примеры присваивания для указателей
- •20.4.Статические и динамические переменные
- •Создание новой динамической переменной базового типа и установка на нее указателя
- •Уничтожение динамической переменной, на которую ссылается указатель
- •Проблема потерянных ссылок
- •21.Динамические структуры данных
- •21.1.Данные статической структуры и данные динамической структуры
- •21.2.Односвязные линейные списки
- •21.2.1.Структура односвязного линейного списка
- •Вставка элемента после заданного элемента
- •21.3.Стеки
- •21.3.1.Реализация стека через односвязный линейный список
- •21.3.2.Применение стеков
- •21.3.3.Реализация стека на основе массива
- •21.4.Деревья
- •21.4.1.Основные определения
- •Алгоритм построения идеально сбалансированного дерева
- •21.4.3.Способы обхода дерева
- •Деревья поиска
- •Построение дерева поиска
Запись в файл
procedure Write(F, список выражений)
Данные записываются в файл. После записи файловый указатель устанавливается после записанных данных.
В текстовые файлы можно записывать значения выражений целых, вещественных, символьных, строковых и булевских типов (числа и логические значения перед записью преобразуются из двоичного кода в символьное представление).
Для типизированных файлов тип выражений должен совпадать с типом компонентов файла.
Закрытие файла
procedure Close(F)
Завершается работа с файлом. Если в файл велась запись, неполный буфер записывается в файл. Однако связь файловой переменной с файлом сохраняется, и файл можно заново открыть без повторного вызова Assign.
После закрытия файла файловую переменную можно связать с другим файлом с помощью Assign.
17.4.Подпрограммы для работы с закрытыми файлами любых типов
Проверка существования файла
function FileExists(name): boolean
где name ‑ строковое выражение (в частности, переменная или константа), задающее имя файла.
Если name не содержит пути к файлу, он ищется в текущем каталоге. Возвращает True, если данный файл существует.
Удаление закрытого файла
procedure Erase(F)
Файл, связанный с файловой переменной, уничтожается. Файл должен быть закрыт.
Переименование закрытого файла
procedure Rename(F,newname)
где newname ‑ строковое выражение, в частности, переменная или константа, задающее новое имя файла.
Имя файла во внешней памяти меняется на newname. Файл должен быть закрыт.
Пример. Текстовый файл нельзя одновременно читать и писать в него. Поэтому для редактирования текстового файла создают новый файл и пишут в него отредактированные строки исходного файла. Закрыв оба файла, исходный удаляют, а новый файл переименовывают, давая ему имя исходного файла.
17.5.Обработка ошибок ввода-вывода
При работе с файлами возможны ошибки, например:
неправильно задано имя существующего файла или файла с таким именем нет на диске;
попытка прочитать нечисловое значение в переменную числового типа;
попытка записать в текстовый файл, открытый на чтение;
попытка закрыть файл, который не был открыт.
Ошибки приводят к исключительным ситуациям, стандартная реакция на которые – прекращение работы программы.
Для организации собственной реакции на ошибки используют защищенные блоки try except:
try
Операторы, которые могут привести к исключительным ситуациям
except
Операторы, выполняемые при возникновении исключительных ситуаций
end
Порядок выполнения операторов в блоке:
Выполняются операторы секции try..except.
Если исключительная ситуация не возникла, работа защищенного блока на этом завершается.
Если исключительная ситуация возникла, выполняются операторы секции except..end.
Пример. Если файл существует, открыть его, в противном случае создать новый файл
Использование блока try except |
Использование функции FileExists |
Assign(F, name); try Reset(F); //Если файл существует, он открывается except Rewrite(F); //иначе открывается новый файл |
Assign(F,name); if FileExists(name) then Reset(F) else Rewrite(F); |
В следующем примере можно сделать три попытки ввода имени файла для его открытия:
k:=0; //Счетчик попыток открыть файл
repeat
flag:=true;
readln(name);
k:=k+1;
Assign(F,name);
try
Reset(F); //Может возникнуть ошибка
except
writeln('Ошибка. Повторите ввод имени файла')
flag:=false;
end
until flag or (k=3); //Либо файл открылся, либо исчерпаны попытки