Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как установить связь между функцией из главной программы и модулем?

59K
04 мая 2010 года
Snart
2 / / 04.05.2010
Было дано задание целую программу разбить на главную программу и модуль... В свою очередь целая программа состояла из функции и процедуры... Когда функция и процедура были перенесены в модуль, то все прекрасно работало... Но преподаватель потребовал перенести функцию обратно в главную программу, и теперь выдается ошибка примерно такого содержания: Неизвестная функция F используется в модуле -> процедуре. Т.е. в модуле есть процедура которая в свою очередь обращается к функции F, чтобы получить значение той или иной переменной в данной функции. Как связать Функцию из главной программы с процедурой из модуля?
1.8K
05 мая 2010 года
LM(AL/M)
332 / / 20.12.2005
Если я правильно понял, тут надо сделать связь через указатель на ф-цию:
1) в модуле объявл. функциональный тип и указатель этого типа:
 
Код:
Type FType = function: <тип результата>;
    Var FPtr: ^FType;

-- это в интерфейсной части модуля; внутри процедуры используется FPtr как обычная ф-ция
2) в главной программе перед тем как вызвать процедуру надо "присвоить вашу ф-цию" указателю FPtr:
 
Код:
(допустим ф-ция определена так)
     function F: <тип>;  FAR;   begin  ....  end;

тогда присваивание будет такое:
 
Код:
FPtr := F;
59K
06 мая 2010 года
Snart
2 / / 04.05.2010
program My;
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.




выдает ошибки
1.8K
06 мая 2010 года
LM(AL/M)
332 / / 20.12.2005
и что с этим делать?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог