Существует одно обстоятельство, которое следует учитывать при выборевида формальных параметров. Как уже говорилось, при объявлении параметра-значения осуществляется копирование фактического параметра во временную память. Если этим параметром будет массив большой размерности, то существенные затраты времени и памяти на копирование при многократныхобращениях к подпрограмме могут стать решающим доводом в пользу объявлениятакого параметра параметром-переменной или передачи его в качестве глобальной переменной.
Может сложиться впечатление, что объявление переменных в спискеформальных параметров подпрограммы ничем не отличается от объявления их вразделе описания переменных. Действительно, в обоих случаях много общего, но есть одно существенное различие: типом любого параметра в спискеформальных параметров может быть только стандартный или ранее объявленныйтип. Поэтому нельзя, например, объявить следующую процедуру:
Procedure S (а : array (1..10] of real);
так как в списке формальных параметров фактически объявляется тип -диапазон, указывающий границы индексов массива.
Если мы хотим передать какой-то элемент массива, то проблем, какправило, не возникает, но если в подпрограмму передается весь массив, тоследует первоначально описать его тип.
Например:
type mas = array [1..10] of real;
.......
PROCEDURE S (a : mas);
Поскольку строка является фактически своеобразным массивом, ее передача вподпрограмму осуществляется аналогичным образом:
type intype =string[15];
outype = string[30];
FUNCTION St (i : intype) : outype;
Требование описать любой тип-массив или тип-строку перед объявлением подпрограммы на первый взгляд кажется несущественным. Действительно, в рамках простейших вычислительных задач обычно заранее известна структура всех используемых в программе данных, поэтому статическое описание массивов не вызывает проблем. Однако разработка программных средств универсального назначения связана со значительными трудностями. По существу, речь идет о том, что в ТУРБО ПАСКАЛЕ невозможно использовать в подпрограммах массивы с «плавающими» границами изменения индексов. Например, если разработана программа, обрабатывающая матрицу из 10 х 10 элементов, то для обработки матрицы из 9 х 11 элементов необходимо переопределить тип, т.е. перекомпилировать всю программу. Этот недостаток, как и отсутствие в языке средств обработки исключительных ситуаций (прерываний), унаследован из стандартного ПАСКАЛЯ и представляет собой объект постоянной и вполне заслуженной его критики. Разработчики ТУРБО ПАСКАЛЯ не рискнули кардинально изменить свойства базового языка, но, тем не менее, включили в него некоторые средства, позволяющие в известной степени смягчить отмеченные недостатки.
Прежде всего, в среде ТУРБО ПАСКАЛЬ можно установить режим компиляции, при котором отключается контроль над совпадением длины фактического и формального параметра-строки. Это позволяет легко решить вопрос о передаче подпрограмме строки произвольной длины. При передаче строки меньшего размера формальный параметр будет иметь ту же длину, что и параметр обращения; передача строки большего размера приведет к ее усечению до максимального размера формального параметра. Следует сказать, что контроль включается только при передаче строки, объявленной как формальный параметр-переменная. Если соответствующий параметр объявлен параметром-значением, эта опция игнорируется, и длина не контролируется.