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