Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК ОАиП.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.14 Mб
Скачать

Параметры-константы

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

const имя : тип;

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

Например, параметр-константа целого типа в процедуре Р записывается так:

procedure P(const x : integer);

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

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

Результаты работы процедуры следует передавать через параметры-переменные, результат функции — через ее имя.

СОВЕТ В списке параметров записывайте сначала все входные параметры, затем — все выходные. Давайте параметрам имена, по которым можно получить представление об их назначении.

Открытые массивы и строки

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

procedure P(a : array of real);

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

Его элементы нумеруются с нуля. Номер максимального элемента в массиве можно определить с помощью функции High.. Рассмотрите пример (пример 4.4).

function max_el(const mas : array of integer) : integer;

var i, max : integer;

begin

max := mas[0];

for i := 0 to High(mas) do

if mas[i] > max then max := mas[i];

max_el := max;

end;

Для передачи в подпрограмму по адресу строк любой длины используется либо специальный тип OpenString, называемый открытой строкой, либо тип string при включенном режиме {$P+} (по умолчанию этот режим выключен).

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

Пример передачи строк в подпрограмму:

type s20 = string[20];

var s1 : string[40];

s2 : string[10];

procedure P(const x : s20; y : string; var z : openstring);

...

begin

... P(s2, s1, s1); ...

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]