В Паскале подпрограммы называются процедурами и функциями и описываются в разделе с тем же названием.
Процедура имеет такую же структуру, как и программа, но с двумя отличиями:
- Заголовок процедуры имеет другой синтаксис и имеет служебное слово 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.