Помощь - Поиск - Пользователи - Календарь
Полная версия: Продцедурный тип
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Selena
Помогите пожайлуста, при компеляции выдается ошибка, я ее не могу исправить, потому что не понимаю в чем она заключается
Код

Program MPD;
Uses WinCrt;
Type
  func=function(xa:Real):Real;
  Function F(xa:Real):Real;Far;
  Procedure MrPD(Aa,Ba,Ea:Real; F:func; Var xa:Real);

  Var
   A,B,Exp,x:Real;
   F:func;
   w:text;
{функция y=f(t)}
  Function F;
   Begin
    F:=(Sqr(xa)*xa)+3*xa+5;
   End;
{метод половинного деления}
  Procedure MrPD;
   Var z,x,y:Real;
    Begin
     x:=F(Aa);
     Repeat
      xa:=(Aa+Ba)/2;
      y:=F(xa);
      If y*z>0
       Then begin Aa:=xa; z:=y; end
       Else Ba:=xa;
     Until Abs(Ba-Aa)<Ea;
    End;

Begin
Assign(w,'C:\Rezlab\MPD.doc'); ReWrite(w);
WriteLn(w,'Определение корней уравнения методом половинного деления');
WriteLn(w);
WriteLn('Введи значение левой границы интервала А');Read(A);
WriteLn('Введи значение правой границы интервала В');Read(B);
WriteLn('Введите погрешность Exp');Read(Exp);
MPD(A,B,Exp,f,x);
WriteLn(w,'Корень по методу половинного деления равен', x:7:4);
Close(w);
End.
volvo
Цитата
не понимаю в чем она заключается
Компилятор считает, что у тебя функция MrPD является вложенной в функцию F, но тогда синтаксически это реализовано неверно.

Если же MrPD НЕ вложена в F, то реализация F должна быть либо известна ПЕРЕД началом реализации MrPD, либо должна применяться директива Forward, показывающая что реализация F будет позже...

Скорее всего, ты имела в виду вот это:

Program MPD;
Uses WinCrt;
Type
func=function(xa:Real):Real;

Function F(xa:Real):Real;Far;
Begin
F:=(Sqr(xa)*xa)+3*xa+5;
End;

Procedure MrPD(Aa,Ba,Ea:Real; F:func; Var xa:Real);
Var z,x,y:Real;
Begin
x:=F(Aa);
Repeat
xa:=(Aa+Ba)/2;
y:=F(xa);
If y*z>0
Then begin Aa:=xa; z:=y; end
Else Ba:=xa;
Until Abs(Ba-Aa)<Ea;
End;

Var
A,B,Exp,x:Real;
w:text;

Begin
Assign(w,'C:\Rezlab\MPD.doc'); ReWrite(w);
WriteLn(w,'Определение корней уравнения методом половинного деления');
WriteLn(w);
WriteLn('Введи значение левой границы интервала А');Read(A);
WriteLn('Введи значение правой границы интервала В');Read(B);
WriteLn('Введите погрешность Exp');Read(Exp);
MrPD(A,B,Exp,f,x);
WriteLn(w,'Корень по методу половинного деления равен', x:7:4);
Close(w);
End.

?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.