Большие программы удобно разделить на отдельные модули. Структуризация программы дает целый ряд преимуществ, а именно, позволяет избежать повторений одних и тех же фрагментов программы и существенно ее сократить, использовать уже готовый модуль без каких-либо изменений в других программах, упростить отладку программ, проводить ее возможную дальнейшую модернизацию без изменения основной программы. Этой цели служат подпрограммы-функции и процедуры.
Подпрограмма-функция, представляет собой подпрограмму, которая предназначена для вычисления значений одной переменной определенного типа. Для вызова подпрограммы-функции в главной части программы должно быть обращение к ней. После вызова подпрограмма-функция, выполнив определенные действия, возвращает свое значение в основную программу.
В подпрограмме-функции могут использоваться те же переменные, что и в основнойпрограмме, такие переменные называются глобальными. Могут также использоваться и переменные, которых нет в основной программе, такие переменные называются локальными.
Подпрограмма-функция имеет следующую структуру. В первой строке за служебным словом function следует имя функции, а затем в скобках идет список переменных с указанием их типа, которые использует данная подпрограмма-функция. Эти переменные также называются формальными параметрами, так как их значения неизвестны и имена не обязательно совпадают с теми именами переменных, которые будут при обращении к функции в основной программе. Формальные переменные принимают конкретное значение только при вызове функции в основной программе.
Заканчивается первая строка объявлением типа функции, т.е. типа значения, которое ей будет присвоено, и точкой с запятой.
Далее может следовать комментарий. В последующих строках (если это необходимо как и в основной программе) идут объявления, но ужелокальных переменных, которые использует только сама подпрограмма-функция. Переменные, которые не объявленыв подпрограмме-функции, но в ней используются, являются глобальными.
Далее за служебным словом begin следует основной текст подпрограммы-функции. В основном тексте обязательно должна быть строка, в которой функцииприсваивается некотороезначение. Подпрограмма-функция заканчивается служебным словом end с точкой и запятой. В последней строке после точки с запятой обычно ставят комментарий с указанием имени функции.
Пример:
В основной программе подпрограмма-функция следует в конце всех объявлений перед первым служебным словом begin,т.е. передисполняемой частью основной программы. Для вызова подпрограммы-функции в основной программе необходимо ввести строку, в которой после операции присвоения указывается имя функции, а далее список переменных в скобках без указания их типа (еще раз отметим, что имена переменных при вызове функции не обязательно должны совпадать с именами при объявлении функции).
Параметры для функции передаются из основной программы только своим значением, так как все возможные действия над ними внутри самой функции не приведут к изменению их значения в основной программе.
Пример:
§11. Процедуры. Подпрограммы, которые предназначены для вычисления многих значений, а также для выполнения различных действий (не обязательно вычислений), называются процедурами.
В процедуре могут использоваться те же переменные, что и в основнойпрограмме, такие переменные называются глобальными. Могут также использоваться и переменные, которых нет в основной программе, такие переменные называются локальными.
Процедура имеет следующую структуру. В первой строке за служебным словом procedureследует имя, а затем в скобках идет список параметров (переменных) с указанием их типа, которые использует данная процедура. После скобок следует точка с запятой. Процедура может быть и без списка переменных. Параметры называют формальными параметрами, так как их значения неизвестны и имена не обязательно совпадают с именами переменных при обращении к процедуре в основной программе
В отличие от функции в процедуре формальные параметры могут быть двух типов. Тип этих параметров определяет, куда и как передаются конкретные значения из основной программы в процедуру и наоборот. Параметры, принимающие значения при вызовепроцедуры и при этом всегда остающиеся неизменнымив основной программе, называются формальными параметрами передаваемымизначением.
Параметры, которые получают значения внутри процедурыи при этом такие же значения получают соответствующие параметры в основнойпрограмме, называются формальными параметрами передаваемымиименем. Для выделения таких параметров используется служебное слово var, за которым следует список имен с указанием типа. Формальные параметры, передаваемые именем, служат для передачи значений изподпрограммы в основную программу.
В следующей строке может быть комментарий. Далее (если это необходимо) идут объявления, но ужелокальных переменных, которые использует только сама процедура. Переменные, которые не объявленыв подпрограмме-процедуре, но в ней используются, являются глобальными.
Далее за служебным словом begin следует основной текст подпрограммы-функции. Процедура заканчивается служебным словом end с точкой и запятой. В последней строке после точки с запятой обычно ставят комментарий с указанием имени процедуры.
Пример:
Текст процедуры может находиться не только внутри основной программы в объявлениях перед первым служебным словом begin, но и вне основной программы. Для вызова процедуры, в основной программе необходимо ввести строку, в которой указывается имя процедуры, а далее список параметров в скобках без указания их типа (имена переменных при вызове процедуры не обязательно должны совпадать с именами при объявлении самой процедуры).
Особо отметим, что процедура может вызывать и другие процедуры. Это позволяет писать новую программу на основе уже готовых и отлаженных программ, легко структурировать эту программу в виде отдельных независимых блоков. Из процедур легко сделать собственную библиотеку программ и при необходимости использовать эту библиотеку. Пример.