- •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.Способы обхода дерева
- •Деревья поиска
- •Построение дерева поиска
Раздел реализации implementation
Раздел содержит описания, недоступные для других модулей и программ. Здесь находятся полные описания подпрограмм, заголовки которых содержатся в интерфейсной части, а также вспомогательные описания для реализации этих подпрограмм.
Раздел инициализации initialization
В этом разделе располагаются операторы начальных установок, необходимых для начала работы модуля, например, инициализация переменных, открытие файлов и т.д.
Операторы разделов инициализации всех модулей, используемых в основной программе, выполняются до передачи управления основной программе в том порядке, в каком имена модулей перечислены в предложении uses программы.
Если модуль М1 подключает модуль М2, то раздел инициализации модуля М2 будет выполнен раньше раздела инициализации модуля М1.
Если инициализация не нужна, зарезервированное слово initialization может быть опущено.
Раздел завершения finalization
Раздел завершения используется для освобождения ресурсов, выделенных программе в разделе инициализации.
Разделы finalization всех модулей программы выполняются после ее выполнения в порядке, противоположном порядку выполнения разделов initialization этих модулей.
Раздел является необязательным и может присутствовать только вместе с разделом initialization.
16.3.Правила работы с модулями
Запрещено:
Одновременное использование модулей с одинаковыми именами.
Пересечение в одном модуле списков uses в разделах интерфейса и реализации.
Взаимное подключение модулей в разделах интерфейса:
-
unit M1;
interface
uses M2;...
unit M2;
interface
uses M1;...
Разрешено:
Взаимное подключение модулей в разделах реализации:
unit M1;
interface ...
Implementation
uses M2; ...
unit M2;
interface ...
Implementation
uses M1; ...
Взаимное подключение модулей в разных разделах, например, М1 подключает М2 в разделе интерфейса, а М2 подключает М1 в разделе реализации:
-
unit M1;
interface
uses M2; ...
unit M2;
interface ...
Implementation
uses M1; ...
16.4.Использование объявленных в модуле объектов
Ко всем объектам, описанным в интерфейсной части модуля, можно обращаться так, как будто они описаны в самой программе. При этом действуют следующие правила видимости для имени, которое используется в программе:
описание имени ищется в описательной части программы; если описание найдено, оно и используется;
если в программе имя не описано, описание имени ищется в интерфейсных частях модулей, которые указаны в списке uses, при этом модули просматриваются справа налево, т.е. в порядке, обратном подключению.
для исключения коллизий, когда имя описано в нескольких местах, надо использовать полное имя, состоящее из имени модуля, точки и имени объекта, например: M2.x.
17.Файлы
17.1.Файлы. Классификация файлов
Файл – именованная область данных во внешней памяти (на диске). В файлы можно записывать данные и считывать из них данные. Это позволяет заранее подготовить для программы исходные данные большого объема и сохранить результаты ее работы. Кроме того, среда программирования на Паскале реализует ввод с клавиатуры через стандартный файл ввода, а вывод на экран монитора – через стандартный файл вывода.
Файлы именуются согласно правилам операционной системы (Windows и т.д.), в которой работает конкретная среда программирования.
В языке Паскаль предусмотрено три типа файлов:
Текстовые файлы состоят из символьных строк. Примером служат исходные тексты программ на Паскале.
Типизированные файлы содержат двоичный код и состоят из компонентов одного типа и фиксированной длины. Их можно использовать для хранения числовых данных, для создания мини баз данных.
Нетипизированные файлы содержат двоичный код. Такие файлы используются для хранения данных и быстрого их копирования, работа с ними ведется по блокам одинаковой длины. Далее они не рассматриваются.
По способу доступа файлы делятся на две группы:
Файлы с последовательным доступом, читать компоненты таких файлов можно только поочередно с начала файла, а добавлять новые компоненты можно либо в пустой файл, либо в конец файла.
Файлы с прямым доступом, когда любой компонент файла может быть записан и прочитан в произвольном порядке.
Длина строк текстового файла в общем случае неодинакова, поэтому для текстовых файлов реализован только последовательный доступ.
Типизированные файлы имеют компоненты строго постоянной длины, что позволяет по номеру компонента определить его местоположение в файле и организовать, кроме последовательного доступа, также и прямой доступ к любому компоненту.