- •4. Структурированные типы данных
- •4.1. Массивы
- •4.1.1. Задание массивов
- •4.1.2. Обработка массивов.
- •4.1.3. Операторы блока данных и чтения из блока данных в языке Бейсик
- •4.1.4. Типизированные константы в языке Паскаль
- •4.2. Символьный и строковый типы данных.
- •4.2.1. Описание символьного и строкового типа данных.
- •4.2.2. Операции над строками.
- •3. Принцип модульности.
- •3.1. Процедуры.
- •3.2. Функции.
- •3.3. Параметры-процедуры и параметры-функции. Процедурный тип.
- •3.4. Длинная арифметика.
- •4. Рекурсия.
- •4.1. Понятие рекурсии.
- •4.2. Формы рекурсий.
- •5. Модули в языке turbo pascal. Модуль пользователя.
- •5.1. Стандартные модули.
- •5.2. Модуль пользователя.
- •6. Обзор графических возможностей языков высшего уровня.
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.