Процедуры с параметрами-значениями

Представьте себе, что нам нужно воспроизвести рисунок, на котором должны быть нарисованы друг под другом квадраты и размеры квадратов должны быть разными. Для этого случая было бы очень удобно, если бы в процедуре можно было задавать, например, размер напечатанного квадрата.

Паскаль дает такую возможность задавать параметры, принимающие определенные значения в процедуре – «параметры-значения».

Когда в качестве параметров задаются переменные, которые должны подвергаться определенной обработке, тогда речь идет о «параметрах-переменных» (или о параметрах, вызываемых по имени переменной).

Уточним еще раз, заголовок процедуры имеет вид:

procedure < имя >(< описание формальных параметров)>;

Формальные параметры – переменные, используемые внутри процедуры и принимающие различные начальные и конечные значения для каждого вызова процедуры. Описание формальных параметров имеет вид:

var < список_формальных_параметров >: < имя_типа >;

Список формальных параметров может состоять из одного параметра или нескольких параметров, отделенных друг от друга запятой.

Поскольку внутри подпрограммы параметры рассматриваются как переменные с начальным значением, то имена локальных переменных, описываемые в разделе var (внутреннем для подпрограммы), не могут совпадать с именами параметров этой же подпрограммы.

Глобальные объекты - это типы данных, константы и переменные, объявленные в начале программы до объявления любых подпрограмм. Эти объекты будут видны во всей программе, в том числе и во всех ее подпрограммах. Глобальные объекты существуют на протяжении всего времени работы программы.

Локальные объекты объявляются внутри какой-нибудь подпрограммы и "видны" только этой подпрограмме и тем подпрограммам, которые были объявлены как внутренние для нее. Локальные объекты не существуют, пока не вызвана подпрограмма, в которой они объявлены, а также после завершения ее работы.

Список параметров может и вовсе отсутствовать:

procedure proc1; function func1: boolean;

В этом случае подпрограмма не получает никаких переменных "извне". Упомянутый в начале лекции песенный припев как раз и является примером подпрограммы, в которую не передается никаких данных при вызове.

Однако отсутствие параметров и, как следствие, передаваемых извне значений вовсе не означает, что при каждом вызове подпрограмма будет выполнять абсолютно одинаковые действия. Поскольку глобальные переменные видны изнутри любой подпрограммы, их значения могут неявно изменять внутреннее состояние подпрограмм.

Если способ подстановки и тип нескольких параметров совпадают, описание этих параметров можно объединить:

[<способ_подстановки>]<имя1>,...,<имяN>: <тип>;

В заголовке подпрограммы можно указывать только простые (не составные) типы данных. Следовательно, попытка записать

procedure proc2(a: array[1..100]of char);

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

type arr = array[1..100] of char; procedure proc2(a: arr);


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: