Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРАКТИКУМ_4.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.68 Mб
Скачать

Лабораторный практикум по информатике для проведения занятий во втором семестре

Пащенко О.Б., Просуков Е.А., Серебрякова И.Л., Борисов С.В.,

Камалов С.С., Рогозин О.В.

Лабораторная работа №1

Тема занятия: «Процедурные и функциональные типы данных»

1.Процедурные и функциональные типы данных.

В языке Borland Pascal допускается интерпретация процедур и функций, как объектов, которые можно присваивать переменным и передавать в качестве пара-метров. Такие действия можно выполнять с помощью процедурных типов.

Синтаксис записи процедурного типа в точности совпадает с записью заго- ловка процедуры или функции, только опускается идентификатор имени после ключевого слова procedure или function.

Примеры описания таких типов и процедурных переменных:

type Proc = procedure;

SwapProc = procedure(var X, Y: Integer);

StrProc = procedure(S: String);

MathFunc = function(X: Real): Real;

DeviceFunc = function(var F: text): Integer;

MaxFunc = function(A, B: Real; F: MathFunc): Real;

Var p: SwapProc;

F: MathFunc;

Результат функции должен быть строкового, вещественного, целого, символь-ного, булевского типа, указателем или иметь перечислимый тип, определенный

пользователем.

2. Пример программной реализации функционального типа.

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

program Tables;

type

Func = function(X,Y: integer): integer;

function Add(X,Y: integer): integer;

begin

Add := X + Y;

end;

function Multiply(X,Y: integer): integer;

begin

Multiply := X*Y;

end;

function Funny(X,Y: integer): integer;

begin

Funny := (X+Y) * (X-Y);

end;

procedure PrintTable(W,H: integer; Operation: Func);

var

X,y : integer;

begin

for Y := 1 to H do

begin

for X := 1 to W do Write(Operation(X,Y):5);

Writeln;

end;

Writeln;

end;

begin

PrintTable(10,10,Add);

PrintTable(10,10,Multiply);

PrintTable(10,10,Funny);

end.

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

1 2 3 4 5 6 7 8 9 10

2 4 6 8 10 12 14 16 18 20

3 6 9 12 15 18 21 24 27 30

4 8 12 16 20 24 28 32 36 40

5 10 15 20 25 30 35 40 45 50

6 12 18 24 30 36 42 48 54 60

7 14 21 28 35 42 49 56 63 70

8 16 24 32 40 48 56 64 72 80

9 18 27 36 45 54 63 72 81 90

10 20 30 40 50 60 70 80 90 100

Параметры процедурного типа особенно полезны в том случае, когда над мно-жеством процедур или функций требуется выполнить какие-то общие действия. В данном случае процедура PrintTable представляет собой общее действие, выполняе-мое над функциями Add, Multiply и Funny.

Следует напомнить, если процедура или функция передаётся в качестве пара-метра, то она должны удовлетворять тем же правилам совместимости типа, что и при присваивании.