- •Р.К. Ахмадулин технология программирования
- •Оглавление
- •§1. Основные понятия
- •Основные символы языка Паскаль
- •Элементарные конструкции языка Паскаль
- •Примеры записи чисел и выражений на языке Паскаль
- •Вопросы для самопроверки
- •§2. Типы данных
- •Целые типы
- •Вещественные типы
- •Символьный тип
- •Логический тип
- •Скалярные типы, определяемые пользователем
- •Вопросы для самопроверки
- •§3. Операции и выражения
- •Приоритет операций и отношений в выражениях
- •Стандартные (встроенные) функции
- •Вопросы для самопроверки
- •§4. Структура программы
- •Комментарии
- •Директивы компилятора
- •Оформление исходного текста
- •Вопросы для самопроверки
- •§5. Переменные и константы. Оператор присваивания
- •Понятие константы
- •Понятие переменной
- •Оператор присваивания
- •Совместимость типов данных
- •Понятие типизированной константы
- •Вопросы для самопроверки
- •§6. Процедуры ввода и вывода
- •Процедуры вывода
- •Форматированный вывод
- •Процедуры ввода
- •Вопросы для самопроверки
- •§7. Условный оператор и оператор выбора. Оператор перехода
- •Условный оператор if
- •Понятие составного оператора
- •Оператор выбора
- •Оператор перехода
- •Вопросы для самопроверки
- •§8. Операторы цикла
- •Циклы с заданным числом итераций
- •Циклы с предусловием
- •Циклы с постусловием
- •Вопросы для самопроверки
- •§9. Пример использования циклов
- •Вычисление факториала
- •Вычисление суммы по заданной формуле
- •Вычисление суммы по формуле с заданной точностью
- •Вычисление максимального элемента последовательности
- •Вычисление длины последовательности элементов
- •Вопросы для самопроверки
- •§10. Массивы
- •Описание массива
- •Обращение к элементам массива
- •Многомерные массивы
- •Допустимые операции с массивами
- •Инициализация массива
- •Вопросы для самопроверки
- •§11. Алгоритмы сортировки
- •Сортировка выбором
- •Сортировка вставкой
- •Пузырьковая сортировка
- •Улучшенные сортировки
- •Вопросы для самопроверки
- •§12. Строковый тип
- •Описание строковых переменных
- •Операции над строками
- •Процедуры и функции для работы со строками
- •Вопросы для самопроверки
- •§13. Записи
- •Объявление записи
- •Обращение к записям
- •Оператор присоединения with
- •Записи с вариантами
- •Инициализация записи
- •Вопросы для самопроверки
- •§14. Множества
- •Описание множеств
- •Операции над множествами
- •Пример использования множеств
- •Множества как типизированная константы
- •Вопросы для самопроверки
- •§15. Процедуры и функции
- •Понятие процедуры и функции
- •Структура процедуры
- •Структура функции
- •Формальные параметры
- •Глобальные и локальные объекты
- •Вопросы для самопроверки
- •§16. Модули
- •Понятие модуля
- •Стандартные модули в Турбо Паскаль
- •Подключение модулей
- •Структура модуля
- •Вопросы для самопроверки
- •§17. Файлы
- •Понятие файла
- •Процедуры и функции для работы с файлами
- •Понятие буфера ввода-вывода
- •Вопросы для самопроверки
- •§18. Типизированные файлы
- •Описание типизированных файлов
- •Операции над типизированными файлами
- •Последовательный и прямой доступ
- •Вопросы для самопроверки
- •§20. Текстовые файлы
- •Описание типизированных файлов
- •Чтение и запись
- •Конец строки и конец файла
- •Дополнительные процедуры для работы с текстовыми файлами
- •Файлы Input и Output
- •Вопросы для самопроверки
- •§21. Ссылки и указатели
- •Понятие указателя
- •Описание указателей
- •Операции с указателями
- •Выделение и освобождение динамической памяти
- •Вопросы для самопроверки
- •Рекомендуемая литература
- •Технология программирования
- •625000, Тюмень, ул. Володарского, 38
- •625039, Тюмень, ул. Киевская, 52
Структура модуля
Модуль обеспечивает набор средств благодаря процедурам и функциям при поддержке констант, типов данных и переменных, однако действительная реализация этих средств скрыта в силу того, что модуль разделен на две секции: интерфейса и реализации. Если программа использует модуль, то все описания модуля становятся доступными этой программе, как если бы они были определены в ней самой.
Структура модуля аналогична структуре программы, однако есть несколько существенных различий. Например, рассмотрим модуль:
unit <идентификатор>;
interface
uses <список модулей>; { Необязательный }
{ открытые описания }
implementation
{ закрытые описания }
{ процедуры и функции }
begin
{ код инициализации }
end.
Заголовок модуля начинается зарезервированным словом unit, за которым следует имя модуля (идентификатор). Отметим, что модуль должен иметь такое же имя, что и файл, в котором он находится.
Интерфейсный раздел – «общедоступная» часть в модуле, следует сразу после заголовка модуля и заканчивается перед зарезервированным словом implementation. Интерфейс определяет, что является "видимым" для любой программы (или модуля), использующей данный модуль. Любая программа, использующая этот модуль, имеет доступ к этим «видимым» элементам.
Программный модуль может использовать другие модули, для этого они определяются в предложении uses. Предложение uses, если имеет место, то следует сразу после ключевого слова interface.
В интерфейсе модуля можно определять константы, типы данных, переменные, процедуры и функции. Как и в программе, они могут быть расположены в любом порядке, и секции могут встречаться повторно (например, type … var … <процедуры> … const … type).
Процедуры и функции, видимые для любой программы, использующей данный модуль, описываются в секции интерфейса, однако их действительные тела – реализации – находятся в секции реализации.
Секция реализации – «приватная» часть – начинается зарезервированным словом implementation. Все, что описано в секции интерфейса, является видимым в секции реализации: константы, типы, переменные, процедуры и функции. Кроме того, в секции реализации могут быть свои дополнительные описания, которые не являются видимыми для программ, использующих этот модуль. Программа не знает о их существовании и не может ссылаться на них или обращаться к ним. Однако эти спрятанные элементы могут использоваться (и, как правило, используются) «видимыми» процедурами и функциями, то есть теми подпрограммами, чьи заголовки указаны в секции интерфейса.
Обычные процедуры и функции, описанные в интерфейсной секции, должны быть повторно указаны в секции реализации. Заголовок procedure/function должен быть или идентичным тому, который указан в секции интерфейса, или иметь более краткую форму (печатается лишь ключевое слово procedure или function, а за ним указывается имя подпрограммы). Затем подпрограмма должна содержать все свои локальные описания (метки, константы, типы, переменные и вложенные процедуры и функции), за которыми должно находиться основное тело самой подпрограммы.
Пример: Пусть в интерфейсной секции указаны следующие описания:
procedure ISwap(var V1,V2 : integer);
function IMax(V1,V2 : integer) : integer;
Секция реализации тогда должна будет содержать реализацию указанных подпрограмм:
procedure ISwap;
var Temp : integer;
begin
Temp := V1;
V1 := V2;
V2 := Temp
end; { конец процедуры Swap }
function IMax(V1,V2 : integer): integer;
begin
if V1 > V2 then IMax := V1 else IMax := V2
end; { конец функции Max }
Подпрограммы, локальные для секции реализации (то есть не описанные в секции интерфейса), должны иметь полный, несокращенный заголовок procedure/function.
Обычно вся секция реализации модуля заключена между зарезервированными словами implementation и end. Однако если перед end поместить зарезервированное слово begin, а между ними – операторы, то получившийся составной оператор, очень похожий на основное тело программы, становится секцией инициализации модуля.
Секция инициализации представляет собой место, где инициализируются структуры данных (переменных), которые использует программный модуль или которые он делает доступными вызывающей программе.
Пример: стандартный модуль Printer использует секцию инициализации для выполнения запросов на открытие (для вывода) текстового файла Lst, который затем можно использовать в операторах Write и Writeln в программе.
При выполнении программы, использующей некоторый модуль, секция инициализации этого модуля вызывается перед запуском основного тела программы. Если программа использует более одного модуля, то секции инициализации всех модулей вызываются перед тем, как выполнить основное тело программы, в порядке, указанном в операторе программы uses.
Модули, которые использует программа, уже оттранслированы и хранятся, как машинный код, а не как исходный код на Паскале. Когда компилятор встречает это предложение uses, он присоединяет машинный код, представленный в секции реализации, к самой программе.