Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
chast2.doc
Скачиваний:
7
Добавлен:
03.11.2018
Размер:
413.7 Кб
Скачать

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

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

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

Объявление процедурного типа:

<процедурный тип> ≡ (PROCEDURE (<список формал. параметров>) | FUNCTION (<список формал. параметров>))

Установлены следующие правила использования подпрограмм в качестве параметров:

  • они не должны быть стандартными процедурами или функциями;

  • они не должны объявляться внутри других процедур или функций;

  • для установки правильных связей между вызывающими и вызываемыми подпрограммами они должны иметь в заголовке опцию Far, что определяет «дальнюю» модель вызова этих подпрограмм и формирование их полного адреса;

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

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

Пример 3.3.3.1.

Напишем программу, выводящую таблицу умножения или таблицу суммы квадратов.

K – номер пункта меню

N – размер таблицы, фактический параметр

M – размер таблицы, формальный параметр

TABL – процедура вывода таблицы

UM, SKV – функции нахождения произведения и суммы квадратов

F – формальный параметр процедурного типа

TABL

M, F

J:= 1 .. M

Вывод J

I:= 1 .. M

Вывод I

J:= 1 .. M

Вывод

F (I, J)

Возврат

Блок-схема подпрограммы

type

TFUNC = function(X, Y: Integer): Integer;

var

N, K: Integer;

function UM(X, Y: Integer): Integer; far;

begin

UM := X*Y

end;

function SKV(X, Y: Integer): Integer; far;

begin

SKV := X*X + Y*Y

end;

procedure TABL(M: Integer; F: TFUNC);

var

I, J: Integer;

begin

Write(' ');

for I := 1 to M do

Write(I:4);

Writeln;

for I := 1 to M do

begin

Write(I:2);

for J := 1 to M do

Write(F(I, J):4);

Writeln

end

end;

begin

repeat

Writeln('1. Таблица умножения ');

Writeln('2. Таблица суммы квадратов ');

Writeln('3. Конец работы ');

Writeln('Выберите нужный пункт ');

Readln(K);

case K of

1:

begin

Write('Размер таблицы? ');

Readln(N);

TABL(N, PR)

end;

2:

begin

Write('Размер таблицы? ');

Readln(N);

TABL(N, S)

end

end

until (K < 1) OR (K > 2)

end.

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