- •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.Способы обхода дерева
- •Деревья поиска
- •Построение дерева поиска
64 Жегуло а.И. Компьютерные науки 2-й семестр 2011-2012 гг. Компьютерные науки Лекции для студентов 1 курса мехмата, 2011-2012 уч. Г.
2 Семестр
16.Модули
16.1.Модуль и модульное программирование
Модуль – это совокупность описаний (типов, констант, переменных, процедур, функций) и, возможно, исполняемых операторов, оформленных в виде автономно компилируемого файла.
Объекты модуля можно использовать, подключив модуль к основной программе или к другому модулю, указав его имя в предложении uses список_подключаемых_модулей.
Модульное программирование, т.е. организация программы как совокупности модулей, позволяет:
разбивать программу на отдельные модули, которые можно разрабатывать одновременно группой разработчиков;
уменьшить время перекомпиляции при изменениях программы, т.к. перекомпилируются только измененные модули;
повторно использовать модули в других программах;
создавать стандартные библиотечные модули, поставляемые вместе с компилятором.
16.2.Структура модуля
Модуль состоит из заголовка модуля, двух основных разделов – интерфейса и реализации, а также разделов инициализации и завершения:
unit имя_модуля; //Заголовок модуля
Interface //Раздел интерфейса
[uses список_модулей;]
{Раздел описаний, «видимый» вне модуля}
Implementation //Раздел реализации
[uses список_модулей;]
{Раздел описаний, скрытый от других программ и модулей}
Initialization //Раздел инициализации
{Операторы, выполняемые до начала работы основной программы}
finalization //Раздел завершения
{Операторы, выполняемые после окончания работы основной программы}
end.
Пример модуля и его использования
Модуль содержит описание переменной R и описание функции Circle, вычисляющей длину окружности.
unit geometry; //Модуль
Interface //Раздел интерфейса
var R: real;
function Circle(R: real): real;
Implementation //Раздел реализации
function Circle(R: real): real;
begin
Result := 2*pi*R
end;
end.
Исходный текст модуля сохраним под именем geometry.pas в том же каталоге, где и исходный текст программы.
program prog; //Основная программа
uses geometry; //Подключение модуля geometry
begin
readln(R); //Используется переменная R и
writeln(Circle(R)) //функция Circle из модуля geometry
end.
Если модуль разместить в другом каталоге, тогда в uses надо указать имя файла и путь к нему. Например:
uses geometry in '..\my_unit\geometry.pas';
Указанный путь означает, что надо выйти из текущего каталога и войти в каталог my_onit.
Заголовок модуля
Заголовок модуля обязателен (в отличие от заголовка программы). Для упрощения подключения модуля его имя в заголовке должно совпадать с именем дискового файла, содержащего исходный текст модуля.
Раздел интерфейса interface
Раздел интерфейса состоит из описаний типов, констант, переменных и подпрограмм, которые становятся доступными основной программе и/или другому модулю после подключения данного модуля. Для подпрограмм здесь описываются только заголовки с обязательным полным описанием формальных параметров (но, в отличие от предварительного описания, без служебного слова forward). Полное описание подпрограмм помещается в разделе реализации.
В простейшем случае модуль состоит только из раздела интерфейса с описаниями типов, переменных и констант для некоторого класса программ.