Практика программирования (Бейсик, Си, Паскаль)

       

в предыдущих разделах должны были


Подпрограммы (процедуры) и функции

Примеры программ в предыдущих разделах должны были подготовить вас к восприятию мысли о том, что в каждой задаче полезно вычленять логически завершенные фрагменты и оформлять их как отдельные программные единицы — подпрограммы (процедуры) или функции. Что это дает?

Во-первых, упрощается логика программ за счет вынесения многочисленных деталей за рамки основного алгоритма. Появляется возможность конструировать программу "сверху — вниз", составляя ее по началу из пустых блоков (заглушек), о которых известно только их функциональное назначение. Потом каждый из блоков детализируется, разбиваясь на более мелкие программные единицы и т. д. Подпрограммы, текст которых обычно не превышает одну-две страницы, гораздо легче анализировать и отлаживать. Во-вторых, выделение подпрограмм позволяет уменьшить общий объем программы особенно в тех случаях, когда к ним приходится многократно обращаться из разных точек. Наконец, многие подпрограммы могут быть использованы повторно при решении других задач.

Цель настоящей главы — вкратце систематизировать основные сведения, связанные с организацией и использованием подпрограмм (функции можно рассматривать как частный случай подпрограмм, результатом работы которых является единственное значение).

Любая программа, готовая к самостоятельному исполнению, состоит из единственной головной (или главной) программы, с которой начинается работа, и некоторого количества подчиненных ей подпрограмм. Головная программа непосредственно или косвенно может обратиться к любой подпрограмме, которые точно таким же образом могут вызвать любую подпрограмму, включая и себя. К головной программе никакая другая программная единица обратиться не может.

Подпрограммы, поставляемые в составе системы программирования, обычно называют стандартными или системными. Все остальные подпрограммы, которые мы пишем сами или заимствуем из каких-либо других источников, называют нестандартными или пользовательскими.

Текст программы на алгоритмическом языке, оформленный в виде дискового файла с соответствующим расширением (bas, с, срр, pas), принято называть исходным модулем. В решении задачи может принимать участие один или несколько исходных модулей. В системе QBasic такие модули сменяют друг друга в оперативной памяти с помощью оператора CHAIN. Система Turbo С (Borland C++) позволяет разбить текст исходной программы на несколько программных файлов, которые могут быть протранслированы автономно и объединены между собой с помощью специального сборочного файла — проекта. В системе Turbo Pascal отдельные подпрограммы могут быть вынесены в специальным образом оформленные модули, начинающиеся с оператора unit и подключаемые к тексту исходной программы по директиве Uses.


Результатом трансляции (компиляции) каждого программного файла в системе Turbo С является объектный модуль — дисковый файл с расширением obj. В составе одного объектного модуля может находиться как головная функция, так и любое количество подчиненных ей пользовательских функций. С помощью сервисной программы tlib.exe объектные модули могут быть помещены в библиотеку — дисковый файл с расширением lib. Любая компонента библиотеки может быть использована при сборке готовой к исполнению программы.

Модули Паскаля, начинающиеся с оператора unit, после компиляции превращаются в дисковые файлы с расширением tpu (от Turbo Pascal Unit) и играют роль, аналогичную библиотекам объектных модулей на языке Си.

На последней стадии обработки исходной программы в системах компилирующего типа (ТС, ТР) появляются готовые к исполнению программы в виде загрузочных модулей — дисковых файлов с расширением ехе. Очень большие программы на языке Паскаль, целиком не помещающиеся в памяти и работающие по частям, сменяющим друг друга, состоят из ехе-файла и дополнительного оверлейного файла с расширением ovl. Для создания последнего программист должен сам разбить задачу на части и оформить их соответствующим образом.



Содержание раздела