Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
9-11 лек 18-19 ПРОЦЕД И ФУНКЦ.doc
Скачиваний:
6
Добавлен:
23.11.2019
Размер:
146.94 Кб
Скачать

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

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

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

Фактический размер массива в этом случае может быть определен с помощью функции High (высота).

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

3.6. Параметры-процедуры и параметры-функции

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

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

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

- подпрограммы должны компилироваться с ключом {$F+) или иметь директиву far,

- не должны быть стандартными подпрограммами,

- не должны объявляться внутри других подпрограмм,

- не иметь директив inline (встроенный) или interrupt (прерывать).

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

program EXAMPLE15; type   Func = function(X, Y: Integer): Integer; ($F+) function Add(X, Y: Integer): Integer; begin   Add := X + Y end; function Multiply(X, Y: Integer): Integer; begin   Multiply := X * Y end; {$F-} procedure PrintTable(A, B: Integer; Operation: Func); {процедура печати таблицы} var   i, j: Integer; begin   for i := 1 to A do     begin       for j := 1 to В do         Write(Operation(i, j): 5);      WriteLn       end; WriteLn end; begin {начало основной программы}   PrintTable(10, 10, Add);   PrintTable(10, 10, Multiply) end.

4. Процедура exit

Оператор GOTO нельзя использовать для досрочного выхода из подпрограммы.

В Turbo Pascal с этой целью используется процедура Exit.

Пример. Функция, определяющая первое отрицательное число в массиве.

function Minus(var Massiv; N: Integer): Real;

{Massiv - параметр без типа}

type T=array[l..1000] of Real;

 

var i: Integer;

 

begin

 

  Minus:=0;

 

  for i:=1 to N do

 

    if T(Massiv)[i] < 0 then

{преобразование типа}

      begin

 

        Minus:= T(Massiv)[i];

 

        Exit

{досрочный выход из функции}

      end

 

end;

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