Процедуры

В Паскале подпрограммы называются процедурами и функциями и описываются в разделе с тем же названием.

Процедура имеет такую же структуру, как и программа, но с двумя отличиями:

  1. Заголовок процедуры имеет другой синтаксис и имеет служебное слово procedure;
  2. Описание процедуры заканчивается точкой с запятой.

Все имена, описанные в программе до процедуры, действуют во всей программе и в любой ее подпрограмме (если они там не описаны заново). Они называются глобальными, в отличие от локальных имен, описанных в процедуре и действующих лишь в ней.

Данные для обработки могут передаваться процедуре через глобальные имена или через аргументы процедуры. В процедуре каждый аргумент имеет свое имя – формальный параметр, описываемый в заголовке процедуры по схеме:

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.