Песни о Паскале | страница 64





Рис.41 – Структура простой программы

По правилам языка любой объект программы – константа, переменная, процедура – должен объявляться до своего использования. Стало быть, описание процедуры надо поместить до того, как будет сделан её вызов. Поскольку процедура Pause вызывается из главной программы, её описание должно быть помещено перед нею.


>{ P_19_1 – Пример применения процедуры }

>var Man : string;


>procedure Pause; {--- описание процедуры ---}

>begin

>      Write(’Нажмите Enter…’);

>      Readln;

>end;


>begin       {--- главная программа ---}

>      Writeln(’Как тебя зовут?’); Readln(Man);

>      Writeln(’Здравствуй, ’, Man);

>      Pause;       { вызов процедуры }

>end.


Но в каком порядке будут выполняться операторы этой программы? Мы знаем, что компьютер исполняет программу, как бы читая её слева направо и сверху вниз. Стало быть, операторы в теле процедуры выполняются первыми?

А вот и нет! Главная программа на то и главная, чтобы исполняться первой. Все начнётся с запроса имени пользователя и так далее. Когда же дело дойдет до вызова процедуры Pause, вступят в бой операторы в теле этой процедуры. Последовательность исполнения показана на рис. 42 (обратите внимание на нумерацию строк). Вызов процедуры Pause приведет, как говорят программисты, к передаче управления внутрь тела процедуры. После исполнения расположенных там операторов, управление возвращается в главную программу к оператору, следующему за вызовом.



Рис.42 – Последовательность выполнения операторов

Итак, хотя процедура размещается в тексте выше главной программы, её операторы выполняются позже – после вызова процедуры.

При необходимости вызов процедуры можно повторить. Например, чтобы подразнить пользователя и заставить его трижды нажать клавишу Enter, сделаем так:


>begin       {--- главная программа ---}

>      Writeln(’Как тебя зовут?’); Readln(Man);

>      Writeln(’Здравствуй, ’, Man);

>      Pause;

>      Pause;

>      Pause;

>end.


Процедуры с параметрами

Вам ясна техника объявления и вызова процедур? Тогда рассмотрим ещё один случай: пусть выводимое процедурой сообщение меняется по нашему желанию. Для этого процедуру снабжают параметром. Вы знаете, что параметр указывается в скобках за именем процедуры, например:


>      Pause (’Будьте любезны нажать Enter!’);


Попробуйте вызвать процедуру этим способом, что вам скажет компилятор? Ничего хорошего не скажет и будет прав. Откуда процедуре знать о вашем желании вывести именно это сообщение? Но если добавить в заголовок процедуры объявление параметра, дело пойдет на лад. Объявление параметра тоже помещают в скобки; оно похоже на объявление переменной. В нашем случае заголовок процедуры с параметром может выглядеть, например, так: