- •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.Способы обхода дерева
- •Деревья поиска
- •Построение дерева поиска
17.2.Организация работы с файлами
Для работы с файлом в программе необходимо описать файловую переменную соответствующего типа, например:
var F:text – для текстового файла;
F:file of тип_компонентов – для типизированного файла.
Файловую переменную связывают с конкретным файлом на диске, указывая его имя.
Затем файл открывают, записывают в файл и/или читают из файла данные. Текущую позицию в файле при чтении и записи определяет файловый указатель, который при открытии файла указывает на начало файла, а в результате чтения и записи устанавливается после прочитанного или записанного компонента файла.
Чтение и запись реализуются через буфер обмена, выделяемый в оперативной памяти для каждого файла. При записи данные сначала помещаются в буфер, и только после его заполнения записываются в файл. При чтении буфер заполняется данными из файла. Программа читает из буфера, который повторно заполняется только при отсутствии в нем требуемого компонента. Наличие буфера позволяет значительно уменьшить число обращений к диску.
Завершив работу с файлом, его закрывают, при этом оставшиеся незаписанными данные из буфера пишутся в файл. Если файл не закрыть, эти данные можно потерять.
Все действия с файлами реализуются стандартными процедурами и функциями, в которых файловая переменная является первым параметром.
Замечание. Файловая переменная передается только по ссылке.
17.3.Подпрограммы для работы с файлами любых типов Связывание файловой переменной с файлом
procedure Assign(F, name)
где name ‑ строковое выражение (в частности, переменная или константа), задающее имя файла.
Если файл находится в текущем каталоге, указывается только имя файла, например, Assign(F,’data.txt’).
При необходимости задают имя файла и путь к нему по правилам операционной системы.
Нельзя с одной файловой переменной связывать несколько файлов. Закрыв файл процедурой Close, файловую переменную можно связать с другим файлом.
Если из файла предполагается только читать, с ним можно связать несколько файловых переменных, каждая из которых будет «отвечать» за свой режим чтения. При записи использовать для одного файла несколько файловых переменных нельзя.
Открытие нового файла
procedure Rewrite(F)
Создает и открывает новый (пустой) файл, файловый указатель устанавливается в его начало. Если файл, связанный с файловой переменной, существует, он предварительно уничтожается.
Если файл текстовый, в него можно только записывать. Для типизированного файла можно и писать, и читать.
Открытие существующего файла
procedure Reset(F)
Файловый указатель устанавливается в начало файла. Если файл, связанный с файловой переменной, не существует, возникает ошибка.
Если файл текстовый, из него можно только читать. Для типизированного файла можно и писать, и читать.
Повторный вызов ReSet переустанавливает файловый указатель в начало файла.
Проверки конца файла
function Eof(F): boolean
Функция (означает End of file) возвращает true, если файловый указатель находится за последним компонентом файла (т.е. на конце файла).
Чтение из файла
procedure Read(F, список переменных)
Данные из файла читаются в указанные переменные. После чтения файловый указатель устанавливается после прочитанных данных.
Из текстовых файлов можно вводить целые и вещественные числа, символы и строки (числа перед занесением в переменную преобразуются из символьного представления в двоичный код чисел). Если перед вводом файловый указатель уже стоит на конце файла и ввод происходит в строковую переменную, она останется пустой и ошибки не будет. Для переменных других типов произойдет ошибка ввода.
Для типизированных файлов тип переменных должен совпадать с типом компонентов файла, который может быть структурированным (например, массивом, записью). Ввод за концом файла приведет к ошибке.