Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
выш.мат. методичка.DOC
Скачиваний:
32
Добавлен:
13.02.2015
Размер:
1.71 Mб
Скачать

10.3.4. Параметры без типа

В Тиrbo Раsсаl можно использовать параметры-переменные и параметры-константы без указания типа. В этом случае фактический параметр может быть пере­менной любого типа, а ответственность за правильность использования того или иного параметра возлагается на программиста.

Пример.

function Equal(vаr Раrаm1, Раram2; Len: Word): Вооlean;

Здесь Раram1, Раram2 - параметры-переменные без типа (вместо них можно использовать, например, любые переменные простого типа, типа-массив, типа-запись и т. д.); Len - параметр-значение.

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

Пример. Функция вычисления максимального элемента в массиве.

Рассмотрим другой вариант подпрограммы примера п. 10.3.1, используя в качестве первого параметра параметр-переменную без типа:

function Max(var Mas; N: Вуtе): Integer;

type

tArray= аrrау[1..Maxint] of Integer; {тип массива максимального размера}

var Ма: Integer; i: Byte;

begin

Ма := tArray(Маs)[1];

for i:= 2 to N do

if Ma< tArray(Mas)[i] then

Ма := tArray(Маs)[i];

Мах := Ма

end;

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

10.3.5. Массивы и строки открытого типа

В версии 7.0 можно в качестве параметров-переменных использовать массивы и строки открытого типа, у которых не задаются размеры. В качестве фактического параметра в этом случае можно использовать массив или строку любого размера, однако массив должен состоять из тех же компонент, что и компоненты открытого массива. Такие параметры введены для того, чтобы подпрограмма могла обрабатывать массив или строку любого размера. Фактический размер мас­сива в этом случае может быть определен с помощью функции High. Открытый массив задается как и обычный массив, но только без указа­ния типа индекса. Следует иметь в виду, что индексация элементов открытого массива всегда начинается с нуля. а максимальный индекс элемента равен значе­нию функции High.

Пример. Функция вычисления максимального элемента в массиве.

Рассмотрим вариант подпрограммы примера п. 10.3.1, используя в качестве передаваемого параметра массив открытого типа:

function Max(var Mas: array of Integer): Integer;

var Ма: Integer; i: Byte;

begin

Ма := Маs[0];

for i:= 1 to High(Mas) do {цикл до наибольшего индекса}

if Ma< Mas[i] then

Ма := Маs[i];

Мах := Ма

end;

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

Разновидность открытого массива - открытая строка, которая может задавать­ся либо с помощью стандартного типа ОреnString, либо с помощью типа String и использования ключа компилятора {$Р+}, например заголовок процедуры, заполняющей каким-либо символом строку, может иметь вид:

рrосеdure FillChar(var Str: OpenString; Сh: Сhar);

или {$P+}

рrосеdure FillChar(var Str: string; Сh: Сhar);