Теория и практика объектно-ориентированного программирования. Ноткин А.М. - 9 стр.

UptoLike

Составители: 

10
program Tables;
type
Func = function(X,Y: integer): integer;
function Add(X,Y: integer): integer; far;
begin
Add := X + Y;
end;
function Multiply(X,Y: integer): integer; far;
begin
Multiply := X*Y;
end;
function Funny(X,Y: integer): integer; far;
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.
В данном случае процедура PrintTable представляет собой общее
действие, выполняемое над функциями Add, Multiply и Funny.
Если процедура или функция должны передаваться в качестве пара-
метра, они должны удовлетворять тем же правилам совместимости типа,
что и при присваивании, то есть:
1) такие процедуры или функции должны компилироваться с дирек-
тивой far;
2) они не могут быть встроенными
функциями;
3) они не могут быть вложенными;
4) они не могут описываться с атрибутами inline или interrupt.
                                   10
            program Tables;
            type
              Func = function(X,Y: integer): integer;
            function Add(X,Y: integer): integer; far;
            begin
              Add := X + Y;
             end;
            function Multiply(X,Y: integer): integer; far;
            begin
              Multiply := X*Y;
            end;
            function Funny(X,Y: integer): integer; far;
            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.
      В данном случае процедура PrintTable представляет собой общее
действие, выполняемое над функциями Add, Multiply и Funny.
      Если процедура или функция должны передаваться в качестве пара-
метра, они должны удовлетворять тем же правилам совместимости типа,
что и при присваивании, то есть:
      1) такие процедуры или функции должны компилироваться с дирек-
тивой far;
      2) они не могут быть встроенными функциями;
      3) они не могут быть вложенными;
      4) они не могут описываться с атрибутами inline или interrupt.