- •1 Языки программирования. Язык Pascal. Описание синтаксиса языка программирования.
- •2 Лексическая структура языка Pascal. Структура Pascal-программы. Составной оператор. Константы. Переменные
- •3 Концепция переменной языка Pascal
- •4 Концепция типа данных языка Pascal
- •5 Простые типы языка Pascal
- •6 Стандартные типы языка Pascal
- •7 Операторы языка Pascal
- •8 Составные типы языка Pascal
- •9 Множества (определение, примеры, операции). Представление множеств, примеры использования
- •10 Файловый тип. Операции с файлами.
- •11 Процедуры и функции. Описание процедуры. Оператор процедуры
- •12 Параметры процедур и функций.
- •13 Процедурный тип. Передача процедур и функций в качестве параметра.
- •14 Директивы, используемые при описании процедур и функций.
- •15 Необходимость и преимущества модульного программирования. Структура модуля в языке Pascal.
- •16 Рекурсия. Рекурсия и итерация.
- •17 Линейный поиск. Поиск делением пополам (двоичный поиск).
- •18 Простые алгоритмы сортировки.
- •19 Усовершенствованные алгоритмы сортировки. Сортировка Шелла. Сортировка Шелла
- •20 Ссылочные типы. Динамические структуры данных
- •21 Связанные списки, операции над списками.
- •22 Двусвязные кольца.
- •23 Двоичные деревья поиска
15 Необходимость и преимущества модульного программирования. Структура модуля в языке Pascal.
Модуль – это автономно компилируемая программная единица, включающая в себя различные компоненты раздела описаний и некоторые исполняемые операторы инициирующей части.
Модуль имеет следующую структуру:
UNIT <имя>;
INTERFACE
<интерфейсная часть>
IMPLEMENTATION
<исполняемая часть>
BEGIN
<инициирующая часть>
END.
Заголовок модуля состоит из зарезервированного слова UNIT и следующего за ним имени модуля. Имя модуля служит для его связи с другими модулями и основной программой. Эта связь устанавливается специальным предложением
USES <список модулей>
Интерфейсная часть открывается зарезервированным словом INTERFACE. В этой части содержаться объявления всех глобальных объектов модуля, которые должны стать доступными основной программе и/или другим модулям.
Исполняемая часть начинается зарезервированным словом IMPLEMENTATION и содержит описания подпрограмм, объявленных в интерфейсной части. В ней могут объявляться локальные для модуля объекты – вспомогательные типы, константы, переменные и блоки, а также метки, если они используются в инициирующей части.
Описанию подпрограммы, объявленной в интерфейсной части модуля, в исполняемой части должен предшествовать заголовок, в котором можно опускать список формальных переменных, т.к. они уже описаны в интерфейсной части. Но если заголовок подпрограммы приводится в полном виде, т.е. со списком формальных параметров и объявлением результата, он должен совпадать с заголовком, объявленным в интерфейсной части.
Инициирующая часть завершает модуль. Она может отсутствовать вместе с начинающим ее словом BEGIN или быть пустой – тогда за BEGIN сразу следует признак конца модуля, т.е. слово END и следующая за ним точка.
В инициирующей части размещаются исполняемые операторы, содержащие некоторый фрагмент программы. Эти операторы исполняются до передачи управления основной программе и обычно используются для подготовки ее работы.
Не рекомендуется делать инициирующую часть пустой, лучше ее опустить: пустая часть содержит пустой оператор, которому будет передано управление при запуске программы, это часто вызывает проблемы.
Преимущества модульного программирования:
-однажды написанный модуль может использоваться в различных программах, что позволяет не дублировать программный код;
-позволяет придать программе иерархическую структуру, что положительно сказывается на ее восприятии;
-обеспечивает независимость компонент системы, т.е. позволяет их независимую разработку и отладку.
Для языка Pascal использование модулей необходимо при разработке больших программ из-за существующего ограничения на размер одного программного модуля в 64 килобайта.
16 Рекурсия. Рекурсия и итерация.
Объект называется рекурсивным, если он содержит сам себя или определен при помощи самого себя.
Мощность рекурсии связана с тем, что она позволяет определить бесконечное множество объектов с помощью конечного высказывания. Точно также бесконечные вычисления можно описать с помощью конечной рекурсивной программы, даже если эта программа не содержит явных циклов. Однако лучше всего использовать рекурсивные алгоритмы в тех случаях, когда решаемая задача или вычислительная функция, или обрабатываемая структура данных определены с помощью рекурсии.
Если процедура содержит явное обращение к самой себе, то она называется пряморекурсивной. Если процедура содержит обращение к другой процедуре, которая в свою очередь содержит прямое или косвенное обращение к первой процедуре, то эта процедура называется косвеннорекурсивной.
Использование рекурсий не всегда видно из текста программы.
Рекурсий следует избегать, когда имеется очевидное итеративное решение поставленной задачи, но это не означает, что от рекурсий нужно избавляться любой ценой.
Например, вычисление чисел Фибоначчи.
Fib(n+1)=Fib(n)+Fib(n-1), n>0, Fib(0)=0, Fib(1)=1.
При n=5 функция Фибоначчи при использовании рекурсии будет иметь 15 вызовов. Т.е. при переводе в итеративную форму решение намного проще.
