В Паскале подпрограммы называются процедурами и функциями и описываются в разделе с тем же названием.
Процедура имеет такую же структуру, как и программа, но с двумя отличиями:
- Заголовок процедуры имеет другой синтаксис и имеет служебное слово procedure;
- Описание процедуры заканчивается точкой с запятой.
Все имена, описанные в программе до процедуры, действуют во всей программе и в любой ее подпрограмме (если они там не описаны заново). Они называются глобальными, в отличие от локальных имен, описанных в процедуре и действующих лишь в ней.
Данные для обработки могут передаваться процедуре через глобальные имена или через аргументы процедуры. В процедуре каждый аргумент имеет свое имя – формальный параметр, описываемый в заголовке процедуры по схеме:
procedure имя (список описания формальных параметров)
Описание формальных параметров может иметь вид:
список имен:тип
или
var список имен:тип
В первом случае говорят о параметрах – значениях (как правило, их используют для передачи входных данных), во втором – о параметрах – переменных (используют для результатов работы процедуры). В простейшем случае заголовок процедуры может содержать только имя процедуры.
Оператор вызова структуры имеет вид:
имя процедуры (список выражений);
Эти выражения называются фактическими параметрами. Их список должен точно соответствовать списку описаний формальных параметров процедуры. Во время вызова процедуры параметру – значению присваивается значение фактического параметра. Фактическим параметром здесь может быть любое выражение соответствующего типа.
Фактический параметр, соответствующий параметру переменной, должен быть переменной того же типа.
Пример: составим программу, которая с помощью строки символов разделит экран на части, где напечатает таблицу квадратных корней для чисел 1, 2, ..., 10 и таблицу натуральных логарифмов для чисел 1, 2, ..., 5.
Печать строки символов оформим как процедуру. Так как никакую информацию передавать из процедуры в программу не надо, то аргументы процедуры (вид и количество символов) будут описаны как параметры – значения.
program section; var x: integer: procedure line (a: integer; c: char); var j: integer; begin for j: =1 to a do write(c); writeln end; begin line (35, ‘-‘); <i>writеln(‘</i>таблица квадратных корней<i>’);</i> line (35, ‘-‘); for x: =1 to 10 do writeln(x: 8, sqrt(x): 8: 4); line (35, ‘-‘); <i>writеln(‘</i>таблица натуральных логарифмов’<i>)</i>; line (35, ‘-‘); for x:=1 to 5 do writeln(x:8, ln(x):8:4); line (35, ‘*‘); end.