Type FType = function: <тип результата>;
Var FPtr: ^FType;
Как установить связь между функцией из главной программы и модулем?
Было дано задание целую программу разбить на главную программу и модуль... В свою очередь целая программа состояла из функции и процедуры... Когда функция и процедура были перенесены в модуль, то все прекрасно работало... Но преподаватель потребовал перенести функцию обратно в главную программу, и теперь выдается ошибка примерно такого содержания: Неизвестная функция F используется в модуле -> процедуре. Т.е. в модуле есть процедура которая в свою очередь обращается к функции F, чтобы получить значение той или иной переменной в данной функции. Как связать Функцию из главной программы с процедурой из модуля?
1) в модуле объявл. функциональный тип и указатель этого типа:
Код:
-- это в интерфейсной части модуля; внутри процедуры используется FPtr как обычная ф-ция
2) в главной программе перед тем как вызвать процедуру надо "присвоить вашу ф-цию" указателю FPtr:
Код:
(допустим ф-ция определена так)
function F: <тип>; FAR; begin .... end;
function F: <тип>; FAR; begin .... end;
тогда присваивание будет такое:
Код:
FPtr := F;
uses Integral;
var
mass : array[1..10] of real;
a,b,e,h,s,c : real;
n,k,i : integer;
f1,f2 : text;
function F(x:real):real;
begin
F:=sqrt(x)-1;
end;
begin
fnct:=F;
assign(f1,'C:\Programm files\FPC\1\W.txt');
reset(f1);
i:=1;
while not eof(f1) do
begin
readln(f1,mass);
i:=i+1;
end;
a:=mass[1];
b:=mass[2];
e:=mass[3];
close(f1);
centr(s,a,b,e,n);
assign(f2,'C:\Programm files\FPC\1\R.txt');
append(f2);
writeln(f2,S);
close(f2);
writeln('Файл записан');
readln;
end.
Unit Integral;
Interface
Type TF = function(x:real):real;
Var fnct: TF;
procedure centr(var s : real; a,b,e : real; n : longint);
Implementation
uses crt;
procedure centr(var s : real; a,b,e : real; n : longint);
var
x,h,c : real;
k,i : integer;
begin
n:=10;
k:=0;
c:=0;
while(k=0) do
begin
writeln('Kolichestvo iteraciy n =',n);
h:=abs(b-a)/n;
s:=0;
x:=a+h;
while(x<=b) do
begin
s:=s+fnct(x);
x:=x+h;
end;
s:=s*h;
if (abs(s-c))<=e then
k:=1
else
k:=0;
c:=s;
n:=2*n;
end;
end;
begin
clrscr;
end.
выдает ошибки
и что с этим делать?