Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по паскалю.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
67.39 Кб
Скачать
  1. Параметры-значения и особенности работы с ними

Параметры–значения подобны нашему решению с абстрактным массивом Arr и переменной NumEl: при передаче данных в параметры– значения копируются данные из фактических параметров. Заметим, что обратно из параметра–значения в фактический параметр ничего не копируется (этим они отличаются от нашего решения проблемы).

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

Формальные параметры–переменные обозначаются ключевым словом var, которое ставится перед ними (мы как бы объявляем переменную).

  1. Параметры-переменные и особенности работы с ними

Параметры–переменные представляют собой «виртуальный фактический параметр». При передаче такого параметра внутрь процедуры передается ссылка на фактический параметр – адрес переменной, в которой хранится фактический параметр. Таким образом, формальный параметр, по сути, является псевдонимом фактического параметра. Используя в процедуре формальный параметр–переменную, мы на самом деле работаем с фактическим параметром (через адрес переменной, переданный внутрь процедуры).

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

Формальные параметры–значения никаким специальным словом не помечаются. Тип параметра указывается после двоеточия (аналогично указывается тип при объявлении переменных). Если у процедуры несколько параметров, то они перечисляются друг за другом через точку с запятой.

  1. Параметры-константы и особенности работы с ними

Формальные параметры–константы обозначаются ключевым словом const. При передаче параметра–константы в подпрограмму передается адрес фактического параметра, но внутри подпрограммы изменять значение этого параметра запрещено. Таким образом, в подпрограмме при обращении к формальному параметру–константе происходит обращение через адрес к фактическому параметру. Следовательно, в подпрограмме используется сам фактический параметр, а не его копия. Это очень удобно при обработке больших структур данных.

  1. Открытые параметры-массивы и особенности работы с ними

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

const

Max = 63;

type

TStatistics = array [0..Max] of Double;

function Average(const A: TStatistics): Double;

var

I: Integer;

begin

Result := 0;

for I := Low(A) to High(A) do Result := Result + A[I];

Result := Result / (High(A) - Low(A) + 1);

end;

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

1. Открытый массив-параметр описывается с помощью словосочетания array of, при этом границы массива опускаются:

2. Внутри подпрограммы Average нижняя граница открытого массива A равна нулю (Low(A) = 0), а вот значение верхней границы (High(A)) неизвестно и выясняется только на этапе выполнения программы.

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

4. Во втором операторе открытый массив конструируется в момент вызова функции Average. Конструктор открытого массива представляет собой заключенный в квадратные скобки список выражений. В выражениях могут использоваться константы, переменные и функции. Тип выражений должен быть совместим с типом элементов массива. Конструирование открытого массива равносильно созданию и инициализации временной переменной.

5. Открытые массивы могут быть переданы в подпрограммы только по значению или как параметры-константы.

6. Некоторые библиотечные подпрограммы языка Delphi принимают параметры типа array of const — открытые массивы констант. Массив, передаваемый в качестве такого параметра, обязательно конструируется в момент вызова подпрограммы и может состоять из элементов различных типов (!). Физически он состоит из записей типаTVarRec, кодирующих тип и значение элементов массива (записи рассматриваются ниже). Открытый массив констант позволяет эмулировать подпрограммы с переменным количеством разнотипных параметров и используется, например, в функции Format для форматирования строки.