В Паскале подпрограммы называются процедурами и функциями и описываются в разделе с тем же названием.
Процедура имеет такую же структуру, как и программа, но с двумя отличиями:
- Заголовок процедуры имеет другой синтаксис и имеет служебное слово 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,'-'); writeln('таблица квадратных корней'); line (35, '-'); for x:=1 to 10 do writeln(x: 8, sqrt(x): 8: 4); line (35, '-'); writeln('таблица натуральных логарифмов'); line (35, '-'); for x:=1 to 5 do writeln(x:8, ln(x):8:4); line (35, '*'); end.